ACE Asset Tools - User Help & Guide

Automation and Computer Engineering Systems

Server Edition — Accounts, Projects & Sharing

This build runs as a multi-user server application. Instead of each person keeping data in their own browser, everyone connects to one shared server where projects, PLC data, patterns and the audit trail all live in a central SQL database. What you save is visible to your colleagues, and it survives closing the browser.

Signing in

Projects and versions

Users & Audit (administrators)

Where your data lives

Unlike the offline edition, data does leave your browser — it is stored on your organisation's server. Individual tool pages still read and write through the same interface, but behind the scenes they save to the server, with a local cache so pages load quickly and only re-download when something has actually changed. If you ever see a red “Not saved to server” banner, your work was kept in the browser only and has not reached the database — re-process, and check the Projects page shows a stored size before closing.

SLC 500 / MicroLogix Support (RSLogix 500)

Alongside Studio 5000 .L5X files, the suite reads RSLogix 500 exports from SLC 500 and MicroLogix processors. These are a different, text-based format (.SLC), but they flow through the same tools — ladder viewer, FD generator, tag search, BOM — because they're translated into the same shape internally on import.

What to upload

Honest limitation: if you upload a .SLC without its .SY5/.SY6, the logic and structure are still exact, but operands appear as raw addresses (B3:0/15) rather than names — because the names simply aren't in the .SLC file.

Getting Started: The Home Page

The Home Page is the central hub for the tool suite. All data is loaded here and — in the Server Edition — saved to the shared server (or, in the offline edition, your browser's local database), making it available to all the other tool pages without needing to re-upload.

1. Loading Your Data

  1. On the Home Page, use the drag-and-drop zones or click to browse for your files: Asset Report (.csv), PCS Data (.l5x, .xhw, .slc, .xbd, .zef, .xef), FD Patterns (patterns.xml / schneider_patterns.xml), Schneider Tags (.txt), and Lifecycle Data (.csv).
  2. You can add multiple PCS data files at once. Rockwell and Schneider files land in the same PLC Files box — they're sorted by extension automatically.
  3. After selecting your files, click the Process and Save Data button. New customers can drop the compact samples samples/ACE_Systems_Demo.L5X and samples/ACE_Peer_PLC.L5X here — unlicensed ACE Suite and CSAM allow those demo files (controllers ACE_Systems_Demo and ACE_Peer_PLC) with full tools; other plant files still need a licence. Load both to see resolved produced/consumed links in PCS Messaging.
  4. An inline progress bar shows which file is being read and how many remain (large L5X files are read serially so you can see progress).
  5. A status message will confirm when data is loaded. This data will persist even if you close the browser tab.
  6. Each upload box shows a loaded-status indicator — a green "✅ … loaded" line (with a count) when data of that type is present, or a red "⚠️ No … loaded" line when it isn't — so you can see at a glance what's in the database, including for FD Patterns and Schneider Tags.
  7. If you process new PLC files while a project is already loaded, you'll be asked how to apply them: Add to existing merges the new controllers in (a controller/file with the same name is refreshed rather than duplicated), or Clear PLC data & replace removes only the PLC-file data and starts fresh. Your Asset Report, Lifecycle, FD Patterns and Schneider tags are never touched by this choice.

2. Loaded PLC Files panel

Below the upload boxes, the Loaded PLC Files panel sits on the same row as the Schneider tags area and widens into the open space to the right. It lists every controller detected in your uploads with:

Note on encrypted controllers: if a plant's L5X was exported with source protection on, no scanner (this suite or Rockwell's own tools) can pull tag↔IO mappings, ladder logic, or usage counts from those routines. The encryption badge makes this visible so a suspiciously-low utilization or empty search result is easy to explain. Source protection is Rockwell EncodedData / encryption on the routines themselves — not the same as FactoryTalk Security permissions on the export.

3. Navigating the Tools

