Post by solve-it on SysFileOpenAsync
CODESYS Forge
talk
(Post)
Just realized that it is the /dev/input/js0 file. Don't think this is a prob either. Found the ConfigFile. Where and how to add /dev/input/js0? raspberry [SysFile] FilePath.1=/etc/, 3S.dat PlcLogicPrefix=1 [SysTarget] TargetVersionMask=0 TargetVersionCompatibilityMask=0xFFFF0000 [CmpLog] Logger.0.Name=/tmp/codesyscontrol.log Logger.0.Filter=0x0000000F Logger.0.Enable=1 Logger.0.MaxEntries=1000 Logger.0.MaxFileSize=1000000 Logger.0.MaxFiles=1 Logger.0.Backend.0.ClassId=0x00000104 ;writes logger messages in a file Logger.0.Type=0x314 ;Set the timestamp to RTC [CmpSettings] FileReference.0=SysFileMap.cfg, SysFileMap FileReference.1=/etc/CODESYSControl_User.cfg [SysExcept] Linux.DisableFpuOverflowException=1 Linux.DisableFpuUnderflowException=1 Linux.DisableFpuInvalidOperationException=1 [CmpWebServer] ConnectionType=0 [CmpOpenSSL] WebServer.Cert=server.cer WebServer.PrivateKey=server.key WebServer.CipherList=HIGH [SysMem] Linux.Memlock=0 [CmpCodeMeter] InitLicenseFile.0=3SLicense.wbb [SysEthernet] Linux.ProtocolFilter=3 [CmpSchedule] ProcessorLoad.Enable=1 ProcessorLoad.Maximum=95 ProcessorLoad.Interval=5000 DisableOmittedCycleWatchdog=1 [CmpUserMgr] AsymmetricAuthKey=6873d655ac1f166f3743feea42d2f3dd1b39ae40 [CmpSecureChannel] CertificateHash=09fd8d52be4ddd45a709bc9c95e2aa093b3f5695 [SysSocket] Adapter.0.Name="eth0" Adapter.0.EnableSetIpMask=1 ;raspberry [ComponentManager] ;Component.1=CmpGateway ;Component.2=CmpGwCommDrvTcp ;Component.3=CmpGwCommDrvShm [SysCom] ;Linux.Devicefile=/dev/ttyS [CmpBlkDrvCom] ;Com.0.Name=MyCom ;Com.0.Baudrate=115200 ;Com.0.Port=3 ;Com.0.EnableAutoAddressing=1 [SysProcess] Command.0=shutdown [CmpApp] Bootproject.RetainMismatch.Init=1 ;Application.1=Application ;Application.1=Application ;Application.1=Application Application.1=Application [CmpRasPi] Architecture=armv6l [CmpRedundancyConnectionIP] [CmpRedundancy] [CmpSrv] [IoDrvEtherCAT]
Last updated: 2024-07-16
Post by ppix on Establishing TLS Connection with MQTT Broker using MQTT Client SL Package
CODESYS Forge
talk
(Post)
I’m currently working on establishing a TLS connection with an MQTT broker using the MQTT Client SL package in CODESYS. While I’ve successfully established communication with the broker without TLS, I'm encountering issues when trying to enable TLS. In the 'MQTT Explorer' application, I can easily upload the server certificate (.crt), client certificate (.crt), and client key (.key). However, in CODESYS, I can’t find a way to upload my client key (.key file). Here's a summary of my current setup: Certificates: I have uploaded both the client and server certificates to the certificate store under the 'Trusted Certificates' folder in the security screen. TLS Context Initialization: Despite setting the _sCommonName as the name of my client certificate, a new self-signed certificate is created and placed within the device’s certificates. I then need to manually move this certificate to the trusted certificates folder. This results in three certificates in my trusted certs folder: client cert, server cert, and the newly created cert. _ciDefaultCertInfo : MQTT.NBS.CERT_INFO := (psInfo := ADR(_sCommonName), udiSize := TO_UDINT(LEN(_sCommonName))); // CN of the certificate (common name) _sCipherList : MQTT.NBS.CIPHER_LIST := STRUCT(psList := ADR('HIGH'), udiSize := 4); // Cipher string see https://www.openssl.org/docs/man1.1.1/man1/ciphers.html _tlsContext : MQTT.NBS.TLSContext := ( sUseCaseName := _sCommonName, // A certificate is stored in the certificate store with the use case name. You can choose any name. Here we use the common name. ePurpose := MQTT.NBS.PURPOSE.CLIENT_SIDE, // For client certificates set this to NBS.PURPOSE.CLIENT_SIDE sTLSVersion := '1.3', // The TLS version sCipherList := _sCipherList, // Set the cipher list sHostname := sHostname, // The hostname of the broker udiVerificationMode := 2, // 2 => Active Peer verification ciCertInfo := _ciDefaultCertInfo, // Set the cert info itfCertVerifer := 0); // 0 => No Verifier mqttClient : MQTT.MQTTClient := (xUseTLS:=TRUE, itfTLSContext := _tlsContext, itfAsyncProperty := _asyncProperty); Additional Details: In the client FB, I’ve set uiPort:= 8883, xUseTLS:= TRUE, and configured itfTLSContext as mentioned above. The certificates are encrypted with SHA256RSA. sHostname is the IP address of my broker. I’ve attached a copy of the client FB, which shows straight lines where variables are assigned and boxes where they are not. I am currently trying this on the only 2 compatible versions of COSDESYS with my controller (V3.5.15.20 and V3.5.18.40) My Question: How do I correctly set up this mTLS connection? What might I be missing? Any guidance or suggestions would be greatly appreciated, especially considering I’ve already successfully established a non-TLS connection with the same broker. Thank you in advance for your help!
Last updated: 2024-06-19
Post by dantheman on Connecting to SoftPLC Only Works By Turning Off Modbus Ethernet Port
CODESYS Forge
talk
(Post)
I have an IPC with 2 ethernet ports and 1 Wi-Fi. I'm using ModbusTCP with the ethernet port named "enp2s0" connected to my remote I/O. This works fine when testing with Python and also works with CODESYS, but CODESYS is only able to scan for the Linux SoftPLC when I turn off the "enp2s0" interface. In other words, I can't get online with the IDE if I want my ModbusTCP comms to run with CODESYS. I'm using a Linux SoftPLC that has the following entry in CODESYSControl.cfg, hoping that this will allow me to connect with "enp1s0" or "wlp3s0", and leave "enp2s0" for field comms, but this seems to only make the source IP of the ModbusTCP comms to be bound to "enp2s0". That last point is the case only if I don't restart the service, but if I do restart the service after changing the config file, the source IP for the ModbusTCP comms then becomes the one for "enp1s0", which is very confusing to me: [SysSocket] Adapter.0.Name="enp2s0" Adapter.0.EnableSetIpAndMask=1 On the device list, I only have "enp2s0" given as the ethernet device that has the ModbusTCP master & slave beneath it, shown in Screenshot 1. On the IPC, I can ping the ModbusTCP client (remote I/O) from "enp2s0", and I've attached a Wireshark capture of running ModbusTCP from the CODESYS runtime as Screenshot 2, 3 & 4 (again, I can't get online when this is running, I have to turn off "enp2s0" to connect even when it's idle and I don't have an active TCP session with my Python tests). Like I explained above, the source IP is "enp1s0", even though the ethernet device on the project is "enp2s0". I was lucky to catch the red message that showed the source IP that makes sense to me (the one for "enp2s0"), but for some reason that connection was reset and I never saw that packet again. I've also tried this with Auto-reconnect both enabled & disabled, for the ModbusTCP Master device. I also have to turn off "enp1s0" and then turn it on, just so that I can have the ModbusTCP comms running from "enp2s0" (which is not intuitive in any way to me, I'd love some help understanding that phenomenon as well) in the weird manner that I've described above. I would be very appreciative if someone can help me figure out this pickle. I'd love to just connect to CODESYS through my Wi-Fi interface and leave my ethernet ports for field comms.
Last updated: 2024-08-01
Post by bahrt on Mapping GPIO and adding GPIO configurations
CODESYS Forge
talk
(Post)
Hi I am about to configure ALL GPIOs on a Raspberry Pi 3 model B V1.2. It seems that I have limited understanding of why not all the IO’s become available with the corresponding mapped IO’s – the 'dwInUse' contains mapping of the inputs from GPIO0 to GPIO27. But 'dwInputs' are only showing GPIO0 to GPIO8 and GPIO15 as available inputs. These mentioned inputs work fine You will be able to watch the limited mapped IO activity here: https://drive.google.com/file/d/1zz4PBNBfRZBF2YkiJ2VQxw6L9MBVji7R/view?usp=sharing Can you please bring your best idea on why GPIO09 to GPIO14 and GPIO16 to GPIO27 state are zero in the dwInputs register? Thanks in advance. Best regards Andreas Bahrt
Last updated: 2023-11-16
Post by bahrt on Raspberry Pi GPIO mapping
CODESYS Forge
talk
(Post)
Hi I am about to configure ALL GPIOs on a Raspberry Pi 3 model B V1.2. It seems that I have limited understanding of why not all the IO’s become available with the corresponding mapped IO’s – the 'dwInUse' contains mapping of the inputs from GPIO0 to GPIO27. But 'dwInputs' are only showing GPIO0 to GPIO8 and GPIO15 as available inputs. These mentioned inputs work fine You will be able to watch the limited mapped IO activity here: https://drive.google.com/file/d/1zz4PBNBfRZBF2YkiJ2VQxw6L9MBVji7R/view?usp=sharing Can you please bring your best idea on why GPIO09 to GPIO14 and GPIO16 to GPIO27 state are not active (at a fixed zero state) in the dwInputs register? Thanks in advance. Best regards Andreas Bahrt
Last updated: 2023-11-21
Post by snhatton on OpC UA server on Raspberry Pi 64 SL runtime
CODESYS Forge
talk
(Post)
Good afternoon, After changing the security settings to: CommunicationPolicy: POLICY_BASICSHA256SHA256 CommunicationMode: ALL Activation: Activated UserAuthentication: ENABLED Then generate a new certificate on the device for the OPC-UA server from Security Agent->Device->OPC UA Server. Restart the runtime using tools->Update Raspberry Pi->Stop->Start for the changes to take effect. It may take a minute for the runtime to start. Initiate the connection from the UA server side. You should see a pop-up asking you to trust the certificate. Click on the button 'Trust Server Certificate'. Next, you should see a certificate in the quarantined folder of the security agent in CODESYS. Click and drag this from quarantined to trusted and then try connecting from UA expert to the device. These steps worked for me and my setup and I hope they can help you!
Last updated: 2023-12-11
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 alexgooi on Function Blocks and arrays of function blocks
CODESYS Forge
talk
(Post)
Hi Jack, I think you have to look at a FB in a different way. A Function block (Class) can contain its own data. In other words don't define loose data in your GVL, but define a instance of a FB (Object) in your GVL: Example: Function_Block Basic_Class VAR_INPUT Open_Command: BOOL; END_VAR VAR_OUTPUT Opened: BOOL; END_VAR if Open_Command then Opened := TRUE; ELSE Opened := FALSE; END_IF Global Variables Objects: ARRAY[1..100] OF Basic_Class; //Here you ar defining you objects END_VAR In your code you can directly acces the data and couple it to the IO: GVL.Objects[1].Open_Command := %IX0.0; %QX0.0 := GVL.Objects[1].Opened; //To call the code itself use: GVL.Objects[1](); If you want to take this a step further you are also able to add methods and properties to the FB/Class end thereby creating a OOIP program
Last updated: 2024-02-15
Post by struccc on Release SP20 - Changes in behaviour?
CODESYS Forge
talk
(Post)
This... is not very practical for me - as I have a bunch of different classes - it's just doesn't seems to be very practical to define a NULL for each of them... Something like this I use in parameter definitions. For example: VAR_INPUT refVFD_Drive : REFERENCE TO FB_VFD_Drive := GVL_DUMMY.Dummy_VFD; END_VAR I use this to prepare objects for code I don't control: Typycally visualizations - had many troubles with references set on the fly, right before opening a corresponding visualization... And yes, the instance in GVL_Dummy reports itself as "Fake", so it does not influence the actual application at all. Actually this way I could invalidate a reference, just to set it to a "Dummy" instance.
Last updated: 2024-03-25
Post by alexgooi on Modbus writing on value change
CODESYS Forge
talk
(Post)
The way I usally tackle this is by syncing only words (then you are able to use the FB above). If you then want to write a Boolean simply type it like this. Value[1].0 := Bool1; Value[1].1 := Bool2; Value[1].2 := Bool3; Uints have the same number of bits than a INT/WORD so these ones will work as well (they are only represented diffrently). A Real will work but you will loose some infomration in the conversion. If you want to keep the information you can convert 2 words to a float with a function (for example with the IEEE-754 standard) . In this way the syncing to the server is very simple and in the Codesys Program you decide what part of the word you want to use.
Last updated: 2024-04-03
Post by valenting on Can't use new licensing with Raspberry Pi
CODESYS Forge
talk
(Post)
Hi, I'm using Codesys control for Raspberry Pi in the latest version (4.11.0.0) When I try to install a license with the new application-based licensing, I have an error "returncode 403046401" (using codesys SP18) I updated to codesys SP20, and now I get the following error: "The selected conainer [0]: SN=..., Version=1.18, Chip=0, Rev=0 does not fit to your ticket. Please select a suitable one." The license I'm trying to install is a Codesys Control Basic L license, with a Codesys Visualization L option, according to the needs of my application. What can I do to activate my license ?
Last updated: 2024-04-22
Post by rafael on Wbm/runtime and visualization login
CODESYS Forge
talk
(Post)
Hello everyone, I’m trying to understand if it is this way or I can change it. I’m making a PLC code and visualization screens, the ideia is to operate via webvisu some controls. So i made a code, made some screens and when i try it in my web browser, first it asks me to insert te user and password of the wbm/runtime of the plc (user: admin, password: wago by default), then i can acess my screens but I have to login again with the user and password that i created in the visualization user managment. My question is: is there a way to disable this first login to the visualization screens (webvisu)? Or create another user/password for this first screen? I have a PFC200 and a Edge Controller, both are working the same way. Thanks in advance Thanks
Last updated: 2024-06-25
Post by orbis-tertius on 3.5 P20 hangs - no response
CODESYS Forge
talk
(Post)
Is there anybody can help me with the same problem? I have to migrate created project in ver.3.5.17.0 32BIT with runtime 4.7.0 to ver.3.5.20.0 64BIT with runtime 4.7.11.0 due to the new license. All the libraries and dependencies are updaded and there are no any errors. The first compilation and loading to the controller is being compleated well. After this being done and if I am forced to change any values or change any code in the current project, another compilation will be freezed. This problem can be solved if pressed Build/cleen or cleen all. There is another method to solve this; if project is loaded with excluded object (Alarm Configuration), repeated compilations will be done well.
Last updated: 2024-06-27
Post by rcanfield on Code Coverage and Test Manager
CODESYS Forge
talk
(Post)
I am exploring the possibility of measuring test coverage using the Test Manager and Profiler tools. It appears there are some significant limitations. Has anyone been successful trying to use these tools? Here are my observed limitations. Am I misunderstanding anything? * Profiler only works for one "run cycle". Even warm resets will clear the coverage calculations. Thus, all tests would have to manually reset values when complete to prevent contamination to other tests. * It is not possible to see which statements were/weren't executed. One would have to use the flow control tool which cannot be used in conjunction with the Profiler, and must be viewed in realtime. * The profiler control cannot be automated and therefore must be executed through a manual procedure. Thank you!
Last updated: 2024-07-11
Post by rcanfield on Code Coverage and Test Manager
CODESYS Forge
talk
(Post)
I am exploring the possibility of measuring test coverage using the Test Manager and Profiler tools. It appears there are some significant limitations. Has anyone been successful trying to use these tools? Here are my observed limitations. Am I misunderstanding anything? * Profiler only works for one "run cycle". Even warm resets will clear the coverage calculations. Thus, all tests would have to manually reset values when complete to prevent contamination to other tests. * It is not possible to see which statements were/weren't executed. One would have to use the flow control tool which cannot be used in conjunction with the Profiler, and must be viewed in realtime. * The profiler control cannot be automated and therefore must be executed through a manual procedure. Thank you!
Last updated: 2024-07-11
Post by alez on CANopen safety , SRDO error behavior
CODESYS Forge
talk
(Post)
I have a project in which there is a Safety device in CANopen, and the PLC interfaces with it as Master. I would like to understand if it is possible to set the behavior in case one of the SRDOs that I receive from the slave is no longer received. From what I have seen, if the SRDOs are not received, the CANopen safety status becomes "Not in progress" and the mapped variables freeze at the last value detected. I want to understand if it was possible to set the variables connected to the SRDOs to take a default value (e.g. zero) in the event of a CANOpen error during reception.
Last updated: 2024-07-15
Post by peterned on Array to String
CODESYS Forge
talk
(Post)
max. string length in Codesys is 255 chars. It's not possible to cram 20,000 things in a string. If you need to send the data to another device, send the whole data[] array (as byte array, without doing anything to it) and extract the information on the other end. As each struct member has a fixed size (81 bytes, as per you declaration), this will be easy. To save some resources, consider declaring string lengths - e.g. if the max possible length for key is 10 chars, declare it key: STRING(10); and it will occupy 11 bytes instead of 81
Last updated: 2024-07-20
Post by paulg on Converting hex bytes to float
CODESYS Forge
talk
(Post)
I'll be capturing a hex stream over serial into a RasPi and I'd like to convert a group of bytes into a float. I see this is available (https://content.helpme-codesys.com/en/CODESYS%20Development%20System/cdsoperatorrealto.html) but not its inverse (i.e. BYTE_TO_REAL). The packets will be 18 bytes but I'll be selecting 4 byte segments from the middle, swapping byte endianness (i.e. changing 0x51847641 to 0x41768451), and converting to float; I believe they adhere to IEEE 754. Is there a pre-built function for some or all of this, or do I need to follow (https://forge.codesys.com/forge/talk/Engineering/thread/dc5829c7ea/)? Thanks!
Last updated: 2024-08-02
Post by paulpotat on Exclude traces when searching with ctrl+F
CODESYS Forge
talk
(Post)
Hello, I was wondering if there is a way in codesys to exclude the traces from the search when using the "ctrl+F" window ? That would be nice to improve the search functionnality when looking for a specific variable. Sometimes when I iterate through all occurences with the "find next" button, it opens the trace configuration window. I would expect to be able to close it and go to the next occurence with the "find next" button, but after closing the trace configuration window the search says it has reached the end of the scope (even if in reality there are other occurences of the variable elsewhere). I tried to enable / disable the "search up" checkbox but it's not changing anything. I hope somebody have insight on this, BR
Last updated: 2024-08-06
Post by trusty-squire on parker servo and position
CODESYS Forge
talk
(Post)
@gepert, When you say "I do not turn off power", are you saying you don't power off the drive, or you don't turn of the MC_POWER function block? I read your statement as you don't kill actual electrical power. MC_POWER should stay enabled. @Gustavo, not related to problem at all, but when you say 1.6 Nm is only enough torque to unscrew a loose bottle cap, I think that's a bit low. A quick mental math I use is 1 Nm is almost the same force as 1kG applied to a 10cm wrench. So 1.6kG applied to a 10cm wrench is still not a huge force, but more than enough to be felt if trying to turn the shaft by hand.
Last updated: 2024-08-06
Post by jari-koivuluoma on Newly created texlists wont appear in the selection dropdown
CODESYS Forge
talk
(Post)
When I create a new textlist in Codesys 3.5 SP19 Patch 5, it wont appear in the dropdown menu at Rectangle element > Dynamic texts > Text list. If I just type the name of the textlist to the field (in quotes), I get an error saying that some file is missing. Any good ideas what to do and what is going on. I recently updated to that version and I only now noticed this when I needed to add a new textlist so Im quite screwed with this not being able to add text lists. While im typing this, I tried copying an existing list and modifying it and it seems to show. Any ideas?
Last updated: 2024-09-19
Post by andrebrandt on FB string and naming
CODESYS Forge
talk
(Post)
Thank you so much. This worked. Waht im trying to do here is to automatically tag each sensors, valves and so on. There is a preatty nasty tag system i working on. "_320" is not alloved. I can have a tag "+4f=320.004-RT001V" In codesys I want to build the FB in folders. -4f | --320 | --001 This is the system structure. Inside here is all of the sensors and so on. But with Codesys, I cannot tag this like this. So what I'm trying to do now is to Make a folder for the building "4f" and one for the system "320", and a POU _001. Is there a way in init to get folder names?
Last updated: 2024-10-01
Post by phoward131 on Alarm Table Filtering
CODESYS Forge
talk
(Post)
I am having trouble getting the alarm table filtering to work. I downloaded the alarm filter latch example project and ran it on the local Codesys Control Win and the filters worked fine. I am trying to replicate it in my project and everything seems to be set up the exact same way and every time I turn on the filter, it shows no alarms. I even started a blank project and just copied in elements from the example project so that it is exactly the same and when I attempt to filter, it again shows no alarms. Could there be some project settings I need to adjust to make this work? I have attached my project with elements copied from the example project and filtering is not working.
Last updated: 2024-10-28
Post by mabac on No file found
CODESYS Forge
talk
(Post)
CODESYS introduced many cyber security related changes over the last few years, one of them is to restrict file access. By default, file access is restricted to the PlcLogic folder and subfolders of the CODESYS control runtime of version 3.5.19.0 and newer. For Control Win this would be the folder C:\ProgramData\CODESYS\CODESYSControlWinV3x64\xxxxxxxx\PlcLogic\ To enable access to other folders, you can configure additional paths by adding them to the file CODESYSControl.cfg. For example: [SysFile] FilePath=C:/temp/test FilePath.1=C:/Users/Public You should now be able to access your file in C:\temp\test\ or in C:\Users\Public
Last updated: 2024-10-30
Post by pistola on Visualization Size - Set Layout
CODESYS Forge
talk
(Post)
I feel like this is a setting issue and I can't seem to find the right setting. I have a new project that I'm looking to add visualizations to however when I select my template size (1280 x 800) I make sure in my properties under the visualization tab, I have "Use specified visualization size" selected and my width set at 1280 and height set at 800. Now within my visualization editor I can't see to get the size outside of my template to grey out. I've attached a PDF showing what I'd like the visualization editor to look like and what mine currently looks like. Any help would be greatly appreciated.
Last updated: 5 days ago
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
.