Configuring Ignition SQL Bridge for Site-Wide OEE Data

Brian Holt8 min read
Data AcquisitionOther ManufacturerTutorial / How-to
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Overview: What Replaced the FactoryPMI/SQL Workflow

Engineers arriving from Citect, RSView32, or the legacy FactoryPMI + SQL toolset hit the same wall: the platform is not a tag database with a drawing package bolted on, it is a server-side gateway plus a Designer client. The modern equivalent of that workflow is Ignition, where the pieces map as follows:

Legacy concept Current equivalent Where configured
I/O server / device driver OPC UA Device Connection Gateway web config
SQLTags Tags (Tag Browser / OPC Browser) Designer
Logging to SQL tables SQL Bridge Transaction Groups Designer
Trend/history archive Tag Historian Designer (per-tag History tab)
Graphics / symbols Vision or Perspective windows, templates Designer

Python scripting is optional for the first project. Property binding, expression binding, and the group builders cover the majority of a data acquisition project; scripting appears heavily in community discussion only because it is the topic that generates questions, not because it is required.

Build order matters. Data in before pictures. Device connection → tags → database connection → Transaction Groups → screens. Building screens first produces bindings that must be re-pointed later.

Step 1 — Create a Device Connection (No PLC Required)

Getting PLC data in is explicitly a two-step process: add a device, then add tags. Do the device first, in the Gateway web interface.

  1. Open the Gateway web page and navigate to Config → OPC UA → Device Connections.
  2. Click Create new Device and select a driver. If no PLC is available yet — normal during evaluation — select the built-in Programmable Device Simulator, which exposes ramping and writable tags with no hardware.
  3. Give the device a name. Keep it short and area-based (Line1_PLC), because the name becomes the first node in every OPC item path and will be typed into Transaction Group items repeatedly.
  4. Save and confirm the status column reads Connected.

Reference: Ignition 8.1 Quick Start — Connect to a Device.

A device stuck in a non-Connected state is a network/driver problem, not a tag problem. Do not proceed to tag creation until the status is Connected — every downstream tag will simply show Bad quality and mask the real fault.

Step 2 — Create Tags in the Designer

Tags are created in Designer, not the Gateway. Two documented paths:

  1. Open the OPC Browser, expand the device node, and drag nodes into the Tag Browser.
  2. Or use Tag Browser → Add icon → Browse Devices and select nodes from there.

This is the direct replacement for what older FactoryPMI and Ignition 7.x material called "SQLTags." If you find a tutorial that tells you to create SQLTags, translate it to "create Tags in the Tag Browser." See Ignition 8.1 Quick Start — Create Tags.

For a site-wide OEE rollout, impose a naming standard before dragging the first tag. A workable pattern:

[default]Plant/Area/Line01/Counters/GoodParts
[default]Plant/Area/Line01/Counters/TotalParts
[default]Plant/Area/Line01/Status/Running
[default]Plant/Area/Line01/Status/DowntimeReason
[default]Plant/Area/Line01/Rates/IdealRate_PPM

Consistent depth per line is what later lets you build one screen template and one Transaction Group and duplicate it per line instead of hand-editing dozens of copies.

Step 3 — Choose Tag Historian or Transaction Groups

This is the single architectural decision that most affects an OEE project, and it is easy to get wrong by picking whichever one you found first.

Criterion Tag Historian SQL Bridge Transaction Group
Table schema Ignition-managed, partitioned User-defined, wide table you control
Optimized for Trending and internal history queries Structured records read by external systems
Third-party reporting access Requires understanding the internal schema Direct — you designed the columns
Configured in Tag's History tab Designer, Transaction Groups node

If a third-party OEE, ERP, or reporting package must read the raw tables, use Transaction Groups so the column layout is yours. If the requirement is operator trending and internal charts, use the Tag Historian. Most site-wide projects use both: Historian for process trends, Transaction Groups for production/OEE records. See Tag History vs. Transaction Groups.

Step 4 — Build the Historical Transaction Group

Transaction Groups are the execution engines, configured in Designer, that run on an interval or on a schedule. For OEE production records, use a Historical Group.

  1. In Designer, right-click the Transaction Groups node and create a new Historical Group.
  2. Drag tags from the Tag Browser into the group's item list. Items may be OPC references, tag references, expressions, or SQL queries.
  3. Set the target database connection and table name. Map each item to a database column.
  4. Set the execution rate on the group's timing configuration — interval-based or scheduled.
  5. Configure a trigger if the record should be written on an event (end of batch, part complete, shift change) rather than purely on time.
