Overview
The Siemens MICROMASTER 440 (MM440) is a general-purpose vector inverter that publishes motor, drive, and command data to a higher-level controller (PLC / DCS / SCADA) over an optional PROFIBUS DP module (catalog number 6SE6400-1PB00-0AA0). The drive does not expose its instantaneous kilowatt figure by default to a CCR (Central Control Room) dashboard. To publish motor shaft kW or cumulative kWh, the engineer must explicitly route a connector output into a PZD (Process Data Word) word through index parameter P2051 and read the resulting word on the Simatic S7 CPU using SFC14 (DPRD_DAT).
This reference covers the connector/binector (BICO) model that drives MM440 signal routing, the exact parameter indices used to publish r0032 (active filtered power, kW) and r0039 (energy consumption, kWh), the NORM_X scaling rules with P2000/P2002/P2003, the S7 receiving code, and field-proven commissioning checks. Companion drives in the MICROMASTER family (MM420, MM430) use the same routing model with minor parameter number differences.
Power, Energy, and Torque: Which MM440 Parameter Do You Actually Want?
Engineers frequently interchange the MM440 power-related parameters because three of them are commonly displayed in similar kW units. Choosing the wrong one yields a value that updates correctly but does not match the meter at the feeder or the trend on the SCADA. The three candidates are:
| Parameter | Quantity | Unit | Type | Range / Resolution | Use Case |
|---|---|---|---|---|---|
r0032 |
Act. filtered power (motor shaft) | kW | Floating-point, filtered | ±200 % of P0305
|
Real-time load share, surge detection, dashboard |
r0039 |
Energy consumption meter (cumulative) | kWh | Unsigned 32-bit integer | 0 to 4 294 967 295 | Shift reports, billing, ISO 50001 reporting |
r0034 |
Motor thermal utilization (i²t) | % | Percentage | 0 to 100 (100 = trip) | Motor protection trending |
For instantaneous motor kilowatt (the original question in this thread), route r0032 to a PZD word. For cumulative kilowatt-hours since last reset, read r0039 over the PKW channel or split it into two PZD words for cyclic transfer.
The MM440 Connector and Binector Model (BICO)
Every MM440 firmware version implements a Siemens-proprietary signal routing layer called BICO. It separates signal sources from signal sinks:
-
Binectors are single-bit digital signals. Identified as
Bxxxx(e.g.,B0007= drive fault active). -
Connectors are 16/32-bit analog signals. Identified as
CO: xxxx(output) orCI: xxxx(input of a function block).
The PROFIBUS PZD interface is itself a function block. It has 10 outbound CI (input) connectors on parameter P2051[0..9] that select which connector output each PZD word carries. Setting P2051[8] = 32 is the literal BICO statement "PZD word 9 source equals connector r0032 (filtered power)".
This indirection is the reason a default MM440 cannot publish kW: P2051[i] is factory-defaulted to control/status words, and the engineer must re-target it.
PROFIBUS Hardware Layer and Telegram Selection
Option Module Identification
Verify the option board before mapping parameters:
| Catalog Number | Protocol | Baud Rate | Notes |
|---|---|---|---|
6SE6400-1PB00-0AA0 |
PROFIBUS DP-V0/V1 | 9.6 kbps to 12 Mbps | Standard MM440 DP module |
6SE6400-1PN00-0AA0 |
PROFINET IO | 100 Mbps | Migration path; uses SFB52/53 |
6SE6400-1CB00-0AA0 |
CANopen | up to 1 Mbps | Use CiA 402 mapping |
PPO Type and PZD Word Budget
The MM440 GSD file (typically SIEM8100.GSD) exposes five PPO types per the PROFIdrive profile v3:
| PPO Type | PKW Words | PZD Words (out / in) | Recommended Use |
|---|---|---|---|
| 1 | 4 | 2 / 2 | Speed control + cyclic parameter access (r0039 read) |
| 2 | 4 | 4 / 4 | Speed + motor current + status |
| 3 | 0 | 2 / 2 | Pure speed control, fastest bus cycle |
| 4 | 0 | 6 / 6 | Speed + kW + current + torque |
| 5 | 0 | 10 / 10 | Full telemetry including r0039 split |
For the "publish motor kW to CCR" requirement, PPO type 4 or 5 is recommended. PPO type 3 is too narrow; PPO types 1 and 2 require you to steal one PZD slot for r0032 or fall back on PKW.
Parameter Reference Table (Drive-Side)
| Parameter | Access | Index | Type | Default | Description |
|---|---|---|---|---|---|
r0032 |
RO | — | FLOAT | — | CO: Act. filtered power (motor shaft, kW) |
r0039[0] |
RO | — | U32 | — | CO: Energy consumption meter (kWh) |
r0039[1] |
RO | — | U32 | — | CO: Energy recovered (regenerative kWh, vector control only) |
P2051[0..9] |
RW | Index | U16 | 0/22/21/25/0/0/0/0/0/0 | CI: PZD to CB (source connector for each PZD word) |
r2050[0..9] |
RO | Index | U16 | — | CO: PZD from CB (last received PZD word) |
P2042 |
RW | — | U8 | 1 | PROFIBUS node address (1 to 126) |
P0927 |
RW | — | U8 | 0 | Parameter changeable via PROFIBUS (0 = no, 1 = yes) |
P2000 |
RW | — | FLOAT | 50.00 | Reference frequency (Hz) — NORM_X basis for r0021 |
P2002 |
RW | — | FLOAT | = P0305 | Reference power (kW) — NORM_X basis for r0032 |
P2003 |
RW | — | FLOAT | = P0305 | Reference current (A) — NORM_X basis for r0027 |
P1240 |
RW | — | FLOAT | 10.0 | Vdc controller / load model Tc (filter for r0032) |
P1300 |
RW | — | U8 | 1 | Open-loop/closed-loop control mode |
P0040 |
RW | — | U8 | 0 | Reset energy meter (1 = reset, 0 = run) |
P0971 |
RW | — | U8 | 0 | Save parameters to non-volatile memory (1 = save) |
Step-by-Step: Publishing r0032 Over PROFIBUS
Prerequisites
- MM440 firmware V2.x or V3.x confirmed via
r0018. - PROFIBUS option module
6SE6400-1PB00-0AA0seated and locked. - Drive commissioned:
P0010 = 0, motor data (P0301throughP0311) entered, motor identification (P1910 = 1) completed. - STEP 7 / TIA Portal project with MM440 GSD imported and slave configured for PPO type 4 or 5.
Procedure
- Place the drive in Ready to Run: confirm
P0010 = 0(commissioning filter released). - Set access level to Expert:
P0003 = 3. - Route command and setpoint to PROFIBUS:
P0700 = 6(selection command source = PROFIBUS)P1000 = 6(setpoint source = PROFIBUS) - Confirm PROFIBUS configuration parameter:
P2043must match the PPO type selected in HW Config. For PPO 5 with 10 PZD words:P2043 = 5(if available on your firmware revision; otherwise leave default and rely on GSD). - Target the PZD outbound words:
P2051[0] = 32(PZD1 = r0032 motor kW)P2051[1] = 148(PZD2 = ZSW1 status word, optional)P2051[2] = 21(PZD3 = actual frequency Hz)P2051[3] = 25(PZD4 = actual current A)P2051[4..9] = 0(unused) - Save to non-volatile memory:
P0971 = 1(acknowledges by auto-resetting to 0 within ~3 s). - Power-cycle the drive to apply the new bus configuration.
After this sequence, the next PROFIBUS cycle will populate the slave input PZD area with the listed connector values. The mapping persists across power cycles because P0971 = 1 wrote the index table to EEPROM.
NORM_X Scaling: Reading the Word in Engineering Units
The MM440 PROFIBUS PZD words are encoded as 16-bit NORM_X (also called "Siemens normalized"):
| Hex Code | Decimal | Fraction | Meaning |
|---|---|---|---|
0x0000 |
0 | 0 % | Zero (positive side) |
0x4000 |
16384 | +100 % | Reference value (positive) |
0x7FFF |
32767 | +199.99 % | Maximum positive |
0x8000 |
-32768 | -200 % | Maximum negative |
0xC000 |
-16384 | -100 % | Reference value (negative) |
For r0032 (power), the reference basis is P2002 (default = motor nameplate P0305). To convert a raw word read into engineering units:
kW_actual = ( DINT_TO_REAL( INT_TO_DINT( DBW0 ) ) / 16384.0 ) * P2002
percent_load = 100.0 * DINT_TO_REAL( INT_TO_DINT( DBW0 ) ) / 16384.0
If P2002 = 7.50 kW (motor nameplate) and the read word is 0x2000 (8192 decimal), the motor is producing (8192 / 16384) × 7.50 = 3.75 kW, i.e., 50 % load.
P2002 auto-defaults to the new P0305. The PLC scaling math must be updated or you will read half (or double) the expected kW. Always re-derive scaling after a motor swap.Reading r0039 (Energy Counter) Cyclically on PZD
The kWh counter is a 32-bit unsigned integer. To publish it cyclically without using PKW bandwidth, route two consecutive connector outputs to two consecutive PZD words and reassemble on the S7 side:
-
P2051[4] = 39low word + offset trick — on firmware ≥ V3.1 you can split r0039 by mapping connector 39 to the low 16 bits and using a derived scaled value (kW·h integer divided by 1000) for the high word. On most firmware revisions, the cleanest path is:
Option A (PKW): configure PPO type 1, SFC14/SFC15 with PKW channel set to read parameter 0x0027 (39 decimal).
Option B (PZD split): assignP2051[4] = 39andP2051[5] = 0, then apply a scaling block:kWh = DBW_4 + DBW_5 * 65536. This works because r0039 fits in 32 bits; verify scaling by cross-checking against a known load cycle. - On the S7 side, recombine:
DWORD_kWh := DBW_HI * 65536 + DBW_LO(treat as unsigned).
For energy reports that survive MM440 power-cycles, the meter is stored in non-volatile memory automatically when the drive is switched off normally (controlled ramp-down). A hard DC-bus discharge during a fault does not corrupt the meter; it freezes at the last value.
Simatic S7 Receiving Code (SFC14 / SFC15)
Reading Motor kW (PPO Type 4, 6 PZD words = 12 bytes)
CALL "DPRD_DAT"
LADDR := W#16#100 // I/O base address from HW Config
RET_VAL := MW100 // 0 = OK; non-zero = DP error
RECORD := P#DB100.DBX0.0 BYTE 12
DB100 layout after the call (per PPO 4 assignment above):
| Byte Offset | DBW | Source | Meaning |
|---|---|---|---|
| 0–1 | DBW0 |
P2051[0] = 32 |
Motor kW (NORM_X scaled by P2002) |
| 2–3 | DBW2 |
P2051[1] = 148 |
Status word 1 |
| 4–5 | DBW4 |
P2051[2] = 21 |
Actual frequency (Hz) |
| 6–7 | DBW6 |
P2051[3] = 25 |
Actual current (A) |
| 8–11 | — | — | Unused (but RECORD length must cover all 6 PZD) |
Scaling Logic in Structured Text
// IEC 61131-3 ST, equivalent to ladder scaling above
IF DB100.DBX10.0 THEN // drive faulted
Motor_kW := 0.0;
ELSE
raw_int := DB100.DBW0;
// sign-extend 16-bit to 32-bit DINT
IF raw_int > 32767 THEN
raw_int := raw_int - 65536;
END_IF;
Motor_kW := (DINT_TO_REAL(raw_int) / 16384.0) * RefPower_kW;
END_IF;
Sending Setpoint and Control (SFC15)
CALL "DPWR_DAT"
LADDR := W#16#100
RECORD := P#DB200.DBX0.0 BYTE 12
RET_VAL := MW102
// DB200.DBW0 = control word 1 (STW1, e.g., 0x047E for run)
// DB200.DBW2 = main setpoint (NORM_X of P2000 Hz)
The standard control word sequence (STW1) for a basic run command on MM440 is:
-
0x047E— OFF1 = 0 prerequisite, ramp enable. -
0x047F— OFF1 = 1 (run command). - Follow with setpoint word at the same instant or one cycle later.
Diagnostic Data Flow (SVG)
Verification Procedure
- With drive stopped, force STW1 = 0x047E via SFC15, then 0x047F to command run.
- Read DB100.DBW2 (status). Bit 2 = "Operation enabled" — confirm 1.
- Apply no mechanical load. DB100.DBW0 should read within ±5 % of 0x0000 (filtered kW near zero). Some residual is normal due to magnetizing current.
- Apply a known mechanical load (e.g., calibrated dynamometer). Compute expected kW from torque × speed / 9550. Compare with DBW0-scaled value. Tolerance: ±3 % at steady state.
- Cross-check kWh: meter r0039 on BOP. Run drive at constant load for 5 minutes, compute kWh = (kW × 5 / 60), confirm the meter incremented by approximately that value.
- Capture DP diagnostic in STEP 7: Online → PROFIBUS DP → Diagnostics. Confirm no slave diagnostic interrupts and bus cycle time ≤ 5 ms.
- Inspect RET_VAL of SFC14 in OB1: must equal 0 (W#16#0000). Non-zero values are W#16#8090 (module missing) or W#16#80A0 (negative acknowledge from slave — typically a PZD length mismatch).
Troubleshooting Matrix
| Symptom | Root Cause | Diagnostic | Corrective Action |
|---|---|---|---|
| DBW0 always 0x0000 even under load |
P2051[0] not set to 32; or drive in commissioning mode (P0010 ≠ 0) |
BOP shows P2051[0] value |
Set P2051[0] = 32; confirm P0010 = 0
|
| DBW0 saturates at 0x7FFF regardless of load | PZD configured but no run enable; STW1 wrong bits | Check DBW2 status bits | Send STW1 sequence 047E → 047F, confirm bits 0/3/6 of STW1 |
| DBW0 scaling off by factor of 2 |
P2002 default mismatch |
Compare r2002 on BOP with motor plate |
Set P2002 = P0305 explicitly |
| DBW0 always 0 even with run command | Wrong LADDR in SFC14 | Read RET_VAL; check HW Config I/O addresses | Correct LADDR to match DP slave slot base |
| kW value latched at last value | Motor model disabled (P1300 = 0/1) and load is dynamic |
Inspect P1300
|
Use V/f with slip compensation (P1300 ≥ 2) or vector control |
| r0039 not incrementing | Counter frozen because P0040 = 1
|
Check P0040 value |
Set P0040 = 0
|
| SFC14 RET_VAL = W#16#8081 | PZD length mismatch between HW Config and RECORD parameter |
Compare | Match RECORD length to configured PZD bytes (e.g., 12 for PPO 4) |
| Drive enters F0080 (PROFIBUS timeout) | Bus cable break, terminating resistor missing, address conflict | LED on PROFIBUS module | Verify 120 Ω terminators at both ends, unique address |
| kW value negative when motor runs in reverse | Normal — NORM_X signed encoding | Read raw word directly | Apply ABS() if load sign is irrelevant |
| SFC14 RET_VAL = W#16#80B0 | Drive in fault state, PZD not updated | Read r0947 fault code | Acknowledge fault via STW1 bit 7, address root cause |
Field-Proven Caveats
-
Firmware versions. V2.x of MM440 firmware indexes P2051 from 0 to 9 (10 PZD words). V3.x extends to 0 to 15 in some variants but the slave's GSD must be regenerated if more than 10 are used. Confirm with the firmware version reported in
r0018. -
P2002 on motor swap. The default factory value of
P2002mirrorsP0305at first commissioning only. After subsequent motor data changes the user must re-confirmP2002. -
Energy meter wrap. At 4 294 967 295 kWh the meter rolls over. For very-high-duty pumps and compressors, sample
r0039into a separate S7 retentive counter and check for delta. -
Vector control only. The two-element kWh meter (
r0039[0]consumed,r0039[1]recovered) is only meaningful whenP1300 = 20or21(sensorless/sensor vector control). -
SINAMICS migration. On SINAMICS G120 (successor to MM440), the equivalent parameters are
r31(active power, kW) andr35(energy kWh), with STARTER / Startdrive commissioning. The BICO structure is preserved but indexed differently (drive object 1 by default). -
Determinism.
r0032is filtered with theP1240time constant. For faster control loops (e.g., load-share within a multi-pump station), reduceP1240to 1.0 s or use the unfiltered r0031 derivative for the control variable and r0032 for SCADA display.
Reference Documentation
FAQ
What is the difference between r0032 and r0039 on the MICROMASTER 440?
r0032 is the real-time motor shaft power in kW (filtered, instantaneous). r0039 is the cumulative energy in kWh since the last reset. Use r0032 for load trending and dashboards; use r0039 for shift reports, billing, and ISO 50001 energy reports.
How do I publish motor kW from an MM440 to a Simatic S7 over PROFIBUS?
Set P2051[0] = 32 to route connector r0032 into PZD word 1, configure the slave for PPO type 4 or 5, then read the cyclic PZD on the S7 using SFC14 (DPRD_DAT) into a data block. Scale the NORM_X word by dividing by 16384 and multiplying by P2002.
Why is my kW reading stuck at zero even though the motor is running?
Verify three things in order: (1) P2051[0] = 32, (2) the drive is not in commissioning mode (P0010 = 0), and (3) the SFC14 LADDR matches the I/O base address configured in HW Config. Also check the SFC14 RET_VAL for DP errors.
Can I read the kWh energy meter (r0039) without using the PKW channel?
Yes. Map two consecutive PZD words (for example P2051[4] and P2051[5]) to the low and high 16-bit halves of r0039 and reassemble them on the S7 side as a 32-bit unsigned integer. Alternatively, use the PKW channel with PPO type 1 or 2 if you have a PKW slot available.
What should I check when migrating this mapping to a SINAMICS G120?
The connector model is preserved but the active power parameter on G120 is r31 and the energy meter is r35. PZD configuration moves from P2051 to p2051 (lowercase, DO1) and is commissioned via STARTER or SINAMICS Startdrive. PROFINET replacement of the PROFIBUS module uses SFB52/53 (READ/WRITE) on the S7 side instead of SFC14/15.