Once your data is loaded, use the navigation bar at the top or the tiles on the Home page to access the different tools. Hardware tools that work for both Rockwell and Schneider (Report Packager, PCS Asset Map, BOM Viewer, I/O Card Utilization) sit in their own Common / both platforms group. Rockwell-only tools include the Ladder Viewer, Tag Search, Messaging, UDT/AOI Report, and PCS Version Compare. Schneider-only tools stay in their own section. Additional actions in the toolbar row:

ClarOTy Asset Map & Inventory

ClarOTy Asset Map & Inventory

Visualize PLC rack layouts and view a detailed Bill of Materials and Lifecycle Status based on the ClarOTy Asset Report. Export diagrams and inventory lists to PDF.

This is the main dashboard for visualizing the structure of your assets based on the ClarOTy Asset Report.

Building Your View

Canvas Actions

Inventory / Bill of Materials (BOM)

Exporting

Your work on this page—including asset selection, joins, and ghosted states—is automatically saved for your browser session.

Architecture Comparison

Architecture Comparison

Visually compare the hardware architecture discovered by ClarOTy against the configuration defined in the PLC project file (PCS).

This tool allows for a side-by-side comparison of the same control system asset as represented in the ClarOTy data and the PCS project data.

How to Use

  1. Select ClarOTy Asset: Use the list on the left panel to choose the main ClarOTy asset (PLC/Chassis) you want to visualize. The list is pre-filtered to show relevant assets (excluding detailed card/address entries).
  2. Select PCS Controller: Use the list on the right panel to choose the corresponding controller from your uploaded PCS project files.
  3. Draw Comparison: Click the Draw Comparison button in the top bar.

Understanding the View

PCS Asset Map

PCS Asset Map

Visually explore the hardware configuration of your PLCs, including rack layouts and module details, from project files. Allows manual linking.

This tool provides a visual network diagram of your PLC's hardware configuration based *only* on the PCS project files (`.l5x`, `.xhw`, `.zef`/`.xef`), showing how local and remote racks are connected. Racks marked as hidden in the "PCS Data Viewer" are excluded — and you can Hide / Show the same racks from the drawing itself.

Understanding the Diagram

Hide / Show racks from the drawing

Lifecycle Status

Creating Manual Links

This feature is essential when the project file does not define the link from a local communication card to a remote rack. It allows you to complete the diagram visually.

  1. Hold down the Ctrl key (or Cmd on a Mac).
  2. Click on a single communication module in the local chassis (e.g., a 1756-ENBT).
  3. While still holding Ctrl/Cmd, click on one or more remote racks.
  4. Click the Join Selected button. An orange dashed line will appear, linking the items. This connection is saved locally in your browser.
  5. To remove a manual link, simply select the orange dashed line and click the Unjoin Selected button.

Exporting

PCS Data Viewer

PCS Data Viewer

View the Bill of Materials, firmware, and network configurations extracted from your uploaded project files.

This tool provides a detailed, table-based view of the hardware from your uploaded PCS project files (`.l5x`, `.xhw`). It's ideal for inventory management and detailed analysis.

Key Features

PCS CPU Report

PCS CPU Report

One row per controller, combining the static resource profile with the live Online Snapshot captured by Rockwell's L_CPU AOI.

A fleet-wide controller resource table built from your uploaded .L5X files. Each row blends the static profile (processor, firmware, nominal memory, tasks, program/routine and code size) with the Online Snapshot — real CPU utilisation, memory usage and connection counts — from the last time the project was online, decoded from Rockwell's L_CPU_20 / L_CPU_10 AOIs. Controllers without the AOI (or exported without decorated data) show their static profile only; nothing is fabricated.

What each row shows

Detail drill-down

Click any controller row to expand a full breakdown — static profile, task configuration, a CPU-consumer breakdown, memory pools, connection detail, and the snapshot identity (reported processor, serial, time slice, minor fault count). Use Search Controller and the Snapshot filter to narrow the fleet, then Export CSV, Export PDF (page 1 is the KPI overview; following pages are the same per-controller detail as a row click), or Rebuild to regenerate the dataset.

