[etherlab-users] Slave DC start time calculation
Philippe Leuba
pleuba at swissonline.ch
Thu May 17 21:10:43 CEST 2018
Hi,
I have changed how to calculate the slave start time by taking only the sync0->cycle_time as cycle time.
The results is good and I can see in the log that the 'remainder' is almost the same for all slaves.
@Florian: Why did you did this change on 2016-09-16 ?
Best regards
Philippe
> On May 16, 2018, at 6:22 PM, Philippe Leuba <pleuba at swissonline.ch> wrote:
>
> 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 at etherlab.org
> http://lists.etherlab.org/mailman/listinfo/etherlab-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.etherlab.org/pipermail/etherlab-users/attachments/20180517/b692ad00/attachment-0003.htm>
More information about the Etherlab-users
mailing list