OPC UA
The PLC Online view provides a built-in OPC UA client for connecting to, browsing, and monitoring PLCs and other OPC UA servers directly from AnyAutomation Studio. Open it from the PLC Online icon in the Activity Bar (left edge), or with the default keyboard shortcut Ctrl+K Ctrl+G.
PLC Online opens as a single editor pane in the center of the workbench. Each PLC you open becomes an inner connection tab inside that one pane; the server's address space appears as a tree in the PLC Online side bar.
Overview
OPC UA (Open Platform Communications Unified Architecture) is an industrial communication standard supported by Siemens S7-1500 and S7-1200 PLCs with firmware 4.1 and later. The view lets you read and write live PLC values, watch changes in real time, and export watch table data for analysis.
Connecting to an OPC UA Server
Manual Connection
- Open the PLC Online view from the Activity Bar (or
Ctrl+K Ctrl+G) - Enter the Endpoint URL in the connection header (e.g.,
opc.tcp://192.168.0.1:4840) - Optionally click Get Endpoints to discover the endpoints the server advertises. The Available Endpoints table lists each one with its Security Mode and Security Policy; select a row and its security mode is carried into the connection.
- Select the Authentication Mode:
- Anonymous - No credentials required (if the server allows it)
- Username/Password - Enter the OPC UA user credentials configured on the PLC
- Click Connect
The status dot in the connection header turns green when the connection is established.
Client certificates the PLC sees on connect, and the trust of server certificates, are managed in the Certificate Management dialog (see below) rather than chosen as an authentication mode in the connection header.
Each connection tab has a Connection Settings flyout, opened from the gear button in the connection header. It carries per-connection toggles — Enable Logging, Auto-Accept Certificates, and Do Not Persist Connection — plus a Certificate Management… entry. These settings are remembered per connection tab.
Planned: automatic discovery of OPC UA endpoints from an open TIA Portal project is not yet available in the PLC Online view; enter the endpoint URL manually, or use Get Endpoints against the PLC's address.
Browsing the Address Space
The PLC Online side bar shows a tree of the server's address space:
- The root shows the server's top-level nodes
- Expand any node to browse its children
- PLC variables, data blocks, and tag groups appear as nodes
- Icons indicate the node class: Object, Variable, Method, View
Searching nodes: Use the search field above the tree to filter nodes by name. The tree collapses to show only matching nodes and their parents.
Refreshing a node:
The Refresh button on the Address Space side bar (or F5 while the PLC Online view is focused) re-fetches the children of the currently selected node directly from the server, bypassing the local cache. Use it when the server-side address space has changed since the last expand — for example after adding tags in TIA Portal — and the cached children no longer match. Refresh applies when a node is selected and an OPC UA connection is active.
Node Attributes
Selecting a node in the address space fills the Node Attributes panel in the right tool-stack with every OPC UA attribute of that node: Node Id, Browse Name, Display Name, Node Class, Description, Write Mask, and User Write Mask. Variables show additional rows — Data Type, Value Rank, Array Dimensions, Access Level, User Access Level, Minimum Sampling Interval, Historizing, current Value, Status Code, and Source / Server Timestamp. All cells are selectable with Ctrl+C.
References
Next to Node Attributes, the References panel shows every incoming and outgoing reference of the selected node:
| Column | Description |
|---|---|
| Direction | In (inverse) or Out (forward) |
| Reference Type | Resolved name of the reference type (e.g. HasComponent, Organizes, HasTypeDefinition) |
| Browse Name | Browse name of the target node |
| Node Class | Node class of the target node |
| Target Node Id | Full node id of the referenced node |
Event Log
The Event Log panel is a tab in the bottom tool-stack of the PLC Online pane, next to the Watch Table. It receives live event notifications from a server-side notifier object.
| Toolbar control | Purpose |
|---|---|
| Notifier Node | The Node Id of the OPC UA object that emits events. Defaults to i=2253 (Server). Locked while a subscription is active. |
| Severity range | Two number boxes that constrain incoming events by severity (0–1000). Events outside the range are dropped before reaching the grid. |
| Subscribe to Events | Starts the subscription against the configured notifier. |
| Stop Event Subscription | Cancels the active subscription. |
| Export CSV | Saves the visible events to a CSV file. Cells whose content starts with =, +, -, @, tab, or carriage return are prefix-quoted to defang spreadsheet formula injection. |
| Clear Event Log | Empties the grid without affecting the active subscription. |
The grid keeps the most recent 5000 events with the newest at the top. Server-controlled fields are capped at 8 KB per cell to bound memory; under heavy event flood, additional events are silently discarded and a debug-log line records the dropped count once per second.
History Chart
The History Chart panel is a tab in the bottom tool-stack, next to the Watch Table and Event Log. It loads raw historical values for a variable node over a time range and plots them on a scatter chart with a date-time X-axis.
| Toolbar control | Purpose |
|---|---|
| Source | Read-only label that tracks the currently selected variable node in the address space tree. |
| Start | Start of the time range (UTC). Defaults to one hour ago. |
| End | End of the time range (UTC). Defaults to now. |
| 1h / 6h / 24h / 7d | Quick presets that set End to now and Start to now minus the chosen window. |
| Aggregate | Selects the value-shape returned by the server: Raw (default — every recorded sample) or one of Average, Minimum, Maximum, Count, Total computed in fixed-width bins across the time range. |
| Interval (s) | Width of each aggregate bin in seconds. Visible only when Aggregate is not Raw. Default 60 s, range 1..86400 s. |
| Read History | Fetches values for the source node between Start and End. With Raw selected the chart shows every sample; with an aggregate selected the chart shows one point per bin. The button is disabled while a read is in progress. |
| Export CSV | Saves the loaded values to CSV (Source Timestamp / Server Timestamp / Value / Status Code). Formula-injection defanging is identical to the Event Log export. |
| Clear Chart | Empties the chart and frees the in-memory buffer. |
Non-numeric values, values with Bad status, and samples with out-of-range timestamps are omitted from the chart but remain in the CSV export. Raw reads are capped at 100,000 values per call and 1,000,000 values total; if the server returns more, the chart shows what fits and a warning is logged. The chart clears automatically on protocol switch or disconnect but keeps its content while you browse the address tree, so you do not lose loaded history just because you select a different node.
When an aggregate is selected the application log records how many bins came back marked partial (the bin straddles the time-range boundary or contains incomplete data). Partial bins still appear in the chart; the count is informational. Aggregate support depends on the server: Siemens S7-1500 CPUs typically expose Average, Minimum, Maximum, Count and Total when historizing is enabled; less common functions (Standard Deviation, Range, …) are also wired in the service layer but not exposed in the toolbar.
The variable must have Historizing = true on the server, and the session must have HistoryRead access. Siemens S7-1500 CPUs do not enable historizing by default — most variables need to be flagged for historical access in the PLC configuration.
Server Diagnostics
The Server Diagnostics panel is a tab in the bottom tool-stack, next to the Watch Table, Event Log, and History Chart. It surfaces the standardized OPC UA server-object hierarchy (Part 5 §6) so you can monitor session counters, subscription health, and server build information without leaving the application.
| Toolbar control | Purpose |
|---|---|
| Poll interval | Numeric spinner from 1 to 60 seconds (default 5). Persisted per connection endpoint. |
| Refresh | Triggers an immediate read regardless of the timer. |
| In-flight indicator | Indeterminate progress bar visible while a read is in flight. |
| Last updated | Timestamp of the last successful response (HH:mm:ss, local time). |
| Inline error | Surfaces the server-reported status code if the read fails. |
The body shows five collapsible sections:
- Server Status — server state, start time, shutdown countdown, build info (product name, URI, manufacturer, software version, build number, build date).
- Server Capabilities — max array / string / byte-string lengths, plus operation limits (max nodes per Read / Write / Browse).
- Diagnostics Summary — current and cumulated session count, rejected sessions, session timeouts, current subscription count, rejected requests.
- Subscriptions — sortable, resizable grid with one row per active subscription (id, publishing interval, publishing enabled flag, notifications count).
- Sessions — sortable, resizable grid with one row per session (session id, name, connect time, last contact time, total request count, read count, write count).
If the server explicitly does not expose the Server.ServerDiagnostics subtree (security policy, capacity), a "Server diagnostics are not exposed by this server" placeholder is shown instead of empty rows. Transient communication errors do not trigger the placeholder — they appear in the inline error strip so you can tell a "policy denial" apart from a "transient outage". After repeated failures the panel automatically backs off the poll interval to avoid hammering a struggling server; on the next success, the back-off resets.
Per-row strings (session name, product name, ...) are sanitized at projection time so that hostile servers cannot tear the grid layout with embedded control characters.
Connection polish
The connection header and Address Space tree expose UaExpert-style polish for everyday use:
Auto-reconnect banner. When the keep-alive watchdog detects a lost connection, the SDK starts reconnecting in the background. While that runs, the connection header shows a yellow banner that updates once per second with the elapsed time ("Reconnecting… (12 seconds)"). A Cancel button on the banner stops trying and returns to disconnected state — useful when you know the server is gone for good and want to skip the 5-minute timeout.
Cancelling a stuck connection. When the PLC is unreachable, the Connect attempt times out after 30 seconds and reports the endpoint as unresponsive. While the attempt is running, the Connect button is replaced by a red Cancel button that aborts the attempt immediately. After Connect succeeds, large type libraries on big S7-1500 controllers are loaded in the background — a status pill next to the connection badge shows progress (Loading type system…, Caching type definitions…, Pre-warming node cache…, Loading NodeSet2 catalog…). The PLC tree is browsable as soon as the badge turns green; complex (UDT) values become readable once the pill reports Ready.
Recent endpoints. The Endpoint URL field is an autocomplete dropdown of the last 10 successful connections. Type to filter, or click the down-arrow to pick one. The list is per-installation (not per-project) and survives application restart. Different URL forms that resolve to the same scheme + host + port are merged into a single entry — typing OPC.TCP://Host:4840/ after a previous opc.tcp://host:4840 connection updates the existing entry rather than creating a duplicate.
Keyboard shortcuts. While the PLC Online view is focused, the following keys are bound to the active connection:
| Shortcut | Action |
|---|---|
| Ctrl+Enter | Connect |
| Ctrl+D | Disconnect |
| F5 | Refresh the selected address-space node |
| Ctrl+W | Write the currently selected Watch Table row |
The Write shortcut acts on the row you have highlighted in the Watch Table — select the row first (single click), edit the value cell (double-click or F2), then Ctrl+W to send. Without an active edit it is a no-op.
Copy NodeId / Copy Browse Path. Right-click any node in the Address Space tree to copy either the canonical Node Id (e.g. ns=2;s=DB1.MyTag) or the human-readable browse path (e.g. Objects/DeviceSet/PLC_1/DB1/MyTag) to the clipboard. Useful for pasting Node Ids into Canvas bindings, MCP tool calls, or external scripts.
The right tool-stack (Node Attributes, References, Struct Fields) and the bottom tool-stack (Event Log, History Chart, Server Diagnostics) can each be shown or hidden from the Command Palette (Ctrl+Shift+P).
Call Method dialog
Right-click a Method node in the Address Space tree and pick Call Method... to open a dialog that drives an OPC UA method call end-to-end.
The dialog first fetches the method's input and output argument list from the server and renders one editor per input:
| Argument shape | Editor |
|---|---|
| Scalar (boolean, integer, float, string, DateTime) | Single text box with the expected data type as watermark |
| Array | A list of single-value rows with + Row / − Row buttons to match the desired array length |
Each card shows the argument's name, data type, and description (if provided by the server). After filling the inputs, click Call — the dialog invokes the server, clamps oversized payloads, and populates the Output arguments section with the returned values and a status line. Closing the dialog cancels any call still in flight.
Method calls write to the PLC — make sure the method's effect is understood before calling on a running machine.
Edit Matrix dialog
Right-click a Variable node whose value is a two-dimensional matrix (for example a Double[3,4] setpoint table or a calibration grid) in the Address Space tree and pick Edit Matrix... to open a spreadsheet-style editor. The menu entry only appears when the selected variable actually has matrix shape on the server.
The dialog loads the current value and renders every cell as an editable text box with row (R0, R1, ...) and column (C0, C1, ...) headers. Change values cell by cell — changed cells are tracked as dirty. Press Save to write the whole matrix back to the server (only cells you actually changed are re-parsed; untouched cells are preserved as-is) or Reload to throw away your edits and pull a fresh copy from the server.
If the server declares the variable as read-only (no write access for your session), the dialog shows a Read-only badge and the Save button stays disabled. Matrices with more than two dimensions are not editable — the dialog reports "rank not supported" instead of silently flattening the data. Invalid cell values (for example text in a numeric matrix) are flagged when you press Save; fix the cell and try again.
When you press Save the dialog re-reads the current value from the server first. If any cell has changed on the server while you were editing — for example because another client or the PLC itself updated the matrix — a warning banner appears with two options: Overwrite writes your edits anyway (and clobbers the server-side change), Reload discards your edits and pulls the fresh server values into the editor. If the server reports a different matrix shape (more rows or columns than when you opened the dialog), Overwrite is disabled and you must Reload before continuing.
Certificate Management
Open Certificate Management from the Connection Settings flyout (the gear in the connection header), or from the Command Palette (Ctrl+Shift+P), to review and manage the OPC UA certificates this client uses and trusts. The dialog shows three tabs:
| Tab | What it shows | Actions |
|---|---|---|
| Own | Your client certificate(s) — the one the PLC sees when you connect | Regenerate (creates a fresh keypair; ends all active OPC UA sessions), Remove |
| Trusted | Server certificates this client has accepted | Reject (moves to the Rejected tab), Remove |
| Rejected | Server certificates this client has refused or received while Auto-accept was off | Trust (moves to the Trusted tab), Remove |
Each row shows Subject, Issuer (for server certs), Thumbprint, Valid from, Valid to. Select a row and use the tab's action buttons.
The Auto-Accept Certificates toggle for a connection lives in the Connection Settings flyout (the gear in the connection header), per connection tab:
- Off (default) — New server certificates are routed to the Rejected tab instead of being accepted automatically. You must open the dialog and click Trust before the next connect succeeds. This is the fail-secure default and is recommended on networks where you want explicit per-server approval.
- On — Any new server certificate is trusted on first connect. Fastest and most convenient, but trusts whatever the server presents — enable it only on networks you control.
PLC Explorer
Every successful connection is remembered in a recent-endpoints list (see Recent endpoints above under Connection polish), so you do not have to re-type frequently used PLC addresses each time. The Endpoint URL field offers your recent connections as an autocomplete.
Planned: a dedicated PLC Explorer side bar — a curated list of named PLCs with reachability status and quick-connect — is not yet available in the PLC Online view.
Connection Status Indicators (S7 Native)
License requirement (S7 Native): The S7 Native protocol requires a Trial or Enterprise license. OPC UA is available on all tiers (Basic, Professional, Trial, Enterprise). On Basic and Professional, the S7 Native protocol option in the connection header is hidden and existing S7 Native connection tabs show an inline upgrade banner in place of the live connection.
When connected to an S7-1200 or S7-1500 PLC over the native S7 Comm+ protocol, the PLC Online pane shows live status indicators that react immediately to what the PLC is doing:
- Connection-tab dot — a small coloured circle next to the connection tab's title. Hover the dot to see what it means:
- Grey — not connected yet
- Green — online, CPU is running
- Yellow — online but the CPU is stopped (Stop, Startup, Hold, ...), or the app is currently reconnecting
- Red — the PLC is unreachable
- Reconnecting banner — a yellow strip under the connection bar saying "Reconnecting..." appears while the app is trying to restore a lost connection. It clears automatically when the PLC comes back.
- Faded watch values — when the PLC becomes unreachable, the values in the Watch Table fade to half opacity and switch to
???to show they are no longer current. As soon as the PLC is back, new live values replace them on their own. No restart or manual reconnect needed. - Operating-state pill —
RUN,STOP,STARTUPetc. next to the IP address, coloured to match the CPU state. - Access-level badge — sits next to the operating-state pill and reflects what the PLC granted on legitimate-step:
- Green
Full access— the supplied password (or anonymous if the PLC permits it) was accepted with full read/write permission. - Amber
Read access/HMI access— the PLC granted a degraded level. Reads work for the categories the level allows; writes will be rejected. - Red
No access— the PLC requires a password and none was supplied. The connection stays open but the post-connect browse, watch-table subscribe and CPU-protection probe are skipped on purpose. Supply the correct password in the connection form and click Connect again to re-attempt with credentials.
- Green
TLS encryption and certificate pinning (S7 Native)
S7-1500 firmware V2.9 and later activates TLS unconditionally on the OMS+ port — the unencrypted plain S7-CommPlus path is rejected by current PLCs. The S7 Native transport mirrors that contract: TLS is on by default, the unencrypted InitSsl handshake runs first, and the channel is upgraded to TLS for every operation that follows. The connection settings expose three options:
- Use TLS — historical toggle preserved on the connection form. The S7 Native driver mirrors the legacy S7-CommPlus contract and always performs the TLS upgrade after the unencrypted InitSsl handshake; the toggle does not disable that upgrade.
- Server-certificate fingerprint (SHA-256) — paste the SHA-256 thumbprint of the CPU's device certificate (lowercase or uppercase hex, with or without
:separators). When set, the client accepts that one certificate only; any mismatching certificate is rejected. Pinning is the recommended production setting because S7-1500 device certificates are typically self-signed and not enrolled into a public PKI. - Accept any certificate — explicit diagnostics toggle. When enabled the client trusts whatever certificate the server presents and a one-shot warning is written to the app log on every connect.
Selection precedence:
- If a fingerprint is set → only that certificate is accepted, regardless of the Accept any certificate toggle.
- Else, if Accept any certificate is on → any certificate is accepted, with an explicit-diagnostics warning.
- Else (TLS on, no fingerprint, accept-any off) → the client accepts any certificate and emits a one-shot warning recommending fingerprint pinning. This mirrors the behaviour of the legacy S7-CommPlus client and matches what TIA Portal does over the same channel; it is also the only way to talk to a stock S7-1500 without first extracting the device certificate.
For Wireshark-side diagnostics of the encrypted handshake, the SSLKEYLOGFILE mechanism described under Unit Testing → Troubleshooting applies to PLC Online connections as well.
CPU Protection panel
Planned: a dedicated CPU Protection panel in the PLC Online S7 panel stack is not yet available. The connected CPU's granted access level is surfaced live on the Access-level badge described above under Connection Status Indicators (S7 Native).
Diagnostic Buffer panel
On an S7 Native connection, the Diagnostic Buffer panel in the S7 panel stack lists the most recent CPU diagnostic events read from the SSL 0xA0 partial-list, mirroring what TIA Portal Online & Diagnostics shows under "Diagnostics buffer":
- Columns —
Timestamp(UTC, millisecond precision),Event ID(hex0xXXXX),Class,Priority,OB(organization-block reference). - Refresh — re-reads the diagnostic buffer on demand. The value also refreshes automatically once after every successful S7 connect on supported firmware.
- Empty state — when the CPU reports zero events, a
No diagnostic events on this CPU.placeholder is shown. - Firmware requirement — the SSL DS-248 SubrangeRead used here is a CPU firmware V3.0 or newer feature. On V2.x CPUs the panel shows
Diagnostic buffer requires CPU firmware V3.0 or newer.instead of the table; the auto-refresh skips the request so no log spam is produced.
CPU Identity panel
On an S7 Native connection, the Identity (I&M0) panel in the S7 panel stack shows the device-identification record (PROFINET I&M0) read from the active S7-1500 / S7-1500F CPU. Works on both V2.x and V3.0+ firmware.
- Order number / Serial / Hardware version / Firmware version / PLC and module name / CPU type — rows extracted from the I&M0 record on the CPU's submodule.
- Refresh — re-reads the I&M0 record on demand. The value also refreshes automatically once after every successful S7 connect.
Alarms panel
On an S7 Native connection, the Alarms panel in the S7 panel stack shows the CPU's alarm definitions and a live alarm stream:
- Each alarm's category, severity, and transition are shown as readable labels.
- A server-side filter limits the stream by category and minimum severity.
- When the CPU reports no alarms, a branded empty state is shown.
Planned: a Memory Usage panel and a Cycle Time panel for S7 Native connections are not yet available in the PLC Online S7 panel stack.
Protocol-Aware Panels
The panels around the connection workspace adapt to whichever protocol the active connection uses:
- OPC UA connection — Address Space, Node Attributes, References, Struct Fields, Event Log, Watch Table, History Chart, Server Diagnostics.
- S7 Native (S7 Comm+) connection — Address Space, Watch Table, plus the S7 panel stack (Diagnostic Buffer, Identity, Alarms). The OPC-UA-only panels (Node Attributes, References, Struct Fields, Event Log, Server Diagnostics) give way because they need NodeIds, OPC events, or other server-side surfaces that S7 Comm+ does not expose.
Switching the protocol selector in the connection header re-applies the filter immediately.
Watch Table
The Watch Table fills the center of the PLC Online pane and displays variables you have selected for monitoring. Its title bar carries a toolbar: Subscribe (play), Stop, Export CSV, Clear All, and Remove Selected (a trash icon, enabled when a row is selected). Subscribe and Stop toggle live monitoring of the rows; Remove Selected drops the highlighted row and Clear All empties the table.
Adding Variables
- Double-click a variable node in the address space tree to add it to the watch table
- Right-click a node in the address space tree and pick Add to Watch
- Drag a node from the tree and drop it onto the watch table
Each row in the watch table shows:
| Column | Description |
|---|---|
| Name | Display name of the variable |
| Node ID | OPC UA Node ID (e.g., ns=3;s="DataBlock1"."Speed") |
| Data Type | OPC UA data type (e.g., Int16, Float, Bool) |
| Value | Current value — scalars render as typed strings (True, 12345, 1.5); arrays render with a size-prefix and element list ([16] True, False, …); byte arrays render as hex ([4] DE AD BE EF). Long arrays truncate after 32 elements. |
| Status | OPC UA status code (Good, Bad, Uncertain) |
| Timestamp | Server timestamp of the last value |
Reading Values
While the connection is live, every row's value, quality, and timestamp update automatically — there is no need to poll manually.
Writing Values
- Double-click the Value cell of a row in the watch table
- Enter the new value
- Press Enter or click outside the cell to confirm
- The value is written to the PLC immediately
Note: Write operations require the OPC UA user to have write permissions configured on the PLC.
Write Errors
If a write fails, the row stays in edit mode (your value remains visible) and a small red error message appears below the value cell explaining why the write was rejected:
- Variable is read-only — the server rejected the write because the variable does not allow writes (
BadNotWritable/BadWriteNotSupported). - Permission denied — the OPC UA user is connected but does not have write rights for this variable (
BadUserAccessDenied). - Type mismatch — the value cannot be converted to the variable's data type (
BadTypeMismatch). - Value out of range — the value is outside the valid range for the variable (
BadOutOfRange). - Server returned no result — the server accepted the request but returned no per-item status; the write may not have taken effect.
- Write failed: {reason} — generic fallback for any other server response or connection problem.
To clear the error, edit the cell again or click another row. A successful write also clears the message.
The same feedback appears as a banner above the Struct Fields panel for failed struct writes.
Struct Write — No Changes
If you press Write on the Struct Fields panel without having edited any field, the panel shows a "No changes to write" banner. As soon as you edit any field, the banner clears automatically and the next press of Write sends the changes to the server.
Live Monitoring
While a connection is live, the watch table updates on its own — the OPC UA server pushes value changes to AnyAutomation Studio through a single subscription, without repeated polling. As soon as a variable is added to the watch table, its value, quality, and timestamp track the PLC in real time.
Note: Very fast update rates are not recommended for production CPUs — they can overload PLCSIM Advanced and may exceed the communication-load budget on real S7-1200 / 1500 PLCs (see CPU comm-load setting in TIA Portal). Use aggressive rates only for short, targeted measurements.
Saving and Restoring the Workspace
The PLC Online workspace — open connections (without passwords), the watch table, the event filter, and the history range — is captured automatically and restored the next time you open the view. No setup is needed.
Every open connection tab keeps its own saved state — watches, event filter, and history range — not just the active tab. When you reopen PLC Online, each connection tab comes back with the variables and history range you left it with.
After restarting AnyAutomation Studio, PLC Online opens disconnected: endpoints, watch lists, and settings are restored, but no connection is established on its own — click Connect when you are ready. Within a running session, however, switching between editor tabs and back resumes the connections that were live when you left.
Passwords and certificate passwords are never written to the workspace store; they are kept in the operating system's secret store and re-resolved on restore. A missing secret simply prompts a re-entry without blocking the rest of the restore.
The pane also remembers how you arranged it — the splitter positions and whether the right and bottom tool-stacks are shown — and puts everything back the next time you open PLC Online.
If you do not want a particular connection saved at all, turn on Do Not Persist Connection in that tab's Connection Settings flyout (the gear in the connection header).
Named workspace files. The editor title-bar menu (...) offers Save Workspace As…, Load Workspace…, and Reset Workspace (also available from the Command Palette). Save Workspace As… writes the current workspace — open connections, watch tables, event filters, and history ranges — to a portable workspace file you can hand to a colleague; Load Workspace… reads one back; Reset Workspace clears the pane back to a single empty connection. No passwords or certificate passwords are written to the portable file — on load, a missing secret simply prompts a re-entry.
Exporting Watch Table Data
The Watch Table toolbar carries an Export CSV button that writes the current rows to a file. The CSV has seven columns — Name, Node ID, Address, Value, Data Type, Quality, and Timestamp — so an external tool can resolve each row back to its node. Cells beginning with =, +, -, @, tab, or carriage return are quoted to defang spreadsheet formula injection.
The Event Log and History Chart panels each carry their own Export CSV action that writes their visible rows to a file with the same formula-injection defanging — see those panels above.
OPC UA MCP Tools (AI Integration)
When the MCP server is running, AI assistants have access to OPC UA and Canvas tools via two consolidated tools:
| Tool | what subcommand | Description |
|---|---|---|
opcua | connect | Connect to an OPC UA endpoint with specified authentication |
opcua | disconnect | Disconnect from the current OPC UA server |
opcua | browse | Browse the address space starting from a given node |
opcua | read | Read the current value of one or more variables by Node ID |
opcua | read_complex | Read structured/complex data types (e.g., UDTs, arrays) |
opcua | write | Write a value to a variable by Node ID |
opcua | write_complex | Write individual fields of a data block (read-modify-write) |
opcua | get_types | Retrieve data type definitions from the server |
opcua | subscribe | Create a monitored item subscription for one or more nodes |
canvas | bind_opcua | Poll OPC UA values and update the Canvas dashboard in real-time |
canvas | unbind_opcua | Stop all Canvas OPC UA read bindings |
canvas | bind_opcua_write | Map Canvas button clicks and slider changes to OPC UA writes |
canvas | unbind_opcua_write | Stop all Canvas OPC UA write bindings |
Example AI Chat usage:
Ask the AI assistant in the chat panel things like:
- "Connect to the PLC at 192.168.0.10 anonymously and browse the data blocks"
- "Read the value of node
ns=3;s="Tank1"."Level"and tell me if it is above 80%" - "Subscribe to all Float variables in the 'Production' data block with a 1-second interval"
- "Write the value 1500 to
ns=3;s="Conveyor"."SetSpeed""
Notes
- OPC UA connectivity does not require TIA Portal to be open or connected
- The PLC must have OPC UA enabled in its hardware configuration (General → OPC UA → Server)
- For S7-1500 PLCs, ensure the OPC UA server is activated and the relevant PLC tags are marked as "Accessible from HMI/OPC UA"
- Certificate-based authentication requires exchanging certificates between the client and the PLC
AI Canvas with OPC UA Live Data
The AI Canvas can display interactive dashboards that connect to live OPC UA data. The AI creates visual dashboards (gauges, buttons, sliders, animations) using canvas (what: eval), and OPC UA values are bound to the dashboard for real-time updates.
How It Works
- The AI creates a dashboard using
canvas(what:eval) (HTML/CSS/JavaScript rendered in the Canvas WebView) - Read bindings (
canvaswith what:bind_opcua) poll OPC UA values and push them to the dashboard viawindow.__tiaUpdateDashboard() - Write bindings (
canvaswith what:bind_opcua_write) map Canvas button clicks and slider changes to OPC UA write operations - All updates happen automatically — no manual polling or subscription setup needed
Canvas OPC UA Tools
| Tool | what subcommand | Direction | Description |
|---|---|---|---|
canvas | bind_opcua | PLC → Canvas | Polls OPC UA values and updates the dashboard in real-time |
canvas | unbind_opcua | — | Stops all read bindings |
canvas | bind_opcua_write | Canvas → PLC | Maps button clicks and slider changes to OPC UA writes |
canvas | unbind_opcua_write | — | Stops all write bindings |
opcua | write_complex | Canvas → PLC | Writes individual fields of a data block (read-modify-write) |
Example: Process Control Dashboard
Ask the AI to create an interactive dashboard:
"Create a process control dashboard on the Canvas with Start/Stop buttons, a speed slider (0-3000 RPM), and live gauges for Speed, Temperature, Pressure, and FlowRate. Bind it to the data block
Data_block_1via OPC UA."
The AI will:
- Create the visual dashboard with
canvas(what:eval) - Set up read bindings with
canvas(what:bind_opcua) for live value display - Set up write bindings with
canvas(what:bind_opcua_write) so buttons and sliders control the PLC
Saving and Loading Dashboards with OPC UA Bindings
Canvas dashboards can be saved to JSONL files and loaded later. OPC UA binding configurations are included in the saved file.
Save:
- Click the Save button in the Canvas toolbar
- The JSONL file contains the dashboard layout, JavaScript, and OPC UA binding configuration
Load:
- Connect to the OPC UA server first
- Click the Load button in the Canvas toolbar and select the saved JSONL file
- The dashboard is restored and OPC UA bindings are automatically re-applied
- Live data starts flowing immediately (if OPC UA is connected)
Note: OPC UA bindings are also preserved when the Canvas is docked/undocked within the same session.
Important Notes
- An active OPC UA connection is required before bindings can deliver data
canvas(what:bind_opcua) uses polling (not OPC UA subscriptions) — this is more stable and avoids overloading the OPC UA server- All values from OPC UA arrive as strings in the JavaScript callback (use
parseFloat()for numbers, compare with"True"/"False"for booleans) - The Canvas
Resetbutton stops all OPC UA bindings (both read and write)