PCS Fleet Health

PCS Fleet Health

One dashboard across every controller: a risk register, obsolescence status, and spare-capacity headroom.

A single consolidated view across every loaded controller, derived from the same fleet dataset the PCS CPU Report builds (open the CPU Report once, or this page will build it from your .L5X files automatically). Everything is grounded in parsed data or the uploaded Lifecycle CSV — where a figure is absent it shows "-" rather than guessing.

Risk register

Flags controllers that need attention: source-protected (encrypted) programs, controllers with no online snapshot, and any nearing their connection / CPU / memory limits (warning at 80%, critical at 90% — tunable in the code). Inhibited tasks and non-S88/v4 standards are flagged for review.

Obsolescence

Each controller's processor is matched against your uploaded Lifecycle CSV: "End of Life" / "Discontinued" show as critical, mature / NRND as a warning, Active as OK. Firmware is shown for planning. Processors not in the Lifecycle list are shown honestly as "Unknown" — upload the Lifecycle list on the Home hub to populate this.

Spare capacity

Headroom from the online snapshot per controller: spare connections, free CPU, memory used (D/L and I/O), and module count. For per-card used-vs-spare channels, use the I/O Card Utilization tool.

Filters & export

Ladder Logic Viewer

Ladder Logic Viewer

Read RLL routines as visual ladder diagrams rendered straight from your .L5X — contacts, coils, branches and instruction blocks, with tag descriptions.

A code reader that renders Relay Ladder Logic as proper ladder diagrams, drawn directly from the L5X. It shows contacts (XIC/XIO), coils (OTE/OTL/OTU), branches, and instruction boxes (timers, counters, math, MOV, AOIs, etc.), annotated with each operand's tag description.

Loading logic

Reading the ladder

Controller Tag List

The 🏷️ Tag List button opens a slide-over tag browser, like the RSLogix Controller Tags window:

Where Used & jump-to-rung

  1. Right-click (or click) any tag or sub-member and choose 🔎 Where Used to list every rung that references it, as Program / Routine — Rung N with the rung text.
  2. Click a result to jump straight to that rung: its program and routine expand, it scrolls into view, and it stays highlighted in red so you can see exactly where you landed.
  3. If it's the wrong rung, use the floating ◀ Results button (bottom-left) to reopen the Where-Used list — the rung you're on is marked "◀ here" — and pick another. Press Esc to close the panel or menu.

Bingo / Matrix arrays

Step-matrix arrays (Rockwell S88 phase logic: *MatrixA, *FaultMatrix, *FaultMons) render as bit-array tables the same way as the FD tool's Bingo section — one row per step, one column per bit, with the raw decimal value and step time on the right. DINT (32-bit), INT (16-bit) and SINT (8-bit) matrices are all recognised.

PCS Tag Search

PCS Tag Search

Search every controller-scoped and program-scoped tag across all loaded L5X files. Unpacks UDT/AOI sub-tags, surfaces EU scaling (LowEngineer/HighEngineer), and links each tag back to its physical I/O address where one exists.

A tile-based search of every tag in every loaded PLC. Enter a partial tag name, description, or type in the search box — results narrow live as you type. Each tile expands to show the tag's UDT/AOI structure with per-instance comment overrides.

What each tile shows

How I/O is detected

Not every I/O tag is a direct alias. The Tag Search scans four kinds of reference:

Direction-aware I/O display

By default the tile only shows I/O rows whose type matches the tag's inherent direction:

When rows are hidden, a small "N other references hidden" note appears under the tile so nothing is silently swallowed. Tick the Verbose I/O checkbox in the filter row to see every raw reference (Config + wrong-side + channel-less).

Filters & export

The first index build parses every L5X sequentially with a progress bar — on a fully loaded plant this takes a handful of seconds. Subsequent visits reuse a LocalForage cache keyed to the loaded file set, so page loads are instant unless files changed.

