<html><body>
<div style="font-size: 13.3333px; font-family: Tahoma; color: rgb(0, 0, 0); font-weight: 400; font-style: normal; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Hello Gavin,</div>

<div style="font-size: 13.3333px; font-family: Tahoma; color: rgb(0, 0, 0); font-weight: 400; font-style: normal; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"> </div>

<div style="font-size: 13.3333px; font-family: Tahoma; color: rgb(0, 0, 0); font-weight: 400; font-style: normal; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">thank you very much for your answer. Sorry for my late reply but I was working on other issues.</div>

<div style="font-size: 13.3333px; font-family: Tahoma; color: rgb(0, 0, 0); font-weight: 400; font-style: normal; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">I just change the way to configure the EL6751 as you said on the previus email. This is the new code parts:</div>

<div style="font-size: 13.3333px; font-family: Tahoma; color: rgb(0, 0, 0); font-weight: 400; font-style: normal; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"> </div>

<div style="font-size: 13.3333px; font-family: Tahoma; color: rgb(0, 0, 0); font-weight: 400; font-style: normal; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">
<div><br />
const uint8_t pb_config_master_0x1C32[]=<br />
    {0x03,0x00,0x01,0x00,0x00,0x09,0x3D,0x00,0x00,0x00,0x00,0x00};<br />
const uint8_t pb_config_master_0x1C33[] =<br />
    {0x03,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};</div>

<div>const uint8_t pb_config_master_0xf800[] =<br />
    {0x0A,0x00,0x7F,0x03,0x80,0x00,0x1E,0x00,0x01,0x00,0x10,0x00,0x64,0x00};</div>

<div>const uint8_t pb_config_master_0x8000[] =<br />
{0x2B,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x91,0x01,0x03,0x00,0x84,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x78,00,0x0A,0x00};</div>

<div>const uint8_t pb_config_master_0x8001[] =<br />
    {0x01,0x00,0x01,0x00,0x00,0x00,0xFF,0x01,0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x18};</div>

<div>const uint8_t pb_config_master_0x8002[] =<br />
    {0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0x04,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x14};</div>

<div>const uint8_t pb_config_master_0x8003[] =<br />
{0x10,0x00,0x00,0x18,0x01,0x04,0x00,0x87,0x01,0x00,0x00,0x00,0x18,0x02,0x01,0x00,0xFF,0x01,0x18,0x01,0x04,0x00,0x87,0x02,0x00,0x00,0x01,0x18,0x02,0x01,0x00,0xFF,0x02,0x18,0x01,0x04,0x00,0x87,0x03,0x00,0x00,0x02,0x18,0x02,0x01,0x00,0xFF,0x03,0x18,0x01,0x04,0x00,0x87,0x04,0x00,0x00,0x03,0x18,0x02,0x01,0x00,0xFF,0x00,0x14,0x01,0x04,0x00,0x07,0x02,0x00,0x00,0x00,0x14,0x02,0x01,0x00,0xFF,0x01,0x14,0x01,0x04,0x00,0x07,0x03,0x00,0x00,0x01,0x14,0x02,0x01,0x00,0xFF,0x02,0x14,0x01,0x04,0x00,0x07,0x04,0x00,0x00,0x02,0x14,0x02,0x01,0x00,0xFF,0x03,0x14,0x01,0x04,0x00,0x07,0x05,0x00,0x00,0x03,0x14,0x02,0x01,0x00,0xFF};</div>

<div> </div>

<div> </div>

<div>This is the definition, i'm not using the other intermediate function, i directly do:</div>

<div> </div>

<div>    fprintf(stderr,"Proceeding 0xF800 wrinting ...\n");<br />
    cnt = sizeof(pb_config_master_0xf800);<br />
    ecrt_slave_config_complete_sdo(sc_EL6751_Canopen, 0xf800, *pb_config_master_0xf800, cnt);</div>

<div> </div>

<div>And the same for all the entries. </div>

<div> </div>

<div>When I upload just the 0xF800 the EL6751 switch between OP and PREOP randomly, if I configure the other It keeps on PREOP + error, like some weeks before.</div>

<div> </div>

<div>During the time that it's operational I tried to upload, by command, this entry but it isn't updated by the code or return me an error like the next:</div>

<div> </div>

<div># /opt/etherlab/bin/ethercat upload -p4 -t uint8 0xF800 2<br />
# Failed to upload SDO: Input/output error</div>

