[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