PCS I/O Card Utilization

PCS I/O Card Utilization

Per-card wiring map showing used vs spare channels for every DI/DO/AI/AO module in every loaded PLC. Driven by the same tag↔I/O detection as the PCS Tag Search — reflects real wiring, not comment counts.

Replaces the older comment-per-channel view. For each I/O module in each controller, the page shows a real utilisation figure: how many channels have at least one tag mapped to them out of the card's total channel count. Only physical I/O modules (and module Connection comments) appear here. Produced/Consumed bit aliases and MSG send/receive buffers are shown on PCS Messaging, not as fake “Tag Aliases” cards.

What counts as "used"

Reading a card row

Filters

Supported module catalogs

Channel counts are known for 55 validated Rockwell catalogs across ControlLogix (1756), FLEX (1794), and POINT (1734):

Any other catalog will show up in the "unknown" bucket — used channels are still counted honestly, but no total or percentage is reported.

Summary tiles & export

The tiles above the card list show, for the currently filtered view: total cards, total channels on known-catalog cards, wired channels, and overall utilisation. Set a filter to see per-plant or per-catalog totals live.

Export CSV saves the current filtered set as one row per card — PLC, rack, slot, direction, catalog, module name, total & wired channels, utilisation %, wired-channel list, and sample tags.

PCS UDT/AOI Report

PCS UDT/AOI Report

Per-controller UDT and Add-On Instruction inventory (with usage counts, revisions, last-edited dates) plus S88 Version Compare — diff every site against a master template. Exports the same styled workbook you had before.

Consolidates two features that used to be separate hub buttons: the UDT/AOI Summary Report and the S88 Version Compare. Same underlying extraction as the old exports, same Excel workbook output — now viewable on-page with the same column layout and cell colouring.

Summary Report tab

For each controller you select, an Excel-look table lists every UDT and Add-On Instruction with:

The Search box narrows by name or description as you type; the Type dropdown filters to UDT-only or AOI-only. Click any column header to sort ascending; click again for descending. Export to Excel produces one workbook with one sheet per selected file, using the same column widths as the previous hub export.

Encoded AOIs (source-protected) are captured the same as visible AOIs — the definition metadata is still in the L5X even when the ladder is encrypted.

S88 Version Compare tab

Pick one L5X as the Master template (a shortlist auto-selects files whose name matches template, s88, master, or standard), then tick the site controllers to compare against it. The comparison runs live — no separate "Run" button.

Match Summary tiles at the top show, per site: matched %, matched / mismatch / not-in-master / not-in-site counts. This mirrors the REPORT_SHEET tab of the old workbook.

Full Comparison table shows every unique UDT/AOI name across master + all sites, with side-by-side Usage, Revision, Last Edited, and a Status cell per site:

The Row filter dropdown narrows to a single status class (typically Only mismatches) so you can focus on drift.

Export to Excel produces the identical workbook the old hub button did: S88_Compare + S88_MISMATCH + REPORT_SHEET sheets, same column widths, same percentage formatting.

PCS Messaging & Produced/Consumed

PCS Messaging

Maps controller-to-controller communication across all loaded L5X files: Produced/Consumed tag links, a PLC-to-PLC matrix, an interactive network diagram, MSG message blocks, and a bit/word/real cross-reference.

This page reads the same data you load on the Home page (no re-upload needed) and shows how your controllers exchange data. Everything is built from the Produced/Consumed tags and MESSAGE instructions inside the uploaded .l5x files.

Overview & Status

The summary cards show how many controllers are loaded, how many Produced/Consumed links exist, how many resolve within the loaded set, and how many MSG blocks were found. Each link is one consumed tag — the consuming controller pulls a Remote Tag from a Producer. Links are flagged:

Tip: Load all of your controllers on the Home page so cross-controller links resolve. Anything still showing external just means that producer's L5X hasn't been loaded.

Network Diagram

