Search talk: real to array_of_word

 
<< < 1 .. 109 110 111 112 113 .. 213 > >> (Page 111 of 213)

Post by viteraplay17 on How to use MQTT in CODESYS Control Win V3 CODESYS Forge talk (Post)
Last updated: 18 hours ago

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 t-probst on Strong Private Key Protection for Encryption Certificates CODESYS Forge talk (Post)
Hello, We are trying to implement an automated method of adding of a certificate and private key to the Windows certificate store for encrypting CODESYS projects. We want to do this so that users do not have to deal with details of certificates at all and to prevent user error. We are keen on enforcing strong private key protection since it ensures that a password is required for the certificate to be used to decrypt a CODESYS project. When we add a certificate to the certificate store and enable strong key protection using the Microsoft Management Console Certificates snap-in, it works as expected. However, through this method the user may mistakenly not enable strong private key protection. For the certificates we create programmatically (using Microsoft’s Cryptography Next Generation API in .Net 7) bag attributes are added to the certificate and key by the API. These bag attributes are as follows: Bag Attributes localKeyID: 01 00 00 00 subject=C = xx, ST = xxx, O = xxx, OU = xxx, CN = xxx issuer=C = xx, ST = xxx, L = xxx, O = xxx, OU = xxx, CN = xxx -----BEGIN CERTIFICATE----- [encoded certificate] -----END CERTIFICATE----- After using this certificate with bag attributes to encrypt a CODESYS project, it can’t be decrypted, showing this error: "The specified project could not be loaded. Possible reasons might be: - The project file is corrupted or invalid - The project has been saved with a newer version of the programming system. If this is the case, you can open the project in the corresponding version. Choose "Save as..." with the appropriate storage version, and retry again. - You may not have the necessary permissions to lad the project" We know that the bag attributes are causing the issue because if we manually edit the certificate file to remove them before using the certificate to encrypt a project, the project can be decrypted as expected. However, we are unable to automatically enforce strong key protection using this method. Here is a link to a StackOverFlow question that we have posted recently for this issue: https://stackoverflow.com/questions/76922355/enforcing-strong-private-key-protection-for-x509certificate2-objects-in-net-mod Any help is greatly appreciated.
Last updated: 2023-08-22

Post by patrik on Wish: CODESYSControl.cfg - again CODESYS Forge talk (Post)
Really good post. I hope that it gets seen by CoDeSys staff. I often find the documentation lacking when it comes to using CoDeSys in more complex ways. If using standard "basic PLC functionality", then it's fine and functions are documented in a sufficient way. Once you go outside of that bubble then I find the documentation not enough. CODESYSControl.cfg is a good example of this. And why isn't more of this integrated in the IDE. like changing port of the webserver. Why is it hidden in this file and not accessible through the IDE. It feels like a layer of complexity purposely left in so you don't change it if you don't know what you are doing. Like the argument is if you have the know-how to find the file you have the know-how to edit it. I find the documentation lacking when it comes to more complex libraries too. Like the element collections library. there is parameters I still don't quite know what they do. I can't find any documentation about them. There is an example project to download from CoDeSys so you can see how you are supposed to set your factories up. I leave some parameters like it is in the example. Should I? I don't know. Does it work. Yes. But I could perhaps create memory leaks if I get something wrong and I don't see that until way later. In the create method of your element factory you have a function called __vfinit and you just have to accept that it works. Why can't I get insight in what it does through documentation? Don't CoDeSys want us to know how these work so we can't use them to accidentally break something? I find the error logging lacking too. I've had the CoDeSys service crash but it doesn't say why. I've seen windows noticing the crash but no error code was sent or error message. Also in my current issue where the application fails to start after power outage. I can see in the log that it fails to load retain in the application as one log entry and application failing to start as another. But why? Why does loading the retain fail? give me more information! Is it just a skill issue with me? I don't know. If it is then I'd still want CoDeSys to step up their game when it comes to documentation. I'm sorry if a lot of frustration comes though in this post. I really like the product and what I can do with it compared to other PLC brands.
Last updated: 2024-11-21

