Skip to content

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.

  1. Set Mode Source to Separate Bit per Mode. The Mode Encoding section is replaced by a Mode Bit Mapping section.
  2. In Mode Bit Mapping, add one row per mode your PLC exposes, and give each one a short name — for example AUTOauto_mode_bit, MDImda_mode_bit, JOGjog_mode_bit.
  3. 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.
  4. Do not map machine_mode when 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:

[machine-001] Config updated via MQTT, poller restarted

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
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_count register should be a cumulative counter — never reset it automatically. The platform calculates deltas.
  • The cycle_time_last_s register should be updated at end-of-cycle with the duration of the last completed part cycle in seconds.
  • The status_bits byte at offset 0 can map to any bits in an existing status byte — just tell the Enture engineer which bits correspond to run_state, alarm_active, and emergency_stop if 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_mode value, 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.