<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Indirect addressing memory/input/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7c3558df23/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7c3558df23/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Engineering/thread/7c3558df23/</id><updated>2020-02-27T14:05:35.519000Z</updated><subtitle>Recent posts to Indirect addressing memory/input/outputs</subtitle><entry><title>Indirect addressing memory/input/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7c3558df23/?limit=25#dcb6" rel="alternate"/><published>2020-02-27T14:05:35.519000Z</published><updated>2020-02-27T14:05:35.519000Z</updated><author><name>Anonymous</name><uri>https://forge.codesys.com/u/*anonymous/</uri></author><id>https://forge.codesys.com26fe28758cb19db1b46b33066b9eb83194fe2baf</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 understand the need to link a software BOOL to a physical real output.  But for this I use the hardware IO mapping table of EtherCAT or other fieldbus device.  Often, I have to shift around modules and when I do, the memory address changes and I do not want to care about this!&lt;/p&gt;
&lt;p&gt;I use FBs with FB_INITs with REFERENCE TO for linking speaking software variables to physical outputs.  This example I simply have a BOOL "ActOutput" which I map to an EtherCAT digital output.  This forces the link at instantiation without any memory location hard coded.  If I insert a module or move the module - CoDeSys handles the memory locations for me.&lt;/p&gt;
&lt;p&gt;Original system has Digital Output 0 at %QX0.0.  Second screen shot is after inserting a module, which shifts Digital Output 0 to %QX6.0 (for which I can completely ignore - it just works).&lt;/p&gt;
&lt;p&gt;Here is an example of my Digital Output with REFERENCE TO:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;PROGRAM&lt;/span&gt; &lt;span class="nv"&gt;PLC_PRG&lt;/span&gt;
&lt;span class="nv"&gt;VAR&lt;/span&gt;
   &lt;span class="nv"&gt;ActOutput&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt;&lt;span class="c1"&gt;; //define at memory location, or use hardware IO mapping&lt;/span&gt;
   &lt;span class="nv"&gt;DigOut1&lt;/span&gt;   : &lt;span class="nv"&gt;DigitalOutput&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;refOutput&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;ActOutput&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;; //referencing is required by fb_init&lt;/span&gt;
   &lt;span class="nv"&gt;Temp1&lt;/span&gt;     : &lt;span class="nv"&gt;BOOL&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;Temp2&lt;/span&gt;     : &lt;span class="nv"&gt;BOOL&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_VAR&lt;/span&gt;
&lt;span class="nv"&gt;DigOut1&lt;/span&gt;.&lt;span class="nv"&gt;TurnOn&lt;/span&gt;&lt;span class="ss"&gt;()&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;Temp1&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;DigOut1&lt;/span&gt;.&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;DigOut1&lt;/span&gt;.&lt;span class="nv"&gt;InvertedLogic&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;TRUE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;Temp2&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;DigOut1&lt;/span&gt;.&lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_PROGRAM&lt;/span&gt;
&lt;span class="nv"&gt;FUNCTION_BLOCK&lt;/span&gt; &lt;span class="nv"&gt;DigitalOutput&lt;/span&gt;
&lt;span class="nv"&gt;VAR&lt;/span&gt;
   &lt;span class="nv"&gt;InternalState&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;ActOutState&lt;/span&gt;   : &lt;span class="nv"&gt;REFERENCE&lt;/span&gt; &lt;span class="nv"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;BOOL&lt;/span&gt;&lt;span class="c1"&gt;; //init not necessary - FB_INIT forces referencing&lt;/span&gt;
   &lt;span class="nv"&gt;Inverted&lt;/span&gt;      : &lt;span class="nv"&gt;BOOL&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_VAR&lt;/span&gt;
