Siemens S7 Setup¶
This page is intended for both platform engineers configuring a Siemens S7 machine in Enture and for third-party PLC programmers who need to know what data to expose.
Why S7 is different from FANUC¶
FANUC controllers expose a rich CNC API (FOCAS) over Ethernet that Enture can probe automatically — axes, spindles, programs, and all standard signals are discovered without any manual configuration.
Siemens S7-300/400/1200/1500 controllers use a general-purpose PLC memory protocol (S7comm). There is no standardised CNC namespace: every integrator or OEM places signals at different Data Block (DB) numbers and byte offsets. Enture must therefore be told exactly where to read each signal — this is the S7 Tag Map.
Step 1 — Add the machine¶
Follow the standard Adding a Machine guide. When prompted for Controller Type, choose Siemens S7.
Step 2 — Basic connection settings¶
In the Basic tab of the machine's edit form:
| Field | Value |
|---|---|
| IP Address | PLC IP reachable from the edge computer |
| Port | 102 (ISO-TCP — default, do not change) |
| Rack | Rack number of the CPU module (usually 0) |
| Slot | Slot number of the CPU module (usually 2 for S7-300/400, 1 for S7-1200/1500) |
Finding rack/slot in TIA Portal
Open the device view in TIA Portal and hover over the CPU module. The rack and slot numbers are shown in the hardware properties panel. For most S7-300 installations the correct values are Rack 0, Slot 2.
Step 3 — Configure the S7 tag map¶
Open the S7 Tags tab (only visible when controller type is Siemens S7).
Quick start: Load Standard Template¶
Click Load Standard Template (DB100). This pre-fills 18 standard signals using the Enture DB100 layout described below. If your PLC programmer followed the Enture standard, you are done — save and move to Step 4.
Manual configuration¶
Each row in the tag map defines one signal:
| Column | What to enter |
|---|---|
| Signal | Choose from the dropdown — this is the Enture signal name |
| DB | Data Block number (e.g. 100) |
| Byte Offset | Byte offset within the DB where this value starts |
| Data Type | How the value is stored in the PLC (real, int, dint, bool, word, dword) |
| Bit | Only for bool type — which bit within the byte (0–7) |
Use Add Row to add more signals. The Delete button (trash icon) removes a row.
Axis position signals (WCS and MCS)¶
For each axis, the Signal dropdown offers two position readings:
<axis>_absolute— the position relative to the active work offset (WCS). This is the reading shown as the main position on the live dashboard.<axis>_machine— the position relative to the machine's home/reference point (MCS). This is optional — only map it if you also want the machine-referenced position shown on the dashboard.
Both are offered for the standard axes (X, Y, Z, A, B, C). If your machine has an axis that isn't one of these — for example a second rotary axis on a twin-spindle machine — add it first in the machine's Axes configuration (see Manual Configuration → Axes) using whatever name you like (e.g. C1, C2). Once added, its own <name>_absolute and <name>_machine signals automatically appear in this Signal dropdown.
Step 4 — Mode configuration¶
The Mode Source setting controls how Enture reads the machine's current mode (AUTO, MDI, MANUAL, JOG, EDIT) from the PLC. Most PLCs use a single value; some use a separate on/off signal per mode. Choose whichever matches how your PLC programmer implemented it.
Single Value (Word) — most common¶
The machine_mode signal is a single integer in the PLC. Enture maps these integers to mode names using the following defaults:
| PLC value | Enture mode |
|---|---|
| 0 | AUTO |
| 1 | MDI |
| 2 | MANUAL |
| 3 | JOG |
| 4 | EDIT |
If your PLC programmer used different values, expand the Mode Encoding section and add override rows. Example: if value 5 means the machine is in ALARM state, add 5 → ALARM.
Separate Bit per Mode¶
Some PLC programs expose each mode as its own individual on/off signal instead of a single value (for example, a separate Auto Mode, MDA Mode, and JOG Mode bit). Choose this option if that describes your PLC.
- Set Mode Source to Separate Bit per Mode. The Mode Encoding section is replaced by a Mode Bit Mapping section.
- In Mode Bit Mapping, add one row per mode your PLC exposes, and give each one a short name — for example
AUTO→auto_mode_bit,MDI→mda_mode_bit,JOG→jog_mode_bit. - Go back to the Signal → Data Block Mapping table above. The names you just entered are now available in the Signal dropdown (added to the end of the list). Select each one and enter its real Data Block, Byte Offset, and Bit — Data Type should be
bool. - Do not map
machine_modewhen using this option — it is not used.
If no mode bit is on
If none of the mapped bits are currently true (for example, for a brief moment while the machine switches modes), the dashboard shows the mode as UNKNOWN rather than guessing. If you see UNKNOWN persisting, double check that every mode bit your PLC actually uses has been mapped.
Signal dropdown is not searchable
The Signal dropdown is a plain list, not a search box. Custom names you add in Mode Bit Mapping (or in the Axes configuration) are appended to the end of the list — scroll down to find them.
Step 5 — Save and verify¶
Click Save on the S7 Tags tab. The updated tag map is pushed to the edge device within seconds via the cloud IoT channel — no restart of the edge process is required.
To verify, watch the edge logs:
Enture Standard DB100 Layout¶
This is the layout Enture recommends for all third-party PLC integrations. Providing this to your PLC programmer means zero manual tag mapping in the UI.
DB100 — Enture CNC Status Block
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Offset Type Signal Unit / Notes
────── ───── ─────────────────── ──────────────────────────
0 BYTE status_bits See bit map below
2 INT machine_mode 0=AUTO 1=MDI 2=MANUAL 3=JOG 4=EDIT
4 INT alarm_code Active alarm number; 0 = no alarm
6 INT (reserved)
8 DINT part_count Cumulative parts produced
12 REAL feed_rate mm/min
16 INT feed_override %
18 INT spindle_override %
20 INT rapid_override %
22 REAL spindle_speed RPM
26 REAL spindle_load %
30 REAL spindle_temp °C
34 REAL x_absolute mm
38 REAL y_absolute mm
42 REAL z_absolute mm
46 REAL depth_of_cut mm
50 REAL cycle_time_last_s seconds (time of the last completed cycle)
54 DINT program_number Active O-number / program number
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Status bits (byte 0):
| Bit | Signal name | Meaning when 1 |
|---|---|---|
| 0 | run_state |
Machine cutting / program running |
| 1 | (reserved) | — |
| 2 | alarm_active |
Alarm is present |
| 3 | emergency_stop |
E-stop engaged |
What to tell your PLC programmer¶
Provide this section verbatim if a third-party PLC programmer is instrumenting the machine.
Minimum required signals¶
The following signals are required for core OEE and status monitoring:
| Signal | DB | Offset | Type | Bit | Description |
|---|---|---|---|---|---|
run_state |
100 | 0 | bool | 0 | 1 when machine is cutting |
part_count |
100 | 8 | dint | — | Cumulative part counter |
feed_rate |
100 | 12 | real | — | Current feed rate in mm/min |
Recommended signals¶
| Signal | DB | Offset | Type | Bit | Description |
|---|---|---|---|---|---|
machine_mode |
100 | 2 | int | — | 0=AUTO, 1=MDI, 2=MANUAL, 3=JOG, 4=EDIT |
alarm_active |
100 | 0 | bool | 2 | 1 when any alarm is active |
emergency_stop |
100 | 0 | bool | 3 | 1 when e-stop is pressed |
alarm_code |
100 | 4 | int | — | Active alarm number |
feed_override |
100 | 16 | int | — | Feed override % |
spindle_override |
100 | 18 | int | — | Spindle override % |
rapid_override |
100 | 20 | int | — | Rapid override % |
spindle_speed |
100 | 22 | real | — | Spindle speed in RPM |
spindle_load |
100 | 26 | real | — | Spindle motor load % |
spindle_temp |
100 | 30 | real | — | Spindle temperature °C |
x_absolute |
100 | 34 | real | — | X axis absolute position mm |
y_absolute |
100 | 38 | real | — | Y axis absolute position mm |
z_absolute |
100 | 42 | real | — | Z axis absolute position mm |
depth_of_cut |
100 | 46 | real | — | Current depth of cut mm |
cycle_time_last_s |
100 | 50 | real | — | Last completed cycle time seconds |
program_number |
100 | 54 | dint | — | Active program/O-number |
Notes for the PLC programmer¶
- Use DB100 as the Data Block number if possible (makes template loading instant for the machine operator).
- The
part_countregister should be a cumulative counter — never reset it automatically. The platform calculates deltas. - The
cycle_time_last_sregister should be updated at end-of-cycle with the duration of the last completed part cycle in seconds. - The
status_bitsbyte at offset 0 can map to any bits in an existing status byte — just tell the Enture engineer which bits correspond torun_state,alarm_active, andemergency_stopif they differ from the standard. - Values are polled every 5 seconds via S7comm ISO-TCP (port 102). Ensure the PLC firewall allows connections from the edge computer IP.
- If mode is exposed as one on/off bit per mode rather than a single
machine_modevalue, that's fine — just provide the DB, byte offset, and bit number for each mode bit the PLC exposes, and see Step 4 — Mode configuration for how the Enture engineer maps them. - If a "cycle started" / "cycle running" bit is exposed separately from an overall run-state bit, it can be mapped directly to
run_state— no separate handling is needed for it.