Per-controller PDF report

Select a controller in the diagram and click Export node report (PDF) to generate a multi-page A3 report for just that controller, containing:

For a large controller this can take a few seconds to build (it indexes that controller's routines) and can run to several pages. The button shows "Generating…" while it works.

PLC-to-PLC Matrix

A grid where rows are producers and columns are consumers; each cell shows the number of tags flowing that direction — a quick view of who feeds whom.

Produced / Consumed Links

Bit / Word / Real Cross-Reference

Click the ▶ on any link row to expand it and see how that comms block's data is used inside the consuming controller. For each documented element it lists:

The first time you expand a block on a large controller, it parses and indexes that controller's routines, which can take a second or two; after that it is instant. If a controller's logic is FBD/ST (not ladder), elements may show "not used in ladder".

MSG Message Blocks

Lists every MESSAGE (MSG) instruction config: controller, MSG tag, message type, Local Element (the local data buffer — e.g. MK_TR1_D_Send[0]), buffer type (e.g. INT[20]), Remote Element, requested length, connection path, and service code. Click a row to expand the same bit/word/alias cross-reference used for Produced/Consumed blocks. CIP Data Table Read/Write on a peer that has no MSG of its own still appears here on the sending PLC (path + remote element). Sortable headers and an Export MSG to CSV button are provided. Ladder Viewer MSG boxes also show these MessageParameters under the control tag. PID/PIDE boxes similarly show SP, KP/KI/KD, limits and mode bits from the control structure.

Offline note

The diagram uses js/vis-network.min.js and the PDF export uses js/jspdf.umd.min.js. Both ship locally, so the page works fully offline once those files are in your js/ folder.

PCS Version Compare

PCS Version Compare

Diff two Rockwell L5X exports side by side: hardware, I/O channels, ladder/ST code, tag initial values, and Asset Maps.

Compare an older Version A against a newer Version B from the files already loaded on Home (they stay side by side in storage). Unity (.zef/.xef/.xbd) comparison is a later iteration — this build compares L5X.

How to use

  1. Load both exports on Home (use Add to existing if a project is already open). Prefer distinct filenames when controller names match.
  2. Open PCS Version Compare, pick Version A (older) and Version B (newer), then review the summary chips.
  3. Use the Show checkboxes to focus on I/O, Hardware, Code, Initial values, and/or Asset map.

What is compared

Initial value changes

If pane B looks missing on a narrow window, widen the browser — A and B share equal columns. Hard-refresh after an update if an older cached page is still open.

Lifecycle Data Management

Lifecycle Data Management

View, search, and manage the product lifecycle status information used across the application.

This page displays the contents of the Lifecycle CSV file you uploaded on the Home page. This data is used to determine the status colors shown in the PCS Data Viewer and Asset Maps.

Parser & FD Generator Tools

Help for the L5X Tag Parser, Functional Description (FD) Generator, and Pattern Validator.

Report Packager

The Report Packager assembles a client-ready handover pack in one place. Pick one or more controllers (Rockwell and Schneider), tick the reports you want, and it builds a single merged PDF per processor — or bundles multiple controllers into a ZIP. Hardware BOM, Asset Map and I/O utilisation use the same chassis data for both platforms. CPU, Messaging, and the AOI/UDT Excel inventory stay L5X-only.

PDF section order (when selected): controller summary (Loaded PLC Files row), then CPU / Resource Snapshot, Asset Map (architecture), Hardware BOM, I/O Card Utilization, Messaging. Excel reports (BOM, I/O tags, AOI/UDT) are bundled alongside the PDF in the ZIP.

How to Use

  1. An availability check runs when the page opens (and again via Check available reports). The table is a matrix: rows are processors, columns are report types (CPU, Asset Map, Hardware BOM, I/O, Messaging, AOI/UDT). Each cell is Available, Reduced, or Unavailable. Hover or click a cell for why and a recommendation. Reduced reports can still be packed — for example an I/O card list or AOI/UDT inventory from a source-protected L5X.
  2. Select the controller(s) to include.
  3. Tick the reports to add (including AOI / UDT Report (Excel)). Unavailable reports are skipped per processor; packaging is not blocked.
  4. Build. Each processor becomes one merged PDF plus any ticked Excel files; multiple processors are delivered as a ZIP.

The packager honours the curation you've already done in each source tool (for example racks you've excluded from a BOM), so the pack matches what you see on the individual pages. The AOI/UDT workbook columns are Controller, Name, Type, Count Used, Description, Date, and Version. Count Used is tags whose DataType matches the definition (same as the PCS UDT/AOI Report page). Schneider/Unity controllers mark AOI/UDT Unavailable (DFBs are not AOIs).