&lt;span class="nv"&gt;METHOD&lt;/span&gt; &lt;span class="nv"&gt;FB_INIT&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt;
&lt;span class="nv"&gt;VAR_INPUT&lt;/span&gt;
   &lt;span class="nv"&gt;bInitRetains&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt;&lt;span class="c1"&gt;; // if TRUE, the retain variables are initialized (warm start / cold start)&lt;/span&gt;
   &lt;span class="nv"&gt;bInCopyCode&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt;&lt;span class="c1"&gt;;  // if TRUE, the instance afterwards gets moved into the copy code (online change)&lt;/span&gt;
   &lt;span class="nv"&gt;refOutput&lt;/span&gt;   : &lt;span class="nv"&gt;REFERENCE&lt;/span&gt; &lt;span class="nv"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;BOOL&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_VAR&lt;/span&gt;
&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="nv"&gt;link&lt;/span&gt; &lt;span class="nv"&gt;local&lt;/span&gt; &lt;span class="nv"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;to&lt;/span&gt; &lt;span class="nv"&gt;real&lt;/span&gt; &lt;span class="nv"&gt;life&lt;/span&gt; &lt;span class="nv"&gt;BOOL&lt;/span&gt;
&lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;ActOutState&lt;/span&gt; &lt;span class="nv"&gt;REF&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;refOutput&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_METHOD&lt;/span&gt;
&lt;span class="nv"&gt;METHOD&lt;/span&gt; &lt;span class="nv"&gt;TurnOn&lt;/span&gt;
&lt;span class="nv"&gt;VAR_INPUT&lt;/span&gt;
&lt;span class="nv"&gt;END_VAR&lt;/span&gt;
&lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;InternalState&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;TRUE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;UpdateState&lt;/span&gt;&lt;span class="ss"&gt;()&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_METHOD&lt;/span&gt;
&lt;span class="nv"&gt;METHOD&lt;/span&gt; &lt;span class="nv"&gt;TurnOff&lt;/span&gt;
&lt;span class="nv"&gt;VAR_INPUT&lt;/span&gt;
&lt;span class="nv"&gt;END_VAR&lt;/span&gt;
&lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;InternalState&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;FALSE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;UpdateState&lt;/span&gt;&lt;span class="ss"&gt;()&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_METHOD&lt;/span&gt;
&lt;span class="nv"&gt;METHOD&lt;/span&gt; &lt;span class="nv"&gt;Toggle&lt;/span&gt;
&lt;span class="nv"&gt;VAR_INPUT&lt;/span&gt;
&lt;span class="nv"&gt;END_VAR&lt;/span&gt;
&lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;InternalState&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;NOT&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;InternalState&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;UpdateState&lt;/span&gt;&lt;span class="ss"&gt;()&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_METHOD&lt;/span&gt;
&lt;span class="nv"&gt;METHOD&lt;/span&gt; &lt;span class="nv"&gt;PRIVATE&lt;/span&gt; &lt;span class="nv"&gt;UpdateState&lt;/span&gt;
&lt;span class="nv"&gt;VAR_INPUT&lt;/span&gt;
&lt;span class="nv"&gt;END_VAR&lt;/span&gt;
&lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;Inverted&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
   &lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;ActOutState&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;NOT&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;InternalState&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;ELSE&lt;/span&gt;
   &lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;ActOutState&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;InternalState&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_IF&lt;/span&gt;