<div> </div>

<div> </div>

<div>The dmesg output is:</div>

<div> </div>

<div>[26580.280652] EtherCAT ERROR 0-4: SDO upload 0x1A00:00 aborted.<br />
[26580.280656] EtherCAT ERROR 0-4: SDO abort message 0x06020000: "This object does not exist in the object directory".<br />
[26580.280657] EtherCAT ERROR 0-4: Failed to read number of mapped PDO entries.<br />
[26580.280658] EtherCAT WARNING 0-4: Failed to read PDO entries for PDO 0x1A00.<br />
[26580.280659] EtherCAT WARNING 0-4: Slave does not support changing the PDO mapping!<br />
[26580.280660] EtherCAT WARNING 0-4: Currently mapped PDO entries: (none). Entries to map: 0x6000:01/8<br />
[26580.280665] EtherCAT WARNING 0-4: Slave does not support assigning PDOs!<br />
[26580.280666] EtherCAT WARNING 0-4: Currently assigned PDOs: (none). PDOs to assign: 0x1A00<br />
[26580.680904] EtherCAT ERROR 0-4: SDO upload 0x1600:00 aborted.<br />
[26580.680908] EtherCAT ERROR 0-4: SDO abort message 0x06020000: "This object does not exist in the object directory".<br />
[26580.680909] EtherCAT ERROR 0-4: Failed to read number of mapped PDO entries.<br />
[26580.680911] EtherCAT WARNING 0-4: Failed to read PDO entries for PDO 0x1600.<br />
[26580.680911] EtherCAT WARNING 0-4: Slave does not support changing the PDO mapping!<br />
[26580.680912] EtherCAT WARNING 0-4: Currently mapped PDO entries: (none). Entries to map: 0x7000:01/32<br />
[26602.094059] EtherCAT 0: Link state of ecm0 changed to DOWN.<br />
[26602.094073] EtherCAT ERROR 0-4: Failed to receive CoE upload response datagram: Datagram error.<br />
[26602.094076] EtherCAT ERROR 0-4: Failed to read mapped PDO entry.<br />
[26602.094078] EtherCAT WARNING 0-4: Failed to read PDO entries for PDO 0x1A80.<br />
[26602.094079] EtherCAT WARNING 0-4: Slave does not support changing the PDO mapping!<br />
[26602.094080] EtherCAT WARNING 0-4: Currently mapped PDO entries: 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255 0xFFFF:FF/255. Entries to map: 0xA000:01/8 0xA000:02/1 0xF100:01/8 0xF100:02/1 0xF100:03/16 0xF100:05/8 0xF100:04/8 0xA000:02/1<br />
[26602.094124] EtherCAT WARNING 0-4: Slave does not support assigning PDOs!<br />
[26602.094124] EtherCAT WARNING 0-4: Currently assigned PDOs: (none). PDOs to assign: 0x1600 0x1A80<br />
[26602.194119] EtherCAT 0: Domain 0: Working counter changed to 0/8.<br />
[26602.194133] EtherCAT ERROR 0-4: Failed to receive process data sync manager configuration datagram: Datagram error.<br />
[26602.296669] EtherCAT 0: 0 slave(s) responding on main device.<br />
[26606.051471] EtherCAT 0: Releasing master...<br />
[26606.051480] EtherCAT 0: Master thread exited.<br />
[26606.051490] EtherCAT 0: Starting EtherCAT-IDLE thread.<br />
[26606.051577] EtherCAT 0: Released.<br />
[26606.915499] EtherCAT WARNING: Datagram ffff8800d493e678 (master-fsm) was SKIPPED 1 time.<br />
[26610.951922] EtherCAT 0: Link state of ecm0 changed to UP.<br />
[26610.953926] EtherCAT 0: 5 slave(s) responding on main device.<br />
[26610.953929] EtherCAT 0: Slave states on main device: INIT.<br />
[26610.954379] EtherCAT 0: Scanning bus.<br />
[26611.635164] EtherCAT 0: Bus scanning completed in 680 ms.<br />
[26611.635167] EtherCAT 0: Using slave 0 as DC reference clock.<br />
[26611.638343] EtherCAT 0: Slave states on main device: INIT, PREOP.<br />
[26611.766467] EtherCAT 0: Slave states on main device: PREOP.<br />
[26613.251044] EtherCAT: Requesting master 0...<br />
[26613.251049] EtherCAT: Successfully requested master 0.<br />
[26613.251232] EtherCAT 0: Domain0: Logical address 0x00000000, 22 byte, expected working counter 8.<br />
[26613.251234] EtherCAT 0:   Datagram domain0-0-main: Logical offset 0x00000000, 22 byte, type LRW.<br />
[26613.251338] EtherCAT 0: Master thread exited.<br />
[26613.251340] EtherCAT 0: Starting EtherCAT-OP thread.<br />
[26613.255430] EtherCAT WARNING 0: No app_time received up to now, but master already active.<br />
[26616.254531] EtherCAT 0: Domain 0: Working counter changed to 2/8.<br />
[26618.055638] EtherCAT 0: Domain 0: Working counter changed to 3/8.<br />
[26619.556570] EtherCAT 0: Domain 0: Working counter changed to 5/8.<br />
[26621.257595] EtherCAT ERROR 0-4: SDO upload 0x1A00:00 aborted.<br />
[26621.257598] EtherCAT ERROR 0-4: SDO abort message 0x06020000: "This object does not exist in the object directory".<br />
[26621.257600] EtherCAT ERROR 0-4: Failed to read number of mapped PDO entries.<br />
[26621.257600] EtherCAT WARNING 0-4: Failed to read PDO entries for PDO 0x1A00.<br />
[26621.257603] EtherCAT WARNING 0-4: Slave does not support changing the PDO mapping!<br />
[26621.257603] EtherCAT WARNING 0-4: Currently mapped PDO entries: (none). Entries to map: 0x6000:01/8<br />
[26621.257606] EtherCAT WARNING 0-4: Slave does not support assigning PDOs!<br />
[26621.257607] EtherCAT WARNING 0-4: Currently assigned PDOs: (none). PDOs to assign: 0x1A00<br />
[26621.657860] EtherCAT ERROR 0-4: SDO upload 0x1600:00 aborted.<br />
[26621.657864] EtherCAT ERROR 0-4: SDO abort message 0x06020000: "This object does not exist in the object directory".<br />
[26621.657865] EtherCAT ERROR 0-4: Failed to read number of mapped PDO entries.<br />
[26621.657866] EtherCAT WARNING 0-4: Failed to read PDO entries for PDO 0x1600.<br />
[26621.657867] EtherCAT WARNING 0-4: Slave does not support changing the PDO mapping!<br />
[26621.657868] EtherCAT WARNING 0-4: Currently mapped PDO entries: (none). Entries to map: 0x7000:01/32<br />
[26622.058103] EtherCAT WARNING 0-4: Slave does not support changing the PDO mapping!<br />
[26622.058106] EtherCAT WARNING 0-4: Currently mapped PDO entries: (none). Entries to map: 0xA000:01/8 0xA000:02/1 0xF100:01/8 0xF100:02/1 0xF100:03/16 0xF100:05/8 0xF100:04/8 0xA000:02/1<br />
[26622.058115] EtherCAT WARNING 0-4: Slave does not support assigning PDOs!<br />
[26622.058116] EtherCAT WARNING 0-4: Currently assigned PDOs: (none). PDOs to assign: 0x1600 0x1A80<br />
[26622.458353] EtherCAT 0: Domain 0: Working counter changed to 7/8.<br />
[26623.559009] EtherCAT 0: Domain 0: 2 working counter changes - now 7/8.</div>

