[etherlab-users] SDO upload during initialization

Derrill Vezina dvezina at caron-eng.com
Thu Dec 11 23:12:15 CET 2014


Hi,

I have been working with the EL6021 card for some time now with no issues regarding communications for RS485 using the default PDO/SDO parameters that come stock with the firmware version 04 (thanks to the communities help). Beckhoff has recently started rolling out newer firmware for the EL6021 that has a different default PDO mapping for all of the data bytes / status registers in which the PDO mappings are different per firmware version (they are stored in 0x1C12 and 0x1C13). I am using the fixed structures from the cstruct output using the ethercat user space tool.

To fix this, I was able to use the ethercat userspace tool with the upload / download commands to set 0x1C12/0x1C13 to the desired PDO bank (0x1604/0x1A04), but it seems these parameters are in volatile memory, which gets reset on power cycle. Here are the commands I am using with the ethercat tool binary to get the registers correct before running my application in realtime:

./ethercat download -p 7 -t uint8 0x1C12 0x00 0x00
./ethercat download -p 7 -t uint16 0x1C12 0x01 0x1604
./ethercat download -p 7 -t uint8 0x1C12 0x00 0x01
./ethercat download -p 7 -t uint8 0x1C13 0x00 0x00
./ethercat download -p 7 -t uint16 0x1C13 0x01 0x1A04
./ethercat download -p 7 -t uint8 0x1C13 0x00 0x01

This has to be done before I run my users pace application for the pdo mapping / sync managers to be correct. I tried to use some of the the user space library functions from my application with ecrt_slave_config_sdoX() but the registers do not change which causes a failure during domain registration.

The startup routine I am using does the following:
1. Complete non real-time SDO transactions
2. Get slave configurations
3. Configure sync managers
4. Create domain and Register domain pros
5. Activate master
…

Here is what I have for the EL6021 device in step 1:
if ((error = ecrt_slave_config_sdo8(config(), 0x1C12, 0x00, 0x00)))
return false;
if ((error = ecrt_slave_config_sdo16(config(), 0x1C12, 0x01, 0x1604)))
return false;
if ((error = ecrt_slave_config_sdo8(config(), 0x1C12, 0x00, 0x01)))
return false;
if ((error = ecrt_slave_config_sdo8(config(), 0x1C13, 0x00, 0x00)))
return false;
if ((error = ecrt_slave_config_sdo16(config(), 0x1C13, 0x01, 0x1A04)))
return false;
if ((error = ecrt_slave_config_sdo8(config(), 0x1C13, 0x00, 0x01)))
return false;

Do the SDO’s only get written when the master is activated when using ecrt_slave_config_sdoX?

Is there some other process that could be done other than calling into the ethercat tool using system() or using a pipe with popen() that would set these registers if the ecrt_slave_config_sdox isn’t working?

Derrill Vezina
Electrical Engineer
Caron Engineering Inc.
Office: 207-646-6071 ext. 360
Cell: 207-251-9072

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.etherlab.org/pipermail/etherlab-users/attachments/20141211/ef5a3dfd/attachment-0002.htm>


More information about the Etherlab-users mailing list