Post by steven-schalm on Github Actions CI/CD tasks - development topic
CODESYS Forge
talk
(Post)
hello kevinrn, I've been looking for a solution to the CI/CD issue for a long time. Briefly about me... I am 32 and software architect for Codesys V3 and fullstack dev for web (VueJS, NestJS) in a small company in Erfurt (Germany). https://www.rex-at.de/. Through my web part, we already have CI/CD running well via GitLab (YAML-based configuration file (.gitlab-ci.yml), which defines which pipelines and jobs are executed when certain events occur) with everything you know. Stages for npm packages - prepare (GitVersion, npm install or whatever) - build (vite, tsc or whatever) - testing (vitest, jest or whatever) - deploy (npm packages) And similar for monorepo's or backend services (in NestJS) as DockerImages. For Codesys we have been building an OOP framework for years (~50 libraries now), which is currently managed via SVN and a specially written Svn-Watcher (in Python) gets commits and runs and builds everything together and deploys it to an FTP server and network drive. Why do we still have SVN? Because we are unfortunately still tied to the safety integration of Codesys and can therefore only go to SP15 at most with our controller/Eckelmann. But soon there will be an update and there will be no more obstacles to using Git. Hence my questions: 1. the basic idea is to run a local Windows Runner on some machine? 2. install Codesys on the machine where the runner is running? 3. powershell & python scripts are then used to execute builds (compile, build, sign libraries) & deploys? 4. can the Github action also be used in GitLab? ChatGPT has already told me that it's not the same, but it doesn't hurt to ask. Do you have any ideas on this? Greetings :D
Last updated: 2024-08-20
Post by rkohser on Scripted Git clone / checkout being blocked by "Project Environment" popup
CODESYS Forge
talk
(Post)
Hi, I am trying to build a CI/CD pipeline around our codesys projects. The only entry point if the git url and branch, as we do not put our project file under source control, so we needed to find a way to git clone from the python scripting engine. This is currently how we do this : system.commands["Git", "Clone"].execute( "ProjectLocation=" + project_dir, "ProjectName=" + project_file_name, "RemoteUrl=" + project_git_remote_url, "GitProjectStoragePath=" + project_git_local_dir, ) system.commands["Git", "Checkout", "Branch"].execute( "PrimaryProjectHandle=0", "BranchName=origin/" + project_git_branch ) This works fine, except that, depending on the environment and the project, the "Project Environment" popup gets displayed to suggest for some updates, and waits for a user interaction, even with the "--noUI" flag injected as parameter. I investigated the VersionUpdateFlags, but the problem is that the git clone is an atomic operation that clones and directly opens the generated project without the possibility to inject any updateFlags argument (only used in the ScripProjects.open() function. I also tried to simulate some keyboard events acknowledge the window from script but I did not find the right location for the SendKeys statement, I think before the git clone call is too early and after is too late. So I am wondering if there would be some other way to do that. Is there some more proper scripting api for the git add on ? Is there a global configuration of the VersionUpdateFlags that would allow the popup to be disabled outside from any project context ? Is there some way to automatically acknowledge this kind of messages in a "--noUI" mode ? What do you suggest ? Thanks for your help, Roland Edit : I managed to solve my problem by following these steps in my pipeline : - create a template of a project and opt file preconfigured not to open the popup - open this project - initialize an empty git repo - add the remote, fetch and checkout the needed branch -> no popup is displayed, hourra Edit2 : The initial question was raised on a CODESYS V3.5 SP18 Patch 2 profile. Since CODESYS 3.5.19.30 a scripting API is available for Codesys Git that allows cloning a project with the support of VersionUpdateFlags https://content.helpme-codesys.com/en/CODESYS%20Git/_git_using_scripting.html
Last updated: 2024-01-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 jinlee on Dynamic I/Os Mapping
CODESYS Forge
talk
(Post)
Hi guys, Recently, I am working at the Dynamic I/Os mapping feature in Ecockpit or Codesys v3.5. I have been trying the libraries. However, it looks like it will not work as I wanted. I want to build the PLC which can detect all the I/Os itself and from there, I can do something on these channels. For example, the current setup is one digital input card, one digital output card and one analogue input card. Then, I want to add one more card into the setup e.g. one more digital input. Then, wago screen can detect this and we can assign them to tasks for example to control digital output. May I know is it possible ? Kind regards
Last updated: 2023-08-18
Post by rringo on Function block not autofilling
CODESYS Forge
talk
(Post)
I am attempting to place a block and make it an Analog sensor. When I go to change the name like in the instructional video on youtube it does not give me an option to autofill the block with a known configuration. This is a problem I have in Codesys 2.5 and 3.5. Did I mess up the install of the program or need to install a library? Any help would be appreciated. https://www.youtube.com/watch?v=PkJYQeIUmIM&t=136s at time mark 2:15ish The first image is what I can do and the second is what the videos function autofills to.
Last updated: 2023-08-24
Post by ggarcia94 on CANOPEN SDO configuration
CODESYS Forge
talk
(Post)
Hello, I´m connected to two drives via CANOPEN. The connection seems to be ok. However, I´m not able to get the PDOs to work even tho they are configured as in the manual of the drives. Looking at the SDOs I´ve seen that for each PDO there is a "Disable PDO" SDO that does not exist in the manual or in the EDS file of the drives. This "Disable PDO" signal has the same Index and Subindex as another SDO used to set and enable the COB-ID of the PDO. I´m assuming this is normal but why is Codesys creating a "Disable PDO" SDO for each PDO and could that be the reason the PDOs are not working?
Last updated: 2023-09-25
Post by ofey on Modbus TCP communication
CODESYS Forge
talk
(Post)
Hi! I tried setting up the PLC I'm working with (Beijer GN-9373) to connect to a modbus master running on a laptop. I have an ethernet connection (via USB-C to ethernet) between the laptop and the controller. I have tried following tutorial on how to set this up. I have added an ethernet device with the IP-address of the PLC. Further I added a ModbusTCP_Slave_Device with default settings. I get the error "Failed to open TCP Port: 1" when I try to go online with the PLC. Earlier I tested the exact same set up with the soft PLC from codesys. I can then read/write values correctly with the Modbus master i have running on the laptop. Hope anybody can help me with this, thanks in advance!
Last updated: 2023-10-06
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 grant32 on Codesys ARTI .XML file not creating but working.
CODESYS Forge
talk
(Post)
Hello, I am working on a project with a Beijer Nexto Xpress. I have done this a few times with no issues but for some reason this time when creating a Symbol Configuration the ARTI .xml file is not being created in the Project Folder. However when manually putting the ARTI tags in the HMI program they are connected and work. So I am just not getting the file to import all the tags. I can do it manually which is fine but no matter where the project folder is saved this occurs. Anyone experienced this? Did not see another forum on it.
Last updated: 2023-10-27
Post by ewi04 on Recipe Manager - RecipeManCommands, load & write wrong values, Bug?
CODESYS Forge
talk
(Post)
Hallo, I have a strange problem with the recipe manager. ISSUE: When using RecipeManCommands not all values are loaded correctly. Saving a recipe with CreateRecipe(), ReadAndSaveRecipe() or ReadAndSaveRecipeAs() works without any problems. BUT: LoadRecipe(), WriteRecipe() or LoadFromAndWriteRecipe() do not load the data correctly. It is Interesting that we have a different error pattern with LoadRecipe() than with WriteRecipe() or LoadFromAndWriteRecipe(). LoadRecipe() does not load all data and WriteRecipe() or LoadFromAndWriteRecipe() overwrites some data or assigns it incorrectly. And it is also strange that LoadRecipe() writes the values to the PLC. Normally it doesn’t do it. It makes no difference whether the memory type is textual or binary. I have an object consisting of STRUCTs which is inserted in the recipe definition. Environment: Codesys V3.5 SP19 Patch 4 (64Bit), Recipe Management 4.2.0.0 *Add a project (reduced to the problem)
Last updated: 2023-11-15
Post by martin-k on Beispieldateien finden / Inhalt der Packages
CODESYS Forge
talk
(Post)
Hallo, mal wieder war der Fehler vor dem Computer, bzw. waren es die Programmierer. Die Dateien sind tatsächlich im Ordner C:\Users\BENUZTERNAME\CODESYS Examples Aber nicht in dem der vor dem Computer sitzt, sondern im Administrator-Verzeichnis. Eine mächtig dämliche Sache. Und das alles ohne Hinweise in irgendwelchen Anleitungen oder Meldungsfenster beim installieren. Bei meiner suche mit *.project habe ich natürlich keine Adminrechte, deswegen wurde mir nichts angezeigt. Danke an alle die meine Beiträge gelesen haben. Danke an alle die darüber nachgedacht haben :-) Vielleicht hilft mein Thread mal jemandem. Gruß Martin PS: Mache Firmen nennen die Beispieldateien nicht Examples sondern Samples.
Last updated: 2023-11-17
Post by fabian on Sys Process Execute Command
CODESYS Forge
talk
(Post)
Hello, I have a question: Once the command is being executed, is there a way to kill it again? As the called application is running in the background, the user can't close it but it shall be closed/terminated, commanded by codesys. I have tried with "SysProcessTerminate" but I guess this is not correct as the RTE crashes when this function is called. Starting the application: IF GVL.xStrtQR THEN GVL.xStrtQR := FALSE; SysProcess.SysProcessExecuteCommand2(pszCommand:=sCmd, pszStdOut:=stdout, udiStdOutLen:= SIZEOF(stdout),pResult := ADR(GVL.pResQRTsk)); END_IF Trying to stop it again: IF GVL.xTrmQR THEN GVL.xTrmQR := FALSE; pResTerm := SysProcess.SysProcessTerminate(hProcess:=SysProcess.SysProcessGetCurrentHandle(pResult:=ADR(GVL.pResQRTsk))); END_IF Codesyscontrol Win x64, 3.5.19.10. Many thanks for any advice pointing to the correct direction.. :-) Regards, Fabian
Last updated: 2023-11-17
Post by eschwellinger on SP19 Runtime Zugriff auf lokales Dateisystem
CODESYS Forge
talk
(Post)
seit SP19 nur noch im PLcLogic pfad. c:\ProgramData\CODESYS...usw datein schreiben lesen [SysFile] PlaceholderFilePath.1=/tmp, $TMP$ PlaceholderFilePath.2=/media/usb, $USB$ PlaceholderFilePath.2.Volatile=1 Seit der Behebung kann der IEC-Code aus Security-Gründen nur noch auf das Arbeitsverzeichnis PLCLogic zugreifen. Sollte auf Dateien außerhalb dieses Pfades zugegriffen werden müssen, dann können diese per Platzhalter bekannt gemacht werden und sind dann zugreifbar. Darüber hinaus kann weiterhin ForceIecFilePath=0 gesetzt werden, um das bisherige Verhalten wiederherzustellen. Von letzterem raten wir aber dringend ab, da dann der IEC-Code wieder auf das gesamte Filesystem zugreifen kann. Daher sollte beides nur nach einer eingehenden Securitybewertung erfolgen.
Last updated: 2023-11-23
Post by riccardo on Management of a PLC network from a remote station
CODESYS Forge
talk
(Post)
Goodmorning, I would need to set a control station that can manage a PLC network. In short I need to access to all visu programmed in any PLC of the network (LAN). I was thinking to use a PLC with buttons that call, by mean an IP address, the visu of any PLC. I don't know if it is possible but I saw that there is a RemoteVisuTarget that run CODESYS Control Win V3. Can someone suggest me how to create a remote main control station from a normal PC? Thanks, Riccardo
Last updated: 2023-11-27
Post by mahmutbeyaz on Create a Motion Profile
CODESYS Forge
talk
(Post)
Dear All, I hope first to get notice and somebody answer my question. How can I create a motion profile with the axis following it (once or periodically)? As my research shows, Schineder has a UI-based (Motion Sizer) program that helps create a motion with different configurations, which is Codesys-based. I need to create a motion profile based on position, changing the speed. (i.e., 0-300mm moves with 300 mm/s, 300-400mm moves with 500 mm/s, 500-800mm moves with 1000 mm/s, and 800-0mm moves with 2000 mm/s). MC_PositionProfile does it time-based, which is not working for me as the axis may not stabilize the position in time, which may cause a big failure in the system.
Last updated: 2023-11-30
Post by jmorit on CAM Table - Quadratic velocity ramp with jerk limitation
CODESYS Forge
talk
(Post)
Hello, I'm working on setup a CAM table by using the Codesys CAM Editor. My purpouse is to obtain a quadratic velocity ramp with jerk limitation motion profile, for which i define the accel/decel phases with Poly5 segment type, but the problem is that due to the fact i can "only" adjust until the acceleration, and the jerk is always setup to 0, and i cannot change the jerk values, i cannot achieve the desired results, as i need to generate jerk steps. Is there any way it can be achieved with the editor, or maybe by using PLC runtime code? Thank you in advance for your help BR, Jordi Morito
Last updated: 2023-12-02
Post by seppi on Establishing communication between a Raspberry Pi 4 and an Arduino UNO R3 using I²C.
CODESYS Forge
talk
(Post)
Hello everyone, I want to establish communication between my Arduino and my Raspberry Pi via I²C, but I have no idea how to make it work. However, it should work because there are many examples available, although none of them were programmed using Codesys, but rather using Python. My Raspberry Pi will be the master and is supposed to exchange measurement data such as speed and battery capacity with the slave (Arduino). I would be very grateful if someone could help me with my problem. Here is another link that could be helpful. However, I can't find the mentioned libraries
Last updated: 2023-12-03
Post by seppi on Raspberry 4 I²C with Arduino UNO R3
CODESYS Forge
talk
(Post)
Hallo zusammen Ich möchte meinen Arduino und meinen PI miteinander kommunizieren lassen via I²C doch ich habe keine Ahnung wie das funktionieren soll. Aber es müsste funktionieren da es viele Beispiele dazu gibt jedoch wurde keines der Beispiele mit Codesys programmiert sondern über Python. Mein PI wird der Master sein und soll mit dem Slave (Arduino) Messdaten wie Geschwindigkeit und Akkukapazität und so weiter austauschen. Wenn mir bei meinen Problem jemand weiterhelfen könnte währe ich sehr Dankbar. Hier noch ein Link der Hilfreich sein könnte. Ich finde aber die angegeben Bibliotheken nicht. https://forge.codesys.com/forum/en/773/genmed-documentation.pdf
Last updated: 2023-12-03
Post by jegerjon on Testing of Codesys program
CODESYS Forge
talk
(Post)
I have a simulation function that toggle xSimActive. I map all IO variables to "IO GVLs" when xSimActive=0. I map IO corresponding SimIO GVL to "IO GVLs" when xSimActive=1. Then I write code for the simulation program that runs when xSimActive=1. Typically increase flow corresponding to pump speed, simulate tankfilling corresponding to flow and so on. I made a FC that require a correct code to activate simulation to avoid unintended activation by service dept. When comissioned remove any possibility to activate simulation. Super when officetesting and supporting service dept. + cheap as it requires no additional equipment, and it is easier to support customer later on in the life cycle as you can test proposed changes without setting up a testlab.
Last updated: 2023-12-07
Post by jegerjon on Testing of Codesys program
CODESYS Forge
talk
(Post)
I have a simulation function that toggle xSimActive. I map all IO variables to "IO GVLs" when xSimActive=0. I map IO corresponding SimIO GVL to "IO GVLs" when xSimActive=1. Then I write code for the simulation program that runs when xSimActive=1. Typically increase flow corresponding to pump speed, simulate tankfilling corresponding to flow and so on. I made a FC that require a correct code to activate simulation to avoid unintended activation by service dept. When comissioned remove any possibility to activate simulation. Super when officetesting and supporting service dept. + cheap as it requires no additional equipment, and it is easier to support customer later on in the life cycle as you can test proposed changes without setting up a testlab.
Last updated: 2023-12-07
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 royw on Profinet Library für C#
CODESYS Forge
talk
(Post)
Hallo, ich weiß nicht ob ich hier richtig bin und ob es überhaupt möglich ist ... Ich suche eine Möglichkeit ein Profinet Device mit Record Read und Write anzusprechen. Eigentlich brauche ich nur sehr wenige Kommandos um unser Device zu konfigurieren. Das bedeutet setzen der MAC Adresse und einer Seriennummer. Das würden wir gern aus einem C# Programm herus machen. Nun sind wir auf der Suche nach einer Bibliothek o.ä. . Da man es ja auch aus Codesys heraus machen, dachte ich mir, gibt es eventuell eine DLL o.ä. die man dafür nutzen könnte. Wie gesagt wir wollen keine Realtime Abfragen der zyklischen Daten sondern lediglich Record read/write. Hat da jemand einen helfenden Hinweis ? Schon mal vielen Dank im Voraus
Last updated: 2023-12-22
Post by royw on Profinet library for C#
CODESYS Forge
talk
(Post)
Hi, I don't know if I'm in the right place or if it's even possible... I'm looking for a way to address a Profinet device with Record Read and Write from my own PC. I actually only need very few commands to configure our device. This means setting the MAC address and a serial number. We would like to do this from a C# program. Now we are looking for a library or something similar. Since you can do it from Codesys, I thought there might be a DLL or something similar that you could use for this. As I said, we don't want real-time queries of the cyclic data but only record read/write. Does anyone have any helpful hint? Thanks in advance
Last updated: 2023-12-22
Post by dhumphries on Codesys device configuration
CODESYS Forge
talk
(Post)
First make sure the programming laptop and HMI are both on the same subnet. For example if the IP address of the HMI is 192.168.1.125 with a subnet mask 255.255.255.0 set your laptop IP to 192.168.1.120 with a subnet mask of 255.255.255.0. Make sure the cables are fully connected (the ethernet port on my programming laptop will click once but the cable is not fully seated.) Make sure the HMI is powered on, try pinging the device from a command prompt, if you can't ping the HMI there is a network issue that has to be resolved first.
Last updated: 2023-12-30
Post by ewi04 on Recipe Manager - RecipeManCommands, load & write wrong values, Bug?
CODESYS Forge
talk
(Post)
Hello, according to Codesys, the problem should be solved with version 4.3.0.0. After the update to version 4.3.0.0 I had the problem that the recipes weren’t saved correctly, but loading was okay. Return to the version 4.2.0.0 didn’t change the behavior. Strange… So I uninstalled the update, cleaned the project and built it new. The known behavior of version 4.2.0.0 was back. Update to version 4.3.0.0, clean and build it new, it works. Even with version 4.2.0.0. Strange, but okay. Notice: ManCommands.LoadRecipe() no longer writes into the PLC. Just as it should be. As of now, I can use the new version.
Last updated: 2024-01-05
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
.