1. Problem Scope and System Overview
The SIMOTION D435-2 PN/DP controller is a compact motion controller in the SIMOTION D family that combines PLC, motion, and technology functionality on a single hardware platform. It is commonly deployed on packaging, converting, and winding machinery where coordinated multi-axis synchronization is required. On hose-wrapping machines, the controller must keep a rotary head, a linear traverse axis, and a spool rotary axis phase-locked so the wrapping pitch (mm of tape advance per head revolution) stays constant regardless of speed changes.
The reference application described in field service reports uses three axes under one D435-2:
| Axis | Role | Motor Revolutions | Load Revolutions / Movement | Mechanical Ratio |
|---|---|---|---|---|
| Head_Rotary | Master (gear source) | 106 | 56 | 56/106 ≈ 0.5283 |
| CAT_Linear | Slave (gear follower) | 1 | 24.17 mm | 24.17 mm/rev |
| Spool_Rotary | Winder | 1 | 1 | 1:1 |
A second, frequently paired requirement is closed-loop tension control on a winder/unwinder stand driven by a SINAMICS G120 with CU250S Control Unit, using a dancer position sensor as the feedback element. Both the gear cascade and the tension loop rely on consistent, real-time data from PROFINET IO with isochronous mode enabled.
2. Architecture and Topology Constraints
The D435-2 PN/DP supports PROFINET IO with IRT (isochronous real-time) and a configurable send clock. Each axis that participates in the gear must be placed in the same synchronization domain so the controller can issue synchronous setpoints every cycle. Devices that remain in "unsynchronized" state (for example, switches or IO stations that are not IRT-capable) will degrade the domain to RT or non-isochronous RT and will desynchronize the gear when the load fluctuates.
For correct tape-pitch and dancer behavior, observe the following:
- Place the SINAMICS G120, all drives supplying the three axes, and any isochronous IO in one sync domain with one shared send clock (commonly 1 ms or 2 ms).
- Enable isochronous mode on each drive telegram (for example, telegram 105 for SINAMICS with SiC plus encoder) and assign the same Ti/To values across the domain.
- Verify topology in HW Config / TIA Portal so that the controller is the sync master and the drives are sync slaves.
Reference: Configure sync domains and send clock - SIMOTION Scout TIA.
3. Tape-Pitch Synchronization on the Hose Wrapper
The tape pitch P (mm of CAT_Linear advance per head revolution) is governed by the gear ratio between Head_Rotary and CAT_Linear. Given the load-side data:
- Head_Rotary: 56 load rev per 106 motor rev
- CAT_Linear: 24.17 mm per motor rev
The required slave gear ratio referenced to the master load axis is:
G_slave = P / 24.17
For example, to wrap at P = 8 mm pitch, set G_slave = 8 / 24.17 ≈ 0.3310. For P = 12 mm pitch, G_slave ≈ 0.4965. The configuration must compensate the master gear, so the effective ratio entered in the SIMOTION axis configuration is:
G_eff = G_slave × (106 / 56) = P × 106 / (24.17 × 56) ≈ P × 0.07827
| Target Pitch P (mm) | G_slave (load rev basis) | G_eff (motor rev basis, 106/56 head gearbox) |
|---|---|---|
| 6 | 0.2483 | 0.4696 |
| 8 | 0.3310 | 0.6261 |
| 10 | 0.4138 | 0.7827 |
| 12 | 0.4965 | 0.9392 |
| 15 | 0.6206 | 1.1740 |
Implementation in SIMOTION
- Configure Head_Rotary as a positioning axis with modulo handling for continuous rotation.
- Configure CAT_Linear as a synchronous axis (synchronous operation / "synchronization" in the axis technology) and assign Head_Rotary as the master.
- Enter G_eff from the table above (or compute it from the recipe) in the synchronous operation parameters.
- Set the synchronization mode to "synchronize with position offset" if a phase relationship between wrap start and tape lay-down is required.
- Set ramp and smoothing filters so that quick speed changes do not produce pitch excursions: typical smoothing time constant 20-50 ms for light hose, 50-100 ms for heavy mandrel.
4. Winder and Unwinder Control with SINAMICS G120 and Dancer Feedback
The G120 with CU250S Control Unit supports closed-loop speed and torque control, plus basic positioner and basic closed-loop control of web tension when fed with a dancer signal. In the SIMOTION environment, the standard approach is to:
- Read the dancer position sensor (typically 0-10 V or 4-20 mA) into a SIMOTION analog input or via PROFINET.
- Scale the raw input to a percent-of-setpoint value using a user-defined scaling FB (see Section 5).
- Compute a torque or speed additive (P/I on the dancer error) and write it as a supplementary setpoint to the G120 via telegram 105 or 106.
- Use SIMOTION's "DancerPositionController" type behavior by implementing it as a technology object referenced through a user FB; SIMOTION does not provide a generic DancerPositionSensor FB in the standard command library - the function is built as a custom block in MCC, LAD/FBD, or ST.
Recommended closed-loop structure
- Inner loop: speed or torque controller in the G120 (factory default DO or DV mode).
- Outer loop: dancer PID in SIMOTION. Typical Kp = 0.5-2.0 % speed per % dancer error, Tn = 1-5 s, Tv = 0 s for hydraulic-free winders.
- Output limits: clamp the additive setpoint to ±10 % of the line speed setpoint to avoid snap tension events on dancer excursion.
5. Analog Scaling and Unscaling Functions in SIMOTION
SIMOTION's command library does not provide a single drop-in "Scale / Unscale" block identical to the STEP 7 FC105/FC106. Instead, scaling is implemented in the programming language being used:
| Language | Recommended Block / Construct | Notes |
|---|---|---|
| LAD / FBD | CALCULATE box or NORM_X / SCALE_X | Use CALCULATE for clarity; NORM_X + SCALE_X emulate FC105/FC106 closely. |
| MCC | Command library: "Calculate" command | Inline expression: y = (x - in_lo) * (out_hi - out_lo) / (in_hi - in_lo) + out_lo |
| ST (Structured Text) | Inline arithmetic in assignment | Most efficient and re-usable; wrap as a function block if used in multiple places. |
ST example: linear scaling of a 0-10 V analog input (raw 0-27648) to engineering units 0-500
FUNCTION_BLOCK fbScale
VAR_INPUT
i_raw : INT; // 0..27648 from SIMOTION AI
END_VAR
VAR_OUTPUT
q_eu : REAL; // 0.0..500.0 engineering units
END_VAR
VAR
r_in_lo : REAL := 0.0;
r_in_hi : REAL := 27648.0;
r_out_lo : REAL := 0.0;
r_out_hi : REAL := 500.0;
END_VAR
q_eu := (INT_TO_REAL(i_raw) - r_in_lo) * (r_out_hi - r_out_lo) / (r_in_hi - r_in_lo) + r_out_lo;
ST example: inverse (unscale) - engineering units to raw 0-27648
i_raw := REAL_TO_INT( (q_eu - r_out_lo) * (r_in_hi - r_in_lo) / (r_out_hi - r_out_lo) + r_in_lo );
For bipolar inputs (-10 V to +10 V, raw -27648..+27648) the same formula applies; just set r_in_lo = -27648.0 and r_out_lo to the negative engineering minimum.
6. DIV Fault: Controller Stays in STOP, Will Not Go to RUN
Problem details
Symptom reported: a LAD logic containing DIV: 1.0 / Tag1 = Tag2 compiles and downloads successfully, but the SIMOTION D435-2 does not switch to RUN. The operator interface shows the controller in STOP or in startup hold, and the diagnostic buffer records a runtime error referencing the MCC/LAD task in which the DIV is located.
Root cause
The DIV operator on REAL or LREAL data in SIMOTION (and in the underlying SIMOTION Kernel) raises a floating-point exception when the divisor is 0.0. The exception halts execution of the MotionTask / BackgroundTask in which the DIV lives; the task is then placed in the TECH_FAULT or TASK_HALT state. Because the run-level check requires all assigned tasks to be "OK" and the background task is the one that owns the DIV, the operating system blocks the mode transition to RUN.
The classic trigger is an uninitialized REAL tag: the default initial value of a REAL tag in SIMOTION is 0.0. If the program is downloaded but never cycles through the path that writes Tag1, the first execution of the DIV sees 0.0 and the kernel faults.
Solution
- Initialize the divisor to a safe non-zero value before the DIV executes. For a load-setpoint, a typical safe initial value is 1.0 or the process minimum.
- Guard the DIV with a compare block. In LAD/FBD insert a
CMP <> 0orCMP > 0against Tag1 and only energize the DIV when the guard is true; otherwise hold Tag2 at the last good value or a known default. - In MCC, wrap the DIV inside a "WaitCondition" with a precondition on Tag1, or use a structured "IF <condition> THEN" branch.
- Recompile, download the project to the D435-2, and perform a STOP-RUN transition from the diagnostic panel of SIMOTION Scout / TIA Portal.
LAD / FBD guard pattern
--[ Tag1 <> 0.0 ]--[ DIV 1.0 / Tag1 = Tag2 ]--
|
+--[ MOVE 0.0 => Tag2 ]--( negated branch )
Alternatively, a SEL block selects between the division result and the safe default:
Tag2_safe := SEL( G := (Tag1 <> 0.0), IN0 := 0.0, IN1 := (1.0 / Tag1) );
7. Interpreting the Diagnostic Buffer
If the controller still will not transition to RUN after applying the guard, retrieve the detailed message with SIMOTION Scout or TIA Portal:
- Connect to the target D435-2 over PROFINET or Ethernet.
- Open "Target system -> Diagnosis -> Diagnostic buffer".
- Look for entries of class "TECH_FAULT", "TASK_HALT", "IO_FAULT", or "FPU_EXCEPTION".
- Note the timestamp, the affected task (BackgroundTask, IPO_TASK, IPO2_TASK, Servo_fast), and the fault code. The task name identifies whether the issue is in the application (background) or in the servo / IPO cycle.
- Open "Motion system -> Axis diagnostics" to confirm that no axis is in a faulted state that would prevent RUN mode.
Reference: Restore factory settings - SIMOTION Scout TIA.
8. Factory Reset of the D435-2
Use a factory reset only when the project on the controller is corrupt, the device will not enter RUN, and a clean reload from SIMOTION Scout / TIA Portal is required.
- Power off the SIMOTION D435-2.
- Set the mode selector switch on the front of the D435-2 to position 3 (factory reset).
- Power on the device. The LED state progresses through the reset sequence.
- Wait until the device is reachable over its service interface (default IP, see the device label).
- In SIMOTION Scout / TIA Portal, perform "Target system -> Delete user data on target" or assign the device to a clean project.
- Return the mode selector to position 0 (RUN) for normal operation.
9. Commissioning Sequence for the Hose Wrapping Machine
- Verify the PROFINET sync domain. Each G120 must show the role "Sync Slave" with the D435-2 as "Sync Master". The send clock should be uniform (1 ms typical for 3 axes).
- Run the SINAMICS basic commissioning (DO, motor identification, encoder calibration) on each drive before activating the SIMOTION axes.
- In SIMOTION Scout, configure Head_Rotary first and verify a constant velocity without the slaves engaged.
- Engage CAT_Linear as a slave of Head_Rotary and measure the resulting pitch with a caliper or a tachometer-plus-mark technique. Adjust G_eff if the measured pitch deviates from the recipe.
- Commission the G120 winder/unwinder in open-loop speed first, then close the dancer loop with Kp = 0 and Tn = infinite, then add proportional gain and finally integral action.
- Run a continuous ramp test (0.1 × v_max to 1.0 × v_max) and confirm that the pitch error stays within ±2 % and the dancer excursion stays within ±5 % of setpoint.
10. Verification Matrix
| Check | Expected Result | Tool / Location |
|---|---|---|
| Controller mode after download | RUN (green) | SIMOTION Scout / TIA Portal online diagnostics |
| Sync role of each G120 | Sync Slave, no alarms | PROFINET diagnostics / device faceplate |
| Diagnostic buffer after first RUN | No TECH_FAULT / FPU_EXCEPTION entries | Target system -> Diagnostic buffer |
| Tape pitch at 50 % v_max | Within ±2 % of recipe P | Caliper measurement on 10 wraps |
| Tape pitch at 100 % v_max | Within ±2 % of recipe P | Same as above |
| Dancer excursion under ramp | ±5 % of nominal dancer position | Trend in Scout / WinCC |
| Winder current ripple | Less than 10 % of average torque | Starter / Starter commissioning trace |
11. Field-Proven Pitfalls
- Uninitialized REAL tags. Default initial value is 0.0; a DIV downstream of an uninitialized divisor will fault. Initialize the divisor explicitly, or guard with a compare block.
- Non-isochronous PROFINET devices in the same sync domain. A non-IRT switch in the line can downgrade the domain and silently desynchronize the gear.
- G120 firmware mismatch. Mix of V4.5 / V4.6 / V4.7 on a multi-drive line produces inconsistent behavior; align all drives to the same firmware version (V4.7 SP3 or later for CU250S-2 PN IRT).
- Wrong DPV1 slot assignment for the encoder. On CU250S, the encoder must occupy a separate slot from the drive telegram; otherwise the controller reads a static zero and the gear runs open-loop.
- Modulo range on the master axis. For continuous rotation, set the modulo range equal to the integer number of motor revolutions per load revolution (106) so the master value does not wrap mid-cycle.
12. Parameter Quick Reference
| Parameter | Where Set | Typical Value |
|---|---|---|
| Send clock (PROFINET) | HW Config / TIA Portal -> Sync domain | 1.0 ms |
| Ti / To on each drive | Drive properties | Match send clock |
| Effective gear G_eff (Head -> CAT_Linear) | SIMOTION synchronous operation | P × 0.07827 (per recipe) |
| Dancer Kp | User FB | 0.5-2.0 % / % |
| Dancer Tn | User FB | 1-5 s |
| Additive setpoint clamp | User FB | ±10 % of line speed |
| Analog input range | SIMOTION AI configuration | ±10 V (27648 counts) |
| Safe initial divisor | Variable initialization in program | 1.0 (or process minimum) |
Why does my SIMOTION D435-2 refuse to go to RUN after download, with a DIV instruction in the program?
The most common cause is a divide-by-zero on a REAL or LREAL DIV. The default initial value of an uninitialized REAL tag is 0.0; when the DIV executes before the divisor is written, the kernel raises an FPU exception and halts the task, which blocks the RUN transition. Initialize the divisor to a safe non-zero value, or guard the DIV with a compare block that prevents the division when the divisor is zero.
How is tape pitch calculated for a hose wrapping machine with SIMOTION D435-2?
Pitch P (mm per head revolution) is the product of the slave axis movement per motor revolution (24.17 mm on CAT_Linear) and the effective gear G_eff. The effective gear accounts for the head gearbox ratio (106 motor rev per 56 load rev) and is G_eff = P × 106 / (24.17 × 56) ≈ P × 0.07827. Enter this value in the SIMOTION synchronous operation parameters of the CAT_Linear axis with Head_Rotary as master.
How do I scale a 0-10 V analog input to engineering units in SIMOTION?
Use the formula y = (x - in_lo) × (out_hi - out_lo) / (in_hi - in_lo) + out_lo. For a 0-27648 raw input scaled to 0-500 EU, q_eu = (INT_TO_REAL(i_raw) - 0) × (500 - 0) / (27648 - 0) + 0. Wrap the formula in a function block, or use the NORM_X and SCALE_X instructions from the command library.
Why does the dancer-controlled winder oscillate even with low Kp?
Check the PROFINET sync domain first. If the G120 supplying the winder is not in the same sync domain as the D435-2, the dancer control loop sees jittery setpoints and will oscillate no matter how low the Kp. Confirm that the G120 shows the role "Sync Slave" with a uniform send clock across all drives in the domain, and that the G120 firmware is V4.7 SP3 or later for isochronous IRT operation.
How do I perform a factory reset on a SIMOTION D435-2?
Power off the D435-2, set the mode selector switch on the front panel to position 3, then power on the device. Wait for the device to reach the service state, then connect from SIMOTION Scout / TIA Portal and use "Target system -> Delete user data on target" or assign a clean project. Return the mode selector to position 0 for normal RUN operation. Document the IP, device name, and project backup before resetting.