Post by timo on String nach erlaubten/unerlaubten Zeichen durchsuchen
CODESYS Forge
talk
(Post)
Hallo, Ich bastele gerade an einer möglichst einfachen Möglichkeit mit der ich prüfen kann ob ein String Sonderzeichen enthält. Mein Ansatz ist ein ST FB mit einer Case Schrittkette. Ich vergleiche jedes Zeichen des Strings mit allen Zeichen eines vorher definierten Strings erlaubter Zeichen, der A-Z, a-z und 0-9 enthält und ggf angepasst werden kann, wenn ich weitere Zeichen erlaube. Leider wird meine j Zählervariable nicht richtig ausgeführt. Hat da jemand eine Idee? Oder gibt es eine einfachere Lösung/einen fertigen FB den ich mir anschauen kann? FUNCTION_BLOCK Sonderzeichen_Check VAR_INPUT inputString : STRING; // Zu prüfender String startCheck : BOOL; // Startsignal END_VAR VAR_OUTPUT ok : BOOL; // TRUE, wenn keine ungültigen Zeichen END_VAR VAR i : INT := 1; // Input-String Zähler j : INT := 1; // erlaubte Zeichen Zähler allowedChars: STRING := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; // Erlaubte Zeichen currentChar : STRING[1]; // Aktuelles Zeichen step : INT := 0; // Schritt END_VAR CASE step OF 0: // Warten auf Start IF startCheck THEN step := 10; END_IF 10: // Initialisierungen i := 1; j := 1; ok := TRUE; // Standard: ok step := 20; 20: // Durchgehen des Eingangs-Strings IF i <= LEN(inputString) THEN currentChar := MID(inputString, i, 1); // Aktuelles Zeichen step := 30; ELSE step := 70; // Alle Zeichen ok END_IF 30: // Durchgehen der erlaubten Zeichen IF j <= LEN(allowedChars) THEN step := 40; // Zu Schritt 40 ELSE step := 60; // Ungültiges Zeichen END_IF 40: // Vergleich IF currentChar = MID(allowedChars, j, 1) THEN i := i + 1; // Nächstes Zeichen im Input step := 20; ELSE j := j + 1; // Nächstes erlaubtes Zeichen step := 30; END_IF 60: // Ungültiges Zeichen ok := FALSE; // Setze auf FALSE step := 0; 70: // Alle Zeichen ok step := 0; END_CASE
Last updated: 2025-01-20
Post by trusty-squire on Help with __SYSTEM.VAR_INFO
CODESYS Forge
talk
(Post)
Not knowing exactly what you want to accomplish, you can try to use VAR_INPUT MyVar: POINTER TO BOOL; END_VAR MyVar contains the address of your referenced variable, and MyVar^ dereferences it allowing you to access the value. If this doesn't meet your needs, could you add more detail on what you are trying to accomplish?
Last updated: 2025-01-26
Post by gatto on Removing a symbol from the IEC Symbols Editor grid
CODESYS Forge
talk
(Post)
Hi, I've never used Communication Manager, but I tried it and I saw that I can drag tags from left to right. If I click on a line on the right, it turns light blue. By pressing the DEL or CANC key (It depends on your keyboard language) I can delete the line
Last updated: 2025-02-12
Post by clarenced on Multiple applications on one device sharing variables.
CODESYS Forge
talk
(Post)
Sounds feasible, but how would I create this object so that both applications would use the same instance of it. If this did work, it's still not really the solution I am looking for as it would mean mapping every variable I want to use on the hmi through this object vs I was hopping all the GVL variables would be available.
Last updated: 2025-02-20
Post by cellohorst on File Creation Issue
CODESYS Forge
talk
(Post)
Nope! The file path is $$PlcLogic$$ and NOT $$PLCLogic$$. Otherwise a new folder ('PLCLogic') is created (at least with a linux rt - like raspberry or compute module) with the new file in it if you open the file with eFileMode := FILE.MODE.MRDWR. That is a bad bug that I'll report right after this comment.
Last updated: 2025-03-03
Post by tvm on VisuFbFrameBase.SetInputPositionData: The element id for the input position cannot be determined
CODESYS Forge
talk
(Post)
This came up again today, so I'll post the fix for future reference. Happens with Schneider Machine Expert 2.2 and M262 controllers. Add this bit of code to a program called from the visu task //disable "VisuFbFrameBase.SetInputPositionData" log messages, which fill up the logs IF VisuElems.Private_Visu_Globals.g_ValueChangedListenerManager.GetListenerCount() > 0 THEN VisuElems.Private_Visu_Globals.g_ValueChangedListenerManager.RemoveValueChangedListener(VisuElems.Private_Visu_Globals.g_ValueChangedListenerManager.listenerForOnValueChanged); END_IF
Last updated: 2025-03-06
Post by gseidel on Dynamic limits invaild
CODESYS Forge
talk
(Post)
Hi jbu0105, which error doe you get, exactly? Is it error 11008, SMC_MOVE_INVALID_DYNAMICS? (It might help if you check the "Log" tab in the PLC device and copy the exact error.) Please double-check whether the inputs Velocity, Acceleration, Deceleration, and Jerk of MC_MoveCircularAbsolute have correct (positive) values. Best regards, Georg
Last updated: 2025-04-07
Post by respl on Anyone Ever use CAN with Kollmorgen S600 Drive
CODESYS Forge
talk
(Post)
Dear eschwellinger, Can you please share which library to use. Also if possible please share backup it really help us. On Codesys Store there are many ( CoDeSys Softmotion) option available. Please guide me to choose right product which has driver for servostar 600 as mention above. Regards, Rahul Sayre service.retrofilm@gmail.com +91-9607140005
Last updated: 2025-04-15
Post by jbu0105 on Setpoints Delta robot
CODESYS Forge
talk
(Post)
Hello, I am working on a delta robot. Now was i wondering if anyone knows whats the best way to program the different setpoints for the delta Robot. I would like to use the functions MC_MoveLinearAbsolute and the function MC_MoveCircularAbsolute with the transition on this function. Can anyone help me with al small setup?
Last updated: 2025-04-16
Post by jbu0105 on Setpoints Delta robot
CODESYS Forge
talk
(Post)
Hello, I am working on a delta robot. Now was i wondering if anyone knows whats the best way to program the different setpoints for the delta Robot. I would like to use the functions MC_MoveLinearAbsolute and the function MC_MoveCircularAbsolute with the transition on this function. Can anyone help me with al small setup?
Last updated: 2025-04-16
Post by pafarrell on EtherCAT quick start for advanced programmers
CODESYS Forge
talk
(Post)
It would be great if there was a thread that had some quick-start links for basic how-to. But one that advanced programmers can jump into. I found this video playlist by SoftMotion-Black, which was very, very helpful: https://www.youtube.com/playlist?list=PLkc8m2OD0r9xJyfTiCBb1vuU_d2yBhjZ_ This person has some other great vids like creating your own custom library, which is awesome for OEMS.
Last updated: 2025-05-14
Post by naduley on Multiple Branches
CODESYS Forge
talk
(Post)
I am trying to create multiple branches in my project and I keep getting gaps in the ladder logic "wiring". I'm not sure if this is a graphical error or something else but every thing I've tried to do to correct it does not work. Has anyone else run into this or know how to correct it?
Last updated: 2025-06-04
Post by arwie on Use MC_Home without enabling the drive for homing method 35
CODESYS Forge
talk
(Post)
This is a homing routine which is controlled by setting mode of operation and started by setting a bit in the control word. If MC_Home is not usable for this homing method then I need to implement the same functionality. But how?
Last updated: 2025-06-25
Post by felixm on Unable to select VisuDialogs.Numpad in Open Dialog input configuration
CODESYS Forge
talk
(Post)
I'm trying to open the VisuDialogs.Numpad dialog to enter a new temperature setpoint on one of my VISU screens. For some reason, the numpad dialog does not appear as an option in the Open Dialog dropdown in my input configuration. I'm very new to CODESYS, so sorry if this is a simple fix/known item XD.
Last updated: 2025-07-10
Post by installwhat on Opc remote alarms on Linux box
CODESYS Forge
talk
(Post)
It seems that the hmi sl license only works with windows. If i'm happy using web visu, rather than target visu, is possible to use remote opc-ua remote alarms without the hmi sl? Maybe it can be included in a different license that works on Linux? thanks
Last updated: 2025-07-16
Post by timvh on IECStringUtils.FormatDateTime
CODESYS Forge
talk
(Post)
There has been a fix in SP21. I tried it in this version with the option "Use unicodestring" enabled in the Visualization Manager and it worked if the variables used for the function are declared as WSTRING variables wsFormat : WSTRING := "%t[HH:mm:ss dd.MM.yyyy]"; wsTime : WSTRING; IECStringUtils.FormatDateTime(cbpResult := ADR(wsTime), uiResultCapacity := SIZEOF(wsTime), cbpFormat := ADR(wsFormat));
Last updated: 2025-07-29
Post by timvh on Current Visu name without Current Visu Variable
CODESYS Forge
talk
(Post)
To change the current visualization for (all) webclients: Add the library “Visu Utils” and use the following example code: VAR xChangeVisu: BOOL; fbChangeVisu : VU.FbChangeVisu; END_VAR // Change to Visu2 when setting xChangeVisu to TRUE fbChangeVisu( xExecute:= xChangeVisu, xDone=> , xBusy=> , xError=> , itfClientFilter:= VU.Globals.OnlyWebVisu, //itfFilter, eError=> , sVisuName:= 'Visu2'); IF fbChangeVisu.xDone OR fbChangeVisu.xError THEN xChangeVisu := FALSE; END_IF
Last updated: 2025-08-13
Post by davemansell on explicit cast ENUM to UINT and vice versa
CODESYS Forge
talk
(Post)
This is from sometime ago but below might help someone else; this could be done via POINTERS. Make sure you protect for NULL pointers etc if you take this approach. // DECLARATION myEnumValue : enumMyEnum; u8 : USINT; pmyEnumValue : POINTER TO enumMyEnum; pu8 : POINTER TO USINT; // CODE pu8 := ADR(u8); pmyEnumValue := pu8; myEnumValue := pmyEnumValue^; // dereference the pointer
Last updated: 2025-08-21
Post by davemansell on explicit cast ENUM to UINT and vice versa
CODESYS Forge
talk
(Post)
This is from sometime ago but below might help you could do this via POINTERS. Make sure you protect for NULL pointers etc if you take this approach. // DECLARATION myEnumValue : enumMyEnum; u8 : USINT; pmyEnumValue : POINTER TO enumMyEnum; pu8 : POINTER TO USINT; // CODE pmyEnumValue := pu8; myEnumValue := pmyEnumValue^; // dereference the pointer
Last updated: 2025-08-21
Post by wagokurt on CODESYS Visualization M License Fails to activate on Linux SL
CODESYS Forge
talk
(Post)
The fix for this is when you install the control SL license, there is a checkbox for the Visu S license option. You must click this option. The Visu M is technically an upgrade to the Visu S, if this is license is not installed them the Visu M will fail as shown above. Thanks JoJo for the solution!
Last updated: 2025-08-25
Post by antonz on CoDeSys v3.5: creating libraries for both 32-bit and 64-bit controllers
CODESYS Forge
talk
(Post)
Thanks Tim. I would think it somehow is relevant when creating a compiled library, but that may very well not be the case. If I understand you correctly, then the same compiled library created from my source code would work for both 32 bit as well as 64 bit controllers.
Last updated: 2025-09-01
Post by timvh on CoDeSys v3.5: creating libraries for both 32-bit and 64-bit controllers
CODESYS Forge
talk
(Post)
Yes, you are right. I think the help is pretty clear: https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_library_development.html It helps you to find errors in the source code of your library if you want to create a library which is using pointers and you want to use your library on 32 and/or 64 bit platforms.
Last updated: 2025-09-02
Post by serwis on Dynamic target position tracking
CODESYS Forge
talk
(Post)
Hello, I am trying to control a servo drive and dynamically set its position. I control the drive via EtherCAT with a cycle time of 500us. I use the MC_MoveAbsolute block for this. The problem is that when using a PID controller, I generate the positions I want the drive to move to on an ongoing basis, and I would like the position to be set immediately. The MC_MoveAbsolute block must receive a rising edge to execute, and I would like the movement to be performed without waiting for this edge. I have created a function that generates a rising edge every 1 ms, but I am unable to change this time to 500 µs because the TON function does not support times shorter than 1 ms. Below is the code to call the rising edge: IF Exe = TRUE THEN delay1(IN:=TRUE, PT:=T#1MS); IF delay1.Q = TRUE THEN Exe := FALSE; delay1(IN:=FALSE); END_IF END_IF IF Exe = FALSE THEN delay(IN:=TRUE, PT:=T#1MS); IF delay.Q = TRUE THEN Exe := TRUE; delay(IN:=FALSE); END_IF END_IF END_IF Here is the code for calling the MC_MoveAbsolute function: MoveDegree( Axis:= Tilt, Execute:= Exe, Position:= position_target - (base_angle_real * feedforward_turn), Velocity:= vel, Acceleration:= acc, Deceleration:= dec, Jerk:= jerk, Direction:= MC_DIRECTION.shortest, BufferMode:= MC_BUFFER_MODE.Aborting, Done=> , Busy=> , Active=> , CommandAborted=> , Error=> , ErrorID=> ); I realize that there are probably better methods for performing this type of task. How can I implement motion with a dynamically changing setpoint? THANKS
Last updated: 2025-09-05
Post by gseidel on Cam Blending
CODESYS Forge
talk
(Post)
Hi ustad41, cams can be buffered using the BufferMode input of MC_CamIn. If the end- and start-velocity of two buffered cams are not zero, there will be no stop. Not sure this answers your question. Cams can be changes on the fly by aborting the active cam. Please see [0] for details on switching cams. [0] https://content.helpme-codesys.com/en/CODESYS%20SoftMotion/_sm_cam_switch_between_cams.html Best regards, Georg
Last updated: 2025-09-08
Post by gseidel on can not new a cam table in codesys V3.5 SP20
CODESYS Forge
talk
(Post)
Hi liai, is it possible, that SM3_Basic is missing in the library manager? (It should be inserted automatically when adding a Cam table, along with the other motion libs.) You can add it manually and see if that solves the compile errors. Best regards, Georg
Last updated: 2025-09-19
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.