Search talk: data types byte

 
<< < 1 .. 6 7 8 9 10 .. 24 > >> (Page 8 of 24)

Export data with the Trend API CODESYS Forge talk (Thread)
Export data with the Trend API
Last updated: 2024-07-08

How extract JSONElement containing Array data CODESYS Forge talk (Thread)
How extract JSONElement containing Array data
Last updated: 2024-07-30

Post by ihatemaryfisher on Sorting array of any-sized structure CODESYS Forge talk (Post)
In my machine's operation, I need to display multiples tables containing arrays of structured variables. The arrays change during operation, and my supervisor has advised me to write a new bubble-sort for each array. I think I can make a function to sort an array of any data type. This was my own project, and I'm a relatively new coder. I want to know the weaknesses in my approach, and a better method, if one exists. As far as I can test, the function accepts an array of a structured variable of any size, and sort it by any VAR in that structure. But it relies heavily on pointers, which I've heard are bad practice? Function call: // SORT BY BYTE-SIZED VAR IF xDoIt[6] THEN FUNBubbleSortSansBuffer( IN_pbySourcePointer := ADR(astArray[1]), // address of first byte in first element of array IN_pbyComparePointer:= ADR(astArray[1].byCompByte), // points to first byte of the comparing variable (variable you sort by) IN_uiStructureSize := SIZEOF(TYPE_STRUCTURE), // size, in bytes, of the structured variable IN_uiCompareSize := SIZEOF(astArray[1].byCompByte), // size, in bytes, of the comparing variable (variable you sort by) diArrayElements := UPPER_BOUND(astArray,1), // number of elements in array IN_xSmallToLarge := xSortOrder // whether to sort by small2large or large2small ); END_IF Function: FUNCTION FUNBubbleSortSansBuffer : BOOL VAR_INPUT IN_pbySourcePointer : POINTER TO BYTE; // points to beginning of array (first byte of first element) IN_pbyComparePointer: POINTER TO BYTE; // points to first byte of the comparing variable (variable you sort by) IN_uiStructureSize : UINT; // size, in bytes, of the structured variable IN_uiCompareSize : UINT; // size, in bytes, of the comparing variable (variable you sort by) diArrayElements : DINT; // number of elements in array IN_xSmallToLarge : BOOL; // whether to sort by small2large or large2small END_VAR VAR j : DINT; // repeat iteration over array until array ends i : DINT; // iterarte over array, swapping when necesary k : DINT; // iterator from 1 to size of structure (stepping 'through' a single element in array) dwSize : DWORD; // internal var for use in MEMUtils.MemCpy(<size>) // FOR SORTING BY BYTE VAR pbySourcePointer : POINTER TO BYTE; pbySourcePointer2 : POINTER TO BYTE; pbyComparePointer : POINTER TO BYTE; pbyComparePointer2 : POINTER TO BYTE; pbyPointerToBuffer : POINTER TO BYTE; // pointer to single byte buffer byBufferByte : BYTE; // single byte buffer END_VAR dwSize := UINT_TO_DWORD(IN_uiStructureSize); // get structure size (number of bytes) pbyPointerToBuffer := ADR(byBufferByte); // assign pointer to address of buffer byte (because MEMUtils.MemCpy requires a pointer input) CASE IN_uiCompareSize OF // depending on the size of the VAR to sort by (current functionality for BYTE and WORD/INT 1: // BYTE (8 BIT) FOR j := 1 TO diArrayElements DO // for number of elements in array FOR i := 1 TO (diArrayElements-1) DO // same thing, but row[i+1] row is included in swap logic pbySourcePointer := IN_pbySourcePointer + dwSize*(i-1); // point at #1 byte in array element[i] pbySourcePointer2 := pbySourcePointer + dwSize; // point at #1 byte in array element[i+1] // NOTE: because of memory locations, each array element is offset from one another by a number of bytes equal to the size of the structure // We can "walk" from array[i] to array[i+1] via steps equal to the size of the structure // e.g., ADR(array[i+1]) == ADR(array[i]) + SIZEOF([array datatype]) pbyComparePointer := IN_pbyComparePointer + dwSize*(i-1); // point to sorting variable in array element[i] pbyComparePointer2 := pbyComparePointer + dwSize; // point to sorting variable in array element[i+1] // using sort order (small -> large/large -> small) IF SEL(IN_xSmallToLarge, (pbyComparePointer2^ > pbyComparePointer^),(pbyComparePointer2^ < pbyComparePointer^)) THEN // This is where it gets tricky. We've identified pointers for the starting bytes of aArray[i] and aArray[i+1] // and we know the size of aArray[i]. We are going to swap individual bytes, one at a time, from aArray[i] and aArray[i+1] // this allows us to use only a single byte var as a buffer or temporary data storage // e.g., consider a structure consisting of a word, a byte, and a string. it is stored like this // |------WORD-------| |--BYTE-| |STRING------...| // astArray[1] == 1000 0100 0010 0001 1100 0011 1010 1010.... etc // astArray[2] == 0001 0010 0100 1000 0011 1100 0101 0101.... etc // performing a single swap (copy into a buffer, etc.) of the first byte of each array element creates this // astArray[1] == 0001 0100 0010 0001 1100 0011 1010 1010.... etc // astArray[2] == 1000 0010 0100 1000 0011 1100 0101 0101.... etc // incrementing the pointer adresses for the swap by 1 and swapping again swaps the next byte in each array element // astArray[1] == 0001 0010 0010 0001 1100 0011 1010 1010.... etc // astArray[2] == 1000 0100 0100 1000 0011 1100 0101 0101.... etc // continuing this from k to SIZEOF(TYPE_STRUCTURE) results in a toally swapped row FOR k := 1 TO IN_uiStructureSize DO // copy single byte[k] of array element 1 to buffer MEMUtils.MemCpy(pbyDest := (pbyPointerToBuffer), pbySrc := (pbySourcePointer+k-1), dwSize := 1); // copy single byte[k] of array element 2 to 1 MEMUtils.MemCpy(pbyDest := pbySourcePointer+k-1, pbySrc := (pbySourcePointer2+k-1), dwSize := 1); // copy buffer to byte[k] array element 2 MEMUtils.MemCpy(pbyDest := (pbySourcePointer2+k-1), pbySrc := pbyPointerToBuffer, dwSize := 1); END_FOR END_IF END_FOR END_FOR
Last updated: 2023-08-17

