The Siemens FM 354 servo positioning module is a frequently deployed positioning controller on S7-300 stations. Engineers commissioning it commonly encounter a situation in which the configured setpoint reads zero in the online view, particularly in jogging mode. The root cause is rarely a wiring or initialization fault: the FM 354 treats jogging as a speed-controlled operating mode and does not accept a position setpoint at all. This article resolves the setpoint zero issue, maps the relevant DBD/DBX addresses in the user DB, and walks through the correct commissioning sequence for jogging, incremental, and MDI/Automatic modes. For background, see the Siemens Industry Online Support entry for FM 354 (6ES7354-1AH01-0AE0).
1. FM 354 Operating Mode Matrix
The FM 354 supports five principal operating modes, each with a different setpoint semantic. Selecting the right setpoint register requires understanding the mode being executed. The full mode set is documented in the FM 354 function manual.
| Mode | German Abbrev. | Setpoint Type | Primary User-DB Register | Notes |
|---|---|---|---|---|
| Jogging | Tippen | Speed (signed) | JOG+/JOG- bits; configured speed table | Position is internally integrated from speed |
| Incremental | Inkremental | Relative position (increments) | DBD 156 (INC_LENGTH) | Length per move entered as relative target |
| MDI | MDI (Manual Data Input) | Absolute position | DBD 322 (SET_POS) | Setpoint + speed; direct block move |
| Automatic | Automatik | Programmed block sequence | Block number via DBD area | Driven by NC program in FM 354 |
| Homing / Reference | Referenzieren | Reference point coordinate | Homing-specific data | Approach/creep speed via configured table |
The most common commissioning error is loading DBD 322 (an absolute position target) into the module while it is in jogging mode. The FM 354 ignores DBD 322 in jogging mode because there is no target position to reach. The "zero" you read is the correct value: the module reports that no absolute setpoint is active.
2. Why the Online View Shows Zero
In the FM 354 online/start-up window, the displayed fields are read directly from the user DB and the module's internal status. The setpoint display reflects what the operating mode currently consumes:
- Jogging mode: the "setpoint" field mirrors the position command being internally generated. While no jog direction is active, the integrated position command is zero, and the display updates only while JOG+ or JOG- is asserted.
- Incremental mode: the value in DBD 156 is consumed as the relative increment length. The on-screen target position stays at zero until the start edge is applied.
- MDI / Automatic mode: DBD 322 is the absolute target. Display zero means the register has not been written by the PLC application, or the move has already completed and the register is stale.
If you have completed the preconditions listed in Section 4 and the setpoint field still reads zero, the next sections tell you which register to write for the mode you are actually using.
3. User DB Layout: Control, Mode, and Setpoint Areas
The FM 354 reads its I/O from a user DB that the configuration tool creates and assigns to the module. The DB layout is fixed by the FM 354 firmware and is documented in the Siemens FM 354 function manual. The relevant fields for the jogging / setpoint question are:
| Address | Name | Direction | Purpose |
|---|---|---|---|
| DBX 15.0 | Mode bit 0 | PLC → FM | Mode selection LSB |
| DBX 15.1 | STP / Stop | PLC → FM | Stop command; 0 = no stop, 1 = stop (active-high) |
| DBX 15.2 | Mode bit 2 | PLC → FM | Mode selection bit |
| DBX 15.3 – 15.6 | Mode / control | PLC → FM | Mode selection / additional commands |
| DBX 15.7 | AF / Drive Enable | PLC → FM | Axis enable; 1 = enabled, 0 = disabled |
| DBX 34.0 | RF / Servo Enable | PLC → FM | Controller enable; 1 = regulator active |
| DBD 156 | INC_LENGTH | PLC → FM | Increment length (incr. mode) |
| DBD 322 | SET_POS | PLC → FM | Absolute target position (MDI / Auto) |
When you write a value to DBD 322 in jogging mode, the FM 354 simply does not consume that register. That is the expected behavior. Conversely, DBD 156 in jogging mode is also ignored because the module never executes an incremental move while in jogging mode.
4. Required Preconditions and the Initialization Sequence
Before any setpoint is acted on, the FM 354 expects a fixed start-up sequence. Skipping any of these leaves the module in a state where it accepts writes but executes no motion, and the online view reads zero for all motion fields.
-
Hardware configuration — FM 354 inserted in the S7-300 rack with the correct order number (for example
6ES7354-1AH01-0AE0) and assigned a user DB by the configuration tool. - Machine data download — MD file transferred to the module; module reports "initialized" on the diagnostic LEDs.
- Drive Enable (AF, DBX 15.7 = 1) — the digital drive stage is released. AF=0 locks all motion.
- Stop (STP, DBX 15.1 = 0) — explicit no-stop condition. STP is active when 1, so the application must drive it low.
- Servo Enable (RF, DBX 34.0 = 1) — the position controller is closed. Without RF, the regulator output is zero and the axis will not move even if a setpoint is present.
- Mode selection and acknowledgment — write the mode code, then toggle the mode-acknowledge bit per the FM 354 handshake.
- Speed levels transferred — for jogging, the configured jog/creep/approach speed set must be downloaded as part of the MD set; the module references those speeds internally.
5. Jogging Mode: The Correct Setpoint Path
Jogging on the FM 354 is fundamentally a speed-control mode. The application does not write a target position. Instead, the operator presses a JOG+ or JOG- pushbutton (wired to digital inputs or written into the user DB), and the FM 354 internally generates a position command that ramps the axis to the configured jog speed. The basic speed-control relationship the FM 354 applies internally is:
v(t) = v_jog · ramp(t) // configured jog speed, ramped
x(t) = ∫ v(t) dt // position command = integral of commanded speed
The relevant user-DB control bits in jogging mode are:
| Bit / Register | Function | Effect in Jogging |
|---|---|---|
| DBX 15.7 (AF) | Drive enable | 1 = allow jog motion |
| DBX 15.1 (STP) | Stop | 1 = abort motion, ramp to standstill |
| DBX 34.0 (RF) | Servo enable | 1 = closed-loop control active |
| DBX 16.0 (typical) | JOG+ | Ramp to +JOG_SPEED; release to ramp to zero |
| DBX 16.1 (typical) | JOG- | Ramp to -JOG_SPEED; release to ramp to zero |
Speed selection comes from the configured speed table — typically JOG_SPEED_V1 / JOG_SPEED_V2 as set in the machine data — and is selected either by a digital input or by a control bit depending on how the project was parameterized. There is no user-DB register in which you can write an arbitrary jogging speed at runtime on the FM 354; the speed is fixed at configuration time. If you need a variable jog speed, you must switch between configured speed levels (V1 / V2).
While the JOG bit is asserted, the FM 354 ramps the internal position command at the configured acceleration. The "setpoint" field you see online is the result of that integration; it changes only while the bit is asserted. Releasing the bit causes the FM 354 to ramp the position command back to a stop. The display reading zero in idle is therefore correct, not a fault.
6. Incremental Mode: Why DBD 156 Is the Right Register
In incremental mode, the FM 354 executes a fixed-length move. The relative distance is set in DBD 156 (named INC_LENGTH in the FM 354 documentation) and is interpreted in the configured position unit (increments, mm, or degrees). On the start edge, the FM 354 takes the value in DBD 156, ramps the axis to the configured increment speed, and decelerates so the axis stops exactly INC_LENGTH from the start point.
If you wrote DBD 322 instead, the FM 354 interpreted it as an MDI absolute target, which is not what incremental mode expects. In some FM 354 firmware versions, a stale value in DBD 322 in incremental mode is ignored entirely, and the move either does not start or stops at the next sync point with zero displacement. That is the second source of the "setpoint reads zero" symptom.
Procedure for incremental mode:
- Set AF=1, STP=0, RF=1 as in Section 4.
- Switch to incremental mode and acknowledge.
- Write the desired increment in user units to DBD 156 — for example
L +5000.0; T DBD 156for a 5000-unit positive move. - Pulse the start edge (DBX start or the dedicated increment start bit per the user DB layout).
- Monitor the actual position and the running setpoint in the online view; the displayed setpoint will ramp as the move progresses.
7. MDI and Automatic Mode: DBD 322 (SET_POS) Usage
DBD 322 is the MDI absolute target position. It is consumed only when the FM 354 is in MDI mode and the MDI block has been started. Typical usage:
- Set AF=1, STP=0, RF=1.
- Switch to MDI mode and acknowledge.
- Write the target coordinate to DBD 322 — e.g.
L 1.234E+02; T DBD 322for a 123.4-unit absolute target. - Optionally write the MDI speed and acceleration override to the corresponding user-DB words.
- Pulse the MDI start edge. The FM 354 will move the axis to the absolute coordinate stored in DBD 322.
Automatic mode uses a block program stored in the FM 354; DBD 322 is not the right way to inject positions in automatic mode. The PLC should issue block numbers, G-functions, and target coordinates via the appropriate automatic-mode registers described in the FM 354 manual.
8. STEP 7 Logic Snippets for Each Mode
The following STEP 7 STL snippets show the minimum control logic for each mode. Adapt to your project, but the bit/register mapping is canonical for the FM 354 with the default user DB.
Jogging mode — one-shot commissioning block
// Always-on interlock
AN "STP_PB" // pushbutton or program stop
= DBX 15.1 // STP = 0 (no stop)
A "AF_REQ" // drive enable request from HMI
= DBX 15.7 // AF = 1
A "RF_REQ" // controller enable request
= DBX 34.0 // RF = 1
// Jog direction
A "JOG_PLUS" // JOG+ pushbutton
= DBX 16.0 // JOG+ bit per user DB
A "JOG_MINUS" // JOG- pushbutton
= DBX 16.1 // JOG- bit per user DB
Incremental mode — single 5000-unit move
// Mode select = Incremental (per FM 354 mode code table)
L 2
T DBB 15
SET
S DBX 14.0 // Mode acknowledge edge per user DB
// Increment length
L +5.000E+03
T DBD 156 // INC_LENGTH
// Start edge
A "INC_START"
S DBX 14.1 // Increment start bit
MDI mode — move to absolute target
// Mode select = MDI
L 3
T DBB 15
SET
S DBX 14.0 // Mode acknowledge
// Absolute target
L 1.234E+02
T DBD 322 // SET_POS
// MDI speed override (example: 50% of configured)
L 50
T DBW 326 // MDI_SPEED override register
// Start
A "MDI_START"
S DBX 14.2 // MDI start bit
9. Online Diagnosis: What the Start-Up Window Actually Shows
The FM 354 online / start-up window in the configuration tool provides a real-time view of the user DB and the module status. The columns to watch:
| Field | Source | What zero means |
|---|---|---|
| Actual position | Encoder feedback | Axis is at the configured reference (or has not moved) |
| Setpoint (position) | Internal command value | No active motion: correct in idle, ramps during motion |
| Actual speed | Encoder dv/dt | Axis is stationary |
| Setpoint (speed) | Internal command | No active jog/move: correct in idle |
| Following error | Setpoint - actual | Axis is at the commanded position |
| Status word (DBX 30…) | FM 354 | Read mode, ready, in-position, error flags |
A zero setpoint is only a fault when the application has commanded motion (e.g. JOG+ is asserted, or a move start edge has been issued) and the setpoint is not ramping. In that case, the cause is upstream: AF, STP, RF, or mode acknowledgment. The setpoint registers DBD 156 / DBD 322 are not involved.
10. Verification Procedure
After reconfiguring, run this verification sequence to confirm the FM 354 responds to jogging commands.
- In the FM 354 configuration tool, go online and open the start-up window.
- Confirm
AF=1,STP=0,RF=1in the live DB view. - Confirm the mode indicator shows "Jogging" and that mode acknowledge has completed (no mode-change error bit set).
- Press and hold JOG+ via the HMI or by writing the corresponding DBX bit. The setpoint position and setpoint speed fields must ramp from zero toward the configured jog speed, and the actual position must follow.
- Release JOG+. The setpoint speed must ramp to zero; the axis must stop within the configured deceleration time.
- Repeat with JOG- and confirm negative direction.
- Switch to incremental mode, write INC_LENGTH=5000 to DBD 156, and trigger the start edge. Confirm the displayed target advances by 5000 units and that the axis stops at the new position with following error returning to zero.
- Switch to MDI mode, write SET_POS=123.4 to DBD 322, and trigger the MDI start. Confirm the axis moves to the absolute coordinate.
11. Troubleshooting Matrix
| Symptom | Likely cause | Fix |
|---|---|---|
| Setpoint reads zero in jogging mode | Jogging is speed-controlled; DBD 322 is not consumed | Expected behavior. Use JOG+/JOG- bits and the configured jog speed table |
| Setpoint reads zero in incremental mode | Wrote to DBD 322 instead of DBD 156 | Write the relative length to DBD 156 |
| Setpoint reads zero in MDI mode | PLC never wrote DBD 322, or wrote it before the MDI block was armed | Confirm the write happens in the same OB1 cycle as the start edge, or use a handshake |
| Setpoint reads zero with JOG+ asserted | AF=0, STP=1, or RF=0 | Force AF=1, STP=0, RF=1; re-check the application logic every cycle |
| Setpoint reads zero with start edge issued | Mode not acknowledged after selection | Pulse the mode-acknowledge bit per the user DB |
| Setpoint ramps but actual stays at zero | Drive enable not reaching the drive, or encoder feedback missing | Check drive enable wiring, encoder cable, FM 354 diagnostic LEDs |
| Setpoint value appears wrong (off by a constant) | Wrong position unit in machine data (e.g. configured for mm but the application writes increments) | Align machine data position unit with the user-DB write unit |
| Setpoint value reads back as if zeroed during the move | Application overwrites DBD 322 / DBD 156 mid-motion | Stop writing the register while the FM 354 is executing; latch the value before the start edge |
| Mode change not accepted | Mode code written but no acknowledge edge | Pulse the mode-ack bit per the user DB layout |
| "Setpoint" label is misleading in the start-up window | Display field is the integrated position command, not the user-DB register | Read the FM 354 function manual diagram for the start-up window labels |
| Axis moves in wrong direction in jogging | Encoder sign or motor polarity inverted in machine data | Invert the corresponding MD bit, re-download MD set, re-test |
| Jogging is jerky / overshoots | Acceleration in MD too low for the configured jog speed | Re-tune acceleration in machine data; respect the drive's torque limit |
12. Common Pitfalls, Field Notes, and Migration
Three patterns recur on commissioning calls:
- Mixing user-DB conventions between FM 354 and FM 357-2 / FM 458. The FM 357-2 and FM 458 use a different user-DB layout. Do not copy a working FM 357-2 user DB into an FM 354 project. Re-create the user DB from the FM 354 configuration tool.
- Re-writing DBD 322 every OB1 scan. If the application writes SET_POS from a process variable that updates faster than the FM 354 consumes it, the displayed target can appear to "flicker" or be overwritten mid-motion. Latch the setpoint at the start edge and do not update until the FM 354 acknowledges the move (in-position flag set).
- Confusing the displayed setpoint with the user-DB register. The online window label "setpoint" refers to the internal command value, not to DBD 322 or DBD 156. Writing to those registers does not change the displayed setpoint in jogging mode, because jogging mode does not consume them. Verify by writing to the correct register and then issuing a start edge; the setpoint column should ramp.
The FM 354 is end-of-life and replaced in the S7-300 family by positioning functionality integrated into the CPU (S7-300 CPU 315T/317T) and by the FM 357-2 / IM 174 / S7-1500 TM PTO modules. The setpoint concept is similar but the user-DB layout differs. The same diagnostic principle applies: jogging on any Siemens positioning platform is a speed-controlled mode, and the user-DB "position setpoint" register is only consumed in MDI/Automatic modes. For projects migrating from FM 354 to S7-1500 Motion Control, see the S7-1500 Motion Control function manual: map jogging to MC_MoveJog (Velocity mode), incremental moves to MC_MoveRelative, and MDI moves to MC_MoveAbsolute. The mental model of "jogging has no position setpoint; incremental/MDI do" carries over.
Why does the setpoint read zero in jogging mode on the FM 354?
Jogging on the FM 354 is a speed-controlled mode. The module does not consume an absolute or relative position setpoint; instead, the JOG+ and JOG- bits (or digital inputs) command a configured jog speed. The displayed setpoint stays at zero in idle and ramps only while a JOG bit is asserted, which is correct behavior, not a fault.
Should I use DBD 156 or DBD 322 for incremental moves?
Use DBD 156. DBD 156 holds the increment length (INC_LENGTH) in increments, mm, or degrees as configured in the machine data. DBD 322 (SET_POS) is the absolute target for MDI/Automatic modes and is ignored in incremental mode.
AF, STP, and RF all read 1 — why does the axis not move?
STP on the FM 354 is active-high: STP=1 means "stop." A freshly cleared user DB has STP=0, but if a stop pushbutton or a fault handler sets STP=1 the axis locks. The application must drive DBX 15.1 to 0 every cycle, not just at start-up, before motion is allowed.
Can I change the jog speed at runtime by writing to a register?
No. The FM 354 jog speed is fixed at configuration time and stored in the machine data. To change jog speed at runtime, configure two speed levels (V1, V2) in the machine data and switch between them via the appropriate user-DB bit or digital input. Arbitrary speed-overdrive via a register is not supported on the FM 354.
My DBD 322 write is acknowledged but the axis moves to the wrong position. What is wrong?
Check the configured position unit in the machine data. If the MD is set to mm but the application writes increments, the FM 354 will interpret the value as a fraction of the intended distance (or vice versa). Align the user-DB write unit with the MD position unit and re-download the MD set.