Hi All, I can not understand how to configure correctly my slaves with the ecrt_slave_config_dc() function.
I use nine EL7211-9014 servo controllers and the XML declarations is: <Dc> <OpMode> <Name>DC</Name> <Desc>DC-Synchron</Desc> <AssignActivate>#x700</AssignActivate> <CycleTimeSync0 Factor="1">0</CycleTimeSync0> <ShiftTimeSync0 Input="0">30000</ShiftTimeSync0> <CycleTimeSync1 Factor="-1">0</CycleTimeSync1> <ShiftTimeSync1>1000</ShiftTimeSync1> </OpMode> </Dc> SYNC0 and SYNC1 should be fired at each cycle. My realtime cycle is at 500us, so initially I used: ecrt_slave_config_dc(sc, 0x0700, 500000, 30000, 1000, 0); but I sometimes faced some hiccup on some motor movements (almost always on the same motor, but sometimes not), most probably due to frames late regarding SYNC events, so I increased the sync1_shift to half of the cycle time: ecrt_slave_config_dc(sc, 0x0700, 500000, 250000, 1000, 0); This help, but I’m still not convinced that it is correct. How can I debug this, I did not see any error on slaves COEs 1c32 or 1c33 ? Startup debug messages are the followings: EtherCAT DEBUG 0-12: Checking for synchrony. EtherCAT DEBUG 0-12: 19 ns difference after 1 ms. EtherCAT DEBUG 0-12: app_start_time=64456682505935 EtherCAT DEBUG 0-12: app_time=64460192975876 EtherCAT DEBUG 0-12: start_time=64460292975876 EtherCAT DEBUG 0-12: cycle=501000 EtherCAT DEBUG 0-12: shift_time=250000 EtherCAT DEBUG 0-12: remainder=263941 EtherCAT DEBUG 0-12: start=64460293462935 EtherCAT DEBUG 0-12: Setting DC cyclic operation start time to 64460293462935. EtherCAT DEBUG 0-12: Setting DC AssignActivate to 0x0700. - - - EtherCAT DEBUG 0-13: Checking for synchrony. EtherCAT DEBUG 0-13: 9 ns difference after 1 ms. EtherCAT DEBUG 0-13: app_start_time=64456682505935 EtherCAT DEBUG 0-13: app_time=64460854977928 EtherCAT DEBUG 0-13: start_time=64460954977928 EtherCAT DEBUG 0-13: cycle=501000 EtherCAT DEBUG 0-13: shift_time=250000 EtherCAT DEBUG 0-13: remainder=444993 EtherCAT DEBUG 0-13: start=64460955283935 EtherCAT DEBUG 0-13: Setting DC cyclic operation start time to 64460955283935. EtherCAT DEBUG 0-13: Setting DC AssignActivate to 0x0700. I’m really surprised that the remainder can be so different, so I looked in the source code and can not understand the logic: // set DC start time start_time = master->app_time + EC_DC_START_OFFSET; // now + X ns (X being 100000000 = 100 ms) if (sync0->cycle_time) { // find correct phase if (master->has_app_time) { u64 diff, start; u32 remainder, cycle; diff = start_time - master->app_start_time; cycle = sync0->cycle_time + sync1->cycle_time; remainder = do_div(diff, cycle); start = start_time + cycle - remainder + sync0->shift_time; Why the cycle is the sum of the two sync->cycle_time, in my case 501000, should not it be: sync0->cycle_time (500000) ? This was changed on 2016-09-16, but It seems it was right before. I can see that sync0->cycle_time is written to register 9A0 (500000) and sync1->cycle_time is written to register 9A4 (1000), this is correct. It seems to me that the sync1_cycle parameter of the ecrt_slave_config_dc() is handled as as sync1_shift, this is really confusing. Is it normal, can someone explain this ? Philippe
_______________________________________________ etherlab-users mailing list etherlab-users@etherlab.org http://lists.etherlab.org/mailman/listinfo/etherlab-users