5/18/2017 10:36 AM | |
Joined: 6/3/2009 Last visit: 9/14/2022 Posts: 118 Rating: (2) |
Hi guys, thanks for the info, but I still don't get it quit... FOR #index := 2 TO 30 BY 1 DO IF "Condition"[#index] = 1 THEN // 16#FEFF_FF3F depends a lot from the RL_OK_Separate array. If the array is from 2 to 30 this will be 16#FFFF_FF1F. So if I look into this array now from 1 to 30, then #RL_OK_All_Lines:= 16#FEFF_FF3F, and if I tell that every bit in the array 2 to 30 from "Condition"[#index] (which is a DB) is set to 1, the result #RL_OK_All_Lines:= 16#FEFF_FF3F I cannot understand, because there are 3 bit equal to 0, but the location??? Maybe I missing something with this SWAP thing? Can you tell me a little bit more about that? How can I SWAP them in correct order, because I do care about the order. Please, see the pics in attachment. BR |
5/18/2017 12:12 PM | |
Joined: 9/23/2005 Last visit: 9/20/2024 Posts: 4707 Rating: (721) |
Our dear dP showed you mapping of the bit array to the dword, so it should be clear. There's one more important thing. The S7 is Big Endian. It means that when a dword is evaluated it is done from its lowest address byte as MSB. byte 0 |byte 1 |byte 2 |byte 3 but byte 0 bit 7...byte 0 bit 0|byte 1 bit 7...byte 1 bit 0|byte 2 bit 7...byte 2 bit 0|byte 3 bit 7...byte 3 bit 0 FE |FF |FF |3F What is SWAP doing? It reverses (or mirrors) the byte order. So after: myNewDWord:=SWAP(myOldDWord);// myOldDWord looks like above myNewDWord looks like this: byte 3|byte 2|byte 1|byte 0 But the order of bits is intact, i.e. bit 7 is on the left and bit 0 on the right. 3F |FF |FF |FE |
Regards, |
|
Follow us on