Search talk: array declarations

 
<< < 1 .. 11 12 13 14 15 .. 21 > >> (Page 13 of 21)

The element of type 'VisuFbElemImage' could not be updated. Reason: Index was outside the bounds of the array. CODESYS Forge talk (Thread)
The element of type 'VisuFbElemImage' could not be updated. Reason: Index was outside the bounds of the array.
Last updated: 2024-12-03

Post by avenue68 on REFERENCE TO in an array CODESYS Forge talk (Post)
That's because the array only contains structures themselves, not references. It doesn't matter that what consists of each struectures unless they are not pointers.
Last updated: 2025-05-21

Post by andrax on Variable Length Array - Cannot mix variable and fixed length dimensions? CODESYS Forge talk (Post)
Arrays with variable lengths are a bad idea. This makes your system unstable and can lead to crashes. Declare your array large enough to reserve enough memory
Last updated: 2025-05-24

Post by hazarath on How extract JSONElement containing Array data CODESYS Forge talk (Post)
I want to extract each element of an Array. Can someone help me with this. When I use JSONElementToString (part of JSON Utilities SL), I am seeing output as "ARRAY" instead of actual data. Here is the JSON content that I want to read : { "value1Unit": { "units": "M" }, "data": { "stepSize": 300.23, "points": [6,8] } } I would like to read each item of the element "points" i.e. 6 and 8. Here is the code I used, // Reading the content as JSON reader ( xExecute := execute , pwData := ADR ( converted_value ), jsonData := jsonDataStorage ); // Get the JSON Element jsonDataStorage.FindFirstValueByKey( wsKey := fidKeyVar, diStartIndex := searchElem, jsonElement => jsonElement ); JSON.JSONElementToString ( element := jsonElement , wsResult := valueWstring ); The content of the output of valueWstring is shown as "ARRAY" instead of the array items i.e. 6 and 8 Please can someone help me.
Last updated: 2024-07-30

Post by micik on Reverse bytes in an array CODESYS Forge talk (Post)
Hello, I'm getting the data in Codesys that is an array of 8 bytes. From this array, I need to foram LREAL number, however, because of different endiannes I need to reverse bytes in this array and then copy to a LREAL variable. For this I'm using a loop and it works OK. I wonder if there is a built in function to do this. I have found CAA Memory library but it has functions like reverse bytes in DWORD. But it seems it doesn't have what I need. https://content.helpme-codesys.com/en/libs/CAA%20Memory/Current/CAA_Memory/Reverse-Bit-Swap-ByteWord-order/ReverseBYTEsInDWORD.html What I need is a function to reverse bytes in an 8 byte array, or something similar.
Last updated: 2024-08-22

Post by micik on Reverse bytes in an array CODESYS Forge talk (Post)
Hello, I'm getting the data in Codesys that is an array of 8 bytes. From this array, I need to foram LREAL number, however, because of different endiannes I need to reverse bytes in this array and then copy to a LREAL variable. For this I'm using a loop and it works OK. I wonder if there is a built in function to do this. I have found CAA Memory library but it has functions like reverse bytes in DWORD. But it seems it doesn't have what I need. https://content.helpme-codesys.com/en/libs/CAA%20Memory/Current/CAA_Memory/Reverse-Bit-Swap-ByteWord-order/ReverseBYTEsInDWORD.html What I need is a function to reverse bytes in an 8 byte array, or something similar.
Last updated: 2024-08-22