Post by pazderai on CanOpen write issue CODESYS Forge talk (Post)
Thank you for an answer. Unfortunatelly, it doesn't work. The slave needs command byte as follows 0x22. It means expedited transfer where s-bit is not set, therefore data length is not specified. If I use segmented mode by CiA405.SDO_WRITE_DATA it produce command byte as follows 0x21 which is unfortunately supported by the slave and it returns with error 0x05040001 - SDO Abort Code -Client/server command specifier not valid or unknown. I can use CAN API low level to overcome this problem where it is possible to set 0x22 as a command byte, but than I can use user interface to set the communication probably, because I thing that machine expert uses library CiA405.SDO_WRITE for setting the slave. Or am I wrong?
Last updated: 2024-07-16

Post by timvh on Configuring a 2's compliment CODESYS Forge talk (Post)
You could create a DUT of the Type Union and add an array of 2 bytes + an Int. Then write the byte values in the array of the Union and read the Int. Or VAR iInt : INT; byHigh : BYTE := 2#1111_1111; byLow : BYTE := 2#1111_1111; END_VAR iInt := TO_INT(byHigh*16#100 + byLow);
Last updated: 2024-09-28

<identifier>: POINTER TO <data type | function block | program | method | function>; CODESYS Forge talk (Thread)
<identifier>: POINTER TO <data type="" |="" function="" block="" program="" method="">;</data></identifier>
Last updated: 2022-03-23

