<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Mapping members of a struct to Inputs/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/581497eb58/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Engineering/thread/581497eb58/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Engineering/thread/581497eb58/</id><updated>2021-09-03T09:40:58.059000Z</updated><subtitle>Recent posts to Mapping members of a struct to Inputs/outputs</subtitle><entry><title>Mapping members of a struct to Inputs/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/581497eb58/?limit=25#b1b2" rel="alternate"/><published>2021-09-03T09:40:58.059000Z</published><updated>2021-09-03T09:40:58.059000Z</updated><author><name>pato</name><uri>https://forge.codesys.com/u/pato/</uri></author><id>https://forge.codesys.com7920cebedbf81e2e6770294f71f7f5314efb1922</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;some PLCs place the bytes into the memory as little endian and others as big endians. You will have to check when this happen and to do the swapping of the words when needed&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Mapping members of a struct to Inputs/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/581497eb58/?limit=25#59b8" rel="alternate"/><published>2020-02-27T14:26:22.126000Z</published><updated>2020-02-27T14:26:22.126000Z</updated><author><name>Anonymous</name><uri>https://forge.codesys.com/u/*anonymous/</uri></author><id>https://forge.codesys.com9f95d4569285280e714b8ab3f56265242b719d56</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;&lt;em&gt;Originally created by:&lt;/em&gt; scott_cunningham&lt;/p&gt;
&lt;p&gt;I have seen this before with other hardware. Basically, the data is copied byte by byte starting at the left. So if your data is 16 bit variable and you map it to a 32 bit ethercat register, your variable is copied to the upper word. You should be able to avoid this problem by using data of the same size (variable versus ethercat register). If you cannot change the data size, then you can make special bit shifting to get your data....&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Mapping members of a struct to Inputs/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/581497eb58/?limit=25#a145" rel="alternate"/><published>2020-02-27T14:26:21.540000Z</published><updated>2020-02-27T14:26:21.540000Z</updated><author><name>kurvanov</name><uri>https://forge.codesys.com/u/kurvanov/</uri></author><id>https://forge.codesys.com732451f9b552988ebfea05ef7b8af3e0efcc1855</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hello &lt;br/&gt;
I am using Codesys control WIN on windows 7.&lt;/p&gt;
&lt;p&gt;I have defined the following STRUCT for building up IO communication with an Ethercat slave&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;TYPE&lt;/span&gt; &lt;span class="n"&gt;ST_InputList&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;STRUCT&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;nVal0&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UINT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;nVal1&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UINT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;nValD&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;UDINT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;nValF&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;REAL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;END_STRUCT&lt;/span&gt;
&lt;span class="n"&gt;END_TYPE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;and &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;TYPE&lt;/span&gt; &lt;span class="n"&gt;ST_IOModule&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;STRUCT&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;iData&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="k"&gt;AT&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ST_InputList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;END_STRUCT&lt;/span&gt;
&lt;span class="n"&gt;END_TYPE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;In my application, I have defined a variable &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;VAR_GLOBAL&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;comModule&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ST_IOModule&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;END_VAR&lt;/span&gt;
&lt;span class="n"&gt;VAR_CONFIG&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="n"&gt;GVL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;comModule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iData&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="k"&gt;AT&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;IW1&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ST_InputList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;VL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;comModule&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;oData&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="k"&gt;AT&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;QB0&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ST_OutputList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;
&lt;span class="n"&gt;END_VAR&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;I attach the process data of my slave.&lt;br/&gt;
The first 4 Bytes builds up a bit register. So my first numerical value start at 5th Byte (32nd bit, that's why you see EtherCAT-1\%IW32 although I agree %IW2 would be more consistent).&lt;br/&gt;
I see in the Ethercat I/O mapping that the address is %IW1, I would have expected %IW2 also --&amp;gt; Might there be a problem with ESI file I used to install my slave into codesys ?&lt;br/&gt;
as a result :&lt;br/&gt;
In my slave, when I set a value for the outputs corresponding to the members nVal0 and nVal1, I see the right value in my Ethercat master (running on codesys control WIN) --&amp;gt; everything Ok so far for UINT value&lt;br/&gt;
But, for nValD, when I write the value 1 on the salve side, I see 65536 on the Master side.&lt;br/&gt;
I don't understand how Bytes,Word,Dword are arranged. &lt;/p&gt;
&lt;p&gt;I would appreciate any help. thank you&lt;/p&gt;
&lt;p&gt;&lt;img alt="IMG: Codesys mapping.JPG" rel="nofollow" src="https://forum.codesys.com//download/file.php?id=1327"/&gt;&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>