Search talk: size of array

 
<< < 1 2 3 4 5 6 .. 97 > >> (Page 4 of 97)

FB_Init to define length of array in FB CODESYS Forge talk (Thread)
FB_Init to define length of array in FB
Last updated: 2021-02-02

Writing a CSV file from an array of values? CODESYS Forge talk (Thread)
Writing a CSV file from an array of values?
Last updated: 2020-05-27

Index is outside the bounds of the array CODESYS Forge talk (Thread)
Index is outside the bounds of the array
Last updated: 2022-03-04

Is Array of Types possible in Retained memory CODESYS Forge talk (Thread)
Is Array of Types possible in Retained memory
Last updated: 2021-05-19

Array of STRUCT in einem STRUCT initialisieren CODESYS Forge talk (Thread)
Array of STRUCT in einem STRUCT initialisieren
Last updated: 2016-01-25

Mapping of Array Element to a EtherCAt Slave variable CODESYS Forge talk (Thread)
Mapping of Array Element to a EtherCAt Slave variable
Last updated: 2018-07-25

Array finding the total of index CODESYS Forge talk (Thread)
Array finding the total of index
Last updated: 2023-02-13

Multiple Modbus Read Registers Access by an Array of Elements CODESYS Forge talk (Thread)
Multiple Modbus Read Registers Access by an Array of Elements
Last updated: 2018-04-16

Different types of values in the same array CODESYS Forge talk (Thread)
Different types of values in the same array
Last updated: 2015-11-24

FB Charcurve (Array of points) manipulation? CODESYS Forge talk (Thread)
FB Charcurve (Array of points) manipulation?
Last updated: 2011-05-16

save the varies of array to a TXT file CODESYS Forge talk (Thread)
save the varies of array to a TXT file
Last updated: 2014-05-26

Convert array of 4 byte to real CODESYS Forge talk (Thread)
Convert array of 4 byte to real
Last updated: 2021-06-30

[SOLVE] Convert array of word to string CODESYS Forge talk (Thread)
[SOLVE] Convert array of word to string
Last updated: 2023-06-30

Limiting Memory Access of an Array to Within its Bounds CODESYS Forge talk (Thread)
Limiting Memory Access of an Array to Within its Bounds
Last updated: 2024-03-06

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

How to change the font size of the headline in a table CODESYS Forge talk (Thread)
How to change the font size of the headline in a table
Last updated: 2022-11-25

addressin an array of byte containing bits of type bool CODESYS Forge talk (Thread)
addressin an array of byte containing bits of type bool
Last updated: 2018-11-14

an element of "Array of BOOL" in SFC Action name CODESYS Forge talk (Thread)
an element of "Array of BOOL" in SFC Action name
Last updated: 2008-05-05

How to know screen size? CODESYS Forge talk (Thread)
How to know screen size?
Last updated: 2017-10-30

Font Colour/Size/Name variable CODESYS Forge talk (Thread)
Font Colour/Size/Name variable
Last updated: 2020-06-17

Dynamic font size is causing error CODESYS Forge talk (Thread)
Dynamic font size is causing error
Last updated: 2020-08-31

Font size property problem (CLOSED) CODESYS Forge talk (Thread)
Font size property problem (CLOSED)
Last updated: 2017-02-15

CNC_INTERNAL_ERROR, G code file size error. CODESYS Forge talk (Thread)
CNC_INTERNAL_ERROR, G code file size error.
Last updated: 2023-02-16

CNC_INTERNAL_ERROR, G code file size error. CODESYS Forge talk (Thread)
CNC_INTERNAL_ERROR, G code file size error.
Last updated: 2023-02-16

How to set TCPClient() Buffer Size? CODESYS Forge talk (Thread)
How to set TCPClient() Buffer Size?
Last updated: 2021-05-19

<< < 1 2 3 4 5 6 .. 97 > >> (Page 4 of 97)

Showing results of 2401

Sort by relevance or date