<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-NZ link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>Your </span><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>strToCharArray</span><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'> function is corrupting memory by looping too many times – you loop up to the number of characters in the input array, but each loop reads two characters from the array.  You’re therefore writing twice as much data as you should be, and half of it is garbage.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>You really shouldn’t have that sort of code anyway, since it’s all constant data in the first place.  Change the global definitions from a string to a byte array.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'>From:</span></b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'> David Jiménez Mejías [mailto:david.jimenez@gtc.iac.es] <br><b>Sent:</b> Friday, 30 October 2015 23:13<br><b>To:</b> Gavin Lambert <gavin.lambert@compacsort.com>; hm@igh-essen.com; etherlab-users@etherlab.org<br><b>Subject:</b> RE: [etherlab-users] Beckhoff 6731-0010 initialization<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>Hi Gavin,<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>thanks for your answer.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>I modified the user example from the EtherCAT Master.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>With the actual code I get to be on pre-operational state the Phoenix Contact Can slave (it was on error before the SDO configuration).<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>The problem it's on the Can Master, it get into PREOP+ERROR when it's going to OP.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>This is the main.c code that I'm using.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><br>#include <errno.h><br>#include <signal.h><br>#include <stdio.h><br>#include <string.h><br>#include <time.h><br>#include <sched.h><br>#include <sys/resource.h><br>#include <sys/time.h><br>#include <sys/types.h><br>#include <unistd.h><br>#include <sys/mman.h><br>#include <pthread.h><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/****************************************************************************/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>#include "ecrt.h"<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/****************************************************************************/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>// Application parameters<br>#define FREQUENCY 10<br>#define PRIORITY 1<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>// Optional features<br>#define CONFIGURE_PDOS  1<br>#define SDO_ACCESS      0<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/****************************************************************************/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>// EtherCAT<br>static ec_master_t *master = NULL;<br>static ec_master_state_t master_state = {};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>static ec_domain_t *domain1 = NULL;<br>static ec_domain_state_t domain1_state = {};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>static ec_slave_config_t *sc_EL2602_dig_out = NULL;<br>static ec_slave_config_state_t sc_EL2602_dig_out_state = {};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>static ec_slave_config_t *sc_EL2008_dig_out = NULL;<br>static ec_slave_config_state_t sc_EL2008_dig_out_state = {};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>static ec_slave_config_t *sc_EL3202_ana_in = NULL;<br>static ec_slave_config_state_t sc_EL3202_ana_in_state = {};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>static ec_slave_config_t *sc_EL6751_Canopen = NULL;<br>static ec_slave_config_state_t sc_EL6751_Canopen_state = {};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><br>// CanOpen Master configuration.<br>// Got it from the StartUp SDO from TwinCAT<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>const char *pb_config_master_0x1C32=<br>    "0300010000093D0000000000";<br>const char *pb_config_master_0x1C33 =<br>    "030022000000000000000000";<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>const char *pb_config_master_0xf800 =<br>    "0A007F0380001E00010010006400";<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>const char *pb_config_master_0x8000 =<br>    "2B000700000000000000000000000000000000009101030084"<br>    "00000001000001000000000000000000000000000000000000"<br>    "00006400030000000000010178000A00";<br>const char *pb_config_master_0x8001 =<br>    "010001000000FF018701000000000018";<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>const char *pb_config_master_0x8002 =<br>    "010000000000FF040702000000000014";<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>const char *pb_config_master_0x8003 =<br>    "10000018010400870100000018020100FF0118010400870200"<br>    "000118020100FF0218010400870300000218020100FF031801"<br>    "0400870400000318020100FF00140104000702000000140201"<br>    "00FF0114010400070300000114020100FF0214010400070400"<br>    "000214020100FF0314010400070500000314020100FF";<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/*----------------------*/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><br>// Timer<br>static unsigned int sig_alarms = 0;<br>static unsigned int user_alarms = 0;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>// User Application Vars<br>int num;<br>short niTemp = 0;<br>short nFlag = 0;<br>short nInit = 0;<br>static short nLimitMax = 320; <br>static short nLimitMin = 300;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>int nPT100_1 = 0;<br>int nPT100_2 = 0;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><br>/****************************************************************************/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>// process data<br>static uint8_t *domain1_pd = NULL;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>// Posición de Elementos (Igual es preferible la designación por nombre de <br>// terminal EK1100_Pos por ejemplo)<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>#define EK1100Pos 0, 0<br>#define EL2602Pos 0, 1<br>#define EL3202Pos 0, 2<br>#define EL2008Pos 0, 3<br>#define EL6751Pos 0, 4<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>// Definición de info del producto, VendorID y ProductNum<br>#define Beckhoff_EK1100 0x00000002, 0x044c2c52<br>#define Beckhoff_EL2602 0x00000002, 0x0a2a3052<br>#define Beckhoff_EL2008 0x00000002, 0x07d83052<br>#define Beckhoff_EL3202 0x00000002, 0x0c823052<br>#define Beckhoff_EL6751 0x00000002, 0x1a5f3052<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><br>// offsets for PDO entries<br>static unsigned int off_ana_in_value;<br>static unsigned int off_ana_in_status;<br>static unsigned int off_ana_in_value2;<br>static unsigned int off_ana_in_status2;<br>static unsigned int off_EL2602_dig_out;<br>static unsigned int off_EL2008_dig_out;<br>static unsigned int off_in_CanMaster;<br>static unsigned int off_out_CanMaster;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>// Se identifican los PDOs correspondientes a cada elemento. La dirección<br>// del Indice es 0x7000, si es Output, o 0x6000 si es Input. Si existen más E/S<br>// se van situando en saltos de 10: 0x6010, 0x7010 etc ... El subindice <br>// se localiza con un CSTRUCT pudiendo darse en Decimal o Hexadecimal<br> <br>const static ec_pdo_entry_reg_t domain1_regs[] = {<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    {EL2602Pos, Beckhoff_EL2602, 0x7000, 0x01, &off_EL2602_dig_out},<br>    {EL2008Pos, Beckhoff_EL2008, 0x7000, 0x01, &off_EL2008_dig_out},<br>    {EL3202Pos, Beckhoff_EL3202, 0x6000, 0x11, &off_ana_in_value},<br>    {EL3202Pos, Beckhoff_EL3202, 0x6010, 0x11, &off_ana_in_value2},<br>    {EL3202Pos, Beckhoff_EL3202, 0x6000, 0x01, &off_ana_in_status},<br>    {EL3202Pos, Beckhoff_EL3202, 0x6000, 0x01, &off_ana_in_status2},<br>    {EL6751Pos, Beckhoff_EL6751, 0x7000, 0x01, &off_out_CanMaster},<br>    {EL6751Pos, Beckhoff_EL6751, 0x6000, 0x01, &off_in_CanMaster},<br>    {}<br>};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>static unsigned int counter = 0;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/*****************************************************************************/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>#if CONFIGURE_PDOS<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>// Analog in --------------------------<br>/* Master 0, Slave 2, "EL3202-0010"<br> * Vendor ID:       0x00000002<br> * Product code:    0x0c823052<br> * Revision number: 0x0014000a<br> */<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>ec_pdo_entry_info_t slave_2_pdo_entries[] = {<br>    {0x6000, 0x01, 1}, /* Underrange */<br>    {0x6000, 0x02, 1}, /* Overrange */<br>    {0x6000, 0x03, 2}, /* Limit 1 */<br>    {0x6000, 0x05, 2}, /* Limit 2 */<br>    {0x6000, 0x07, 1}, /* Error */<br>    {0x0000, 0x00, 7}, /* Gap */<br>    {0x1800, 0x07, 1}, // TxPDO State<br>    {0x1800, 0x09, 1}, // TxPDO Toggle<br>    {0x6000, 0x11, 16}, /* Value */    // PT100 Sensor 1<br>    {0x6010, 0x01, 1}, /* Underrange */<br>    {0x6010, 0x02, 1}, /* Overrange */<br>    {0x6010, 0x03, 2}, /* Limit 1 */<br>    {0x6010, 0x05, 2}, /* Limit 2 */<br>    {0x6010, 0x07, 1}, /* Error */<br>    {0x0000, 0x00, 7}, /* Gap */<br>    {0x1801, 0x07, 1},<br>    {0x1801, 0x09, 1},<br>    {0x6010, 0x11, 16}, /* Value */    // PT100 Sensor 2<br>};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>ec_pdo_info_t slave_2_pdos[] = {<br>    {0x1a00, 9, slave_2_pdo_entries + 0}, /* RTD TxPDO-Map Ch.1 */<br>    {0x1a01, 9, slave_2_pdo_entries + 9}, /* RTD TxPDO-Map Ch.2 */<br>};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>ec_sync_info_t slave_2_syncs[] = {<br>    {0, EC_DIR_OUTPUT, 0, NULL, EC_WD_DISABLE},<br>    {1, EC_DIR_INPUT, 0, NULL, EC_WD_DISABLE},<br>    {2, EC_DIR_OUTPUT, 0, NULL, EC_WD_DISABLE},<br>    {3, EC_DIR_INPUT, 2, slave_2_pdos + 0, EC_WD_DISABLE},<br>    {0xff}<br>};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>// Analog out -------------------------<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>// Digital out ------------------------<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/*****/<br>/* Master 0, Slave 1, "EL2602"<br> * Vendor ID:       0x00000002<br> * Product code:    0x0a2a3052<br> * Revision number: 0x00120000<br> */<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>ec_pdo_entry_info_t slave_1_pdo_entries[] = {<br>    {0x7000, 0x01, 1}, /* Output Fun and Valve*/<br>    {0x7010, 0x01, 1}, /* Output */<br>};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>ec_pdo_info_t slave_1_pdos[] = {<br>    {0x1600, 1, slave_1_pdo_entries + 0}, /* Channel 1 */<br>    {0x1601, 1, slave_1_pdo_entries + 1}, /* Channel 2 */<br>};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>ec_sync_info_t slave_1_syncs[] = {<br>    {0, EC_DIR_OUTPUT, 2, slave_1_pdos + 0, EC_WD_ENABLE},<br>    {0xff}<br>};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/* Master 0, Slave 3, "EL2008"<br> * Vendor ID:       0x00000002<br> * Product code:    0x07d83052<br> * Revision number: 0x00110000<br> */<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>ec_pdo_entry_info_t slave_3_pdo_entries[] = {<br>    {0x7000, 0x01, 1}, /* Output */<br>    {0x7010, 0x01, 1}, /* Output */<br>    {0x7020, 0x01, 1}, /* Output */    // Relay 1<br>    {0x7030, 0x01, 1}, /* Output */    // Relay 2<br>    {0x7040, 0x01, 1}, /* Output */    // Relay 3<br>    {0x7050, 0x01, 1}, /* Output */    // Relay 4<br>    {0x7060, 0x01, 1}, /* Output */    // Relay 5<br>    {0x7070, 0x01, 1}, /* Output */<br>};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>ec_pdo_info_t slave_3_pdos[] = {<br>    {0x1600, 1, slave_3_pdo_entries + 0}, /* Channel 1 */<br>    {0x1601, 1, slave_3_pdo_entries + 1}, /* Channel 2 */<br>    {0x1602, 1, slave_3_pdo_entries + 2}, /* Channel 3 */<br>    {0x1603, 1, slave_3_pdo_entries + 3}, /* Channel 4 */<br>    {0x1604, 1, slave_3_pdo_entries + 4}, /* Channel 5 */<br>    {0x1605, 1, slave_3_pdo_entries + 5}, /* Channel 6 */<br>    {0x1606, 1, slave_3_pdo_entries + 6}, /* Channel 7 */<br>    {0x1607, 1, slave_3_pdo_entries + 7}, /* Channel 8 */<br>};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>ec_sync_info_t slave_3_syncs[] = {<br>    {0, EC_DIR_OUTPUT, 8, slave_3_pdos + 0, EC_WD_ENABLE},<br>    {0xff}<br>};<br>// Comm Modules ----------------------------<br>/* Master 0, Slave 4, "EL6751"<br> * Vendor ID:       0x00000002<br> * Product code:    0x1a5f3052<br> * Revision number: 0x00130000<br> */<br>ec_pdo_entry_info_t slave_4_pdo_entries[] = {<br>  { 0x6000, 1, 8 },    /* 1 */<br>  { 0x7000, 1, 32 },   /* 0 */<br>  { 0xA000, 1, 8 },    /* 2 */<br>  { 0xA000, 2, 1 },    /* 2 */<br>  { 0xF100, 1, 8 },    /* 3 */<br>  { 0xF100, 2, 1 },    /* 3 */<br>  { 0xF100, 3, 16 },   /* 4 */<br>  { 0xF100, 5, 8 },    /* 5 */<br>  { 0xF100, 4, 8 },    /* 5 */<br>  { 0xA000, 2, 1 },    /* 6 */<br>/*  { 0x0000, 0, 6 },*/<br>};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>ec_pdo_info_t slave_4_pdos[] = {<br>    {0x1a00, 1, slave_4_pdo_entries + 0}, /* DPS TxPDO-Map Slave     */<br>    {0x1600, 1, slave_4_pdo_entries + 1}, /* DPS RxPDO-Map Slave     */<br>    {0x1a80, 8, slave_4_pdo_entries + 2},<br>};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>ec_sync_info_t slave_4_syncs[] = {<br>    {0, EC_DIR_OUTPUT, 0, NULL, EC_WD_DISABLE},<br>    {1, EC_DIR_INPUT, 0, NULL, EC_WD_DISABLE},<br>    {2, EC_DIR_OUTPUT, 1, slave_4_pdos + 0, EC_WD_DISABLE},<br>    {3, EC_DIR_INPUT, 2, slave_4_pdos + 1, EC_WD_DISABLE},<br>    {0xff}<br>};<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>#endif<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/*****************************************************************************/<br>/* Helper funktion, buffer has be allocated and big enough */<br>unsigned int strToCharArray(const char *str,unsigned char *buffer)<br>    {<br>        unsigned int i;<br>        unsigned char byteVal;<br>        //        const char *str = pb_config;<br>        //        unsigned char cf_data[256];<br>        size_t size = strlen(str);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>        for (i = 0; i < size; i++) {<br>            sscanf(str, "%2X", &byteVal);<br>            str += 2;<br>            buffer[i] = (uint8_t) byteVal;<br>        }<br>        return (size / 2);<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/*****************************************************************************/<br>/*****************************************************************************/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>#if SDO_ACCESS<br>static ec_sdo_request_t *sdo;<br>#endif<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/*****************************************************************************/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>void check_domain1_state(void)<br>{<br>    ec_domain_state_t ds;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    ecrt_domain_state(domain1, &ds);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    if (ds.working_counter != domain1_state.working_counter)<br>        printf("Domain1: WC %u.\n", ds.working_counter);<br>    if (ds.wc_state != domain1_state.wc_state)<br>        printf("Domain1: State %u.\n", ds.wc_state);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    domain1_state = ds;<br>}<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/*****************************************************************************/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>void check_master_state(void)<br>{<br>    ec_master_state_t ms;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    ecrt_master_state(master, &ms);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    if (ms.slaves_responding != master_state.slaves_responding)<br>        printf("%u slave(s).\n", ms.slaves_responding);<br>    if (ms.al_states != master_state.al_states)<br>        printf("AL states: 0x%02X.\n", ms.al_states);<br>    if (ms.link_up != master_state.link_up)<br>        printf("Link is %s.\n", ms.link_up ? "up" : "down");<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    master_state = ms;<br>}<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/*****************************************************************************/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>void check_slave_config_states(void)<br>{<br>    ec_slave_config_state_t s;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    ecrt_slave_config_state(sc_EL3202_ana_in, &s);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    if (s.al_state != sc_EL3202_ana_in_state.al_state)<br>        printf("EL3202: State 0x%02X.\n", s.al_state);<br>    if (s.online != sc_EL3202_ana_in_state.online)<br>        printf("EL3202: %s.\n", s.online ? "online" : "offline");<br>    if (s.operational != sc_EL3202_ana_in_state.operational)<br>        printf("EL3202: %soperational.\n", s.operational ? "" : "Not ");<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    sc_EL3202_ana_in_state = s;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    ecrt_slave_config_state(sc_EL2602_dig_out, &s);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    if (s.al_state != sc_EL2602_dig_out_state.al_state)<br>        printf("EL2602: State 0x%02X.\n", s.al_state);<br>    if (s.online != sc_EL2602_dig_out_state.online)<br>        printf("EL2602: %s.\n", s.online ? "online" : "offline");<br>    if (s.operational != sc_EL2602_dig_out_state.operational)<br>        printf("EL2602: %soperational.\n", s.operational ? "" : "Not ");<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    sc_EL2602_dig_out_state = s;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    ecrt_slave_config_state(sc_EL2008_dig_out, &s);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    if (s.al_state != sc_EL2008_dig_out_state.al_state)<br>        printf("EL2008: State 0x%02X.\n", s.al_state);<br>    if (s.online != sc_EL2008_dig_out_state.online)<br>        printf("EL2008: %s.\n", s.online ? "online" : "offline");<br>    if (s.operational != sc_EL2008_dig_out_state.operational)<br>        printf("EL2008: %soperational.\n", s.operational ? "" : "Not ");<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    sc_EL2008_dig_out_state = s;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    ecrt_slave_config_state(sc_EL6751_Canopen, &s);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    if (s.al_state != sc_EL6751_Canopen_state.al_state)<br>        printf("EL6751: State 0x%02X.\n", s.al_state);<br>    if (s.online != sc_EL6751_Canopen_state.online)<br>        printf("EL6751: %s.\n", s.online ? "online" : "offline");<br>    if (s.operational != sc_EL6751_Canopen_state.operational)<br>        printf("EL6751: %soperational.\n", s.operational ? "" : "Not ");<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    sc_EL6751_Canopen_state = s;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><br>}<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/*****************************************************************************/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>#if SDO_ACCESS<br>void read_sdo(void)<br>{<br>    switch (ecrt_sdo_request_state(sdo)) {<br>        case EC_REQUEST_UNUSED: // request was not used yet<br>            ecrt_sdo_request_read(sdo); // trigger first read<br>            break;<br>        case EC_REQUEST_BUSY:<br>            fprintf(stderr, "Still busy...\n");<br>            break;<br>        case EC_REQUEST_SUCCESS:<br>            fprintf(stderr, "SDO value: 0x%04X\n",<br>                    EC_READ_U16(ecrt_sdo_request_data(sdo)));<br>            ecrt_sdo_request_read(sdo); // trigger next read<br>            break;<br>        case EC_REQUEST_ERROR:<br>            fprintf(stderr, "Failed to read SDO!\n");<br>            ecrt_sdo_request_read(sdo); // retry reading<br>            break;<br>    }<br>}<br>#endif<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/****************************************************************************/<br>//********************************CYCLIC TASK*******************************//<br>void cyclic_task()<br>{<br>    // receive process data<br>    ecrt_master_receive(master);<br>    ecrt_domain_process(domain1);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    // check process data state (optional)<br>    check_domain1_state();<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    if (counter) {<br>        counter--;<br>    } else { // do this at 1 Hz<br>        counter = FREQUENCY;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>        // check for master state (optional)<br>        check_master_state();<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>        // check for islave configuration state(s) (optional)<br>        check_slave_config_states();<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>#if SDO_ACCESS<br>        // read process data SDO<br>        read_sdo();<br>#endif<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><br>// Reading Analog Input & Writing Digital Output<br>nPT100_1=EC_READ_U16(domain1_pd + off_ana_in_value);<br>nPT100_2=EC_READ_U16(domain1_pd + off_ana_in_value2);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>#if 1<br>        switch (nFlag){<br>        case 0:        // IDLE<br>            if (nPT100_1 > nLimitMax) {<br>                     EC_WRITE_BIT(domain1_pd+ off_EL2602_dig_out,0x00,1);    // Para escribir una salida u otra sumar 1 a off_dig_out<br>             EC_WRITE_U32(domain1_pd + off_out_CanMaster + 1,0x55555555);<br>                 nFlag=10;<br>             printf("Temperature PT100_1 Reached the Max Limit -> Value: %u\n",<br>                     EC_READ_U16(domain1_pd + off_ana_in_value));<br>             printf("Status Value: %u\n",<br>                     EC_READ_U8(domain1_pd + off_ana_in_status));<br>                 printf("Funs and Valve Turned ON\n\n");<br>                 }<br>            if (nPT100_2 > nLimitMax) {<br>                     EC_WRITE_BIT(domain1_pd+ off_EL2602_dig_out,0x00,1);    // Para escribir una salida u otra sumar 1 a off_dig_out<br>             EC_WRITE_U32(domain1_pd + off_out_CanMaster + 1,0x00000000);<br>                 nFlag=10;<br>             printf("Temperature PT100_2 Reached the Max Limit -> Value: %u\n",<br>                     EC_READ_U16(domain1_pd + off_ana_in_value2));<br>             printf("Status Value: %u\n",<br>                     EC_READ_U8(domain1_pd + off_ana_in_status2));<br>                 printf("Funs and Valve Turned ON\n\n");<br>                 }<br>             break;<br>        case 10:        // OverTemp<br>            if ((nPT100_1 < nLimitMin)&&(nPT100_2 < nLimitMin)) {<br>                    EC_WRITE_BIT(domain1_pd + off_EL2602_dig_out,0x00,0);<br>                nFlag=0;<br>            printf("Both Temperature Reached the Min Limit\n -> PT100_1 Value: %u || PT100_2 Value: %u \n",<br>                    EC_READ_U16(domain1_pd + off_ana_in_value),EC_READ_U16(domain1_pd + off_ana_in_value2));<br>                printf("Funs and Cooler Turned OFF\n\n");<br>                   }<br>                break;<br>        }<br>    EC_WRITE_BIT(domain1_pd + off_EL2008_dig_out, 0x02,0);<br>    EC_WRITE_BIT(domain1_pd + off_EL2008_dig_out, 0x03,1);<br>    EC_WRITE_BIT(domain1_pd + off_EL2008_dig_out, 0x04,0);<br>    EC_WRITE_BIT(domain1_pd + off_EL2008_dig_out, 0x05,1);<br>    EC_WRITE_BIT(domain1_pd + off_EL2008_dig_out, 0x06,0);<br>    EC_WRITE_U32(domain1_pd + off_out_CanMaster + 1,0x55555555);<br>    <br>#endif<br>    // send process data<br>    ecrt_domain_queue(domain1);<br>    ecrt_master_send(master);<br>}<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/****************************************************************************/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>void signal_handler(int signum) {<br>    switch (signum) {<br>        case SIGALRM:<br>            sig_alarms++;<br>            break;<br>    }<br>}<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/****************************************************************************/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>//********************************MAIN***************************************//<br>int main(int argc, char **argv)<br>{<br>    int cnt;<br>    unsigned char pb_config_buf[256];<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    ec_slave_config_t *sc;<br>    struct sigaction sa;<br>    struct itimerval tv;<br>    fprintf(stderr,"Requesting Master 0 ...\n");<br>    master = ecrt_request_master(0);<br>    if (!master)<br>        return -1;<br>    fprintf(stderr,"Creating Domain 1 ...\n");<br>    domain1 = ecrt_master_create_domain(master);<br>    if (!domain1)<br>        return -1;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    printf("Configuring PDOs...\n");<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>   if (!(sc = ecrt_master_slave_config(master, EK1100Pos, Beckhoff_EK1100))) {<br>        fprintf(stderr, "Failed to get slave configuration.\n");<br>        return -1;<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    fprintf(stderr,"Getting EL2602 Configuration ...\n");<br>    if (!(sc_EL2602_dig_out = ecrt_master_slave_config(<br>                    master,EL2602Pos, Beckhoff_EL2602))) {<br>        fprintf(stderr, "Failed to get slave configuration.\n");<br>        return -1;<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    printf("Configuring EL2602 PDOs...\n");<br>    if (ecrt_slave_config_pdos(sc_EL2602_dig_out, EC_END, slave_1_syncs)) {<br>        fprintf(stderr, "Failed to configure PDOs.\n");<br>        return -1;<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    fprintf(stderr,"Getting EL2008 Configuration ...\n");<br>    if (!(sc_EL2008_dig_out = ecrt_master_slave_config(<br>                    master,EL2008Pos, Beckhoff_EL2008))) {<br>        fprintf(stderr, "Failed to get slave configuration.\n");<br>        return -1;<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    printf("Configuring EL2008 PDOs...\n");<br>    if (ecrt_slave_config_pdos(sc_EL2008_dig_out, EC_END, slave_3_syncs)) {<br>        fprintf(stderr, "Failed to configure PDOs.\n");<br>        return -1;<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    fprintf(stderr,"Getting EL3202 Configuration ...\n");<br>    if (!(sc_EL3202_ana_in = ecrt_master_slave_config(<br>                    master, EL3202Pos, Beckhoff_EL3202))) {<br>        fprintf(stderr, "Failed to get slave configuration.\n");<br>        return -1;<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    printf("Configuring EL3202 PDOs...\n");<br>    if (ecrt_slave_config_pdos(sc_EL3202_ana_in, EC_END, slave_2_syncs)) {<br>        fprintf(stderr, "Failed to configure PDOs.\n");<br>        return -1;<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><br>    fprintf(stderr,"Getting EL6751 Configuration ...\n");<br>    if (!(sc_EL6751_Canopen = ecrt_master_slave_config(<br>                    master, EL6751Pos, Beckhoff_EL6751))) {<br>        fprintf(stderr, "Failed to get slave configuration.\n");<br>        return -1;<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    fprintf(stderr,"Starting EL6751 Configuration ...\n");<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    fprintf(stderr,"Proceeding 0x1C32 wrinting ...\n");<br>    cnt = strToCharArray(pb_config_master_0x1C32,pb_config_buf);<br>    ecrt_slave_config_complete_sdo(sc_EL6751_Canopen, 0x1C32, pb_config_buf, cnt);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    fprintf(stderr,"Proceeding 0x1C33 wrinting ...\n");<br>    cnt = strToCharArray(pb_config_master_0x1C33,pb_config_buf);<br>    ecrt_slave_config_complete_sdo(sc_EL6751_Canopen, 0x1C33, pb_config_buf, cnt);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    fprintf(stderr,"Proceeding 0xF800 wrinting ...\n");<br>    cnt = strToCharArray(pb_config_master_0xf800,pb_config_buf);<br>    ecrt_slave_config_complete_sdo(sc_EL6751_Canopen, 0xf800, pb_config_buf, cnt);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    fprintf(stderr,"Proceeding 0x8000 wrinting ...\n");<br>    cnt = strToCharArray(pb_config_master_0x8000,pb_config_buf);<br>    ecrt_slave_config_complete_sdo(sc_EL6751_Canopen, 0x8000, pb_config_buf, cnt);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    fprintf(stderr,"Proceeding 0x8001 wrinting ...\n");<br>    cnt = strToCharArray(pb_config_master_0x8001,pb_config_buf);<br>    ecrt_slave_config_complete_sdo(sc_EL6751_Canopen, 0x8001, pb_config_buf, cnt);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    fprintf(stderr,"Proceeding 0x8002 wrinting ...\n");<br>    cnt = strToCharArray(pb_config_master_0x8002,pb_config_buf);<br>    ecrt_slave_config_complete_sdo(sc_EL6751_Canopen, 0x8002, pb_config_buf, cnt);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    fprintf(stderr,"Proceeding 0x8003 wrinting ...\n");<br>    cnt = strToCharArray(pb_config_master_0x8003,pb_config_buf);<br>    ecrt_slave_config_complete_sdo(sc_EL6751_Canopen, 0x8003, pb_config_buf, cnt);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    fprintf(stderr,"EL6751 Configuration Ended ...\n");<br>/*---------*/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    printf("Configuring EL6751 PDOs...\n");<br>    if (ecrt_slave_config_pdos(sc_EL6751_Canopen, EC_END, slave_4_syncs)) {<br>        fprintf(stderr, "Failed to configure PDOs.\n");<br>        return -1;<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><br>#if SDO_ACCESS<br>    fprintf(stderr, "Creating SDO requests...\n");<br>    if (!(sdo = ecrt_slave_config_create_sdo_request(sc_EL6751_Canopen, 0xF002, 3,2))) {<br>        fprintf(stderr, "Failed to create SDO request.\n");<br>        return -1;<br>    }<br>    ecrt_sdo_request_timeout(sdo, 500); // ms<br>#endif<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    // Create configuration for bus coupler<br>    sc = ecrt_master_slave_config(master, EK1100Pos, Beckhoff_EK1100);<br>    if (!sc)<br>        return -1;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    if (ecrt_domain_reg_pdo_entry_list(domain1, domain1_regs)) {<br>        fprintf(stderr, "PDO entry registration failed!\n");<br>        return -1;<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    printf("Activating master...\n");<br>    if (ecrt_master_activate(master))<br>        return -1;<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    if (!(domain1_pd = ecrt_domain_data(domain1))) {<br>        return -1;<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>#if PRIORITY<br>    pid_t pid = getpid();<br>    if (setpriority(PRIO_PROCESS, pid, -19))<br>        fprintf(stderr, "Warning: Failed to set priority: %s\n",<br>                strerror(errno));<br>#endif<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    sa.sa_handler = signal_handler;<br>    sigemptyset(&sa.sa_mask);<br>    sa.sa_flags = 0;<br>    if (sigaction(SIGALRM, &sa, 0)) {<br>        fprintf(stderr, "Failed to install signal handler!\n");<br>        return -1;<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    printf("Starting timer...\n");<br>    tv.it_interval.tv_sec = 0;<br>    tv.it_interval.tv_usec = 1000000 / FREQUENCY;<br>    tv.it_value.tv_sec = 0;<br>    tv.it_value.tv_usec = 1000;<br>    if (setitimer(ITIMER_REAL, &tv, NULL)) {<br>        fprintf(stderr, "Failed to start timer: %s\n", strerror(errno));<br>        return 1;<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    printf("Started.\n");<br>    while (1) {<br>        pause();<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>#if 0<br>        struct timeval t;<br>        gettimeofday(&t, NULL);<br>        printf("%u.%06u\n", t.tv_sec, t.tv_usec);<br>#endif<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>        while (sig_alarms != user_alarms) {<br>            cyclic_task();<br>            user_alarms++;<br>        }<br>    }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>    return 0;<br>}<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>/****************************************************************************/<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>Thank you very much<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>Best regards<o:p></o:p></span></p></div></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<o:p></o:p></span></p></div><div><p class=MsoNormal><strong><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>David Jiménez Mejías -</span></strong><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> Gran Telescopio de Canarias S.A<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div><div><p class=MsoNormal><em><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>Ingeniero de Operación / Operation Engineer</span></em><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>​<o:p></o:p></span></p></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>  <o:p></o:p></span></p><blockquote style='border:none;border-left:solid black 1.5pt;padding:0cm 0cm 0cm 4.0pt;margin-left:3.75pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt'><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>-----Original Message-----<br>From: Gavin Lambert <<a href="mailto:gavinl@compacsort.com">gavinl@compacsort.com</a>><br>To: 'David Jiménez Mejías' <<a href="mailto:david.jimenez@gtc.iac.es">david.jimenez@gtc.iac.es</a>>, <<a href="mailto:hm@igh-essen.com">hm@igh-essen.com</a>>, <<a href="mailto:etherlab-users@etherlab.org">etherlab-users@etherlab.org</a>><br>Date: Fri, 30 Oct 2015 11:06:40 +1300<br>Subject: RE: [etherlab-users]  Beckhoff 6731-0010 initialization<br>  <o:p></o:p></span></p><div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>Most likely, there is something invalid in the parameters for the SDO configuration functions.  You’ll need to post all of the related code if you want help in locating it.</span><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'> </span><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><o:p></o:p></span></p></div><div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><div><p class=MsoNormal><b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:black'>From:</span></b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:black'> etherlab-users [<a href="mailto:etherlab-users-bounces@etherlab.org">mailto:etherlab-users-bounces@etherlab.org</a>] <b>On Behalf Of </b>David Jiménez Mejías<br><b>Sent:</b> Thursday, 29 October 2015 23:53<br><b>To:</b> <a href="mailto:hm@igh-essen.com">hm@igh-essen.com</a>; <a href="mailto:etherlab-users@etherlab.org">etherlab-users@etherlab.org</a><br><b>Subject:</b> [etherlab-users] Beckhoff 6731-0010 initialization</span><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><o:p></o:p></span></p></div></div></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>Dear Wilhelm,<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>I was reading your replies to this issue at the EtherLab-Users mailing list and it was very helpful for me.<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><a href="http://lists.etherlab.org/pipermail/etherlab-users/2012/001860.html">http://lists.etherlab.org/pipermail/etherlab-users/2012/001860.html</a><o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>I'm trying to configure a Can Network from the Beckhoff Can Master Module EL6751 with only one can slave (Phoenix Contact Can I/O Terminal).<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>I just do it the steps like the configuration of the EL6731 (Profibus Master Module):<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>     - Configure the Can Network with TwinCAT<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>     - Export the XML<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>     - Format it with xmllint<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>     - And take the necessary data:<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>          * PDOs Entries: Tx and Rx<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>          * StartUp SDO config of the next Index:<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>               + 0x1C32<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>               + 0x1C33<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>               + 0xF800<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>               + 0x8000<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>               + 0x8001<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>               + 0x8002<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>               + 0x8003<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>     - Implement the C code for the configuration, but I keep out from the app without error at the function: <o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>          * ecrt_slave_config_complete_sdo(sc, 0x1C32, pb_config_buf, cnt);<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>The last dmesg is:<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>[ 9574.754735] EtherCAT: Requesting master 0...<br>[ 9574.754754] EtherCAT: Successfully requested master 0.<br>[ 9574.754984] lt-ec_user_exam[7579]: segfault at 10 ip 00007fdced6058a5 sp 00007ffefada2900 error 4 in libethercat.so.1.0.0[7fdced601000+8000]<br>[ 9574.930388] EtherCAT 0: Releasing master...<br>[ 9574.930400] EtherCAT 0: Released.<br>[ 9607.095769] EtherCAT: Requesting master 0...<br>[ 9607.095792] EtherCAT: Successfully requested master 0.<br>[ 9607.095971] lt-ec_user_exam[7663]: segfault at 10 ip 00007fadcfdb98a5 sp 00007ffedfea14c0 error 4 in libethercat.so.1.0.0[7fadcfdb5000+8000]<br>[ 9607.276982] EtherCAT 0: Releasing master...<br>[ 9607.277021] EtherCAT 0: Released.<br>[ 9626.248196] EtherCAT: Requesting master 0...<br>[ 9626.248200] EtherCAT: Successfully requested master 0.<br>[ 9626.248261] lt-ec_user_exam[7744]: segfault at 10 ip 00007f741d0eb8a5 sp 00007ffe6e5358f0 error 4 in libethercat.so.1.0.0[7f741d0e7000+8000]<br>[ 9626.401297] EtherCAT 0: Releasing master...<br>[ 9626.401309] EtherCAT 0: Released.<br>[ 9753.014994] EtherCAT: Requesting master 0...<br>[ 9753.015011] EtherCAT: Successfully requested master 0.<br>[ 9753.015166] lt-ec_user_exam[7792]: segfault at 10 ip 00007f15e18768a5 sp 00007ffcbd184820 error 4 in libethercat.so.1.0.0[7f15e1872000+8000]<br>[ 9753.161441] EtherCAT 0: Releasing master...<br>[ 9753.161589] EtherCAT 0: Released.<br>[ 9799.019908] EtherCAT: Requesting master 0...<br>[ 9799.019915] EtherCAT: Successfully requested master 0.<br>[ 9799.020082] lt-ec_user_exam[7814]: segfault at 10 ip 00007fd538ee78a5 sp 00007ffd0c9fca80 error 4 in libethercat.so.1.0.0[7fd538ee3000+8000]<br>[ 9799.165522] EtherCAT 0: Releasing master...<br>[ 9799.165574] EtherCAT 0: Released.<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>I'm not sure is there is the correct information to know whats happens, tell me any doubt.<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>Thank you very much<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>King regards<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><strong><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>David Jiménez Mejías -</span></strong><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> Gran Telescopio de Canarias S.A<o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><em><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'>Ingeniero de Operación / Operation Engineer</span></em><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div></div><div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'> <o:p></o:p></span></p></div></div></div><div><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black'><br>----------<br>ADVERTENCIA: Sobre la privacidad y cumplimiento de la Ley de Protección de Datos, acceda a <a href="http://www.gtc.iac.es/gtc/legal_es.php">http://www.gtc.iac.es/gtc/legal_es.php</a><br>WARNING: For more information on privacy and fulfilment of the Law concerning the Protection of Data, consult <a href="http://www.gtc.iac.es/gtc/legal_es.php">http://www.gtc.iac.es/gtc/legal_es.php</a><o:p></o:p></span></p></div></div></div></blockquote></div><p class=MsoNormal><br>----------<br>ADVERTENCIA: Sobre la privacidad y cumplimiento de la Ley de Protección de Datos, acceda a <a href="http://www.gtc.iac.es/gtc/legal_es.php">http://www.gtc.iac.es/gtc/legal_es.php</a><br>WARNING: For more information on privacy and fulfilment of the Law concerning the Protection of Data, consult <a href="http://www.gtc.iac.es/gtc/legal_es.php">http://www.gtc.iac.es/gtc/legal_es.php</a><o:p></o:p></p></div></div></body></html>