Post by john-robinson on Limiting Memory Access of an Array to Within its Bounds CODESYS Forge talk (Post)
Recently we had an issue regarding some simple code to calculate a rolling average. The code indexes from zero to 199 to properly store the current input into a circular buffer which then allows us to calculate a rolling average: VAR input_5s : REAL; outs_arr : ARRAY[0..199] OF REAL; i : USINT := 0; END_VAR ___ //this code runs every five seconds, calculating a rolling average outs_arr[i] := input_5s; i := i + 1; output := OSCAT_BASIC.ARRAY_AVG(ADR(outs_arr), SIZEOF(outs_arr)); IF i >= SIZEOF(outs_arr) THEN i := 0; END_IF There is a simple bug in this code where the index will be set to 0 when it has surpassed the length of the array in bytes (800 in this case) rather than larger than the number of reals in the array (200). The solution here is simple, replacing i >= SIZEOF(outs_arr) with i >= SIZEOF(outs_arr)/SIZEOF(outs_arr[0]). In this example when the index increased to 201 and the line outs_arr[201] := input_5s was called, codesys arbitrarily wrote to the address in memory that is where outs_arr[201] would be if the array was that long. I would like to find a way to wrap the codesys array inside of a wrapper class that checks if an input is within the bounds of an array before writing to that value. I know how I would implement that for a specific array, I could create a method or class that takes an input of an array of variable length, ie. ARRAY[*] OF REAL, but I don't know how to make this for any data type. I am wondering if anyone has ever done anything similar to this, or has any better suggestions to ensure that none of the programmers on this application accidentally create code that can arbitrarily write to other locations in memory.
Last updated: 2024-03-05

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 rodberna on Library for arrays CODESYS Forge talk (Post)
Hi, I'm creating a program where I need to handle arrays, like: - Declare lenght variable arrays - [array(1..var) of "sometype"]. This is not possible in pure codesys, right? - Know array lenght, min, max, avg values in runtime - append/delete itens in an array - and so on Is there a library know for this in codesys. Is it possible to build our own libraries using some high level language like python or java script?
Last updated: 2024-01-10

Post by szotyi on Array of Program CODESYS Forge talk (Post)
Hi! What is the proper and the easiest way to call programs through looping of array of programs, or pointer of program? instead of calling the programs one by one: prog1(inputX: 11); prog2(inputY: 12); prog3(inputZ: 13); similar like: VAR programsToCall : ARRAY [1..3] OF PROGRAM; END_VAR programsToCall[1] := prog1(inputX: 11); programsToCall[2] := prog2(inputY: 12); programsToCall[3] := prog3(inputZ: 13); FOR i := 1 TO 3 DO programsToCall[i] (); END_FOR Thanks.
Last updated: 2024-08-28

Post by garrian on How to write multiple coils (Modbus FC15) CODESYS Forge talk (Post)
Thanks for your reply. I belive it is contiguous, I'm writing to adress 0 to 4. Or, do you mean something else? Well, something is happening. If I on the client set adress 1,2,3 to true, only 1 is set to true on the server side. On the client side, the data is array of word. But on the server side, the coils are array of bool. Holding register is array of word on server side. Can this be a problem? Attached screenshot of how it looks at the server side.
Last updated: 2024-11-17

Post by imdatatas on Problem of assigning physical addresses to variables of type ARRAY OF ARRAY as MW and QW CODESYS Forge talk (Post)
Hello, I am encountering an interesting problem as below in SP20patch5 variable definition area. I think this is a bug. As can be seen in the attached screenshot, it assigns the same %MW or %QW address to all elements of the array. I hope Codesys team can solve this problem in the next version. Best regards, Imdat
Last updated: 2025-03-17

Post by wollvieh on Array of UDT Compare CODESYS Forge talk (Post)
use sysmemcmp. https://content.helpme-codesys.com/en/libs/SysMem23/Current/POUs/SysMemCmp.html
Last updated: 2024-04-08

Post by kislov on Table How to set row number from 1 ( not from 0) CODESYS Forge talk (Post)
Use declaration with ARRRAY [1..x] instead of ARRAY [0..x]
Last updated: 2024-05-27

Post by bertrand-major on Cancelling a selection from a "combobox array" in Visu CODESYS Forge talk (Post)
Hi Joanm, Did you get an answer from anybody in anather section ?
Last updated: 2024-07-17

Post by vladimirsmall on Send data to USB CODESYS Forge talk (Post)
Hello/ Need send some file ( for example Array of string) to USB. Which library need used for this. Thank you
Last updated: 2024-07-20

