1. Overview: MM420 USS Communication with S7-200 Port 0
The Siemens MICROMASTER 420 (MM420) is a legacy 0.12 kW to 11 kW variable frequency drive that communicates over the Universal Serial Interface Protocol (USS) using a master-slave model. The SIMATIC S7-200 family, while predating the S7-1200, is still widely deployed and offers native USS support through Port 0 (RS485) and Port 1 (RS485/RS232), driven by the USS instruction library (USS_INIT, USS_CTRL, USS_RPM_x, USS_WPM_x).
A recurring field problem is the appearance of USS Error Code 3 for one or two PLC scans while the drive is running. The error coincides with the drive running bit clearing and the speed setpoint latching to zero, then both restoring on the next scan. From the operator's perspective this looks like a flicker, but on the wire it represents corrupted USS frames returning from the drive. The most common root cause in installations with cable runs below 3 metres is RS485 termination mismatch, combined with the default P2014[0] = 0 telegram-off-time behaviour and elevated 9600 baud signalling that exposes termination-induced reflections.
2. USS Protocol Technical Foundation
USS is a Siemens-proprietary serial protocol documented in the Siemens USS Protocol Reference. A USS telegram consists of:
- STX (0x02) start byte
- LGE length byte (telegram length excluding STX and BCC)
- ADR slave address (bit 5 = broadcast, bit 6 = mirror, bits 0-4 = address 0-31)
-
PKW parameter channel (parameter ID, index, value) — variable or fixed length set by
P2013 -
PZD process data (control word, status word, setpoint, actual value) — length set by
P2012 - BCC block check character (XOR of all bytes from ADR to last data byte)
Each transmitted byte carries 1 start bit, 8 data bits, an optional parity bit (USS default is even parity), and 1 stop bit, giving a 10-bit or 11-bit character. At 9600 baud one character takes 10 bits / 9600 bps = 1.0417 ms. A typical 14-byte telegram with default PZD = 2 and PKW = 4 occupies roughly 14 chars × 1.0417 ms ≈ 14.6 ms on the wire.
USS telegram time calculation
For an installation using N drives polled round-robin at baud B with average telegram length L bytes:
T_cycle (ms) = (L × N × (10 + parity)) / B × 1000
With L = 14, N = 1, B = 9600, parity enabled: T_cycle ≈ 14.58 ms. The drive will tolerate a telegram-off time (P2014) anywhere between zero (no monitoring) and a value larger than the worst observed inter-telegram gap. Setting P2014 below this value produces intermittent F0072 faults.
3. MM420 Hardware Interfaces and Wiring
The MM420 exposes two relevant serial paths:
- RS485 terminals 29 and 30 on the control board — terminals 29 = P+ (data+), 30 = N− (data−). This is the recommended path for USS integration with the S7-200.
- BOP / RS232 link via the front-panel port using the PC-to-drive RS232 cable. Used for commissioning and for single-master ASCII control, but is not the recommended path for S7-200 USS at 9600 baud with multi-drop because the RS232 driver is single-ended.
Wiring topology to S7-200 Port 0
The S7-200 Port 0 is a half-duplex RS485 port on the DB9 connector at pins 3 (B / data+) and 8 (A / data−), with pin 5 as logic ground and pin 1 as chassis/shield. The standard Siemens PC/PPI cable (6ES7 901-3CB30-0XA0) is not suitable for USS at 9600 baud; instead use a shielded two-wire twisted pair with the shield bonded to chassis ground at one end only (typically the PLC end).
Per the Siemens USS example configuration in TIA Portal, the shield must be tied to chassis ground or to pin 1 of the 9-pin connector, and the 2-0 V reference of the drive terminal block must also be bonded to chassis ground. Failure to bond both ends of the cable reference introduces common-mode voltages that the RS485 receiver interprets as parity errors.
Cable specification
| Parameter | Recommended | Maximum |
|---|---|---|
| Conductor | Twisted pair, 24 AWG (0.22 mm²) | 20 AWG |
| Impedance | 100–120 Ω differential | — |
| Capacitance | < 60 pF/m | — |
| Length, MM420 RS485 at 9600 baud | ≤ 1000 m | 1200 m |
| Length, RS232 BOP path | ≤ 3 m | 15 m (de-rated) |
4. S7-200 Port 0 and USS Library Architecture
The S7-200 USS library (instruction library version 2.0 and later) provides five sub-blocks. Only USS_INIT and USS_CTRL are required for closed-loop control; USS_RPM_W and USS_RPM_D are used for parameter read-back, USS_WPM_W and USS_WPM_D for parameter writes.
USS_INIT inputs
| Input | Operand type | Valid values | Description |
|---|---|---|---|
| Mode | BYTE / VB | 0 = PPI/FULL-DUPLEX (RS232), 1 = FULL-DUPLEX (RS485 4-wire), 2 = PPI/FREE PORT (RS485 2-wire, USS typical) | Selects the port mode. For USS on Port 0 use 1 (RS485 full duplex) or 2 (free-port USS). |
| Baud | BYTE / VB | 9600, 19200 | USS library supports 9600 and 19200 only. |
| Parity | BYTE / VB | 0 = No parity, 1 = Even parity, 2 = Odd parity | USS default and MM420 default is even parity (1). |
| Port | BYTE / VB | 0 or 1 | S7-200 port. |
| Done | BOOL | Output | Set when initialization completes successfully. |
| Error | BYTE / VB | Output | Non-zero only during the scan in which Done transitions 0 → 1. See §6. |
| Active | BOOL | Output | Indicates port is reserved for USS protocol. |
USS_CTRL inputs and outputs
| Pin | Direction | Description |
|---|---|---|
| RUN / STOP | BOOL in | 1 = start, 0 = stop (mapped to drive control word bit 0) |
| Speed_SP | REAL in | Speed setpoint, normalised 0.0–100.0 % of P2000 reference |
| Drive | BYTE in | USS address (0–31) |
| Resp_R | BOOL out | Set when drive has acknowledged the command |
| Error | BYTE out | Communication error code from this drive's last transaction |
| Drive_Run / Drive_Dir | BOOL out | Echo of drive status word |
| Speed_PV | REAL out | Actual speed, normalised to P2000 |
The Error byte from USS_CTRL is the field that displays the transient 3 in the reported problem. When this byte becomes non-zero, the block internally latches the running bit and speed setpoint to 0 for one scan, which matches the user's symptom.
5. MM420 USS Parameter Map (P2010 – P2014)
The MM420 parameter set is firmware-dependent; the values below apply to firmware V1.5x through V3.2x (the range typically encountered in service). All parameters have an index [0] for the COM link on terminals 29/30.
| Parameter | Name | Default | Field | Meaning for USS on 29/30 |
|---|---|---|---|---|
| P2010[0] | USS baud rate | 6 | 4 = 2400, 5 = 4800, 6 = 9600, 7 = 19200, 8 = 38400, 9 = 57600, 10 = 76800, 11 = 93750, 12 = 115200 | Must match S7-200 USS_INIT Baud input (9600 or 19200). |
| P2011[0] | USS node address | 0 | 0–31 | Address 0 = broadcast (no acknowledge). Each drive must have a unique address 1–31. |
| P2012[0] | USS PZD length | 2 | 0–8 | Number of 16-bit PZD words. MM420 supports 2 (control + setpoint) and 4. |
| P2013[0] | USS PKW length | 127 | 0, 3, 4, 127 | 127 = variable length, 0 = no PKW, 3 = 1 word, 4 = 1 double word. S7-200 USS library expects 4. |
| P2014[0] | USS telegram off time | 0 | 0–65535 ms | Time after which drive faults F0072 if no valid telegram is received. 0 = disabled. Recommended: 5×T_cycle, see §11. |
| P0700[0] | Command source | 2 | 0–6 | 5 = USS on COM link (29/30). Required so the drive accepts USS control word. |
| P1000[0] | Setpoint source | 2 | 0–7 | 5 = USS on COM link. Required so the drive accepts USS speed setpoint. |
6. USS_INIT and USS_CTRL Error Code Reference
The two error fields originate from different states of the communication stack:
| Code | Source | Meaning |
|---|---|---|
| 0 | Both | No error. |
| 1 | USS_INIT | Drive address out of range (must be 0–31, in USS_CTRL it must match P2011). |
| 2 | USS_INIT | Baud rate selection invalid (only 9600 or 19200 supported by the library). |
| 3 | USS_INIT or USS_CTRL | Parity selection invalid or parity error detected in a received response frame. |
| 4 | USS_INIT | Mode selection invalid (must be 1 or 2 for RS485 USS). |
| 5 | USS_INIT | Time-out selection invalid (USS_CTRL timeout input out of range). |
| 6 | USS_INIT | Channel already in use by another USS port. |
| 7 | USS_INIT | Port busy / cannot allocate resources. |
| 16–31 | USS_CTRL | Mirror of the drive's own status word error bits. |
7. Error 3 (Parity) Deep Dive: Causes and Symptoms
A parity error detected by the S7-200 serial port means that at least one of the ten or eleven bits per received character did not satisfy the parity rule (USS defaults to even parity). The MM420 generates an even-parity character; if the receiver sees an odd number of 1-bits, bit 8 of the character register triggers the parity interrupt. Common root causes:
- RS485 termination mismatch. The cable impedance does not match the 120 Ω terminator at the receiver, causing the rising/falling edge of the stop bit to ring and cross the sampling threshold of the UART. RS485 UARTS sample the stop bit near the centre; ringing crosses that threshold and produces parity errors even though the data is otherwise intact.
- Common-mode voltage exceeding RS485 receiver range. RS485 receivers tolerate ±7 V common mode; if the drive's 0V reference is not bonded to the PLC's 0V (pin 5 of DB9), and the cable shield is floating or bonded at both ends creating a ground loop, the differential signal rides on a DC offset that pushes the receiver input out of spec.
- EMI from VFD output cables. The MM420 output cable carries dV/dt up to several kV/µs. If the USS cable runs parallel to motor cable without 200 mm separation, capacitive coupling injects common-mode noise that flips parity bits.
- Excessive stub length or T-tap. USS daisy-chain stubs should be ≤ 1 m. Long stubs create impedance discontinuities.
-
Incorrect baud rate mismatch. P2010 = 9600 in the drive and
USS_INIT Baud = 19200in the PLC. Sampling at the wrong baud produces systematic parity errors, usually constant rather than one-scan. - Wrong parity setting. MM420 default is even parity; if the PLC is set to odd or no parity, every character fails. Typically constant, not transient.
8. The Transient Error Mechanism: One-Scan Anomaly
The error-3 flicker that drops the running bit and speed reference for exactly one scan is caused by the USS_CTRL block's internal handling of Error ≠ 0:
- PLC polls drive N at scan T.
- Drive response arrives but its parity bit is corrupted.
- UART flags parity error, the PLC's USS driver increments the drive's
Errorbyte to 3 and freezesResp_R = 0,RUN/STOPinternal echo = 0,Speed_SPinternal echo = 0 for this scan. - The next scan polls drive N again; the corrupted bit was a transient reflection; this response is valid;
Errorclears to 0,Resp_R = 1, running bit and speed setpoint restore.
Because P2014[0] = 0 in the MM420 default, the drive never sees a telegram-off-time violation, so it does not trip F0072. This produces the benign-looking flicker rather than a hard fault, but it is still a physical-layer integrity problem that should be eliminated.
9. Cable Length, Termination, and Signal Integrity
RS485 termination follows the rule: install 120 Ω across the differential pair at the two physical ends of the bus, and nowhere else. The S7-200 CPU 224 / CPU 226 Port 0 has a built-in 120 Ω terminator activated by switch SW2 (DIP position 1 for Port 0, position 2 for Port 1). The MM420 RS485 terminals 29/30 have an internal pull-up/pull-down bias network but no integrated 120 Ω; termination on the drive side is provided either by an external resistor across 29–30 or by setting the bus terminator DIP switch on certain MM420 control board variants (early V1.x boards have no switch — install a discrete 120 Ω 1/4 W across 29/30).
The 3-metre rule
For cable lengths ≤ 3 m, the round-trip propagation delay of a typical PVC-jacketed 24 AWG twisted pair is roughly 2 × 3 m / (2 × 10^8 m/s × 0.66 c) ≈ 15 ns. At 9600 baud, the bit period is 104 µs. The reflection energy has decayed to under 5 % well before the UART samples the stop bit, so termination is functionally optional. However, both ends being terminated (S7-200 SW2 ON + drive-end 120 Ω) loads the differential pair with 60 Ω DC, which lowers the high-state voltage margin on some MM420 RS485 driver outputs. Removing one terminator — typically the drive-end one on cables ≤ 3 m — eliminates the loading while leaving the small reflection attenuated naturally by cable loss.
Termination rule of thumb
| Cable length | Termination |
|---|---|
| ≤ 3 m | One terminator only, at the S7-200 end. Drive-end terminator disabled. |
| 3–30 m | One terminator only, at the far end from the S7-200 (drive end). |
| 30–300 m | Both ends terminated, S7-200 SW2 ON, drive-end 120 Ω installed. |
| > 300 m | Use repeater (e.g. 6SE7090-0XX84-2FK0) or drop baud to 4800 to extend the bit period and improve noise margin. |
Inline topology diagram
10. Step-by-Step Diagnostic Procedure
-
Capture the scan-time log. In Micro/WIN, add a VW that latches the value of
USS_CTRL Errorat every scan with a 0.1 s timestamp. Confirm the error is 3 and that it appears for exactly one or two scans before clearing. -
Verify parity and baud settings match. PLC
USS_INIT Parity = 1(even). Drive P2010[0] = 6 (9600) or 7 (19200). Document the values on the drive label. - Inspect the cable shield bonding. Shield at PLC DB9 pin 1 only; drive-end terminal 2-0 V bonded to chassis ground at one point. Floating shields, double-bonded shields, and un-bonded drive reference are the three most common defects.
- Measure cable length. If < 3 m and both ends are terminated, remove the drive-end 120 Ω (open the MM420 control board DIP or extract the external resistor). This is the documented field cure for the reported fault.
- Check stub length. If wiring is daisy-chained with T-taps, shorten each tap to < 1 m and ensure the main bus runs point-to-point between PLC and the last drive.
- Check separation from motor cable. Minimum 200 mm parallel separation, cross at 90°. Use shielded VFD output cable with both ends of the motor-cable shield bonded to motor frame and drive PE.
-
Configure P2014[0] to a safe value. Set
P2014[0] = 5 × T_cycle. For 9600 baud with one drive, P2014 = 75 ms. This produces an F0072 if the physical layer ever fails hard, converting a silent flicker into a visible fault. - Re-arm P0700[0] and P1000[0]. Set both to 5 (USS on COM link) and execute a power cycle on the drive so the parameters are non-volatile-saved.
-
Monitor continuously for 24 hours. Add a counter that increments every time
Erroris non-zero. Target: zero increments.
11. Telegram Timing and P2014 Off-Time Optimization
Setting P2014[0] = 0 (default) means the drive never times out the USS link, masking intermittent errors. Setting it too low causes nuisance F0072 faults. The minimum safe value depends on:
- Baud rate B (bps)
- Number of polled drives N
- Telegram length L bytes (PKW + PZD)
- PLC scan time T_scan (s)
T_cycle = (L × 10 × N) / B + 2 × T_scan
Recommended: P2014 = 5 × T_cycle, rounded up to the next 10 ms
Worked example for a 1-drive system at 9600 baud with PKW = 4, PZD = 2 (L = 14 bytes) and T_scan = 30 ms:
T_cycle = (14 × 10 × 1) / 9600 + 2 × 0.030 = 0.0146 + 0.060 = 0.0746 s ≈ 75 ms
P2014 = 5 × 75 ms = 375 ms, round up to 380 ms
For a 4-drive system at 9600 baud:
T_cycle = (14 × 10 × 4) / 9600 + 0.060 = 0.0583 + 0.060 = 0.118 s ≈ 120 ms
P2014 = 5 × 120 = 600 ms
12. Verification and Commissioning Checklist
| Item | Pass criteria |
|---|---|
| USS_CTRL Error byte | Remains 0 over 24 h. |
| Drive RUN/STOP echo | Matches command every scan, no flicker. |
| Drive status word | Bit 6 (enable) = 1, bit 2 (running) = 1 when commanded. |
| Drive parameter P2014 | 5 × T_cycle ms, non-zero, saved non-volatile. |
| Cable shield continuity | < 1 Ω from DB9 pin 1 to drive chassis ground at one end only. |
| Common-mode voltage | < ±2 V between PLC pin 5 and drive terminal 2-0 V with drive running. |
| Cable separation from motor cable | ≥ 200 mm parallel run. |
| Bus termination | One 120 Ω at one physical end only (per §9 table). |
| F0072 behaviour | If cable is unplugged while P2014 > 0, drive faults F0072 within 1 s. |
13. Field-Tested Troubleshooting Matrix
| Symptom | Likely cause | Action |
|---|---|---|
| Error 3 every scan, drive not responding | Baud or parity mismatch between PLC and drive | Set P2010[0] = 6 (9600) and USS_INIT Parity = 1 (even). |
| Error 3 flicker 1–2 scans, drive continues | Cable < 3 m with both ends terminated | Disable drive-end 120 Ω. |
| Error 3 only when VFD output is loaded | Common-mode noise from motor cable | Increase USS-to-motor cable separation; check motor-cable shield bonding. |
| Error 3 intermittent with no load on drive | Floating cable shield or missing 0 V bond | Bond shield at PLC DB9 pin 1; bond drive terminal 2-0 V to chassis at one point. |
| Error 3 and F0072 simultaneously | P2014 too low for T_cycle | Increase P2014[0] to 5 × T_cycle. |
| Error 16–31, no parity error | Drive status word fault bit set | Read drive r0947 for fault code, clear fault, resume USS. |
| Error 1 on first scan | USS_CTRL Drive input ≠ P2011 address | Match USS_CTRL Drive to P2011[0] in the parameter block. |
| Error 6 on first scan | Port already configured by another USS block | Use only one USS_INIT per port; check for free-port instructions elsewhere. |
14. Frequently Asked Questions
Why does Error 3 appear for exactly one scan and then disappear?
USS_CTRL processes the corrupted response, sets its Error byte to 3, and freezes RUN/STOP and Speed_SP to 0 for that one scan. The next scan re-polls the drive, the parity corruption was a transient reflection on the RS485 bus, and the new response is valid — Error clears to 0. The flicker is the symptom of an RS485 physical-layer defect, typically termination mismatch on cables under 3 m.
Should the drive-end 120 Ω terminator be installed or removed?
For cable lengths under 3 m, install the terminator only at the S7-200 Port 0 end (SW2 position 1 ON on a CPU 224/226) and remove the drive-end 120 Ω. For 3–300 m, install the terminator at both physical ends. For lengths over 300 m, drop the baud to 4800 or insert an RS485 repeater.
What value should P2014[0] (USS telegram off time) be set to?
Set P2014[0] to five times the worst-case poll cycle, calculated as (L × 10 × N) / B + 2 × T_scan, rounded up to the next 10 ms. For a single MM420 at 9600 baud with a 30 ms PLC scan time, P2014[0] ≈ 380 ms. Leaving P2014 at the default 0 disables monitoring and silently masks intermittent parity errors.
Does the MM420 need P0700 and P1000 changed for USS control?
Yes. Set P0700[0] = 5 (USS on COM link) and P1000[0] = 5 (USS setpoint on COM link) so the drive accepts the control word and speed reference from the USS telegram. With the defaults of 2 (terminal control), the drive receives the telegram but ignores its contents and F0072 never trips even when the cable is unplugged.
What is the maximum cable length for USS at 9600 baud between an S7-200 and an MM420?
RS485 supports up to 1200 m at reduced baud rates. For 9600 baud on shielded 24 AWG twisted pair with correct termination, 1000 m is the practical maximum. For 19200 baud the maximum is roughly 500 m. Shorter cables under 3 m with both ends terminated produce reflections that cause parity errors — remove the drive-end terminator in this case.
Why does the running bit clear when Error 3 fires?
USS_CTRL considers the drive's response invalid when Error is non-zero and clears its internal RUN/STOP echo and Speed_SP echo to 0 for that scan. The actual drive keeps running because P2014[0] = 0 (or, if armed, has not yet exceeded the off time), but the PLC sees the drive as stopped and stops sending the run command until the next valid response arrives.
Does using free-port mode in USS_INIT affect Error 3?
No — free-port mode (Mode = 2) and RS485 full-duplex mode (Mode = 1) both rely on the same UART parity-check logic. The parity error appears at the physical layer regardless of the mode parameter. Mode-related errors are coded 4, not 3.