Post by bschraud on Zielsystem stimmt nicht mit dem verbundenen Gerät überein
CODESYS Forge
talk
(Post)
Der Eintrag in /etc/CODESYSControl.Usr.cfg war schon vorhanden. Bisher habe ich das Gerät Pi MC SL verwendet. Laut H. Zenker ist das die "Produktionsversion“ der Raspberry-Laufzeitumgebung. Gibt es kein MC SL Runtime Package mehr? Ist dieses in der Standardinstallation nicht mehr vorhanden und muss manuell installiert werden? Beim Wechsel auf Pi 64 kann ich nicht mehr kompilieren wegen folgender Fehlermeldung: "cmperrors interfaces, 3.5.5.0 (system): C0338: Die Bibliothek 'cmperrors interfaces, 3.5.5.0 (system)' wird nur in 32-Bit-Applikationen unterstützt" Vielen Dank für die Hilfe
Last updated: 2024-03-11
Post by mp9876 on Device User Logon
CODESYS Forge
talk
(Post)
Hi everyone, Had that problem before where I could not create another user but used the method just above and it worked great. My problem now is that I get this message when attempting to logon to the device: invalid user authentication on the target dev5, the new user created is pretty much a copy of the user 'Owner' except for the password. Any idea as to why I am always getting this "invalid user authetication on the target" message ? Using Codesys V3.5 SP19 Patch 6 + (64 bit) Regards
Last updated: 2024-03-16
Post by timvh on Device logon problem following fresh install
CODESYS Forge
talk
(Post)
In your project you selected the "CODESYS Control Win V3" as device, but the device you want to connect to is a "CODESYS Control Win V3 x64". Those are not the same. If you double click on the device during the network scan, you will get information that these are not the same, but that you can change the type in your project to the x64 bit type. Another option is to "right-click" on the device in the device tree of your project and select "update device" then select the x64 type.
Last updated: 2024-03-19
Post by superjojo2002 on Licensing info not available.
CODESYS Forge
talk
(Post)
I checked it using the very same docker container version like colleague moon and the command returned root@nt0001c02c5533:/# cmu -x cmu - CodeMeter Universal Support Tool. Version 7.60c of 2023-Aug-09 (Build 5625) for Linux/ARMHF 64-Bit Copyright (C) 2007-2023 by WIBU-SYSTEMS AG. All rights reserved. Result: 0 CmContainer(s) listed. (CodeMeter not running) Please consider that we intend to license a codesys ARM64 SL in a docker container.
Last updated: 2024-03-20
Post by dkugler on Alarm State Icon
CODESYS Forge
talk
(Post)
thank you for pointing me to this "bug"!! I haven't recognized, the bit is reset after the first alarm is gone. I use this only for warnings, so it's not a drama, but was not correct in the past. I solved it now simply stupid by counting up a variable every time an alarm appears and decreasing it if an alarm is gone. The "warning lamp" is activated by checking the counter is > 0 The nice side effect, i'm able to show the number of active alarms in the state line now.
Last updated: 2024-04-24
Post by miodusy on CODESYS Control Standard S and Beaglebone
CODESYS Forge
talk
(Post)
Hi, CODESYS Control Standard S + CODESYS Visualization L, CODESYS Control for Beaglebone 4.11.0.0, CODESYS V3.5 SP20 + (64-bit) I have problem that license manager say that this device is not supported when i try active whole license. When I select only runtime and communication it is go next step, but then I no have license on in Visualistion section, all of rest of software metric licese is ok(IO, Istances of com et, code size etc.). Thanks!
Last updated: 2024-05-11
Post by ndzied2 on Rounding error in simple addition
CODESYS Forge
talk
(Post)
This is a consequence of how computers store floating point numbers. 0.1 cannot be exactly represented in a computer. This is not a CoDeSys thing. Here is a link to a converter to show you the exact value that is represented when you use a REAL data type (which is a 32 bit float). https://baseconvert.com/ieee-754-floating-point If you really need to keep track of 0.1 increments. use INT OR DINT and then add 1 each time and assume that there is one decimal place.
Last updated: 2024-05-24
Post by liamb on Converting CANbus to Decimal from signed 2's complement
CODESYS Forge
talk
(Post)
I need to combine two 8 bit CANbus messages to 16 bits signed int then convert to decimal Decimal from signed 2's complement. I've been using the below code to read for new messages, combine them then assign them to a variable What is the best way to do this for from signed 2's complement? fbRxMessage351(Data := RxMessage351Data); IF fbRxMessage351.NewMessage THEN ChargeVoltage := (WORD_TO_REAL((RxMessage351Data[0]) + ((RxMessage351Data[1]) * 256))) * 0.1; END_IF
Last updated: 2024-08-16
Post by pietrobalint on Retain / Persistent Variables in Codesys for Raspberry Pi
CODESYS Forge
talk
(Post)
Hi micik, I am not sure I am using well the code, because I checked the directory and there is no retains.ret file. Now I deleted the code from my project and the values are still works as persistant variables after ssh reboot it seems to me they retain as their previous value. So I am a bit confused, maybe 4.12.0.0 Raspberry Pi SL solved the persitent variable problem...
Last updated: 2024-08-20
Post by s1ack on PFC200 Will soft-container & IIoT license survive a firmware update?
CODESYS Forge
talk
(Post)
I have an IIoT License activated on a PFC200 with older firmware 2.08.32 (11). If I flash it to the latest available 4.05.10 (27) does the license get destroyed? I have a back up file '3SLicenseInfo.tar'. But this looks quite a bit different form the backup I got from more modern firmware... 'CMLicenseNew.WibuCmRaU'. Can the new license manager restore it from the old .tar?
Last updated: 7 days 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 jickisticki on Witch library?
CODESYS Forge
talk
(Post)
Crafting my Fellowship Personal Statement was like weaving the threads of my aspirations into a tapestry of words. Each sentence became a brushstroke, painting a vivid portrait of my journey and ambitions. Beyond being just a document, it became a mirror reflecting the depth of my experiences. Like a conductor guiding an orchestra, my personal statement was composed to resonate with my unique voice. In the realm of specialized opportunities, this statement serves as a compass, guiding me toward the next chapter of my professional growth. With each word, I felt the guidance of mentors shaping my story into an eloquent narrative.
Last updated: 2023-08-17
Post by tomast on WAGO 750-8212 nad Sinamics v20 modbus RTU speed control
CODESYS Forge
talk
(Post)
Hi Guys, I am new to this forum and i would like to ask od anyone got communication with Siemens v20 vfd working via Modbus RTU? I followed many websites and finally got the communication working but have problema with read/write registers. For example if i try to read holding register 40011 which is accel time i get noth but when i set the offset 0x0000 en length 113 i get ale the registers. I cannot get speed control working. I read someth about stw (control Word) and hsw but have some problems to understand it en get it working. It would be really nice if someone could help me with it. Thx
Last updated: 2024-03-05
Post by phoward131 on Text List Fallback Value
CODESYS Forge
talk
(Post)
I am relatively new to Codesys and I'm trying to develop an HMI that displays what mode a particular device is in based on an integer value. I am currently using dynamic texts with a text list which works fine but I am looking for a way to display a particular string (ie 'Unknown') when the index doesn't match any of of the indices in the text list. I can enter 'Unknown' in the text property of the text field element which works as expected but it displays the single quotes on the visualization. How can I escape these quotes to simply display the word Unknown? Thanks!
Last updated: 2024-03-22
Post by jens on Modbus tcp - channel
CODESYS Forge
talk
(Post)
Help wanted This is the first time i'm doing a Modbus Tcp project. I have some VLT with a extension module MCA-122. i'm currently unable to write to the VLT slave, but i can read from status word parameter=1603 and address := 16029 where the address is calculated from parameter is ((id x 10)-1). in the manual the functions that are supported are 3 hex, 6 hex, 10 hex, b hex and 11 hex. read holdin registers, write single register, write multiple registers, get comm. event counter, report slave id. i'm only using the Modbus Slave Channel is this wrong when trying to write to the vlt ?
Last updated: 2024-06-13
Post by janderson on OPC UA Server limitations, large array crashes runtime
CODESYS Forge
talk
(Post)
What are the limitations of the OPC UA Server? I am trying to get data off my PLC that is acquired at high rates (~50k samples/s) so I am storing them in arrays and trying to get the arrays off the PLC. When I attempt to read a ~200k element array through OPC UA the server and runtime crashes (requiring tools -> update linux arm64 -> start runtime). Is there a better way to get highspeed data off? The ACDatalog library seems a bit irritating to use so I would prefer to go through OPC UA.
Last updated: 2023-08-23
Post by jerry-sorrells on Find Function: Object reference not set to an instance of an object.
CODESYS Forge
talk
(Post)
Build: CODESYS 3.5 SP19 Patch 1 (64-bit) Host OS: Windows 10 Target: Linux SL I have a project with programs in Structured Text and Ladder Diagram. When I try to use the Find function, it works for the Active Editor; however, when I try to use Find for the Entire Project, I get the error "Object reference not set to the instance of an object." I know what this error means in the context of the program, but I have no idea why the find function is returning this error. The variable I am searching does not matter: it happens with all variables. Any help with this will be greatly appreciated. I generally use the Find function quite often as I am developing and not having it is really slowing me down.
Last updated: 2023-10-23
Post by macros8 on Alarm Management - latched variable represented as Text list
CODESYS Forge
talk
(Post)
Hi, I haven´t noticed you put the comment here. I thing it´s a bit different. What I want is to have detail errors of technology in data type e.g. INT. This variable I would latch to the corresponding error msg but I would like to get it convert to text from the text list and not keep it in INT form. Example. Main error Valve Error: SubErrors 1 - Both sensors 2 - Not retracted in time 3 - Not pulled out in time In HMI Main error + latch SubErrors => "Valve Error: Both sensors" The benefit is that text lists are part of translation and can be easily manipulated. I know I can create whole string msg in PLC but then, it lose advantage of Alarm management. Thanks. M.
Last updated: 2023-11-07
Post by gurke258 on Codesys Safety EtherCAT with Beckhoff
CODESYS Forge
talk
(Post)
Hello :) We are currently configuring a system with Codesys as SoftPLC on a Linux system and with Beckhoff terminals. I have already gained some experience with Codesys and also with TwinCat incl. TwinCAT Safety. What is new to me now is Codesys in conjunction with Beckhoff safety terminals. We are currently using an EL1918 & EL2904 here. I have been able to integrate both terminals into my project, but I don't know how to interconnect them so that they communicate. That's a bit easier with Twincat ^^ Can any of you help me? I would also prefer a Codesys EtherCAT Safety training or webinar if anyone knows of one. Unfortunately I can't find such an event on the internet.
Last updated: 2023-11-07
Post by i-campbell on What does CODESYS expect to do when I get such an error message
CODESYS Forge
talk
(Post)
you need to get the addons that the person that programmed it used. I always store an .installation-config file alongside the project. If you have lost that, then it gets a bit of a headache: I think even with SP18 you can hit yes to open it anyway, and it will suggest which addons it thinks are missing, if you double click the yellow "missing-addons" in the status bar. If you know you have the right addons, you can do a "Save As.." and it will write your current addon list to the file, and you wont get the error next time.
Last updated: 2024-01-08
Post by cedriclee on RaspberryPI reconnection error
CODESYS Forge
talk
(Post)
"Hello, I'm Cedric Lee, a PLC engineer based in Korea. I'm reaching out about an ongoing issue with the connection when attempting to control Beckhoff modules using Raspberry Pi with CODESYS for the first time. I use CODESYS to target the Raspberry Pi's IP, install version 4.10.0.0 of the CODESYS Runtime Package, and upon pressing Start in the Runtime, the target connects to the Raspberry Pi. However, within about a minute, an error window appears, stating 'no connection to the device. please rescan your network,' leading to the disconnection of the target. This cycle repeats. I've attached some pictures for your reference. I'm using CODESYS Development System V3, Raspberry Pi 4 Model B (installed as 64-bit), and Beckhoff EK1100 modules. If anyone has a solution to this issue, please help. Your assistance is greatly appreciated."
Last updated: 2024-01-11
Post by matt-s on HMI Pushbutton/Move Instruction
CODESYS Forge
talk
(Post)
I am having an issue where the manual start/stop push buttons on the HMI are supposed to take the pumps/blowers out of auto. The logic I have attached works for the pumps, but not the blower. From what I can tell it is the exact same logic, but it is not writing a 0 to the Auto PB variable. Attached is the logic, cross reference list to show nothing else is writing to it, and the HMI screen. Any help? Am I missing something? I am using a Groov Epic PR1, my software version is 3.5 SP19 Patch 5 32 Bit.
Last updated: 2024-01-25
Post by karol-abktech on Raspberry and problem with runtime
CODESYS Forge
talk
(Post)
Hi, My problem is with raspberry pi 4 with 2 GB ram,. Install codesys is correct but runtime works only few seconds or I can connect with device few seconds. I can ping raspberry and in system info I can see " !!!! Warning: no runtime license - running in demo mode(~2 hours)" but it is 2 minutes after runtime. When I press Start runtime I have another few seconds when I can connect to raspberry. After this time I couldn't find device. Of course, reapet start runtime works every time on few second. Raspberry is new and works with fresh install raspberry os 32 bit. Where should I start looking for solve of my problem ?
Last updated: 2024-02-14
Post by bschraud on Zielsystem stimmt nicht mit dem verbundenen Gerät überein
CODESYS Forge
talk
(Post)
Hallo, nach einer Umrüstung des RPi auf SSD habe ich den RPi neu aufgesetzt. Nach dem Installieren der Runtime (4.11.0.0 raspberry, all) auf den RPi kann ich das Gerät nicht mehr verbinden. Die Fehlermeldung lautet "Das gewählte Zielsystem 'Codesys Control for Raspberry Pi MC SL' stimmt nicht mit dem verbundenen Gerät 'Codesys Control for Raspberry Pi 64SL' überein. ID-Diskrepanz: Ausgewählt=000 0011, Online=0000 0012" Bei der Konfiguration des Laufzeitsystems kann man nur Multicore 64-bit (Aarch64) auswählen. Beim Aktualisieren des Gerätes im Gerätebaum habe ich Raspberry Pi MC SL in der Version 4.11.0.0 ausgewählt. Diese Version habe ich auch ausgewählt, weil nur diese Version für den produktiven Einsatz zugelassen ist. Die codesys Version ist frisch installiert, also 3.5.19.60 Vielen Dank für Ihre Hilfe
Last updated: 2024-03-08
Post by eschwellinger on Zielsystem stimmt nicht mit dem verbundenen Gerät überein
CODESYS Forge
talk
(Post)
na ja es gibt halt einfach die Möglichkeiten: 1. Man installiert Raspberry PI OS 32Bit -> dann geht PI SL und PI MC Multicore als Target 2. Man installiert Raspberry PI OS 64Bit dann muss es PI64Bit sein falls der Übersetzungsfehler nicht in einer Bibliothek ist (die du vielleicht nicht ändern kannst) https://faq.codesys.com/pages/viewpage.action?pageId=128253958 Hier der Hinweis was man tun muss das dein IEC Code für 32Bit als auch 64Bit Targets funktioniert Also entweder zurück auf Raspberry PI OS 32 Bit: nur zur Info noch was im Config file steht für welche Plattform/Produkt [CmpRasPi] Architecture=aarch64 (-> 64Bit PI) oder Architecture=armv7l (-> PI MC Multicore) oder Architecture=armv6l (-> PI SL Single Core)
Last updated: 2024-03-11
To search for an exact phrase, put it in quotes. Example: "getting started docs"
To exclude a word or phrase, put a dash in front of it. Example: docs -help
To search on specific fields, use these field names instead of a general text search. You can group with AND
or OR
.