Post by snhatton on Integer with comma in visualization CODESYS Forge talk (Post)
Here is some information about formatting different variables types: https://content.helpme-codesys.com/en/CODESYS%20Visualization/_visu_placeholder_with_formatting_sequence_in_a_string.html I hope this helps!
Last updated: 2023-09-20

Post by ph0010421 on How to manage variable types larger than 64 bits - Ethernet/IP CODESYS Forge talk (Post)
My guess is that's a STRING, not an INT type. And it's 128 bytes, not bits
Last updated: 2024-09-23

Post by opineiro on How to manage variable types larger than 64 bits - Ethernet/IP CODESYS Forge talk (Post)
Thanks, I'm going to try it!
Last updated: 2024-09-23

Post by rjonker on codesys mqtt publish serialization CODESYS Forge talk (Post)
pbPayload is a pointer, which it expects to point at a STRING. If you point it at an address holding a different data type, it will just assume those bytes are part of a string and likely trundle along memory until it finds a null byte (0x00) that would normally signify the end of a string PublishMessage := BOOL_TO_STRING(boolVariable);
Last updated: 2024-06-05

Data source manager runs id Demo mode CODESYS Forge talk (Thread)
Data source manager runs id Demo mode
Last updated: 2022-05-05

Where is data of ENIP getAttributeSingle stored? CODESYS Forge talk (Thread)
Where is data of ENIP getAttributeSingle stored?
Last updated: 2023-04-20

data exchange at the end of each CoDeSys cycle CODESYS Forge talk (Thread)
data exchange at the end of each CoDeSys cycle
Last updated: 2010-07-12

OPC UA server certificate not shown for data exchange CODESYS Forge talk (Thread)
OPC UA server certificate not shown for data exchange
Last updated: 2020-10-19

Data exchange between Twicat controller and Codesys based Controller CODESYS Forge talk (Thread)
Data exchange between Twicat controller and Codesys based Controller
Last updated: 2020-03-03

How to send data via Can CODESYS Forge talk (Thread)
How to send data via Can
Last updated: 2012-03-23

Unable to send data over RS232 (using serial_interface_01.lib) CODESYS Forge talk (Thread)
Unable to send data over RS232 (using serial_interface_01.lib)
Last updated: 2017-01-12

Create and write data in a file text (csv) CODESYS Forge talk (Thread)
Create and write data in a file text (csv)
Last updated: 2021-03-10

Simulation mode - Error 3101 Data area too large CODESYS Forge talk (Thread)
Simulation mode - Error 3101 Data area too large
Last updated: 2014-10-07

Error 3803-Out of global data memory.Variable LANGUAGE(1030b CODESYS Forge talk (Thread)
Error 3803-Out of global data memory.Variable LANGUAGE(1030b
Last updated: 2010-12-07

Trouble saving data to \Disk_mmc\ or \Disk_usb\ CODESYS Forge talk (Thread)
Trouble saving data to \Disk_mmc\ or \Disk_usb\
Last updated: 2009-04-14

CODESYS 3.5.16 - Profinet Acyclic data read/write services CODESYS Forge talk (Thread)
CODESYS 3.5.16 - Profinet Acyclic data read/write services
Last updated: 2020-07-30

Ethernet IP Scanner connected, no data arrives at input image CODESYS Forge talk (Thread)
Ethernet IP Scanner connected, no data arrives at input image
Last updated: 2023-07-20

Exchanging Data between CoDeSys Control Win and C++ Apps. CODESYS Forge talk (Thread)
Exchanging Data between CoDeSys Control Win and C++ Apps.
Last updated: 2015-12-03

Ethernet Module CM 597 is not receiving data CODESYS Forge talk (Thread)
Ethernet Module CM 597 is not receiving data
Last updated: 2022-08-09

<< < 1 .. 6 7 8 9 10 .. 24 > >> (Page 8 of 24)

Showing results of 579

Sort by relevance or date