[etherlab-users] EL6751 SDO-Configuration

Thomas Paoloni thomas at digithom.it
Fri Jan 22 16:57:30 CET 2016


Hi,

Maybe I've not yet understood precisely what you need, correct me if I'm 
wrong.
Every configuration SDO sent via ecrt_slave_config_complete_sdo is meant 
as and SDO addressed to the EL6751 and the only use is to configure the 
EL6751 or Can configuration telegrams to the Can slaves, allowed only 
when the bus is not running.
For configure the 6751 we mean his PDO on canopen side, not used in your 
case since you don't have CANOpen slaves, or 6751 proprieties (almost 
everything you can "click" on Twincat.
If you want to send SDO (raw Can telegrams) to your Can slave when the 
network is running you're on the wrong way since EL6751 don't allows you 
to do this.
I had to do this in the past, I contacted Beckhoff and they explained me 
that in order to send an SDO to a slave on the Can network I need to use 
their proprietary AoE protocol (ADS over Ethercat) and unforunately 
etherlab doesn't implements this.

Personally, I hate the EL6751 :-)
It worked very bad in my case, the Can network was unstable at 1Mbit 
even using certified cables and a 3 meters network.
The inability to send SDO transparently to Can network was "the straw 
that breaks the camel", I've dropped it out and replaced Can slaves with 
ethercat equivalent.
For my experience, the EL6731 is almost the worst slave that Beckhoff 
produces.

Bye,
Thomas.