While a pack is building: if you try to leave the page (nav link, browser back, or close/refresh) you will be asked to confirm — Are you sure? Handover Packs are still processing and have not been exported. Wait for the build to finish and download, then navigate away.

Unity ZEF Reader (Schneider)

Reads Schneider Control Expert / Unity projects from a .zef archive (or a .xef / .xml export). It exposes program sections, variables, I/O, and FBD logic with wire routing and documentation tooltips.

How to Use

This is a read/explore tool. To turn Schneider logic into written Functional Descriptions, use the Schneider FD Generator instead.

Pattern Development Suite

The FD Generator turns ladder logic into readable Functional Descriptions by matching each instruction against a set of regex patterns. In the server edition these patterns are shared reference data stored in the database, so a change applies to everyone. The Pattern Development Suite (test_patterns.html) is where you view, test and manage them.

Load, edit, save

Pattern Gap Scanner

Rather than discovering un-patterned instructions one Functional Description at a time, the Scanner (pattern_scanner.html) runs the current patterns against every rung of every loaded PLC and lists exactly the instructions nothing matches. Download unidentified code exports the actual instruction call and full rung text (CSV or XML) so you can paste it into AI to generate new patterns. Suggested-pattern XML stubs remain available, but they are guesses and should not be the file you send to AI.

CSV columns: Controller, Program, Routine, Rung, UnmatchedInstruction, FullRungText. The FD Generator’s Export unidentified code button writes the same columns from unmatched rungs after you generate FDs.

Ordering matters (first-match-wins)

Patterns are tried top-to-bottom and the first that matches wins. So a general pattern (e.g. one that accepts any XIC operand) must sit after the specific ones, or it shadows them. The Scanner places its suggestions after existing patterns for the same instruction for exactly this reason.

Backup & restore (the stale-seed problem)

Patterns and lifecycle data are seeded from the bundled files only when the database is empty. Once you edit them in the app, those bundled files are out of date — so a fresh install would otherwise start from stale data. Use Backup ALL reference data to export the live patterns, lifecycle and tags to one file, and Restore from backup to load it onto a new or rebuilt server. Dropping that file in as reference-backup.json before first run makes a new install inherit your current data instead of the original seed.

ClarOTy CSV Viewer

Shows the raw, filterable rows from the ClarOTy Asset Report you uploaded on the Home page. Items you highlight on the ClarOTy Asset Map also surface here, making it easy to cross-check a device against its source row.

Read-only view of already-loaded data. Load or replace the underlying CSV from the Home page.

Raw Data Viewers (Diagnostics)

Two low-level viewers expose exactly what is held in browser storage (IndexedDB), for troubleshooting and verification:

Use these when a tool shows unexpected or empty results and you want to confirm what was actually stored. They display data only — they don't modify it.

What's New

Aug 25, 2026

Aug 24, 2026

Aug 23, 2026 — Build v2026.08

Aug 19, 2026 — FD Generator processor picker: the one-button-per-PLC tab row is now a sorted dropdown (Rockwell and Schneider). Process/Generate still runs every loaded PLC; the dropdown only filters what you see. All processors remains an option so you can still export everything without changing the process model.