Post by tcarlbom on Read tag values using external program CODESYS Forge talk (Post)
This is my first time posting in this forum and I am new to codesys. I am a fullstack developer and I am trying to figure out how the following. What would be the best approach to create a own/custom tag browser? Either directly in codesys ide or using a separate custom program (perhaps a winforms application). 1.a. Shall I parse the .project xml file to get a list of all tags in the project? 1b. Shall I use python scripting in codesys ide to get a list of tags? Once one have selected some tags. These tags shall be exposed to a python program which will be acting as a edge computer. It’s fine to be able to import a file. 2a. I found a library called codesys plchandler which (as I understand) acts a rest api server. Is this correct? If so, can I query the api from a custom python script, ie can query what tags exist in project and or read tag values? My research so far. From earlier projects I know that using opc ua would be perfect for this but from my opinion it’s bloating the plc since it’s resource intensive. So opc ua is not an option. Codesys automation server is neat. But I don’t want to rely on some cloud services and subscription based pricing. There seem to be several interesting codesys libraries like mqtt, tcp server and NVL sender which would help me expose plc tags. But all have a common problem. One have to manually write what tags which will be used in these function blocks. I want a similar experience like “selecting” tags in the opc ua or the codesys tracing, ie a tag browser.
Last updated: 2024-06-28

Post by trusty-squire on SysProcessCreate2 on Linux runtime CODESYS Forge talk (Post)
Hi, I'm trying to launch a continuously running python script from Codesys and monitor the script status inside the Codesys runtime (running on a Linux enviroment). For now I'm testing with the below to emulate a continuously running Python script: #test.py i = 0 while True: i += 1 I'm able to successfully run the script using SysProcessExecuteCommand2 (I can see the Python process running in the task manager). However, this "freezes" the Codesys execution of the task - it sits on that command and will not continue until the Python script ends. I've proven this works by using the task monitor to kill the process, then Codesys continues on happily through the task. What I want to do is use SysProcessCreate2 to set up the Python script as a background task and monitor the process using SysProcessGetState. This always results in the error "ERR_OPERATION_DENIED". I know that I'm able to execute commands (as above), so my config should be correct. Is SysProcessCreate2 functional on a Linux environment? Is there something in the config file I'm missing? Here's my "working" code that uses SysProcessExecuteCommand2: VAR bTest : BOOL; sCommand : STRING := '/usr/bin/python3 /var/opt/codesys/PlcLogic/Application/test.py'; refCommand : REFERENCE TO STRING REF= sCommand; sOutput : STRING; refOutput : REFERENCE TO STRING REF= sOutput; result : RTS_IEC_RESULT; END_VAR IF bTest THEN SysProcessExecuteCommand2( pszCommand:= refCommand, pszStdOut:= refOutput, udiStdOutLen:= SIZEOF(sOutput), pResult:= ADR(result) ); bTest:= FALSE; END_IF And here's the code that always results in the ERR_OPERATION_DENIED error: VAR bTest : BOOL; sApp : STRING := '/usr/bin/python3'; sCommand : STRING := '/var/opt/codesys/PlcLogic/Application/test.py'; refApp : REFERENCE TO STRING REF= sApp; refCommand : REFERENCE TO STRING REF= sCommand; hResult : SysProcess.RTS_IEC_RESULT; hHandle : SysProcess.RTS_IEC_HANDLE; END_VAR IF bTest THEN hHandle := SysProcessCreate2( pszApplication:= refApp, pszCommandLine:= refCommand, ulFlags:=SYSPROCESS_CREATEFLAG_HIDDEN, pResult:= ADR(hResult) ); bTest:= FALSE; END_IF Here's the relevant section from the config file at /etc/codesyscontrol/CODESYSControl.cfg: [SysProcess] Command=AllowAll Appreciate any support or ideas. Thanks!
Last updated: 2025-03-16