&lt;span class="nv"&gt;END_METHOD&lt;/span&gt;
&lt;span class="nv"&gt;PROPERTY&lt;/span&gt; &lt;span class="nv"&gt;InvertedLogic&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt;
&lt;span class="nv"&gt;GET&lt;/span&gt;
&lt;span class="nv"&gt;InvertedLogic&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;Inverted&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;SET&lt;/span&gt;
&lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;Inverted&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;InvertedLogic&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;UpdateState&lt;/span&gt;&lt;span class="ss"&gt;()&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_PROPERTY&lt;/span&gt;
&lt;span class="nv"&gt;PROPERTY&lt;/span&gt; &lt;span class="nv"&gt;State&lt;/span&gt; : &lt;span class="nv"&gt;BOOL&lt;/span&gt;
&lt;span class="nv"&gt;GET&lt;/span&gt;
&lt;span class="nv"&gt;State&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;ActOutState&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;SET&lt;/span&gt;
&lt;span class="nv"&gt;THIS&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;.&lt;span class="nv"&gt;InternalState&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;State&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;UpdateState&lt;/span&gt;&lt;span class="ss"&gt;()&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_PROPERTY&lt;/span&gt;
&lt;span class="nv"&gt;END_FUNCTION_BLOCK&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;img alt="IMG: no" rel="nofollow" src="https://forum.codesys.com//download/file.php?id=2820"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="IMG: mem" rel="nofollow" src="https://forum.codesys.com//download/file.php?id=2821"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="IMG: dig" rel="nofollow" src="https://forum.codesys.com//download/file.php?id=2819"/&gt;&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Indirect addressing memory/input/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7c3558df23/?limit=25#563d" rel="alternate"/><published>2020-02-27T14:05:35.153000Z</published><updated>2020-02-27T14:05:35.153000Z</updated><author><name>jzhvymetal</name><uri>https://forge.codesys.com/u/jzhvymetal/</uri></author><id>https://forge.codesys.comeb43b78eb0fe996bbbe007645f6e9351aff954d5</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Not all CoDeSys controllers support direct addressing.  For the one that do you would locate your variables as follows:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;myBool&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;MX0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="nb"&gt;Boolean&lt;/span&gt; &lt;span class="k"&gt;Type&lt;/span&gt;
&lt;span class="n"&gt;myInput&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;IX0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;myOut&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;QX0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BOOL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;myByte&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;MB0&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;BYTE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;Byte&lt;/span&gt; &lt;span class="k"&gt;Type&lt;/span&gt;
&lt;span class="n"&gt;mySINT&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;MB0&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;SINT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;myUSINT&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;MB0&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;USINT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;myByteArary&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;MB0&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;ARRAY&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;OF&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="n"&gt;myWORD&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;MW0&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;WORD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt; &lt;span class="nb"&gt;bit&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;
&lt;span class="n"&gt;myINT&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;MW0&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;INT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;myUINT&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;MW0&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="n"&gt;myWordArary&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;MW0&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;ARRAY&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;OF&lt;/span&gt; &lt;span class="n"&gt;WORD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="n"&gt;myDWORD&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;MD0&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;DWORD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="nb"&gt;bit&lt;/span&gt; &lt;span class="n"&gt;Types&lt;/span&gt;
&lt;span class="n"&gt;myDINT&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;MD0&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;DINT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;myUDINT&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;MD0&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="n"&gt;myReal&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;MD0&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="n"&gt;myDwordArray&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;MD0&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;ARRAY&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;OF&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;mySTRING&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;MB0&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;STRING&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;STRING&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; 
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Also attached is a useful memory map.  It is excel file because calculates the memory map&lt;/p&gt;
&lt;p&gt;&lt;a class="" href="https://forum.codesys.com//download/file.php?id=2787" rel="nofollow"&gt;SoM Modbus Table V3   .xls.txt &lt;span&gt;&lt;span&gt;[674 KiB]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Indirect addressing memory/input/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7c3558df23/?limit=25#d1a0" rel="alternate"/><published>2020-02-27T14:05:34.215000Z</published><updated>2020-02-27T14:05:34.215000Z</updated><author><name>zezami</name><uri>https://forge.codesys.com/u/zezami/</uri></author><id>https://forge.codesys.com1a0ccf312be8a29aacab0c63cf2f4070fef4be01</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Josep M. Rams hat geschrieben:&lt;/strong&gt;&lt;br/&gt;
Hi&lt;br/&gt;
You can do:&lt;br/&gt;
IW_in:pointer to word&lt;br/&gt;
IB_in:pointer to byte&lt;br/&gt;
After&lt;br/&gt;
IW_in:=adr(%iw0)&lt;br/&gt;
IB_in:=adr(%iw0)&lt;br/&gt;
After&lt;br/&gt;
 A:=ib_in&lt;span&gt;[4]&lt;/span&gt;    Reads %iw4&lt;br/&gt;