Aug 18, 2026 — updates in this chat: Schneider FD improvements, PCS Messaging exports/UX, and FD/PCS export consistency. The current build is shown as a version badge in the top-right of the Home page.

Overview

You load files on Home (index.html) and the tools read that data on the other pages. In the Server Edition, saved data is stored centrally on your organisation's server and shared with your colleagues (see the Server Edition section above). In the standalone offline edition, data instead stays in your browser's local database and never leaves your machine. The tool pages work the same way in both.

Persistence: Data persists across browser closes and restarts unless you clear it (or use InPrivate). See "Storage & Persistence" below.

Getting Started (Home)

  1. Drop Patterns (Optional): Add patterns.xml if you plan to use the FD Generator.
  2. Drop .L5X (Required): Drag one or more .L5X files into the second box.
  3. Process: Click the buttons to parse and store each file type. Status turns green when saved.
  4. Open Tools: Once data is saved, the app tiles become active; open them in new tabs.

L5X Tag Parser (parser.html)

Explore tags, UDTs, and AOIs for a single file. Usage is shown inline and export options are available.

Inline Usage Counts

Detailed UDT/AOI Usage Report (Excel)

  1. Click Export UDT/AOI Report in the parser and choose types to include.
  2. The Summary sheet has: Type, Name, Description, Usage Count, Revision, Last Edited.
  3. Name cells are hyperlinks to detail sheets for that UDT/AOI, which list all tags (with Scope/Description).

Filtering & CSV Export

Viewing Bit Arrays

For arrays of SINT/INT/DINT, use View Bit Array to toggle a per-bit table view that highlights 1 bits for fast scanning.

Storage & Persistence

Tip: Keep files in the same folder path or serve locally (e.g., http://localhost:8080) for a stable origin. You can also request persistent storage:

<script>
(async () => {
  if ('storage' in navigator && navigator.storage?.persist) {
    if (!(await navigator.storage.persisted())) {
      console.log('Persistent storage granted?', await navigator.storage.persist());
    }
  }
})();
</script>

FD Generator (fd_generator_logix.html)

The FD Generator parses ladder logic into human-readable Functional Descriptions. It uses your patterns.xml to recognise instructions and format branches clearly.

Multi-file processing with progress

When you drop multiple .L5X files (or open the tool with files already saved from the Home hub), the FD build now runs serially with a progress bar at the top of the output area: Processing <filename> (N of M)… with a live fill bar. Each file yields to the browser between parses so you can see which one is currently blocking on a large export. On completion the bar flips to a green "Processed N files." confirmation (or red with a link to the error summary if any file failed).

Processor picker

After processing, a sorted Processor dropdown lists each controller (Studio 5000 name, falling back to the filename). It defaults to one PLC so you can read that FD without hunting through a row of buttons. Choose All processors to show every generated FD on one page. Changing the dropdown only filters the display — Process still parses every loaded file, and Export still offers the full file/program/routine tree.

Bingo / Matrix arrays per routine

Where a routine references step-matrix tags (*MatrixA, *FaultMatrix, *FaultMons), the FD output prefaces that routine's description with a Bingo / Matrix Arrays section — one bit-array table per matrix, with auto-derived per-bit labels, decimal values, and a Step Time column from the matching *StepTimes array. All three integer widths are supported: DINT (32 columns), INT (16 columns, typical of *FaultMatrix), and SINT (8 columns). The header cell shows the actual DataType so you can tell them apart at a glance.

Exporting selected routines

Click Export → Excel / PDF to open the Select Items to Export tree. Three configuration options control how the workbook / PDF is organised:

The checkbox tree supports shift+click range selection: click one routine (or program), then shift+click another at the same level, and everything in between fills to match. Programs and files become indeterminate or checked automatically as their children change. Select All / Deselect All at the top still work for whole-tree toggles.

PDF exports render each routine as: routine header, Bingo / Matrix tables (if any), then the Functional Description table — matching the on-screen reading order.

Branch parsing — balanced-paren fix

A subtle bug in earlier builds caused the last branch of a rung to be silently swallowed if the rung contained a JSR (or any AOI/instruction) whose patterns.xml entry used a greedy .*) in its argument capture. Example rung:

