Overview: Coupling SIMOTION to SIMATIC S7
SIMOTION is Siemens' motion-control PLC platform. It does not use Datenbausteine (DBs) the way SIMATIC S7 does, and it has no fixed control word / status word bit pattern in the PROFIdrive sense. Instead, SIMOTION exposes its peripheral slots as plain process images (binary/byte/word I/O) that the application program reads and writes. S7 controllers (for example a CPU 319F-3 PN/DP) communicate with SIMOTION by exchanging this process image with their own DBs using one of the following mechanisms:
- PROFINET I-Device (also called I-Slave in older documentation) – the recommended method when both controllers are PROFINET-capable. The SIMOTION is configured as an I-Device on the same PN subnet; S7 uses SFC14 / SFC15 to read/write the transferred slots.
- PROFIBUS DP Slave – for legacy CPUs without PROFINET. The SIMOTION acts as a DP slave and exposes its I/O via slots. S7 uses SFC14 / SFC15 against the DP master interface.
-
TCP / UDP / ISO-on-TCP via the SIMOTION
_receive/_sendblocks – useful for slow, non-deterministic handshakes; not recommended for axis control words. - OPC UA on SIMOTION V4.5+ – for SCADA/MES data exchange, not for hard-realtime axis control.
The remainder of this document focuses on the PROFINET I-Device path, which is the most commonly deployed configuration for the Hoist / Gantry / Trolley axis families referenced in typical crane, hoist, and port-crane SIMOTION projects.
Terminology: PZD, PCD, and I-Device Slots
Engineers coming from SINAMICS drives (S120, G120) expect a fixed PZD (Prozessdaten) structure with control word 1 (STW1) and status word 1 (ZSW1). With SIMOTION the equivalent construct is the transfer area configured in HW Config and exposed as a SIMOTION address:
| Term | Origin | Meaning on SIMOTION |
|---|---|---|
| PZD | PROFIdrive / SINAMICS | Not native to SIMOTION; loosely used to mean the cyclic process data of a drive slot. |
| PCD (Periphery Control/Data word) | SIMATIC-style terminology | Sometimes used to refer to the same cyclic data; in practice, just the bytes in the transfer area. |
| Transfer area (Übergabebereich) | SIMOTION HW Config | A defined byte range in the SIMOTION I/O image that PROFINET copies to/from the partner. |
| Local I/O area | SIMOTION program | The address (e.g. %IW0, %QW4) that the application logic references; must be fed from the transfer area. |
| I-Device | PROFINET | A PROFINET device that exposes its own I/O slots as a partner to a higher-level controller, rather than a leaf I/O device. |
For a CPU 319F-3 PN/DP sending, for example, DB213.DBW36 as a Hoist-1 control word, the data path is:
- DB213.DBW36 in the S7 user program (any value, any structure).
- Copied to a configured output transfer area via SFC15 (DPDAT, DPWR_DAT).
- Transported over PROFINET to the SIMOTION's transfer area input address (e.g.
%IW100). - The SIMOTION program copies
%IW100into a structure the axis technology object can interpret, or drives the technology object directly. - The reverse path (status, position, current) travels back the same way to
DB213.DBWxin the S7.
Prerequisites
- SIMATIC STEP 7 V5.5 + SP4 or later (SIMATIC Manager) with the SIMOTION option package installed, or TIA Portal V15.1+ with the SIMOTION V5.4+ HSP.
- SIMOTION SCOUT or SCOUT TIA V5.4 / V5.5 SP1+.
- A SIMOTION controller with PROFINET interface (D4x5, D4x5-2, C240 PN, P320-4, etc.). The PROFINET interface firmware must be at least V2.2 for full I-Device support; V2.6 is recommended.
- A SIMATIC CPU with PROFINET controller capability (S7-300 CPU 31x PN/DP, CPU 319F-3 PN/DP, S7-1500, ET 200S CPU).
- GSDML file for the SIMOTION exported from SCOUT (for the S7 side) and a GSDML for the S7 exported from STEP 7 (for the SIMOTION side), or use the I-Device wizard which auto-generates them.
- Familiarity with the SIMOTION axis technology objects
TO_ServoAxis,TO_SpeedAxis, orTO_SynchronousAxisused by the Hoist, Gantry, and Trolley axes.
Step 1: Configure the SIMOTION as an I-Device (PROFINET)
Open the SIMOTION project in SCOUT, expand the SIMOTION device, right-click the PROFINET interface and select Properties → PROFINET IO → I-Device. Enable the role I-Device and define the transfer areas.
Typical transfer areas for a 3-axis crane application:
| Slot | Direction (SIMOTION view) | Length | SIMOTION address | Partner (S7) meaning |
|---|---|---|---|---|
| Slot 0 | Input (S7 → SIMOTION) | 16 bytes | %IB0 .. %IB15 | Hoist-1 control word, setpoints, mode selector |
| Slot 1 | Input (S7 → SIMOTION) | 16 bytes | %IB16 .. %IB31 | Gantry control word, setpoints |
| Slot 2 | Input (S7 → SIMOTION) | 16 bytes | %IB32 .. %IB47 | Trolley control word, setpoints |
| Slot 3 | Output (SIMOTION → S7) | 32 bytes | %QB0 .. %QB31 | Status words, actual positions, current diagnostics |
The PROFINET device name must be unique on the subnet. For an I-Device that will be wired into a higher-level S7 PROFINET, use a name like simotion-hoist1. Make sure the PROFINET device number is in the range 1..255 and matches the HW Config on the S7 side.
Export the SIMOTION as a GSDML via Options → Export GSDML. Import this GSDML into STEP 7 (or TIA Portal) on the S7 side.
Step 2: Configure the S7 Side and Insert the SIMOTION GSD
In the S7 project (example: CPU 319F-3 PN/DP, order number 6ES7318-3FL01-0AB0), open the PROFINET IO system on the PN interface, install the SIMOTION GSD, and drag the SIMOTION as an IO device. Insert the same number of slots with the same lengths as defined in step 1:
| S7 PROFINET slot | Direction (S7 view) | Length | S7 I-address | S7 Q-address |
|---|---|---|---|---|
| Slot 0 (Hoist-1 CW) | Output (S7 → SIMOTION) | 16 bytes | — | 256..271 |
| Slot 1 (Gantry CW) | Output (S7 → SIMOTION) | 16 bytes | — | 272..287 |
| Slot 2 (Trolley CW) | Output (S7 → SIMOTION) | 16 bytes | — | 288..303 |
| Slot 3 (status) | Input (SIMOTION → S7) | 32 bytes | 256..287 | — |
These are physical PROFINET I/O addresses, not the DB addresses that the S7 application uses. Application code must always read/write these addresses with SFC14 (DPRD_DAT) and SFC15 (DPWR_DAT) when consistency is > 1 byte, which is the default for SIMOTION transfer areas.
Step 3: S7 Program — Reading and Writing the Transfer Areas
Create a DB (e.g. DB213) in the S7 that holds the user-meaningful tags. The mapping between the user's DB and the physical PROFINET addresses is performed in OB1 (or a cyclic OB) using SFC14 / SFC15.
DB213 layout (Hoist-1 example)
DATA_BLOCK DB213
TITLE = 'Hoist_1_Interface'
VERSION : 0.1
STRUCT
ControlWord : WORD; // DBW0 -- STW1-style bits
SetpointSpeed : INT; // DBW2 -- n-set, RPM/100
SetpointPos : DINT; // DBW4 -- position, 1 = 0.1 mm
Mode : BYTE; // DBB8 -- 0=manual, 1=auto, 2=jog
EnableBits : BYTE; // DBB9 -- bit0=on, bit1=reset, bit2=home
Reserved : ARRAY[0..5] OF BYTE; // DBB10..DBB15
END_STRUCT;
END_DATA_BLOCK
OB1 — sending to SIMOTION (Hoist-1 control word)
// Slot 0: write 16 bytes to PROFINET address 256..271 (Hoist-1 CW)
CALL SFC15 // DPWR_DAT
LADDR := W#16#100 // 256 decimal = 0x100 (Q-address start of slot 0)
RECORD := P#DB213.DBX0 BYTE 16
RET_VAL:= MW100
// Optional: check for errors
L MW100
L 0
<>I
S M101.0 // SFC15 error flag, latch into DB213 enable bits later
The RECORD pointer P#DB213.DBX0 BYTE 16 covers DBW0..DBW14 which is the ControlWord (DBW0), SetpointSpeed (DBW2), SetpointPos (DBW4..DBW7), Mode (DBB8), EnableBits (DBB9), and 6 bytes of reserved padding to keep the slot consistent at 16 bytes.
OB1 — reading status from SIMOTION
// Slot 3: read 32 bytes from PROFINET address 256..287
CALL SFC14 // DPRD_DAT
LADDR := W#16#100 // 256 decimal = 0x100 (I-address start of slot 3)
RET_VAL:= MW102
RECORD := P#DB214.DBX0 BYTE 32
DB214 should be defined to mirror the 32-byte status block. The first 8 bytes typically hold a StatusWord (mirroring the S7 ControlWord bits), ActualSpeed (INT, RPM/100), and ActualPosition (DINT, 0.1 mm). The remaining 24 bytes are available for diagnostics, error code, warning bits, axis state, and lifetime counters.
Step 4: SIMOTION Program — Bridging Transfer Area to Axis Technology Object
SIMOTION is programmed in one of three languages: LAD/FBD, ST (Structured Text), or MCC (Motion Control Chart). ST is the most common for I/O bridging because the assignment to technology object commands is direct. Create a program organization unit (POU) in the BackgroundTask or in a CyclicTask tied to the PROFINET send clock (default 1 ms; 2 ms is more common in practice for I-Device links).
ST example: Hoist-1 axis command assignment
// Hoist_1 interface -- mapping incoming control word from %IB0..%IB15
// into the technology object Hoist_1 (TO_ServoAxis)
VAR
cwHoist1 : WORD; // local copy of %IB0..%IB1
nSetHoist : INT; // local copy of %IB2..%IB3
posSetHoist: DINT; // local copy of %IB4..%IB7
bModeAuto : BOOL; // bit from %IB8.0
END_VAR
// 1) snapshot the transfer area into local vars (atomic read of a WORD is fine;
// for DINT do it as a single move; PROFINET updates the entire slot in 1 cycle)
cwHoist1 := %IW0; // bytes 0..1 from the I-Device slot
nSetHoist := %IW2; // bytes 2..3
posSetHoist := %ID4; // bytes 4..7 (DINT)
bModeAuto := %IX8.0;
// 2) hoist enable logic
IF (cwHoist1 AND W#16#0001) <> 0 AND bModeAuto THEN
_enable(Hoist_1); // axis enable
ELSE
_disable(Hoist_1);
END_IF;
// 3) reset
IF (cwHoist1 AND W#16#0002) <> 0 THEN
_resetAxis(Hoist_1); // acknowledge error
END_IF;
// 4) speed / position command
IF (cwHoist1 AND W#16#0004) <> 0 THEN
_move(Hoist_1, posSetHoist); // absolute positioning
ELSE
_run(Hoist_1, nSetHoist); // open-loop speed mode (signed RPM/100)
END_IF;
// 5) send status back: write local I/O before PROFINET ships it
%QB0 := 16#0FFF; // ready + enabled + at-standstill
%QW2 := INT_TO_WORD(_actualSpeed(Hoist_1));
%QD4 := _actualPosition(Hoist_1); // 0.1 mm
%QB8 := _axisState(Hoist_1); // state enum
%QB9 := _axisErrorState(Hoist_1); // 0=no error
The Hoist-1 control word bits are interpreted by the SIMOTION program, not by a drive. The mapping table on the SIMOTION side is application-specific, but a typical 16-bit layout for a crane Hoist axis is:
| Bit | Function |
|---|---|
| 0 | Axis ON / OFF |
| 1 | Reset (acknowledge error) |
| 2 | Positioning (1) / Speed (0) |
| 3 | Jog + (only in speed mode) |
| 4 | Jog − (only in speed mode) |
| 5 | Hold (freeze setpoint) |
| 6 | Home start |
| 7 | Brake release override (engineering only) |
| 8 | Limit switch 1 acknowledge |
| 9 | Limit switch 2 acknowledge |
| 10..15 | Reserved / application-specific |
The Gantry and Trolley axes use the same pattern on slots 1 and 2 respectively, just with different axis technology object names and different bit assignments. The Gantry axis typically has synchronization bits; the Trolley axis has creep speed and cross-travel limit bits.
Step 5: Downloading and Going Online
- Compile and download the SIMOTION project (target system flash + RAM). On the SIMOTION, the new I-Device configuration becomes active only after a power cycle or a PROFINET reconfiguration triggered from SCOUT.
- Compile and download the S7 project. The PROFINET IO system must come up; the SIMOTION device should appear as a "partner" with green LEDs on the S7 CPU's PN port.
- In SCOUT, go online and open the I/O Diagnostics view. Confirm that all configured slots show OK and that cyclic data is updating (force a value in DB213.DBW0 and watch %IB0 in SCOUT).
- In STEP 7, place a VAT (variable table) on DB213 and DB214. Force a value, then run the SIMOTION program in single-step or with a watch table of axis commands to confirm motion.
Verification Checklist
| Check | Method | Pass criteria |
|---|---|---|
| PROFINET link up | PN port LEDs on both controllers | Green link, no flashing diagnostic |
| SIMOTION visible as PROFINET device | STEP 7 → HW Config → Online → Accessible nodes | SIMOTION PROFINET name resolved, no error LED |
| SFC15 RET_VAL = 0 | VAT on MW100 | Always 0 in cyclic OB1 |
| SFC14 RET_VAL = 0 | VAT on MW102 | Always 0 in cyclic OB1 |
| DB213.DBW0 echoed into %IB0..%IB1 | VAT on DB213 + SCOUT watch table on %IW0 | Bit pattern matches exactly |
| DB214.DBW0 reflects axis status | VAT on DB214 | Bit 0 ("axis ready") toggles after _enable |
| Axis command response time | Scope trace or SCOUT trace | ≤ 2 PROFINET send clocks (typical 2…4 ms at 1 ms clock) |
| Cyclic jitter | SCOUT trace of send clock | < 50 µs on PROFINET IRT, < 1 ms on RT |
Error Codes and Diagnostics
| SFC14/SFC15 RET_VAL | Meaning | Remediation |
|---|---|---|
| W#16#0000 | OK | — |
| W#16#8090 | Address (LADDR) invalid or slot not configured | Verify HW Config addresses; the S7 Q/I addresses of the SIMOTION slots must match the LADDR parameter exactly |
| W#16#8092 | SFC invoked in OB that is not allowed (e.g. SFC15 in OB100) | Move the call to OB1, OB35, or a watchdog OB |
| W#16#8093 | DP/PN device has not yet reported | Wait for the SIMOTION to come online; check cabling |
| W#16#80A0..80A3 | Access error / type conflict / data length mismatch | RECORD length must match the configured slot length exactly; RECORD must be of type BYTE/BOOL/CHAR/array of those |
| W#16#80B0..80B2 | PROFINET slot consistency error | Re-check consistency setting of the slot; if "All" was selected, do not use direct I/O access (PEW/PAB), only SFC14/15 |
PROFINET diagnostic interrupts that frequently appear in this scenario:
- 0x001C — Station failure: SIMOTION name or IP mismatch; check topology in STEP 7.
- 0x001E — Station ok: recovery from a previous failure.
- 0x0103 — Manufacturer-specific diagnostic: the SIMOTION's PN stack detected a slot mismatch; verify that the SCOUT-exported GSDML version matches the firmware in the field.
- 0x8000..0x8FFF: extended channel diagnostic; the SIMOTION's slot-level diagnostic buffer (in SCOUT → Diagnostics → PROFINET) gives the human-readable cause.
Troubleshooting Matrix
| Symptom | Likely cause | Fix |
|---|---|---|
| No PROFINET link between S7 and SIMOTION | Wrong device name on SIMOTION, or topology ports miswired | Assign the SIMOTION PROFINET name from SCOUT (Online → Accessible nodes) and check that the S7 port assignments match the physical cabling |
| Link up, SFC15 RET_VAL = 0, but axis does not move | The SIMOTION program is not copying %IB0..%IB15 into the technology object commands | Verify the POU runs in the right task; if the transfer area is in Slot 0 (1 ms send clock) but the SIMOTION POU is in a 4 ms task, the data is still arriving but the command is being applied with 3 ms of jitter; confirm with SCOUT trace |
| Position command ignored, speed works | Bit 2 of the control word is 0 | The S7 side sets DB213.DBX0.2 = TRUE for positioning; if the SIMOTION reads %IX0.2 instead of %IX2.0 the mapping is off |
| SFC14 RET_VAL = W#16#80A0 | RECORD length mismatch (e.g. 16 bytes for a 32-byte slot) | Adjust RECORD pointer to P#DB214.DBX0 BYTE 32
|
| Axis moves but DB214 does not update | The SIMOTION program never writes %QB0..%QB31 | Confirm with a watch table on %QB0; if it shows the expected value but DB214 is zero, the S7 OB is not being executed or SFC14 is not called |
| One of three axes (Hoist, Gantry, Trolley) misbehaves, the others are fine | Bit offset collision in the same 16-byte slot | Keep each axis in its own slot; do not multiplex bits across axes in the same transfer area |
| Data is received but values are torn (e.g. half-updated position) | SFC14 not used; direct PEW access on a "Total length" consistency slot | Switch to SFC14/SFC15; verify consistency in HW Config |
| SFC15 RET_VAL = W#16#8093, intermittent | SIMOTION in stop / startup; PN stack still synchronizing | Add a startup delay; check SIMOTION's RUN state |
| Compilation warning "inconsistent slot configuration" | SCOUT and STEP 7 projects drifted after a firmware upgrade | Re-export GSDML from SCOUT, re-import into STEP 7, recompile both |
Performance and Timing Notes
The latency from a S7 L DB213.DBW0 / T DB213.DBW0 followed by SFC15 to the corresponding SIMOTION %IB0 change is bounded by the PROFINET send clock (Tsnd) plus one full cycle of the SIMOTION task that polls the I/O. With typical settings of Tsnd = 1 ms and the SIMOTION POU in a 1 ms IPO/IPOSyncTask, end-to-end latency is 1.5 to 2.5 ms. With Tsnd = 2 ms (recommended for I-Device with cable lengths > 50 m) and a 4 ms SIMOTION task, latency rises to 5…6 ms.
If the application needs IRT (isochronous real-time) — for example, position-controlled gantry synchronization with < 1 ms jitter — the PROFINET interface on both controllers must be configured for IRT, the SIMOTION POU must run in the IPO_SynchronousTask, and the SIMOTION PROFINET stack firmware must be V2.6 or later. The S7 side is straightforward in HW Config: set the IO device to "IRT" mode in the PROFINET interface properties.
Migrating from PROFIBUS DP Slave to PROFINET I-Device
Many existing crane installations use PROFIBUS DP with the SIMOTION configured as a DP slave. The SFC14 / SFC15 calls in OB1 are identical; only the addressing changes (PROFIBUS diagnostic addresses 1023+ on the master; PROFINET slot I/O addresses on the PN interface). To migrate:
- Export the PROFIBUS GSD from SCOUT; keep it for reference.
- In SCOUT, change the SIMOTION interface to PROFINET and re-define the transfer areas with the same byte counts.
- Re-export the PROFINET GSDML.
- In STEP 7, replace the DP slave entry with the PROFINET IO device entry, keeping the same S7 application code; the only edit is the LADDR parameters of SFC14/15.
Field-Commissioning Caveats
- Always set a unique PROFINET device name on the SIMOTION. Two SIMOTIONs on the same subnet with the default "simotion" name will produce intermittent station-failure diagnostics.
- If the SIMOTION is also acting as a PROFINET controller to its own distributed I/O (e.g. ET 200SP on the same subnet), the I-Device transfer areas must use a dedicated port range; do not overlap the controller and I-Device slot ranges.
- PROFINET send clocks must be harmonized. S7 CPUs of the 31x family default to 1 ms; the SIMOTION D4x5-2 family supports 0.25/0.5/1/2/4 ms. Choose the highest common value accepted by both.
- For F-CPU configurations (CPU 319F-3 PN/DP), the safety-related PROFINET profile (PROFIsafe) is independent of the I-Device transfer areas. Do not put safety data into the I-Device transfer area; use a separate PROFIsafe slot. Mixing them violates SIL 2/3 architecture rules.
Frequently Asked Questions
Does SIMOTION have a control word / status word like a SINAMICS drive?
No. SIMOTION is a PLC with a user program, not a drive with a fixed PROFIdrive profile. The S7 partner sends raw bytes/words to a configured PROFINET slot, and the SIMOTION program must interpret them and call _enable, _move, _run on the technology object. The reverse path is the same: the SIMOTION program writes bytes back to its transfer area.
Why are SFC14 and SFC15 mandatory, and can I read with L PEW instead?
PROFINET slots on an I-Device are configured with a "consistency" of All when they exceed 4 bytes. Reading the slot with L PEW on the S7 side and the corresponding %IW on the SIMOTION side can return torn data if the second byte of a word changes between the two L PEW instructions. SFC14/15 perform the read/write in one atomic operation against the slot. Direct I/O access is acceptable only for slots of 1…4 bytes with "byte" or "word" consistency.
My SFC15 returns W#16#8093 — what does that mean?
The PROFINET device (SIMOTION) has not yet reported to the I/O system, or it has gone offline. Verify that the SIMOTION is in RUN, that the PROFINET name is assigned, and that no topology port error exists on either controller. RET_VAL=8093 typically clears itself once the SIMOTION is reachable; if it persists, check for duplicate PROFINET names or mismatched GSDML versions.
How do I send DB213.DBW36 from a CPU 319F-3 PN/DP to the SIMOTION Hoist-1 axis?
Place DBW36 in the appropriate offset of a transfer DB (for example, make it the SetpointPos field at DBW4 in DB213), and call SFC15 with RECORD = P#DB213.DBX0 BYTE 16 and LADDR set to the Q-address of the SIMOTION's Hoist-1 slot. On the SIMOTION side, the program reads %ID4 and passes it to _move(Hoist_1, ...). The byte order (big-endian on PROFINET, little-endian in S7) is handled automatically by SFC15 and the SIMOTION runtime.
Can I use TIA Portal instead of SIMATIC Manager for this configuration?
Yes, with the SIMOTION V5.4+ HSP installed, TIA Portal can host both the S7-1500/ET 200SP and the SIMOTION in the same project. The PROFINET I-Device configuration and the SFC14/15 (or rather, the TIA Portal "DPRD_DAT / DPWR_DAT" instructions) calls are functionally identical. Mixed setups — S7-300 in SIMATIC Manager plus SIMOTION in TIA Portal — are also supported via GSDML import/export.