Post by leandroct on Error reading files after runtime update from 4.0.0.0 to 4.8.0.0 CODESYS Forge talk (Post)
Since version 19 they changed how file access is handle. There are two solutions: 1. You change where the file is stored (need to go to: /PlcLogic/) 2. You can, if you don´t want to store at PlcLogic, add the following line in the CODESYSControl.cfg under [SysFile]: ForceIecFilePath=0 The CodesysControl.cfg is at C:\ProgramData\CODESYS\CODESYSControlWinV3x64\xxPROJECT_NUMBERxx\ Here the email they sent me: "with the 3.5.19 Version we changed how files are handled. See following issue: CDS-81506 - CODESYS Control SysFile system file access vulnerability. There are two solutions: 1. You change where the file is stored (need to go to: /PlcLogic/) 2. You can, if you don´t want to store at PlcLogic, add the following line in the CODESYSControl.cfg under [SysFile]: ForceIecFilePath=0 Here is the official release-note: [[COMPATIBILITY_INFORMATION]] With the activation of ForceIecFilePath the file access from IEC is now restricted to the configured paths only (file sandbox)! [SysFile] ForceIecFilePath=1 (new default) The standard path is the current directory, the PlcLogic subfolder or a configured path. Every file access outside of this path is configured via PlaceholderFilePath, for example access to temporary files or removable media: [SysFile] PlaceholderFilePath.1=/tmp, $TMP$ PlaceholderFilePath.2=/media/usb, $USB$ PlaceholderFilePath.2.Volatile=1 For more information see our tutorial FilePath & Placeholders. To restore the old behavior ForceIecFilePath may be configured as follows: [SysFile] ForceIecFilePath=0 BUT WE HIGHLY RECOMMEND TO LEAVE THIS SETTING AT ITS NEW DEFAULT VALUE! "
Last updated: 2024-05-07

After un upgrade of "CODESYS Control for Raspberry Pi MC SL" from v4.7 to v4.9 SysFileOpen function stopped working CODESYS Forge talk (Thread)
After un upgrade of "CODESYS Control for Raspberry Pi MC SL" from v4.7 to v4.9 SysFileOpen function stopped working
Last updated: 2023-08-22

Post by eschwellinger on Stop raspberry from executing a plc program CODESYS Forge talk (Post)
/var/opt/codesys/PLCLogic as soon you have dowloaded the project to the Pi it will run the bootapplication no connection to the pc is needed anymore
Last updated: 2023-08-24

Post by eschwellinger on Same program to more than one PLC CODESYS Forge talk (Post)
just open http://localhost:8080 in Chromium then it will show the webvisu ( sure you need to this in your CODESYS Application)
Last updated: 2023-08-24

Post by eschwellinger on How to configure CODESYSControl_User.cfg in order to use a specific network card for OPCUA Server CODESYS Forge talk (Post)
check this faq section here: https://faq.codesys.com/plugins/servlet/mobile?contentId=102137886#content/view/102137886
Last updated: 2023-08-25

Post by roundex on CSVReaderInit returns error : INVALID_HANDLE CODESYS Forge talk (Post)
I got same issue but managed to get it to work again by downgrading the Runtime. Here's my specs: CODESYS V3.5.19.0 Runtime Linux SL 4.7.0.0. CSV Utility SL 1.1.0.0 (Licensed IIoT libraries SL) I tried Runtime 4.8.0.0. and 4.9.0.0 but both result in INVALID_HANDLE error.
Last updated: 2023-08-30

Post by eschwellinger on CSVReaderInit returns error : INVALID_HANDLE CODESYS Forge talk (Post)
this is a security issue not to read/write in the plc allowed path I would recommend to update and change the path in the application were the files are😏
Last updated: 2023-08-30

