You can see the calculations in fsm_slave_config.c's
ec_fsm_slave_config_state_dc_sync_check.  Enabling "ethercat debug 1" will
also print some diagnostic information to the syslog on activation which may
be of interest.

 

There will always be some jitter in the SM2/SYNC0 timing, as it's subject to
the stability of your main loop's call to ecrt_master_send.  But yes, you're
correct that the intent is to have SYNC0, shift time, then SM2.

 

Note that the example code assumes a fixed processing time and so focuses
all its timing efforts on a deterministic wakeup before calling
ecrt_master_receive, which in itself is not sufficient if you don't have a
stable processing time.

 

Another important factor is when you call ecrt_master_application_time for
the first time - ideally it needs to be just prior to the ecrt_master_send
call and always at the same period (which again assumes a stable processing
time), which can sometimes be tricky to arrange correctly.

 

If you don't have a fixed processing time, it could be useful to restructure
the loop with a two-step sleep so that your
ecrt_master_application_time/ecrt_master_sync_slave_clocks/ecrt_domain_queue
/ecrt_master_send group have the deterministic wakeup instead.  Though if
you want the best stability you'll probably want to use an RTOS layer.

 

Finally, the examples demonstrate trying to sync all slaves to the master's
clock (ecrt_master_sync_reference_clock), which is simple but can cause
drift over time if your master's clock isn't particularly good.  It's also
possible to sync purely from the reference clock
(ecrt_master_reference_clock_time) which can be a bit more reliable but
requires more work in the master code.  There are some discussions on this
in the mailing list archives.

 

There have also been some patches to alter DC behaviour posted from time to
time, most of which are included in the unofficial patchset
(https://sourceforge.net/u/uecasm/etherlab-patches/ci/default/tree/#readme).
You might want to consider looking at those.

 

From: Greier, Thomas
Sent: Thursday, 31 August 2017 03:56
To: etherlab-users@etherlab.org
Subject: [etherlab-users] ecrt_slave_config_dc sync0_shift

 

Hello,

How is the sync0_shift argument used in ecrt_slave_config_dc?

 

I currently am using 1.5.2 version of the master with one slave device in
master-shift DC mode.

 

The slave is synchronizing successfully. However, when I probe the SM2 and
SYNC0 interrupts on the slave, I see that the location of the SM2 interrupt
within two SYNC0 interrupts is non-deterministic.  In other words, it
changes every time the master and slave resynchronize. I would have expected
the location of the SM2 interrupt (as far as its timing) to follow the
sync0_shift offset from the SYNC0 interrupt.

 

I am running at 1kHz SYNC0 frequency and specifying a 200us sync0_shift.

 

Thank you in advance for your help.

 

Tom

_______________________________________________
etherlab-users mailing list
etherlab-users@etherlab.org
http://lists.etherlab.org/mailman/listinfo/etherlab-users

Reply via email to