Critical behavioral difference: a Historical Group can only INSERT rows — it never UPDATEs. A Standard Group can UPDATE an existing row. If you need a single "current shift" row that mutates, that is a Standard Group. If you need an append-only production log, that is a Historical Group. Choosing Historical and then expecting in-place updates is a common first-project error.

Historical Groups also support expression items and hour/event meters, which handle the accumulating quantities OEE needs — run-time accumulation and event counting — without writing scripts. Full item and trigger reference: SQL Bridge — Transaction Groups.

Step 5 — OEE Calculation: Build vs. Buy

You can compute OEE in SQL from the tables above, but understand the arithmetic you are committing to. The standard decomposition is:

OEE = Availability x Performance x Quality

Availability = actual run time / scheduled run time
Performance   = actual rate vs. designed speed over the available time
Quality       = good parts / total parts

Hand-building this means you own the scheduled-time calendar, downtime state machine, downtime reason capture, changeover handling, and shift boundary alignment. The Sepasoft OEE Downtime Module computes these factors from configured line/equipment definitions instead, and individual factors can be overridden with custom scripts where plant definitions differ from the module defaults — see How Is OEE Calculated?.

Approach Use when Cost
Transaction Groups + SQL views Simple line, one product, existing reporting DB, full schema control required Engineering time, ongoing maintenance of the state logic
OEE Downtime Module Multiple lines/areas, downtime reason trees, shift schedules, changeovers Module licensing, less custom logic

For a site-wide rollout across multiple lines, the per-line engineering effort of the hand-built approach compounds quickly. Prototype one line with Transaction Groups to prove the data path, then evaluate the module against that prototype.

Step 6 — Screens and Symbols

Once tags exist, screen building is bind-driven, not code-driven. The two binding types that cover most of a project:

Binding Purpose Example
Tag binding Drive a component property directly from a tag Label text ← Line01/Counters/GoodParts
Expression binding Derive a value or color from one or more tags if({[default]Line01/Status/Running}, color(0,200,0), color(200,0,0))

For custom symbols, build a reusable component (template) containing the graphic plus parameters — line number, tag path prefix — then instantiate it per line and pass the parameter. This is the mechanism that makes a 40-line site maintainable: fix the symbol once, every instance updates. Avoid copy-pasting decorated groups per line; it looks faster on day one and is unmaintainable by line ten.

Recommended Learning Sequence

  1. Gateway concepts: gateway vs. Designer vs. client, and where each configuration lives.
  2. Device connection with the Programmable Device Simulator — get a Connected status with zero hardware risk.
  3. Tag creation via the OPC Browser drag-and-drop.
  4. Database connection in the Gateway, verified as Valid before any group is built.
  5. One Historical Transaction Group writing to a table you designed.
  6. Property and expression bindings on a single screen.
  7. Templates/reusable components for per-line duplication.
  8. Scripting — last, and only for what the builders cannot express.

Skip nothing in the first four steps. Nearly all "my data isn't logging" problems trace back to a device that is not Connected, a database connection that is not Valid, or a Historical Group trigger that never evaluates true.

FAQ

What replaced SQLTags in current Ignition versions?

SQLTags terminology from FactoryPMI and Ignition 7.x material maps to Tags created in the Designer's Tag Browser. Create them by opening the OPC Browser, expanding the device node, and dragging nodes into the Tag Browser, or via Tag Browser → Add icon → Browse Devices.

Can I evaluate Ignition data acquisition without a PLC?

Yes. In the Gateway under Config → OPC UA → Device Connections, create a new device using the built-in Programmable Device Simulator driver. It exposes ramping and writable tags with no hardware, and the connection status should read Connected.

Should I use Tag Historian or Transaction Groups for OEE data?

Use Transaction Groups when a third-party reporting or OEE system must read the raw tables, because they write to a user-defined wide table schema you control. Use Tag Historian for operator trending, since it writes to an Ignition-managed partitioned schema optimized for internal queries.

Why won't my Historical Transaction Group update an existing row?

By design — a Historical Group can only INSERT rows, never UPDATE. If you need to modify an existing record in place, such as a running shift total, use a Standard Group instead.

How much Python scripting do I need for a first project?

Very little. Property bindings, expression bindings, and the Transaction Group builders cover most data acquisition and screen work; treat scripting as the last item in your learning sequence, used only where the GUI builders cannot express the requirement.

What are the three OEE factors and how are they defined?

OEE = Availability × Performance × Quality, where Availability is actual run time divided by scheduled run time, Performance compares actual rate to designed speed over the available time, and Quality is good parts divided by total parts. Individual factors can be overridden with custom scripts when plant definitions differ from the defaults.

Back to blog