Implementing USS Communication: S7-400 CPU to MM4 Drives via CP441
The Siemens SIMATIC S7-400 family does not ship with pre-built USS function blocks designed for the CP441 point-to-point communication module. Engineers targeting the legacy MICROMASTER 4 (MM4) drive family must therefore construct the USS telegram inside STEP 7 manually, or substitute a Profibus DP option module on the drive to remove the manual encoding burden entirely. This reference documents the USS telegram structure, the MM4 parameter set required to expose the drive on an RS-485 multi-drop link, the CP441 hardware configuration, and a working S7-400 program skeleton for both control word and setpoint transmission.
USS Protocol Fundamentals
USS (Universal Serial Interface protocol) is Siemens' proprietary, RS-485-based, half-duplex master/slave protocol used predominantly with older drive families such as SIMOREG, SIMOVERT, MICROMASTER, and SINAMICS V20. The protocol uses 11-bit characters (1 start, 8 data, 1 even parity, 1 stop) and an asynchronous serial frame. A single master (the S7 PLC) polls up to 32 slaves on one bus segment, addressing each by a configurable node number.
| Parameter | MM4 Setting | Description |
|---|---|---|
| P2010[0] | 6 (9600 baud) | USS baud rate; valid values 4–8 (2400–38400) |
| P2011[0] | 1 (slave address) | USS node address, valid 1–30 broadcast 31 |
| P2012[0] | 2 (PZD length) | Length of process data in words |
| P2013[0] | 127 (PKE length) | Length of parameter channel |
| P2014[0] | 0 (no telegram timeout) | USS telegram monitoring time in ms |
| P0700 | 5 (USS on COM link) | Command source selection |
| P1000 | 5 (USS setpoint) | Frequency setpoint source |
USS Telegram Structure for MM4
The MM4 expects a 14-byte payload enclosed in a USS frame. The full transmission unit is: STX, LGE, ADR, payload, BCC. The field report lists the canonical layout; expanded with byte-level encoding below.
| Byte | Field | Meaning | MM4 Encoding |
|---|---|---|---|
| 1 | STX | Start of message | 0x02 (always) |
| 2 | LGE | Length of payload in bytes | 0x0C (12) for PKE+IND+PWE+2 PZD |
| 3 | ADR | Slave address (bits 0–4) + broadcast bit | 0x01 (drive 1) … 0x1F (broadcast) |
| 4–5 | PKE | Parameter identifier | Hi: AK + SPM; Lo: PNU |
| 6–7 | IND | Index word for array parameters | 0x0000 for non-array params |
| 8–11 | PWE | Parameter value (32-bit, word-swapped) | Hi word first, swapped on MM4 |
| 12–13 | PZD1 | Control word 1 (STW1) | 0x047E to start, 0x047F to enable |
| 14–15 | PZD2 | Main setpoint (HSW) | 0x4000 = 100% (4000h normalized) |
| 16 | BCC | XOR checksum of ADR through last payload byte | Calculated, not transmitted in some profiles |
Control Word 1 (STW1) Bit Map
| Bit | Value 0 | Value 1 |
|---|---|---|
| 0 | OFF1 (coast to stop) | ON (ready) |
| 1 | OFF2 (pulse inhibit) | No coast stop |
| 2 | OFF3 (quick stop) | No quick stop |
| 3 | Inhibit operation | Enable operation |
| 4 | Inhibit ramp generator | Enable ramp generator |
| 5 | Stop ramp generator | Start ramp generator |
| 6 | Inhibit setpoint | Enable setpoint |
| 7 | Fault acknowledge = 0 | Fault acknowledge on 0→1 edge |
| 8–9 | Reserved | |
| 10 | PLC not active | PLC active (control from PLC) |
| 11–15 | Reserved / direction | |
Main Setpoint (HSW) Encoding
The setpoint is normalized to 0x4000 (= 16384 decimal) representing 100% of the configured reference frequency. The actual motor frequency is computed by:
f_out [Hz] = HSW × P2000 × 2^-14 = HSW × P2000 / 16384
For example, with P2000 = 50 Hz and HSW = 0x2000 (8192 decimal), the drive runs at 25 Hz.
CP441 Hardware Configuration
The S7-400 PtP solution is the CP441-1 (6ES7441-1AA00-0AE0) or CP441-2 (6ES7441-2AA00-0AE0) module. CP441-2 supports two independent interfaces (X27 and X28) and provides a loadable protocol driver architecture; CP441-1 supports a single interface.
| Module | Order Number | Interfaces | Notes |
|---|---|---|---|
| CP441-1 | 6ES7441-1AA00-0AE0 | 1 × RS-232C/RS-422/RS-485 | Single-port, loadable drivers |
| CP441-2 | 6ES7441-2AA00-0AE0 | 2 × RS-232C/RS-422/RS-485 | Dual-port, independent drivers |
Hardware Setup Steps
- Insert the CP441 in a free slot of the S7-400 rack. Slot allocation must match the configured slot in STEP 7 HW Config.
- Wire the MM4 RJ-485 terminals (terminals 29 and 30 on MM440; 28 and 29 on MM420) to the CP441 RS-485 port. Use a shielded twisted pair, ground the shield at one end only.
- Add a 120 Ω termination resistor across the bus at each physical end node. The MM4 does not include onboard termination; install a discrete resistor or fit the optional MM4 termination connector.
- Set the CP441 interface to RS-485 half-duplex using the X27/X28 dip switch block on the rear of the module (4-wire / 2-wire selector).
STEP 7 Software Configuration
STEP 7 V5.5 (or STEP 7 Professional in the TIA Portal for S7-400 routing) is the standard engineering tool for S7-400. Although Siemens publishes USS example blocks aimed at the S7-300 / CP340 / CP341, the same protocol driver concept applies to the CP441 family once a loadable driver is assigned to the port.
Assigning the USS Driver to CP441
- In HW Config, double-click the CP441 module and select the interface tab.
- Open "Protocol" and assign the loadable driver. The USS driver for CP441 is supplied with STEP 7 and is selectable as "3964R / USS". If the driver is missing, it must be installed from the STEP 7 optional package "CP PtP Parameter Assignment".
- Configure the baud rate to match the drive (default 9600 8E1 for MM4). Set parity to EVEN.
- Enable RS-485 mode and set the bus termination inside the CP441 parameter dialog.
- Save and download the hardware configuration to the CPU.
Manual USS Implementation in S7-400 (without loadable driver)
STEP 7 STL Send Block (FC100) Skeleton
FUNCTION FC100 : VOID
// FC100 — Build and send a 14-byte USS telegram to MM4
VAR_INPUT
i_DriveAddr : INT; // 1..30, 31 = broadcast
i_ControlWord : WORD; // STW1, e.g. W#16#047E
i_Setpoint : INT; // 0..16384 normalized
END_VAR
VAR_TEMP
t_BCC : BYTE;
t_Index : INT;
END_VAR
VAR
s_TxBuf : ARRAY[0..15] OF BYTE; // STX, LGE, ADR, PKE..PZD2, BCC
END_VAR
BEGIN
s_TxBuf[0] := B#16#02; // STX
s_TxBuf[1] := B#16#0C; // LGE = 12
s_TxBuf[2] := INT_TO_BYTE(i_DriveAddr);
s_TxBuf[3] := B#16#00; // PKE hi = no parameter access
s_TxBuf[4] := B#16#00; // PKE lo
s_TxBuf[5] := B#16#00; // IND hi
s_TxBuf[6] := B#16#00; // IND lo
s_TxBuf[7] := B#16#00; // PWE hi
s_TxBuf[8] := B#16#00; // PWE lo
s_TxBuf[9] := B#16#00; // PWE hi
s_TxBuf[10] := B#16#00; // PWE lo
s_TxBuf[11] := WORD_LO_BYTE(i_ControlWord); // STW1 lo
s_TxBuf[12] := WORD_HI_BYTE(i_ControlWord); // STW1 hi
s_TxBuf[13] := WORD_LO_BYTE(INT_TO_WORD(i_Setpoint));
s_TxBuf[14] := WORD_HI_BYTE(INT_TO_WORD(i_Setpoint));
// BCC = XOR of ADR..last payload byte
t_BCC := B#16#00;
FOR t_Index := 2 TO 14 DO
t_BCC := t_BCC XOR s_TxBuf[t_Index];
END_FOR;
s_TxBuf[15] := t_BCC;
// Hand off to CP441 send FB (e.g. FB9 P_SEND or vendor wrapper)
"CP441_DB".SENDLEN := 16;
// Copy s_TxBuf into the send DB using BLKMOV / SFC83
END_FUNCTION
The receive path mirrors the structure: a 16-byte response contains STW1 status word (ZSW1) and the main actual value (HIW) in bytes 11–14, plus the BCC in byte 15. The receive FB (e.g. FB10 P_RCV) populates a structured DB that the application program scans for drive fault bits (ZSW1 bit 3 = fault, bit 6 = switch-on inhibit).
Driver ES Alternative
The source thread mentions that installing DRIVER ES (Siemens order 6SW1700-5NC00-0AA0) into STEP 7 provides tested function blocks (FCs) and example projects for driving SIMOREG DC-MASTER and MICROMASTER 4 via USS. These blocks abstract the raw byte transmission and present a structured parameter / process-data interface inside the S7 program. DRIVER ES supplies:
- Pre-tested FCs for parameter read / write (PKW channel)
- Pre-tested FCs for process data (PZD) cyclic exchange
- Watchdog and fault reaction handling
- Example S7-300 and S7-400 projects
If the project budget allows, DRIVER ES is the most reliable route for an S7-400 / MM4 USS application.
MM4 Drive Setup
Before any PLC-side telegram is sent, the MM4 must be configured to source its commands from the COM link rather than the terminal strip. The setup sequence is taken from the official Siemens USS setup guide:
- Reset the drive to factory defaults with P0010 = 30, P0970 = 1.
- Set quick commissioning P0010 = 1 and enter motor plate data (P0304–P0311).
- Set command source P0700[0] = 5 (USS on COM link).
- Set setpoint source P1000[0] = 5 (USS setpoint).
- Set the USS address P2011[0] to the unique node number (1–30).
- Set the USS baud rate P2010[0]. Common choices: 6 = 9600, 7 = 19200, 8 = 38400. All nodes on the bus must use the same baud rate.
- Set process data length P2012[0] = 2 and parameter channel length P2013[0] = 127 (variable PKW).
- Set telegram off time P2014[0] > 0 to enable USS watchdog. A typical value is 1000 ms; if no telegram arrives within this window the drive trips F0072.
- Exit quick commissioning with P3900 = 3 to commit settings.
Commissioning Sequence
- Connect a service PC with DriveMonitor or STARTER via the MM4 RS-485 service port or the optional OP panel. Verify parameters P0700, P1000, P2010, P2011, P2012, P2013, P2014 read back as expected.
- Use a serial line analyzer (e.g. COM-bus monitor) tapped across the RS-485 bus to verify that the CP441 is emitting the expected STX / LGE / ADR sequence.
- From the S7-400, send STW1 = 0x047E (Ready to switch on) and observe that the drive enters the "Ready" state. ZSW1 should read 0x0BB1.
- Send STW1 = 0x047F (Operation enabled). The drive should now accept setpoints.
- Apply HSW = 0x2000 (50%) and verify the motor accelerates to ~25 Hz on P2000 = 50 Hz.
- Issue an OFF1 command (STW1 bit 0 = 0) and verify the drive ramps to zero following the configured ramp time in P1121.
- Record the worst-case bus turnaround time. With 32 nodes polling in round-robin and 14-byte payload at 9600 baud, expect ~7 ms per slave and ~225 ms total cycle.
Common Faults and Diagnostics
| Symptom | Likely Cause | Diagnostic Step | Corrective Action |
|---|---|---|---|
| Drive F0072 (USS timeout) | P2014 watchdog too short, or no telegram traffic | Monitor CP441 TX LED and DB send counter | Increase P2014, verify send FC is being called cyclically |
| Drive ignores STW1 | P0700 not set to USS | Read P0700 via BOP | Set P0700[0] = 5 |
| Drive runs at fixed frequency | P1000 not pointing to USS | Read P1000 via BOP | Set P1000[0] = 5 |
| No response from any node | Termination missing, A/B reversed | Check 120 Ω at both ends | Install termination, swap A/B if no echo |
| BCC error on every telegram | XOR calculation wrong, or off-by-one in LGE | Decode response on analyzer | Recompute BCC = XOR of bytes 3–14 |
| Garbled bytes | Baud rate mismatch, parity mismatch | Compare P2010 with CP441 config | Force 9600 8E1 on both sides |
| S7-400 SF on CP441 | Driver not loaded, slot mismatch | Check CP441 diagnostic buffer in STEP 7 | Re-assign USS driver, recompile HW Config |
Profibus Alternative
- Standard S7-400 DP master / slave FCs (SFC14 / SFC15 for consistent data) replace all custom USS encoding.
- Deterministic 12 Mbps cyclic exchange instead of polled 9.6 kbps.
- Standardized PPO telegram types (PPO1 / PPO3 / PPO5) supply pre-defined PKW and PZD structures.
- Diagnostic interrupts for drive faults are wired automatically through Profibus DP-V0 / DP-V1.
The Profibus module is the recommended path for new installations where the customer is open to a hardware upgrade. The MM4 Profibus module supports PPO type 1 (PKW + 2 PZD), which is the typical minimum required to read status and write speed reference.
Siemens Documentation References
- Overview of USS communication (S7-300, S7-400) — STEP 7
- General information on drive setup (S7-300, S7-400) — STEP 7
Frequently Asked Questions
Can I use the standard S7-300 USS example blocks on an S7-400 with CP441?
Not directly. The example blocks published by Siemens for S7-300 target the CP340 and CP341 modules. On an S7-400 with a CP441 the loadable USS driver must be assigned in HW Config, or a custom FC must be written to construct the raw 16-byte USS frame (STX, LGE, ADR, payload, BCC) and post it to the port via FB9 P_SEND / FB10 P_RCV. DRIVER ES provides pre-built FCs that work on S7-400 with CP441.
What is the exact USS telegram structure that the MICROMASTER 4 expects?
The MM4 expects 14 payload bytes plus framing: STX (0x02), LGE (0x0C), ADR (slave address 1–30, 31 = broadcast), then PKE (2 bytes), IND (2 bytes), PWE (4 bytes), PZD1 STW1 (2 bytes), PZD2 HSW (2 bytes), and a trailing BCC byte that is the XOR of bytes ADR through the last PZD byte. LGE must match the configured P2012 / P2013 length settings on the drive.
What MM4 parameters must be set for USS communication to work?
Set P0700[0] = 5 (command source = USS COM link), P1000[0] = 5 (setpoint source = USS), P2010[0] = 6 (9600 baud default), P2011[0] = 1–30 (unique node address), P2012[0] = 2 (PZD length), P2013[0] = 127 (variable PKW), and P2014[0] > 0 (USS watchdog time, typically 1000 ms). After any change, commit with P3900 = 3.
Why does the drive trip with F0072 immediately after start-up?
F0072 indicates a USS telegram timeout. Either the PLC is not sending telegrams at all, the cyclic OB (typically OB1) is not calling the send FC, the CP441 send DB is not loaded, or the watchdog window P2014 is shorter than the actual poll interval. Increase P2014 temporarily to confirm the cause, then tune the polling cycle.
Is it better to use a Profibus option module on the MM4 instead of USS?
For new installations, yes. The Profibus module (6SE6400-1PB00-0AA0) eliminates the need to hand-build USS telegrams, runs at 12 Mbps versus the typical 9.6 kbps of USS, and supports standardized PPO types for direct integration with the S7-400 DP master (SFC14 / SFC15). USS is preferred only when the bus cable already exists, when adding new modules is not possible, or when retrofitting a system where the PLC is already wired for RS-485.