Hi, After lurking on the list and trying many different things, I'm looking for some help.
I have issues with DC syncing in my setup. I'm using a Beckhoff CX5140, 4.4.112-rt127-lp151-rt kernel with all the patches from Gavin and 64-bit DC modules (so far one EL7041 and one ELM3004-0000 both from Beckhoff) at 1kHz (I've also tested 200Hz and 400 Hz with similar behavior). I can successfully enter my cyclic loop, with the system being synchronized, but after some time (typ. few hundred seconds) the dmesg indicates many unmatched datagrams : .... [14364.891659] EtherCAT WARNING: Datagram ffff88003f81d6d8 (domain0-0-main) was SKIPPED 1004 times. [14365.712234] EtherCAT WARNING 0: 2000 datagrams UNMATCHED! [14365.897276] EtherCAT WARNING: Datagram ffff88003f81d6d8 (domain0-0-main) was SKIPPED 1004 times. [14366.713842] EtherCAT WARNING 0: 2000 datagrams UNMATCHED! [14366.902893] EtherCAT WARNING: Datagram ffff88003f81d6d8 (domain0-0-main) was SKIPPED 1004 times. [14367.715453] EtherCAT WARNING 0: 2000 datagrams UNMATCHED! [14367.908512] EtherCAT WARNING: Datagram ffff88003f81d6d8 (domain0-0-main) was SKIPPED 1004 times. [14368.717066] EtherCAT WARNING 0: 2000 datagrams UNMATCHED! [14368.914130] EtherCAT WARNING: Datagram ffff88003f81d6d8 (domain0-0-main) was SKIPPED 1003 times. [14369.718690] EtherCAT WARNING 0: 2 datagrams TIMED OUT! [14369.718700] EtherCAT WARNING 0: 2000 datagrams UNMATCHED! [14369.919746] EtherCAT WARNING: Datagram ffff88003f81d6d8 (domain0-0-main) was SKIPPED 1004 times. [14370.720285] EtherCAT WARNING 0: 2000 datagrams UNMATCHED! [14370.925364] EtherCAT WARNING: Datagram ffff88003f81d6d8 (domain0-0-main) was SKIPPED 1004 times. [14371.721901] EtherCAT WARNING 0: 2000 datagrams UNMATCHED! [14371.930982] EtherCAT WARNING: Datagram ffff88003f81d6d8 (domain0-0-main) was SKIPPED 1004 times. [14372.723535] EtherCAT WARNING 0: 2000 datagrams UNMATCHED! [14372.936607] EtherCAT WARNING: Datagram ffff88003f81d6d8 (domain0-0-main) was SKIPPED 1003 times. [14373.725111] EtherCAT WARNING 0: 2 datagrams TIMED OUT! .... My code is roughly set-up like this: ----- Before RT ----- ecrt_slave_config_dc(module->getSlaveConfig(ELM3004), 0x0700, 1000000, 500000, 20000, 0); // ELM3004 ecrt_slave_config_dc(module->getSlaveConfig(EL7041), 0x0300, 1000000, 500000,, 0, 0); // EL7041 ecrt_master_select_reference_clock(master, network->getModule(EL7041); // Defines the EL7041 as the ref clock ----- Before the cyclic task ----- ecrt_master_set_send_interval(ethercatHandler->getMaster(), TIMESPEC2NS(cycletime) / 1000); // set the send interval to 1000 us clock_gettime(CLOCK_REALTIME, &wakeupTime); ecrt_master_application_time(ethercatHandler->getMaster(), TIMESPEC2NS(wakeupTime)); ecrt_master_sync_slave_clocks(ethercatHandler->getMaster()); ----- Cyclic task ----- wakeupTime = timespec_add(wakeupTime, cycletime); clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &wakeupTime, nullptr); // sleep until next cycle ecrt_master_receive(ethercatHandler->getMaster()); ecrt_domain_process(ethercatHandler->getDomain()); .... (Emit signals for my commands) ... ecrt_domain_queue(ethercatHandler->getDomain()); ecrt_master_reference_clock_time(ethercatHandler->getMaster(), timeForSync); ecrt_master_sync_slave_clocks(ethercatHandler->getMaster()); clock_gettime(CLOCK_REALTIME, &time); *timeForSync = uint32_t(TIMESPEC2NS(time)); ecrt_master_application_time(ethercatHandler->getMaster(), *timeForSync); ecrt_master_send(ethercatHandler->getMaster()); ----- End of cyclic task ----- Note that the calculations inside the cyclic task are very small : I'm using slots//signal (QT5 framework) to treat commands (i.e. PDOs and 'RT' SDOs) which are dealt with on their own threads. I'm doing so because I don't care so much about the exact timing of my commands. Any chance you can spot where my issue is coming from? Thanks, Romain _______________________________________________ etherlab-users mailing list [email protected] http://lists.etherlab.org/mailman/listinfo/etherlab-users
