<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to STRUCT to BYTES</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/84b0ecfb28/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Engineering/thread/84b0ecfb28/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Engineering/thread/84b0ecfb28/</id><updated>2022-07-15T07:57:17.360000Z</updated><subtitle>Recent posts to STRUCT to BYTES</subtitle><entry><title>STRUCT to BYTES</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/84b0ecfb28/?limit=250#1aef/1277" rel="alternate"/><published>2022-07-15T07:57:17.360000Z</published><updated>2022-07-15T07:57:17.360000Z</updated><author><name>h-hermsen</name><uri>https://forge.codesys.com/u/hermsen/</uri></author><id>https://forge.codesys.come81c2dff753be1d70e3fa83b3c00b29a5e571cb7</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;tip, try a UNION next time...&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>STRUCT to BYTES</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/84b0ecfb28/?limit=25#1aef" rel="alternate"/><published>2022-07-14T04:57:43.628000Z</published><updated>2022-07-14T04:57:43.628000Z</updated><author><name>fabian</name><uri>https://forge.codesys.com/u/fabian/</uri></author><id>https://forge.codesys.com950d3c037e946964867faf34882629b14a2ca4ab</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Thanks, in the end I used "BIT" type. :-)&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>STRUCT to BYTES</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/84b0ecfb28/?limit=25#f4ba" rel="alternate"/><published>2022-07-13T22:06:00.514000Z</published><updated>2022-07-13T22:06:00.514000Z</updated><author><name>nothinrandom</name><uri>https://forge.codesys.com/u/nothinrandom/</uri></author><id>https://forge.codesys.com117ec188af606561bbbf02aa92125f3781281b0b</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;You could also just use bits of a UDINT since it also has 32 bits.  For example:&lt;/p&gt;
&lt;p&gt;udiTest : UDINT;&lt;/p&gt;
&lt;p&gt;udiTest.0 = TRUE; // same as BOOL1&lt;br/&gt;
udiTest.1 = False; // same as BOOL2&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>STRUCT to BYTES</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/84b0ecfb28/?limit=25#a2da" rel="alternate"/><published>2022-07-12T08:17:41.627000Z</published><updated>2022-07-12T08:17:41.627000Z</updated><author><name>fabian</name><uri>https://forge.codesys.com/u/fabian/</uri></author><id>https://forge.codesys.comb4f945ae43d16825e750426231db367a75e4cab5</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I have solved the problem by packing the bits into bytes (and changing the STRUCT accordingly).&lt;/p&gt;
&lt;p&gt;Thanks and regards,&lt;br/&gt;
Fab&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>STRUCT to BYTES</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/84b0ecfb28/?limit=25#2d4d" rel="alternate"/><published>2022-07-12T07:15:07.227000Z</published><updated>2022-07-12T07:15:07.227000Z</updated><author><name>fabian</name><uri>https://forge.codesys.com/u/fabian/</uri></author><id>https://forge.codesys.com366a91db3ffc2caaa08e231ba10e3fb09ee46380</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi nothingrandom,&lt;/p&gt;
&lt;p&gt;Many thanks for your answer, it works like it should! &lt;br/&gt;
I was struggling yesterday with memcpy as it was not clear to me that only 1 byte at a time can be copied.&lt;/p&gt;
&lt;p&gt;Now I only have the problem, that my STRUCT contains BOOLEANS and they unfortunately occupy 1 Byte instead of 1 Bit only which then extends the length of the structure unintended. (The BOOL should only occupy 1 bit on the CAN as the receiver side is given)&lt;br/&gt;
I already noticed that this is a known topic and I will do some more research on that - unless you have a solution in your pocket? :-)&lt;/p&gt;
&lt;p&gt;A typical structure for 32-Bytes could look like this:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="err"&gt;TYPE MyStruct :&lt;/span&gt;
&lt;span class="err"&gt;STRUCT&lt;/span&gt;
&lt;span class="err"&gt;    UINT1:      UINT;    //Offset 0&lt;/span&gt;
&lt;span class="err"&gt;    BOOL1:      BOOL;    //Offset 16&lt;/span&gt;
&lt;span class="err"&gt;    BOOL2:      BOOL;    //Offset 17&lt;/span&gt;
&lt;span class="err"&gt;    BOOL3:      BOOL;    //Offset 18&lt;/span&gt;
&lt;span class="err"&gt;    BOOL4:      BOOL;    //Offset 19&lt;/span&gt;
&lt;span class="err"&gt;    BOOL5:      BOOL;    //Offset 20&lt;/span&gt;
&lt;span class="err"&gt;    BOOL6:      BOOL;    //Offset 21&lt;/span&gt;
&lt;span class="err"&gt;    BOOL7:      BOOL;    //Offset 22&lt;/span&gt;
&lt;span class="err"&gt;    BOOL8:      BOOL;    //Offset 23&lt;/span&gt;
&lt;span class="err"&gt;    BOOL9:      BOOL;    //Offset 24&lt;/span&gt;
&lt;span class="err"&gt;    BOOL10:     BOOL;    //Offset 25&lt;/span&gt;
&lt;span class="err"&gt;    BOOL11:     BOOL;    //Offset 26&lt;/span&gt;
&lt;span class="err"&gt;    BOOL12:     BOOL;    //Offset 27&lt;/span&gt;
&lt;span class="err"&gt;    BOOL13:     BOOL;    //Offset 28&lt;/span&gt;
&lt;span class="err"&gt;    BOOL14:     BOOL;    //Offset 29&lt;/span&gt;
&lt;span class="err"&gt;    BOOL15:     BOOL;    //Offset 30&lt;/span&gt;
&lt;span class="err"&gt;    BOOL16:     BOOL;    //Offset 31&lt;/span&gt;
&lt;span class="err"&gt;    BOOL17:     BOOL;    //Offset 32&lt;/span&gt;
&lt;span class="err"&gt;    BOOL18:     BOOL;    //Offset 33&lt;/span&gt;
&lt;span class="err"&gt;    BOOL19:     BOOL;    //Offset 34&lt;/span&gt;
&lt;span class="err"&gt;    BOOL20:     BOOL;    //Offset 35&lt;/span&gt;
&lt;span class="err"&gt;    BOOL21:     BOOL;    //Offset 36&lt;/span&gt;
&lt;span class="err"&gt;    BOOL22:     BOOL;    //Offset 37&lt;/span&gt;
&lt;span class="err"&gt;    BOOL23:     BOOL;    //Offset 38&lt;/span&gt;
&lt;span class="err"&gt;    BOOL24:     BOOL;    //Offset 39&lt;/span&gt;
&lt;span class="err"&gt;    BOOL25:     BOOL;    //Offset 40&lt;/span&gt;
&lt;span class="err"&gt;    BOOL26:     BOOL;    //Offset 41&lt;/span&gt;
&lt;span class="err"&gt;    BOOL27:     BOOL;    //Offset 42&lt;/span&gt;
&lt;span class="err"&gt;    BOOL28:     BOOL;    //Offset 43&lt;/span&gt;
&lt;span class="err"&gt;    BOOL29:     BOOL;    //Offset 44&lt;/span&gt;
&lt;span class="err"&gt;    BOOL30:     BOOL;    //Offset 45&lt;/span&gt;
&lt;span class="err"&gt;    BOOL31:     BOOL;    //Offset 46&lt;/span&gt;
&lt;span class="err"&gt;    BOOL32:     BOOL;    //Offset 47&lt;/span&gt;
&lt;span class="err"&gt;    INT1:       INT;    //Offset 48&lt;/span&gt;
&lt;span class="err"&gt;    INT2:       INT;    //Offset 64&lt;/span&gt;
&lt;span class="err"&gt;    INT3:       INT;    //Offset 80&lt;/span&gt;
&lt;span class="err"&gt;    INT4:       INT;    //Offset 96&lt;/span&gt;
&lt;span class="err"&gt;    INT5:       INT;    //Offset 112&lt;/span&gt;
&lt;span class="err"&gt;    INT6:       INT;    //Offset 128&lt;/span&gt;
&lt;span class="err"&gt;    INT7:       INT;    //Offset 144&lt;/span&gt;
&lt;span class="err"&gt;    INT8:       INT;    //Offset 192&lt;/span&gt;
&lt;span class="err"&gt;    UINT2:      UINT;    //Offset 208&lt;/span&gt;
&lt;span class="err"&gt;    UINT3:      UINT;    //Offset 224&lt;/span&gt;
&lt;span class="err"&gt;    UINT4:      UINT;    //Offset 240&lt;/span&gt;
&lt;span class="err"&gt;END_STRUCT&lt;/span&gt;
&lt;span class="err"&gt;END_TYPE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Many thanks and best regards,&lt;br/&gt;
Fabian&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>STRUCT to BYTES</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/84b0ecfb28/?limit=25#d940" rel="alternate"/><published>2022-07-12T00:29:43.644000Z</published><updated>2022-07-12T00:29:43.644000Z</updated><author><name>nothinrandom</name><uri>https://forge.codesys.com/u/nothinrandom/</uri></author><id>https://forge.codesys.comd66654052825b242ec35a836e627e2ab56b0bf40</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;You could:&lt;br/&gt;
1. use SIZEOF to get the total size of the STRUCT in bytes.&lt;br/&gt;
2. use memcpy to copy chunks of 8 bytes at a time: &lt;a href="https://help.codesys.com/webapp/ZidVRTnfzfI0LAYUwLYCsY_W-O4%2FMemCpy;product=MemoryUtils;version=3.5.17.0" rel="nofollow"&gt;https://help.codesys.com/webapp/ZidVRTnfzfI0LAYUwLYCsY_W-O4%2FMemCpy;product=MemoryUtils;version=3.5.17.0&lt;/a&gt;&lt;br/&gt;
3. Increment index offset using while/for loop until you're at the end.&lt;/p&gt;
&lt;p&gt;don't have codesys open, but something like the below should work.&lt;/p&gt;
&lt;p&gt;// VAR&lt;br/&gt;
uliData : ULINT;&lt;br/&gt;
uiOffset : UINT := 0;&lt;br/&gt;
pbStruct : POINTER TO BYTE;&lt;br/&gt;
uiTotalSize : UINT := 0;&lt;br/&gt;
uiDataBlock : UINT := 8;&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;pbStruct := ADR(myStruct);&lt;br/&gt;
uiTotalSize := SIZEOF(myStruct);&lt;/p&gt;
&lt;p&gt;WHILE uiOffset &amp;lt; uiTotalSize DO&lt;br/&gt;
    // check to see if divisible by 8 (e.g. STRUCT is 249 bytes instead of 256).&lt;br/&gt;
    // could use MOD, but costly&lt;br/&gt;
    IF (uiTotalSize - uiOffset &amp;lt; uiDataBlock) THEN&lt;br/&gt;
        uiDataBlock := uiTotalSize - uiOffset;&lt;br/&gt;
    END_IF&lt;br/&gt;
    uliData := 0; // reset to be sure&lt;br/&gt;
    // copy data from struct to ULINT&lt;br/&gt;
    MemCpy(pbyDest:=ADR(uliData), pbySrc:=pbStruct+uiOffset, dwSize:=uiDataBlock);&lt;br/&gt;
    // send data via CAN here&lt;br/&gt;
    // if success increment by uiDataBlock, else retry logic&lt;br/&gt;
    uiOffset := uiOffset + uiDataBlock;&lt;br/&gt;
END_WHILE&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>STRUCT to BYTES</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/84b0ecfb28/?limit=25#d994" rel="alternate"/><published>2022-06-28T15:49:07.943000Z</published><updated>2022-06-28T15:49:07.943000Z</updated><author><name>fabian</name><uri>https://forge.codesys.com/u/fabian/</uri></author><id>https://forge.codesys.comc84bdb269fe11a81e947d3c1bac6ac6c61be4303</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I need to divide a STRUCT into 8-Byte portions (ULINT) in order to send them via CAN.&lt;br/&gt;
Any suggestions and experience how this could be done? The size of the Structures is known (e.g. 256 Bytes).&lt;/p&gt;
&lt;p&gt;Many thanks and regards,&lt;br/&gt;
Fabian&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>