Post by ulvis on How to do horizontal scroll in CFC editor? CODESYS Forge talk (Post)
CFC (page oriented) editor does vertical scroll by mousewheel and zoom by ctrl + mousewheel, allright. How do I do the horizontal scroll (pan) using the mousewheel? (I do not want to drag the scrollbar, I am sure you have guessed by now.)
Last updated: 2023-09-06

Post by dexterdva on Creating a custom kinematics starting from Scara2 model. CODESYS Forge talk (Post)
Hello, I'm trying to develop a custom kinematics derived to Kin_Scara2_Z. there is someone that have the source code of this library? Thanks Dexter
Last updated: 2023-09-11

Post by transmin01 on CANbus issue CODESYS Forge talk (Post)
Hi, I have been trying to get a CANbus device working with Codesys 3.5SP19 patch1 via a Beckhoff EL6751 gateway without success. I have the CANOpen_Manager and CANopen device configured but this will not run. Is there any code required to kickstart the CANbus comms into action? Regards Trevor
Last updated: 2023-09-13

Post by timvh on Troubles with using CAN API CODESYS Forge talk (Post)
In the example project, you can see that a CAN.CANAreaReceiver is used which has an VAR_IN_OUT reference to a RECEIVER_AREA structure. This structure has a dwIdStart and dwIdEnd to filter a range of ID's and process them through the referenced msgProcessor.
Last updated: 2023-09-19

Post by aott33 on Webvisu NO load CODESYS Forge talk (Post)
I am experiencing something like this as well. After reboot, the WebVisu can take up to 3 min to load. Device: CODESYS for Linux V4.9.0.0 CODESYS IDE: V3.5 SP19 Patch 1
Last updated: 2023-09-21

When using the Element Collections library, is there a proper way to remove a dynamically created collection from memory? CODESYS Forge talk (Thread)
When using the Element Collections library, is there a proper way to remove a dynamically created collection from memory?
Last updated: 2022-09-08

Post by sedoerr on Check For Open Dialogs On Client CODESYS Forge talk (Post)
You need to create a function around this function to check the dialogs you use in your program. That's the way i have done it.
Last updated: 2023-09-26

Post by derpaul on Official MQTT-Client: MAX_RECEIVE_BUFFER_SIZE_EXCEEDED CODESYS Forge talk (Post)
I've got it running again! For testing I've extendet the g_udiMaxPacketSize from 6000 to 100000 and g_udiMaxPayloadSize from 4096 to 80000 After it does run again! Thank you very much for your help!
Last updated: 2023-09-28

Post by damian177 on MQTT_client disconnect when call MQTT_sunscribe CODESYS Forge talk (Post)
Probably I have the same problem, When I connect to broker and try subscribe to much topics then the client return error, did you solve your problem ?
Last updated: 2023-10-10

When using the Element Collections library, is there a proper way to remove a dynamically created collection from memory? CODESYS Forge talk (Thread)
When using the Element Collections library, is there a proper way to remove a dynamically created collection from memory?
Last updated: 2023-10-31

How to use more 4 instances of CANopen/Profibus/Modbus with The application-based license CODESYS Control CODESYS Forge talk (Thread)
How to use more 4 instances of CANopen/Profibus/Modbus with The application-based license CODESYS Control
Last updated: 2023-11-02

Post by snhatton on How to switch between dynamic IP address and dynamic? CODESYS Forge talk (Post)
Does this help: https://pimylifeup.com/raspberry-pi-static-ip-address/#:~:text=1%20To%20begin%20setting%20up%20a%20static%20IP,go%20ahead%20and%20restart%20the%20Raspberry%20Pi.%20. Following those instructions, it is possible to configure the ip address as static.
Last updated: 2023-11-08

<< < 1 .. 109 110 111 112 113 .. 213 > >> (Page 111 of 213)

Showing results of 5325

Sort by relevance or date