Hi,

Thanks for the patch, Graeme. I'm hoping
we can try it out next week.


Here's what we found/did:

The timeout message comes from the DC-SYNC-CHECK state
in the slave configure state machine. It appears that 
the master is attempting to initialize the time offset 
(0x920) register of each slave to sync with the master's 
clock. The slaves at this point are still in PREEOP 
(no cyclic transfer). Hence, if you have many slaves and a 
long timeout, you can spend a long time in this state. I 
still don't understand why this takes so long to converge.
To make it converge a little faster, we clear the 0x920 
register explicitly using the command line tool 
(ethercat reg_write). This forces a new offset to be 
set by ec_fsm_master_dc_offset64() and seems to 
make things work a little more consistently.

Afterwards, assign activate is applied and cyclic transfer
begins.

But that was not the end of it.. as previously mentioned,
continually calling ecrt_rtdm_master_sync_reference_clock() 
did not result in a converging (0x92c) value for the network. 
Using the command line tool, one could see that the slaves'
individual 0x92c values were pretty good, except for the
first slave (holding the reference clock). Increasing the 
cyclic frequency from 1kHz to 4kHz, helped the first slave's
0x92c value reach smaller values (but not stable). 
We added logic to the application that waits for the 
aggregate 0x92c value to drop below 2000 micro-second 
threshold, at which point we stop calling 
ecrt_rtdm_master_sync_reference_clock() and just call 
ecrt_rtdm_master_sync_slave_clocks() from then on. This 
results in slave-slave synchronization in the 20 ns 
ballpark as reported by the individual 0x92c registers 
and verified in h/w by monitoring SYNC0 signals 
on a scope.

It would be extremely useful (for many reasons) to 
have an RTDM interface to a function that can read
and write slave registers directly - basically 
having functionality of the ethercat reg_read, 
reg_write command line tool from the real-time
thread. In this case we would use it to monitor
individual slave sync 0x92c registers because
we cannot subtract out the reference slave's
contribution. Do you know of any patches
out there that provide this???


BTW - We tried using both --enable-cycles 
and --enable-hrtimer options and that did 
not help. I am not sure I have the proper
underlying OS configuration setup to support
those options, so that's a little 
inconclusive.


Best regards,

--George Broz
Moog, Inc. Industrial Group


-----<etherlab-users-boun...@etherlab.org> wrote: -----
To: <etherlab-users@etherlab.org>, George Broz <gb...@moog.com>
From: Graeme Foot 
Sent by: 
Date: 01/24/2012 10:37PM
Subject: Re: [etherlab-users] failing dc-sync-check (and rtdm patch)

Hi,

I've been having the same problem (ie: Slave did not sync after 5000
ms).  
In my case it was happening on most startups and sometimes after running
for a while.

When it happened after the app had been running a while the domain
working counter changed from 2 to 1 and one of the slaves got an error
0x0A11 - EtherCAT State Error (The EtherCAT AL state became not
"Operational" while the DS402 drive state is in "Operation enabled.").
I have no idea what this error means.


I fixed my startup case by waiting until the working counter state on
the domains used by the dc slaves were all EC_WC_COMPLETE (ie all
registered process data were being exchanged).


This of course meant that I needed to add another rtdm method
"ecrt_rtdm_slave_config_dc".  To do so I have rejigged the rtdm
framework so that the rtdm functions are now in the user space ec
library.  I needed to do this because I had to access more of the
library types and it was getting unwieldy keeping it separate.

Some little changes as a result:
- proper functions rather than defines
- ecrt_rtdm_master_application_time takes a direct value rather than
pointer
- ecrt_rtdm_domain_states now takes a ec_domain_state_t array pointer
- new function ecrt_rtdm_slave_config_dc


I have attached a full rtdm patch in case anyone wants it (for 2124).


Graeme.




-----Original Message-----
From: etherlab-users-boun...@etherlab.org
[mailto:etherlab-users-boun...@etherlab.org] On Behalf Of George Broz
Sent: Monday, 23 January 2012 23:08
To: etherlab-users@etherlab.org
Subject: [etherlab-users] failing dc-sync-check

Hello,

What would cause the dc-sync-check to fail (resulting in the "Slave did
not 
sync after..." message in the error log), even when the timeout 
(EC_DC_SYNC_WAIT_MS) is set long (30 seconds)? 

After 30 seconds, the "Sync after..." is still in the 4 milli-second
range - far from the 5 micro-seconds needed to pass.

In my application, after calling master_activate() 
a Xenomai task every 5 milli-seconds calls: 

* ecrt_rtdm_master_application_time()
* ecrt_rtdm_master_sync_reference_clock(), and
* ecrt_rtdm_master_sync_slave_clocks()
 
The first slave is the reference clock. It generally takes 10 to 20
seconds 
for the first slave to get past this step (if at all). The other slaves
take less, 
but still a couple of seconds. Slave to slave sync is good (<1000ns),
but gets 
much better (<100ns)when I stop calling sync_reference_clock().
 
I read in a previous post that --enable-cycles helped. Is this
necessary?

Is there something I can do (e.g. "adjust" the application_time) to make
this
converge faster? Should it help to rescan the bus before starting my
application?

I am running the "default-tip" (2271) version of the master.

Master-to-ref.slave synchronization (using EtherCAT) is not important to
us, but 
slave-to-slave sync is critically important to us.


Thanks in advance,
--George Broz
Moog, Inc. Industrial Group
_______________________________________________
etherlab-users mailing list
etherlab-users@etherlab.org
http://lists.etherlab.org/mailman/listinfo/etherlab-users

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



[attachment "etherlabmaster-1.5-2124-c_rtdm_full.patch" removed by George 
Broz/ber/us/moog]
_______________________________________________
etherlab-users mailing list
etherlab-users@etherlab.org
http://lists.etherlab.org/mailman/listinfo/etherlab-users

Reply via email to