<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Unpacking an array to MODBUS addresses</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/b8d80cb58c/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Engineering/thread/b8d80cb58c/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Engineering/thread/b8d80cb58c/</id><updated>2020-02-27T14:31:37.624000Z</updated><subtitle>Recent posts to Unpacking an array to MODBUS addresses</subtitle><entry><title>Unpacking an array to MODBUS addresses</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/b8d80cb58c/?limit=25#3562" rel="alternate"/><published>2020-02-27T14:31:37.624000Z</published><updated>2020-02-27T14:31:37.624000Z</updated><author><name>Anonymous</name><uri>https://forge.codesys.com/u/*anonymous/</uri></author><id>https://forge.codesys.comb7163152394aab4e13d829dff190ee07b80b20d1</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;Something like the code below should work.  Double check that your pointer math is working correctly and you don’t go one too many points in the loop, etc. &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;PWrd&lt;/span&gt; : &lt;span class="nv"&gt;POINTER&lt;/span&gt; &lt;span class="nv"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;WORD&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;pWrd&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;ADR&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="nv"&gt;QW406&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;FOR&lt;/span&gt; &lt;span class="nv"&gt;J&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;127&lt;/span&gt; &lt;span class="k"&gt;DO&lt;/span&gt;
   &lt;span class="nv"&gt;pWrd&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;WordArray&lt;/span&gt;[&lt;span class="nv"&gt;J&lt;/span&gt;]&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;pWrd&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;pWrd&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;SIZEOF&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;WORD&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_FOR&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Code not tested and from memory!&lt;/p&gt;
&lt;p&gt;PS execution time is actually longer than if you explicitly list out all of the assignments like you don’t want to.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Unpacking an array to MODBUS addresses</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/b8d80cb58c/?limit=25#ff4d" rel="alternate"/><published>2020-02-27T14:31:37.160000Z</published><updated>2020-02-27T14:31:37.160000Z</updated><author><name>JoshuaChenault</name><uri>https://forge.codesys.com/u/joshuachenault/</uri></author><id>https://forge.codesys.comcd8cac98165cdc4babfae44dbe6b6eae0d9004b4</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;hello, new to CODESYS.&lt;/p&gt;
&lt;p&gt;I've learned how to pack an array with addresses so i can indirectly address them a use them in loops. the problem i have now is that i dont understand how to unpack the array to an output address.&lt;/p&gt;
&lt;p&gt;example:&lt;br/&gt;
{putting stuff in an array}&lt;br/&gt;
CH0ReadDataArray AT %IW12 : ARRAY&lt;span&gt;[0..127]&lt;/span&gt; OF BYTE;&lt;br/&gt;
WordArray : ARRAY&lt;span&gt;[0..127]&lt;/span&gt; OF WORD&lt;/p&gt;
&lt;p&gt;{pack Bytes into Words}&lt;br/&gt;
for i:0 to 127 do&lt;br/&gt;
WordArray&lt;span&gt;[i]&lt;/span&gt;:=(BYTE_TO_WORD(CH0ReadDataArray&lt;span&gt;[i]&lt;/span&gt;)*256)+BYTE_TO_WORD(CH0ReadDataArray&lt;span&gt;[i]&lt;/span&gt;);&lt;br/&gt;
end for;&lt;/p&gt;
&lt;p&gt;Now how do i fill %QW406 through %QW469 with the contents of WordArray&lt;span&gt;[0..127]&lt;/span&gt;??????&lt;/p&gt;
&lt;p&gt;PS. i want to do this quickly and efficiently. i don't want to:&lt;br/&gt;
%QW406 := WordArray&lt;span&gt;[0]&lt;/span&gt;;&lt;br/&gt;
%QW407 := WordArray&lt;span&gt;[1]&lt;/span&gt;;&lt;br/&gt;
.&lt;br/&gt;
.&lt;br/&gt;
.&lt;br/&gt;
etc.&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>