B:=in_w&lt;span&gt;[5]&lt;/span&gt;      Reads %IB5&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thank you, i had no idea you could use index on pointer without the pointer being an array. It works perfect though.&lt;/p&gt;
&lt;p&gt;I know this is a really old school way of doing things but i have some S7 code and i want the codebase to be as similar as possible in codesys &lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Indirect addressing memory/input/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7c3558df23/?limit=25#cb7c" rel="alternate"/><published>2020-02-27T14:05:33.859000Z</published><updated>2020-02-27T14:05:33.859000Z</updated><author><name>josepmariarams</name><uri>https://forge.codesys.com/u/josepmariarams/</uri></author><id>https://forge.codesys.com11053092dddcd160ce7916429fb4b6e2a30112e2</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi.&lt;/p&gt;
&lt;p&gt;I don t know if it is an school habit, but it helps me in the problem of how to work from OOP point of view with inouts.&lt;/p&gt;
&lt;p&gt;If you have an FB wich modelizes   an pneumatic cillinder you need, normally, two Dinputs and two DOutputs. From my point of view this inouts have to be internals to the FB_CILLINDER. &lt;/p&gt;
&lt;p&gt;For me every DInput is an FB wich has three configurable variables: channel, mask and inverted (that I configure using an csv for every di). Dinput  has an boolean output with the value of the physical digital input:&lt;/p&gt;
&lt;p&gt;Out:=(xb&lt;span&gt;[channel]&lt;/span&gt; and mask) &amp;lt;&amp;gt;0.&lt;/p&gt;
&lt;p&gt;It allows me to solve how pass from an sigleton (di) to Oop. And allows me to change without recompile the connection from an logical input to an logical output. Allows me to reconfigure diferent machines with only one code (versioning, rapid prototyping....).&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Indirect addressing memory/input/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7c3558df23/?limit=250#8a97" rel="alternate"/><published>2020-02-27T14:05:33.550000Z</published><updated>2020-02-27T14:05:33.550000Z</updated><author><name>Hermsen</name><uri>https://forge.codesys.com/u/hermsen/</uri></author><id>https://forge.codesys.com2e8bdb26c0d8c250c41fd47c8460c374c3b84112</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;&lt;em&gt;very&lt;/em&gt; old school habit&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Indirect addressing memory/input/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7c3558df23/?limit=25#495c" rel="alternate"/><published>2020-02-27T14:05:33.225000Z</published><updated>2020-02-27T14:05:33.225000Z</updated><author><name>Anonymous</name><uri>https://forge.codesys.com/u/*anonymous/</uri></author><id>https://forge.codesys.com67fa4b88240a923b9fac83fe1ae9aabbf86d3e31</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;What situations require reading direct memory locations?  I've never needed this and I am curious. Or is this old-school PLC techniques/habits?&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Indirect addressing memory/input/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7c3558df23/?limit=25#efe2" rel="alternate"/><published>2020-02-27T14:05:32.291000Z</published><updated>2020-02-27T14:05:32.291000Z</updated><author><name>josepmariarams</name><uri>https://forge.codesys.com/u/josepmariarams/</uri></author><id>https://forge.codesys.com9558792c424d8c70a8991b4a7667a00a1bd72f0c</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;You can do:&lt;/p&gt;
&lt;p&gt;IW_in:pointer to word&lt;br/&gt;
IB_in:pointer to byte&lt;/p&gt;
&lt;p&gt;After&lt;/p&gt;
&lt;p&gt;IW_in:=adr(%iw0)&lt;br/&gt;
IB_in:=adr(%iw0)&lt;/p&gt;
&lt;p&gt;After&lt;br/&gt;
 A:=ib_in&lt;span&gt;[4]&lt;/span&gt;    Reads %iw4&lt;/p&gt;
