AutomationView manages PLC variables through automatic discovery in your sequences and explicit declaration in the Machine Editor and Variables sidebar.

You can create and configure variables using three workflows:
main.machine and select the Variables tab.main.machine.Manage large variable tables in the Machine Editor Variables tab:
.csv file..csv file.name, type, description, usage, initial value) and press Ctrl+V inside the Variables tab.| Type | Description | Example |
|---|---|---|
BOOL |
Boolean (TRUE / FALSE) |
sensor_1, motor_on |
INT |
16-bit signed integer | part_count, speed |
DINT |
32-bit signed integer | encoder_pos, total_count |
REAL |
32-bit floating point | temperature, pressure |
LREAL |
64-bit floating point | high_precision_pos |
STRING |
Text string (supports fixed length STRING[80]) |
recipe_name, barcode |
TIME |
Duration literal (T#5s, T#100ms) |
cycle_delay |
BYTE |
8-bit unsigned bit string | status_byte |
WORD |
16-bit unsigned bit string | status_word |
DWORD |
32-bit unsigned bit string | fault_mask |
Any elementary, compound, or custom data type can be configured as a single-dimensional or multi-dimensional array:
[0..9] or [-5..10, 1..4]).buffer[0], matrix[i, j]).STRUCT and ENUM)Define reusable data structures and enumerations in the Machine Editor Datatypes tab:
STRUCT: Group related fields of any type (including nested structs and arrays) and access them with dot notation (for example station_data.cylinder.extended).ENUM: Define named states (for example Mode.AUTO, Mode.MANUAL) for readable conditions and assignments.Compound types represent IEC 61131-3 function blocks. Access their member fields using dot notation (for example delay_timer.Q).
| Type | Fields | Description |
|---|---|---|
| TON | .IN, .Q, .PT, .ET |
On-delay timer |
| TOF | .IN, .Q, .PT, .ET |
Off-delay timer |
| TP | .IN, .Q, .PT, .ET |
Pulse timer |
| RTO | .IN, .R, .Q, .PT, .ET |
Retentive on-delay timer |
| CTU | .CU, .R, .Q, .PV, .CV |
Count-up counter |
| CTD | .CD, .LD, .Q, .PV, .CV |
Count-down counter |
Variables are organized by usage context:
| Usage Context | Address Area | Description |
|---|---|---|
| Input | %I |
Wired to a physical input channel (sensors, buttons) |
| Output | %Q |
Wired to a physical output channel (valves, motors) |
| Local | - | Internal project or sequence variable |
I/O addresses are computed automatically when you bind a variable to an equipment channel in the Machine Editor Architecture tab:
%IX2.0 -> Input bit, byte offset 2, bit 0
%QW4 -> Output word, byte offset 4
%IB1 -> Input byte, offset 1
%QD8 -> Output double word, offset 8
%I and %Q addresses to unassigned channels.Run variable commands from the Command Palette (Ctrl+Shift+P) or the Variables sidebar:
| Command | Description |
|---|---|
| Add Variable | Create a new variable declaration in main.machine |
| Declare in main.machine (Freeze) | Persist an inferred variable into main.machine |
| Rename Variable | Rename a variable across all .seq and .machine files |
| Import Variables from CSV | Import variable declarations from a CSV file |
| Export Variables to CSV | Export the project variable table to a CSV file |
| Get Variable Value | Read a live variable value during simulation |
| Set Variable Value | Write a variable value during simulation |
| Assign Addresses (Manual / Auto) | Map variables to hardware channels in the Machine Editor |
| Validate Addresses | Check for hardware address conflicts |