[XIC(MB1_RUN) OTE(FF5.Run) ,OTE(FF5.Isolator) ,JSR(_sbrDriveVFD_Digital,1,FF5,FF5) ,XIC(FF5.Out) OTE(MB1_Out) ];

The greedy .*) in the JSR pattern would match all the way to the closing ) of the final OTE(MB1_Out), consuming the XIC(FF5.Out) OTE(MB1_Out) branch as if it were part of the JSR arg. The current build confines every pattern match to the current instruction's own balanced-paren extent, so the JSR sees only JSR(_sbrDriveVFD_Digital,1,FF5,FF5) and the trailing branch is picked up correctly. If your existing patterns.xml uses greedy captures for good reason, they still work — they just can't over-run their own closing paren any more.

Understanding patterns.xml

The file contains regex "patterns" the generator uses to match instructions and format output. Each pattern defines a match, a return format, and a type (Input / Output / Format).

Pattern Block Format

<Pattern>
  <RegexString>...</RegexString>
  <ReturnPattern>...</ReturnPattern>
  <Type>...</Type>
  <ExtendedInfo>...</ExtendedInfo>
</Pattern>

Visualising Ladder Logic Branches

Parallel branches are rendered as coloured, indented sections so the logic reads clearly.

***NZ033_StatusID:90 NZ033P03L01E01 - HCT 1***

--- Branch A Start ---
--- Branch B Start ---
If:ButMkr1C01.ActiveButter Maker CIP Selection
Or
AndS:FSSystem First Scan
--- Branch B End ---
Then:LatchNZ033P03L01E01
Or
If:ButMkr1P01.SelectedButter Maker 1 Production
AndNZ033P03L01U01OrderContextAvailableOrder Context Available (HCT 1)
Then:UnLatchNZ033P03L01E01
--- Branch A End ---

Schneider FD Generator (fd_generator_schneider.html)

The Schneider FD Generator produces Functional Descriptions for Schneider Control Expert logic, the counterpart to the Rockwell FD Generator. Instead of L5X ladder it reads Control Expert .XBD exports (FBD networks), an optional tag .TXT list for comments (not type/initial-value blobs), and a schneider_patterns.xml that maps each block type (AND, OR, SR/RS latches, timers, etc.) to its FD wording. Device initial values (scaling, valve times, MessageNo) are shown on the Schneider Device Register and I/O Card Utilization; they are read from .XEF/.ZEF first, with the tags .TXT filling gaps when it is loaded.

Loading data

Uploads are consolidated on the Home page. Put your Schneider .XBD file(s) in the PLC Files box (the same box takes Rockwell .L5X/.SLC — they're sorted by type automatically). Drop schneider_patterns.xml into the FD Patterns box (which also accepts the Rockwell patterns.xml; each is detected and routed automatically). Add your tag .TXT in the Schneider Tags box. Then click Process and Save Data. Schneider data is stored separately from Rockwell, so both platforms can be loaded at once. Open the Schneider FD Generator tile and click Generate FDs from Saved XBD.

When several projects are loaded, a sorted Processor dropdown filters the on-screen FD to one file (or All processors). Generate still processes every loaded XBD/XEF/ZEF so export can still include any section. Section quick-links, search, and Go to FBD stay on the visible file(s).

What it does

The Schneider tool runs fully offline using the same vendored libraries as the rest of the suite (js/xlsx.full.min.js, js/html2pdf.bundle.min.js, js/localforage.min.js). It also needs fd_style.css and schneider_fd_style.css in the folder.

Browser storage

IndexedDB data for this browser only. Server Edition also syncs project data to SQL when a version is selected; this panel shows what is cached locally.

Troubleshooting