&lt;p&gt;B:=in_w&lt;span&gt;[5]&lt;/span&gt;      Reads %IB5&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Indirect addressing memory/input/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7c3558df23/?limit=25#4979" rel="alternate"/><published>2020-02-27T14:05:31.960000Z</published><updated>2020-02-27T14:05:31.960000Z</updated><author><name>teichhei</name><uri>https://forge.codesys.com/u/teichhei/</uri></author><id>https://forge.codesys.com476c38080f21fa1d914d6c2dff2e0e2cb7718d00</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;I see what you mean. Would be interesting to know.&lt;/p&gt;
&lt;p&gt;But couldn't you still do something like&lt;/p&gt;
&lt;p&gt;paWord := adr(%mw0)&lt;/p&gt;
&lt;p&gt;for idx...&lt;br/&gt;
variable := paWord^&lt;span&gt;[idx]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In that way you should still get the content of the first, 2nd... word within the loop&lt;/p&gt;
&lt;p&gt;Sent from my SM-G935F using Tapatalk&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Indirect addressing memory/input/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7c3558df23/?limit=25#3230" rel="alternate"/><published>2020-02-27T14:05:31.586000Z</published><updated>2020-02-27T14:05:31.586000Z</updated><author><name>NBCC</name><uri>https://forge.codesys.com/u/nbcc/</uri></author><id>https://forge.codesys.comcc4f8258ae75a06478456e94f1dc3b65d2e2adc5</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Have you tried putting your data into an array?&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;VAR&lt;/span&gt;
&lt;span class="nt"&gt;arr1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;array&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;..3&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; &lt;span class="nt"&gt;of&lt;/span&gt; &lt;span class="nt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;END_VAR&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Then you can enter your data into the array:&lt;br/&gt;
arr&lt;span&gt;[0]&lt;/span&gt; := ...&lt;br/&gt;
arr&lt;span&gt;[1]&lt;/span&gt; := ...&lt;/p&gt;
&lt;p&gt;After that you can just do the for-loop like you did before.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nv"&gt;i&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="nv"&gt;to&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="nv"&gt;variable&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;variable&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;arr&lt;/span&gt;[&lt;span class="nv"&gt;i&lt;/span&gt;]&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;end_for&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</summary></entry><entry><title>Indirect addressing memory/input/outputs</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7c3558df23/?limit=25#ced3" rel="alternate"/><published>2020-02-27T14:05:31.209000Z</published><updated>2020-02-27T14:05:31.209000Z</updated><author><name>zezami</name><uri>https://forge.codesys.com/u/zezami/</uri></author><id>https://forge.codesys.com5d37fac306980690d19c9fe6662ea5548ff07325</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;teichhei hat geschrieben:&lt;/strong&gt;&lt;br/&gt;
If you mean like fiddeling a dint into a byte array or so I do that with pointers.&lt;br/&gt;
Sent from my SM-G935F using Tapatalk&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;no not that, i mean when you are directly addressing the input/output/memory area.&lt;/p&gt;
&lt;p&gt;i Siemens you can for example do:&lt;br/&gt;
FOR idx:= 0 to 4 DO&lt;br/&gt;
   variable := variable + MW&lt;span&gt;[idx]&lt;/span&gt;;&lt;br/&gt;
LOOP;&lt;/p&gt;
&lt;p&gt;That doesnt seem possible in codesys since you can only direcly adress input/output/memory with %MW0 or %MW10 for example, but you can't use brackets to indirecly adress&lt;/p&gt;
&lt;p&gt;I would like to be able to do exactly the same:&lt;br/&gt;
FOR idx:= 0 to 4 DO&lt;br/&gt;
   variable := variable + %MW&lt;span&gt;[idx]&lt;/span&gt;;&lt;br/&gt;
LOOP;&lt;/p&gt;
&lt;p&gt;But thats not possible it seems and i can't find any information about indirect addressing if i google it..&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>