[etherlab-users] How to perform DC time synchronisation the right way?

Michael Ruder rudermi at gmx.de
Wed May 16 09:29:51 CEST 2018


Hi Graeme, hi Gavin,

wow, thanks for the great, detailed and quick replies!

This was extraordinarily helpful!

I like Graemes suggestion for the cycle very much. I can cope with the 
delayed PDO sending much better than I could cope with a fixed, rather 
long wait in my cycle.

I modified my test program accordingly, including the move of the 
application_time call directly before the send call and get a sync error 
of < 1000 ns (I'd say 200-300 ns RMS) according to 
ecrt_master_sync_monitor_process(). When I look at the 0x92c registers, I 
can see that the error is in relation to slave 0 while between slave 0 and 
slave 1 it is much smaller, around 20-50 ns RMS. Very nice!

I found that ecrt_master_sync_monitor_process() only delivers a "good" 
value if I call it between the master_receive and master_send, so I 
retrieve the value before I send out again:

- master receive
- domain process
- save sync monitor progress
- write cached PDO values
- domain queue
- dc sync
- master send
- perform application calcs (writes to PDO data is cached)

Is there anything else I need to keep an eye on when doing all the work 
after "master send"? Can I safely assume that all TxPDOs from the drive 
are still valid after the master send and I can read them after the master 
send using EC_READ_*? Or should I save them when I write the cached 
RxPDOs? In my test program, it works without caching though.

Thanks again a lot for the help!
-- 
.      -Michael



More information about the Etherlab-users mailing list