<div> </div>

<div>Do you know where could be my error?</div>

<div> </div>

<div>Thanks again</div>

<div> </div>

<div>Best Regards</div>

<div> </div>

<div> </div>
</div>

<div style="font-family: tahoma; color: rgb(0, 0, 0); font-size: 13.3333px; font-weight: 400; font-style: normal; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">- - - - - - - - - - - - <span style="font-size: 13.3333330154419px;">- - - - - - - - - - - - </span><span style="font-size: 13.3333330154419px;">- - - - - - - - - - - - </span><span style="font-size: 13.3333330154419px;">- - -</span></div>

<div style="font-family: tahoma; color: rgb(0, 0, 0); font-size: 13.3333px; font-weight: 400; font-style: normal; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"><strong>David Jiménez Mejías -</strong> <span style="font-size: 13.3333330154419px;">Gran Telescopio de Canarias S.A</span></div>

<div style="font-family: tahoma; color: rgb(0, 0, 0); font-size: 13.3333px; font-weight: 400; font-style: normal; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"> </div>

<div style="font-family: tahoma; color: rgb(0, 0, 0); font-size: 13.3333px; font-weight: 400; font-style: normal; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"><em>Ingeniero de Operación / Operation Engineer</em></div>

<div style="font-family: tahoma; color: rgb(0, 0, 0); font-size: 13.3333px; font-weight: 400; font-style: normal; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);"> </div>

