[etherlab-users] AL state change problems with Copley Xenus Plus
Keith Rogers
Keith_Rogers at raytheon.com
Tue Apr 10 18:28:33 CEST 2012
I am new to ethercat and am experimenting with IgH EtherCAT master 1.5.1
on Ubuntu 10.04. We're using it for Copley Xenus Plus motor controllers.
I have some questions regarding application layer state control. To
begin with, here is a quote from the controller's programmer's manual,
pg 41:
"The following [AL] states are defined for the Copley Controls CANopen
amplifiers: Pre-operational, Operational, Stopped."
Note there is no Safeop state. When ethercat master tries to set that
state, I get the (PREOP + ERROR) error message I've seen in the archives
here. I looked at the SII record and the enable_safeop flag was set,
which is obviously a bug on Copley's part. Still, I thought if I could
clear that bit, master stack would not attempt to go into the safeop state.
First problem: though the command line sii_read produced a file I could
hex edit to clear the bit, sii_write failed to change the entry in the
controller. dmesg shows the write was successful, but the controller's
record did not alter. Whatever mechanism sii_write uses, it doesn't
facilitate a change in flash memory on the Copley controller.
Second problem: since I couldn't correct the source, I sabotaged the SII
read in slave.c (ec_slave_fetch_sii_general) by simply commenting out
the assignment, leaving the previously memset 0 data intact. This did
result in enable_safeop=no, but unfortunately ethercat master *still*
tries to go into safeop the first time ecrt_master_send is invoked. Why
does the master stack try to go into a state it has been informed does
not exist?
Third problem: I must have a fundamental misunderstanding of ethercat,
because I thought there would be a really obvious method exposed in the
user library named something like
"ecrt_slave_config_request_al_state_change" that I could use to request
the slaves go directly to OP state. Or for that matter, allow me to
control AL state within the application realtime as may be needed. I
can't find any such method. Are applications not "supposed" to control
AL state outside of the master thread? Or am I just blind...?
I'm at a loss of how to proceed. Suggestions welcome.
Keith Rogers
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.etherlab.org/pipermail/etherlab-users/attachments/20120410/9f0a181d/attachment-0003.htm>
More information about the Etherlab-users
mailing list