Post by pilouuu on problem OPC UA array CODESYS Forge talk (Post)
Hello, why can't I read the arrays on my PLC's UA OPC server with codesys, even though they are accessible from UA Expert?
Last updated: 2025-02-26

Post by pilouuu on problem OPC UA array CODESYS Forge talk (Post)
Hello, why can't I read the arrays on my PLC's UA OPC server with codesys, even though they are accessible from UA Expert?
Last updated: 2025-02-26

Post by eaglealex on Length of string and Array of bytes CODESYS Forge talk (Post)
Hello! I have tried read a file to the string variable. But I faced a problem - there is about 2800 bytes of information in file, but string have a limit 2393 bytes. I made two variables with same address (for automatic convertion) - string[3000] and array of bytes[1..3000]. And I noticed that array of bytes contains all information from file, but string shows only first 2393 bytes. So I have lost information. Is there really such a limitation? Or I have an error in my program and Codesys 2.3 have no limit for such kind of conversation between string and array of bytes? Thank you very much!
Last updated: 2025-04-01

Post by tvm on Cannot pass array of constant size to a function as a reference CODESYS Forge talk (Post)
maybe this would be a better approach, then you don't have to pass the constant at all. FUNCTION fun : INT VAR_IN_OUT arr: ARRAY[*] OF INT; END_VAR VAR lower: DINT; upper: DINT; END_VAR lower:= LOWER_BOUND(arr, 1); upper:= UPPER_BOUND(arr, 1); see here as well https://help.codesys.com/api-content/2/codesys/3.5.12.0/en/_cds_datatype_array/
Last updated: 2024-01-08

Post by timvh on Limiting Memory Access of an Array to Within its Bounds CODESYS Forge talk (Post)
Add the object "POU for Implicit Checks" to your application, then select "Bounds check". This will create a function which is automatically called each time an array is write accessed. In the function you can handle "out of bounds" situations. By default it will be limited to its lower or upper bound.
Last updated: 2024-03-06

Post by bjarne-pagaard on Multiple WebVisu CODESYS Forge talk (Post)
You can use the switch frame variable, but there should be a variable for each active visu user. You can put the switch frame variable in an array, and use CURRENTCLIENTID as index into the array to get what you want. The CURRENTCLIENTID is assigned to new users automagically by the Visu Management.
Last updated: 2024-03-14

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

Post by rafaelbrito on The element of type 'VisuFbElemImage' could not be updated. Reason: Index was outside the bounds of the array. CODESYS Forge talk (Post)
When trying to use the Visualization ToolBox, no objects appear and the following error appears. Could you tell me what this error could be? The element of type 'VisuFbElemImage' could not be updated. Reason: Index was outside the bounds of the array. Can anyone tell me what this error is?
Last updated: 2024-12-03

Post by timvh on STRING conversions to DWORD CODESYS Forge talk (Post)
I guess that the printer expects to receive an array of byte values. So where it is described that it expects to receive: Hercules String : 1B4F513030311B7532626C61636B04 it actually expects to receive an array of bytes with the values 1B,4F,51,30,30, etc. So what you can do is create an array of bytes and assign the byte value to each item in the array: VAR abyToSend : ARRAY[0..99] OF BYTE; END_VAR abyToSend[0] := 16#1B; // ASCII Escape character, hexadecimal representation uses 16# as prefix abyToSend[1] := 16#4F; // ASCII 'O' abyToSend[2] := 16#51; // ASCII 'Q' abyToSend[3] := 16#30; // ASCII '0' // you can do the rest yourself // maybe could be created a lot smarter, but gives you an indication how to handle this. Then with the serial communication (or TCP/IP?) you can send a message with the reference to the array (abyToSend) and the number of bytes to send (15 bytes for the string you gave as example).
Last updated: 2025-02-02

<< < 1 .. 11 12 13 14 15 .. 21 > >> (Page 13 of 21)

Showing results of 502

Sort by relevance or date