<div style="font-family: Tahoma; color: rgb(0, 0, 0); font-size: 13.3333px; font-weight: 400; font-style: normal; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">
<blockquote style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">-----Original Message-----<br />
From: Gavin Lambert <gavinl@compacsort.com><br />
To: 'David Jiménez Mejías' <david.jimenez@gtc.iac.es>, <hm@igh-essen.com>, <etherlab-users@etherlab.org><br />
Date: Mon, 2 Nov 2015 10:59:12 +1300<br />
Subject: RE: [etherlab-users]  Beckhoff 6731-0010 initialization<br />
 
<div class="WordSection1">
<div 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></div>

<div 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></div>

<div 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></div>

<div 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></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 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></div>
</div>
</div>

<div class="MsoNormal"><o:p> </o:p></div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">Hi Gavin,<o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">thanks for your answer.<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>

<div>
<div>
<div class="MsoNormal"><br />
<span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">#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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">/****************************************************************************/<o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">#include "ecrt.h"<o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">/****************************************************************************/<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">/****************************************************************************/<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><br />
<span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">// CanOpen Master configuration.<br />
// Got it from the StartUp SDO from TwinCAT<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">/*----------------------*/<o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><br />
<span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">// Timer<br />
static unsigned int sig_alarms = 0;<br />
static unsigned int user_alarms = 0;<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><br />
<span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">/****************************************************************************/<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><br />
<span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">// 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">/*****************************************************************************/<o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">#if CONFIGURE_PDOS<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">// Analog out -------------------------<o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">// Digital out ------------------------<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">#endif<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">/*****************************************************************************/<br />
/*****************************************************************************/<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">/*****************************************************************************/<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">    domain1_state = ds;<br />
}<o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">/*****************************************************************************/<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">    master_state = ms;<br />
}<o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">/*****************************************************************************/<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><br />
<span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">}<o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">/*****************************************************************************/<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><br />
<span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">// 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">/****************************************************************************/<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">/****************************************************************************/<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">    printf("Configuring PDOs...\n");<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><br />
<span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">    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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><br />
<span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">#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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">    return 0;<br />
}<o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">/****************************************************************************/<o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">Thank you very much<o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">Best regards<o:p></o:p></span></div>
</div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>

<div>
<div 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></div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">​<o:p></o:p></span></div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">  <o:p></o:p></span></div>

<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">
<div 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></div>

<div>
<div>
<div 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></div>
</div>

<div>
<div 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></div>
</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>
<div 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></div>
</div>
</div>
</div>

<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">Dear Wilhelm,<o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div 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></div>
</div>
</div>

<div>
<div>
<div 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></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div 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></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div 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></div>
</div>
</div>

<div>
<div>
<div 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></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">     - Export the XML<o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">     - Format it with xmllint<o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div 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></div>
</div>
</div>

<div>
<div>
<div 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></div>
</div>
</div>

<div>
<div>
<div 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></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">               + 0x1C32<o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">               + 0x1C33<o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">               + 0xF800<o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">               + 0x8000<o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">               + 0x8001<o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">               + 0x8002<o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">               + 0x8003<o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div 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></div>
</div>
</div>

<div>
<div>
<div 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></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">The last dmesg is:<o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div 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></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div 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></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">Thank you very much<o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">King regards<o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div 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></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div 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></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>
</div>

<div>
<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>

<div>
<div>
<div class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black"> <o:p></o:p></span></div>
</div>
</div>
</div>

<div>
<div class="MsoNormal"><br />
<span style="font-size:10.0pt;font-family:"Tahoma",sans-serif;color:black">----------<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></div>
</div>
</div>
</div>
</blockquote>
</div>

<div 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></div>
</div>
</div>
</blockquote>
</div>
<br>----------<br>
ADVERTENCIA: Sobre la privacidad y cumplimiento de la Ley de Protección de Datos, acceda a http://www.gtc.iac.es/gtc/legal_es.php<br>
WARNING: For more information on privacy and fulfilment of the Law concerning the Protection of Data, consult http://www.gtc.iac.es/gtc/legal_es.php</body></html>