====== Timing problems ====== ===== Symptoms ===== Outputs on the command line like these: 082039 : eUsrJob_ProcessAllRxFrames - not all previously sent frames are received/processed (frame loss)! 082039 : No response on cyclic Ethernet frame 082039 : DCM Status: ERROR: controller error - synchronisation out of limit (0x981201C2) ===== Cause ===== 082039 : DCM Status: ERROR: controller error - synchronisation out of limit (0x981201C2) If the jitter of the Distributed Clock (DC) is too high, this error message is displayed. If the Linux master synchronizes the clock (busshift-mode), then the master probably has realtime-performance problems. 082039 : eUsrJob_ProcessAllRxFrames - not all previously sent frames are received/processed (frame loss)! 082039 : No response on cyclic Ethernet frame The Acontis stack could not receive/send the PDO in time. The master probably has realtime-performance problems. ===== Solutions ===== ==== Use master shift mode ==== If you use the bus shift mode (default) then the Linux master sets the clock for the DC. In this case, the DC clock is only as stable as the Linux master. However, a slave can also set the clock for the DC. Since EtherCAT slaves often have hardware clocks, these clocks are often much more stable and accurate. This mode is called master shift mode. To use the master shift mode, add the parameters "''-dcmmode mastershift''" when calling the application. [[embedded_systems:ethercat:understanding_ethercat:understanding_sync_with_dc|Understanding bus/master shift mode]] ==== Increase real-time performance ==== See [[https://wiki.ntb.ch/infoportal/embedded_systems/ethercat/test_and_tune_rt | this instruction]] on how to measure and improve realtime-performance. ==== Decrease load ==== Within a cycle, the system needs to: * Send/receive a data frame (PDO) * If 50% of the maximum bandwidth is used, at least 50% of the cycle is used to send/receive the EtherCAT frame * User application * The control application; i.e. EEROS * Jitter of the real-time system If all this points add up to more than the cycle duration, than the system can not send a frame every cycle. You can try to: * Send less data over PDOs. * Lower the calculation time of your control application. * Increase [[https://wiki.ntb.ch/infoportal/embedded_systems/ethercat/test_and_tune_rt |real-time performance]] * Increase the cycle time (lower control frequency)