On 22/01/2016 14:17, Matze Thias wrote:
> Thank you Thomas for sharing your code :) In my code I'm doing almost 
> the same, except that I do encode the configuration bytes directly in 
> an array instead of converting it from a string.
>
> Also I do not have to configure CANOpen-Slaves. The only slave 
> listening on the CAN-Bus expects "raw"(Layer2)-CAN-Messages and do not 
> understand the higher-level CANOpen-Protocol. When I configure it that 
> way, I always get
>
>  EtherCAT ERROR 0-1: Failed to set SAFEOP state, slave refused state 
> change (PREOP + ERROR).
>  EtherCAT ERROR 0-1: Unknown AL status code 0xF101
>
> PS: I just dumped the device info via ethercat slaves -v. I got:
>
>
> General:
>   Group: Communication
>   Image name:
>   Order number: EL6751
>   Device name: EL6751 CANopen Master
>   CoE details:
>     Enable SDO: yes
>     Enable SDO Info: yes
>     Enable PDO Assign: no
>     Enable PDO Configuration: no
>     Enable Upload at startup: no
>     Enable SDO complete access: yes
>   Flags:
>     Enable SafeOp: no
>     Enable notLRW: no
>   Current consumption: 300 mA
>
>
> So flags are saying, that SafeOp is not enabled. Does that mean that 
> SafeOP does not exist? Considering the error message is there any 
> correlation? How can I fix this?
>
> 2016-01-20 12:44 GMT+01:00 Thomas Paoloni <thomas at digithom.it 
> <mailto:thomas at digithom.it>>:
>
>     Hi,
>
>     Sometimes a piece of code is better than explanations ...
>     Here is mine, which configures the PDO of the CanOpen side on my
>     EL6731
>
>     static int err_code;
>     static int cnt;
>     static int x, y, z, i, num_config_lines;
>     static char app_str[1024];
>     static unsigned char pb_config_buf[2048];
>     static int ecrt_retval;
>     uint32_t    value_to_write;
>     uint32_t    abort_code;
>
>     struct config_item {
>         unsigned int slave_pos;
>         unsigned short address;
>         char * config_string;
>     };
>
>     // 6 Atos Hydraulic valves without rxpdo2
>     const config_item config [] = {
>
>             // EL67xx CoE Init Cmd 2 (F800:00)
>             {19, 0xF800, "11 00 7F 06 80 00 10 27 00 00 00 00 00 00 00
>     1E 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00"},
>             // EL67xx CoE Init Cmd 3 (8000:00)
>             {19, 0x8000, "2E 00 01 00 98 01 00 07 F4 00 00 00 02 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64
>     00 03 00 D0 07 D0 07 05 00 0A 00 00 00 00 00 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
>             // EL67xx CoE Init Cmd 4 (8006:00)
>             {19, 0x8006, "03 00 81 01 00 00 FF 02 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>     00"},
>             // EL67xx CoE Init Cmd 5 (8008:00)
>             {19, 0x8008, "04 00 01 02 00 00 FF 02 00 00 00 00 00 00 01
>     03 00 00 FF 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00"},
>             // EL67xx CoE Init Cmd 6 (8003:00)
>             {19, 0x8003, "0E 00 00 18 01 04 00 81 01 00 00 00 18 02 01
>     00 FF 01 18 01 04 00 81 03 00 00 01 18 02 01 00 FF 02 18 01 04 00
>     81 04 00 00 02 18 02 01 00 FF 00 14 01 04 00 01 02 00 00 00 14 02
>     01 00 FF 01 14 01 04 00 01 03 00 00 01 14 02 01 00 FF 02 14 01 04
>     00 01 04 00 00 02 14 02 01 00 FF 03 14 01 04 00 01 05 00 00 03 14
>     02 01 00 FF"},
>             // EL67xx CoE Init Cmd 7 (8010:00)
>             {19, 0x8010, "2E 00 02 00 98 01 00 07 F4 00 00 00 02 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64
>     00 03 00 D0 07 D0 07 05 00 0A 00 00 00 00 00 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
>             // EL67xx CoE Init Cmd 8 (8016:00)
>             {19, 0x8016, "03 00 82 01 00 00 FF 02 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>     00"},
>             // EL67xx CoE Init Cmd 9 (8018:00)
>             {19, 0x8018, "04 00 02 02 00 00 FF 02 00 00 00 00 00 00 02
>     03 00 00 FF 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00"},
>             // EL67xx CoE Init Cmd 10 (8013:00)
>             {19, 0x8013, "0E 00 00 18 01 04 00 82 01 00 00 00 18 02 01
>     00 FF 01 18 01 04 00 82 03 00 00 01 18 02 01 00 FF 02 18 01 04 00
>     82 04 00 00 02 18 02 01 00 FF 00 14 01 04 00 02 02 00 00 00 14 02
>     01 00 FF 01 14 01 04 00 02 03 00 00 01 14 02 01 00 FF 02 14 01 04
>     00 02 04 00 00 02 14 02 01 00 FF 03 14 01 04 00 02 05 00 00 03 14
>     02 01 00 FF"},
>             // EL67xx CoE Init Cmd 11 (8020:00)
>             {19, 0x8020, "2E 00 03 00 98 01 00 07 F4 00 00 00 02 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64
>     00 03 00 D0 07 D0 07 05 00 0A 00 00 00 00 00 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
>             // EL67xx CoE Init Cmd 12 (8026:00)
>             {19, 0x8026, "03 00 83 01 00 00 FF 02 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>     00"},
>             // EL67xx CoE Init Cmd 13 (8028:00)
>             {19, 0x8028, "04 00 03 02 00 00 FF 02 00 00 00 00 00 00 03
>     03 00 00 FF 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00"},
>             // EL67xx CoE Init Cmd 14 (8023:00)
>             {19, 0x8023, "0E 00 00 18 01 04 00 83 01 00 00 00 18 02 01
>     00 FF 01 18 01 04 00 83 03 00 00 01 18 02 01 00 FF 02 18 01 04 00
>     83 04 00 00 02 18 02 01 00 FF 00 14 01 04 00 03 02 00 00 00 14 02
>     01 00 FF 01 14 01 04 00 03 03 00 00 01 14 02 01 00 FF 02 14 01 04
>     00 03 04 00 00 02 14 02 01 00 FF 03 14 01 04 00 03 05 00 00 03 14
>     02 01 00 FF"},
>             // EL67xx CoE Init Cmd 15 (8030:00)
>             {19, 0x8030, "2E 00 04 00 98 01 00 07 F4 00 00 00 02 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64
>     00 03 00 D0 07 D0 07 05 00 0A 00 00 00 00 00 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
>             // EL67xx CoE Init Cmd 16 (8036:00)
>             {19, 0x8036, "03 00 84 01 00 00 FF 02 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>     00"},
>             // EL67xx CoE Init Cmd 17 (8038:00)
>             {19, 0x8038, "04 00 04 02 00 00 FF 02 00 00 00 00 00 00 04
>     03 00 00 FF 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00"},
>             // EL67xx CoE Init Cmd 18 (8033:00)
>             {19, 0x8033, "0E 00 00 18 01 04 00 84 01 00 00 00 18 02 01
>     00 FF 01 18 01 04 00 84 03 00 00 01 18 02 01 00 FF 02 18 01 04 00
>     84 04 00 00 02 18 02 01 00 FF 00 14 01 04 00 04 02 00 00 00 14 02
>     01 00 FF 01 14 01 04 00 04 03 00 00 01 14 02 01 00 FF 02 14 01 04
>     00 04 04 00 00 02 14 02 01 00 FF 03 14 01 04 00 04 05 00 00 03 14
>     02 01 00 FF"},
>             // EL67xx CoE Init Cmd 19 (8040:00)
>             {19, 0x8040, "2E 00 05 00 98 01 00 07 F4 00 00 00 02 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64
>     00 03 00 D0 07 D0 07 05 00 0A 00 00 00 00 00 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
>             // EL67xx CoE Init Cmd 20 (8046:00)
>             {19, 0x8046, "03 00 85 01 00 00 FF 02 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>     00"},
>             // EL67xx CoE Init Cmd 21 (8048:00)
>             {19, 0x8048, "04 00 05 02 00 00 FF 02 00 00 00 00 00 00 05
>     03 00 00 FF 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00"},
>             // EL67xx CoE Init Cmd 22 (8043:00)
>             {19, 0x8043, "0E 00 00 18 01 04 00 85 01 00 00 00 18 02 01
>     00 FF 01 18 01 04 00 85 03 00 00 01 18 02 01 00 FF 02 18 01 04 00
>     85 04 00 00 02 18 02 01 00 FF 00 14 01 04 00 05 02 00 00 00 14 02
>     01 00 FF 01 14 01 04 00 05 03 00 00 01 14 02 01 00 FF 02 14 01 04
>     00 05 04 00 00 02 14 02 01 00 FF 03 14 01 04 00 05 05 00 00 03 14
>     02 01 00 FF"},
>             // EL67xx CoE Init Cmd 23 (8050:00)
>             {19, 0x8050, "2E 00 06 00 98 01 00 07 F4 00 00 00 02 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64
>     00 03 00 D0 07 D0 07 05 00 0A 00 00 00 00 00 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
>             // EL67xx CoE Init Cmd 24 (8056:00)
>             {19, 0x8056, "03 00 86 01 00 00 FF 02 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>     00"},
>             // EL67xx CoE Init Cmd 25 (8058:00)
>             {19, 0x8058, "04 00 06 02 00 00 FF 02 00 00 00 00 00 00 06
>     03 00 00 FF 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>     00 00 00 00 00 00 00 00 00 00 00 00 00"},
>             // EL67xx CoE Init Cmd 26 (8053:00)
>             {19, 0x8053, "0E 00 00 18 01 04 00 86 01 00 00 00 18 02 01
>     00 FF 01 18 01 04 00 86 03 00 00 01 18 02 01 00 FF 02 18 01 04 00
>     86 04 00 00 02 18 02 01 00 FF 00 14 01 04 00 06 02 00 00 00 14 02
>     01 00 FF 01 14 01 04 00 06 03 00 00 01 14 02 01 00 FF 02 14 01 04
>     00 06 04 00 00 02 14 02 01 00 FF 03 14 01 04 00 06 05 00 00 03 14
>     02 01 00 FF"},
>             // download pdo 0x1C12 index
>             {19, 0x1C12, "06 00 00 16 01 16 02 16 03 16 04 16 05 16"},
>             // download pdo 0x1C13 index
>             {19, 0x1C13, "0A 00 00 1A 01 1A 02 1A 03 1A 04 1A 05 1A 81
>     1A 82 1A 83 1A 84 1A"}
>     };
>
>     num_config_lines = sizeof(config)/sizeof(config_item);
>
>     for (x=0 ; x<num_config_lines ; x++ ) {
>         cout << "Downloading obj " << config[x].address << " " <<
>     config[x].config_string << "   \n";
>         y=0;
>         for (z=0 ; z<strlen(config[x].config_string) ; z++) if
>     (config[x].config_string[z] != ' ')
>     app_str[y++]=config[x].config_string[z];
>
>         app_str[y]='\0';
>         cnt = strToCharArray(app_str, pb_config_buf);
>         if ((err_code =
>     ecrt_slave_config_complete_sdo(slave_config_list[config[x].slave_pos],
>     config[x].address, pb_config_buf, cnt)) != 0) {
>     //    if ((err_code =
>     ecrt_slave_config_complete_sdo(config[x].slave_pos,
>     config[x].address, pb_config_buf, cnt)) != 0) {
>             cout << "Object configuration failed " <<
>     config[x].address << " Errocode = " << err_code << "\n";
>             cout << "Data is: " << pb_config_buf  << "\n";
>             cout << "Data size is: " << cnt << "\n";
>             exit(-1);
>         } else {
>             cout << "Downloading obj " << config[x].address << " " <<
>     app_str << "   OK\n";
>
>         }
>     }
>
>
>     On 19/01/2016 16:05, Matze Thias wrote:
>>     Hello,
>>
>>     I am trying to configure the EL6751 at the moment, so that I am
>>     able to send raw CAN messages over
>>     ethercat(http://infosys.beckhoff.com/content/1033/el6751/html/el6751_layer2_statemachine.htm?id=10857).
>>     I took the configuration, which is done in terms of
>>     sdo-startup-downloads, from one of the twincat dialogs. Which
>>     method for sdo configuration is the right to choose?
>>
>>     If I use ecrt_master_sdo_download_complete for the different
>>     SDO-Objects to upload, nothing happens. When using
>>     ecrt_slave_config_complete_sdo the device error-led starts
>>     blinking(indicating, that some configuration is in progress) but
>>     at the same time I get this:
>>
>>     Jan 19 15:50:06 e-node8 kernel: [611927.053364] EtherCAT ERROR
>>     0-1: Failed to set SAFEOP state, slave refused state change
>>     (PREOP + ERROR).
>>     Jan 19 15:50:06 e-node8 kernel: [611927.059801] EtherCAT ERROR
>>     0-1: Unknown AL status code 0xF101.
>>
>>     Can anyone explain the error and has a solution for this? Maybe
>>     someone has experience in getting the el6751 configured and
>>     work-ready for this scenario and can share his insights :) ?
>>
>>     Greetings,
>>
>>     Matze Thias
>>
>>
>>
>>     _______________________________________________
>>     etherlab-users mailing list
>>     etherlab-users at etherlab.org  <mailto:etherlab-users at etherlab.org>
>>     http://lists.etherlab.org/mailman/listinfo/etherlab-users
>
>
>     _______________________________________________
>     etherlab-users mailing list
>     etherlab-users at etherlab.org <mailto:etherlab-users at etherlab.org>
>     http://lists.etherlab.org/mailman/listinfo/etherlab-users
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.etherlab.org/pipermail/etherlab-users/attachments/20160122/00d2af57/attachment-0004.htm>


More information about the Etherlab-users mailing list