Post by timvh on Active alarm access in ST
CODESYS Forge
talk
(Post)
See https://forge.codesys.com/forge/talk/Engineering/thread/280fdf4806/#9fe5 And https://forge.codesys.com/prj/codesys-example/alarm-manager/home/Home/ The application should contain: - an FB which implements AlarmManager.IAlarmFilterCriteria (see example - FB_AlarmFilterCriteria) - an FB which implements AlarmManager.IAlarmManagerClient (see example - FB_AlarmManagerClient) Then register the client and get the information through this client. VAR xInit : BOOL := TRUE; udiResult : UDINT; fbAlarmFilterCriteriaAll : FB_AlarmFilterCriteria; fbAlarmManagerClientAll : FB_AlarmManagerClient; itfAlarmManagerClientAll : IAlarmManagerClient := fbAlarmManagerClientAll; xAlarm1 : BOOL; xAlarm2 : BOOL; xWarning : BOOL; iNrOfAlarmsInAlarmList : INT; iNrOfActiveAlarmsInAlarmList : INT; paitfAlarm: POINTER TO ARRAY [0..0] OF AlarmManager.IAlarm; iAlarmIndex : INT; eAlarmState: AlarmManager.AlarmState; END_VAR IF xInit THEN xInit := FALSE; fbAlarmManagerClientAll.m_itfAlarmFilterCriteria := fbAlarmFilterCriteriaAll; // register alarm client to get updated about alarm status / changes udiResult := AlarmManager.g_AlarmHandler.RegisterClient(itfAlarmManagerClientAll, 0, 0); END_IF // Polling the number of alarms udiResult := AlarmManager.g_AlarmHandler.GetActiveAlarms(itfAlarmManagerClientAll, parritfActiveAlarms => paitfAlarm, iCountActiveAlarms => iNrOfAlarmsInAlarmList); iAlarmIndex := 0; iNrOfActiveAlarmsInAlarmList := 0; WHILE iAlarmIndex < iNrOfAlarmsInAlarmList DO eAlarmState := paitfAlarm^[iAlarmIndex].GetState(); IF eAlarmState = AlarmManager.AlarmState.Active OR eAlarmState = AlarmManager.AlarmState.ActiveAcknowledged THEN iNrOfActiveAlarmsInAlarmList := iNrOfActiveAlarmsInAlarmList + 1; END_IF iAlarmIndex := iAlarmIndex + 1; END_WHILE
Last updated: 2025-04-23
Post by canplum on Codesys 3.5.21 fails to copy file to USB
CODESYS Forge
talk
(Post)
Although I have set in /etc/codesyscontrol/CODESYSControl_User.cfg the [SysFile] PlaceholderFilePath.1=/media/pi, $usb$ PlaceholderFilePath.1.View=1 PlaceholderFilePath.1.Volatile=1 I am not able to copy a file to this directory defined by the placeholder. Neither SysProcess.SysProcessExecuteCommand2 nor SysFileCopy nor FileCopy is working. If I try to copy the same file to /home/pi all is working fine. I also can create and open a different file by using SysFileOpen. I don't understand why the system allows to open (create) and write files into that directory but doesn't allow to copy into it. Obviously there is a rights problem with the USB drive. I have already set the permissions to drwxr-xr-x 2 and the user to pi but without any success. With 3.5.16 I never had such an issue. Is there anybody with some hints how to solve that problem? Cheers, canplum
Last updated: 2025-05-23
Post by canplum on Codesys 3.5.21 kann Datei nicht auf USB kopieren
CODESYS Forge
talk
(Post)
Obwohl ich in der Datei /etc/codesyscontrol/CODESYSControl_User.cfg eingestellt habe die [SysFile] PlatzhalterDateipfad.1=/media/pi, $usb$ PlatzhalterDateipfad.1.Ansicht=1 PlatzhalterDateipfad.1.Flüchtig=1 Ich bin nicht in der Lage, eine Datei in dieses durch den Platzhalter definierte Verzeichnis zu kopieren. Weder SysProcess.SysProcessExecuteCommand2 noch SysFileCopy oder FileCopy funktionieren. Wenn ich versuche, die gleiche Datei nach /home/pi zu kopieren, funktioniert alles einwandfrei. Ich kann auch eine andere Datei mit SysFileOpen erstellen und öffnen. Ich verstehe nicht, warum das System das Öffnen (Erstellen) und Schreiben von Dateien in dieses Verzeichnis erlaubt, aber das Kopieren in dieses Verzeichnis nicht zulässt. Offensichtlich gibt es ein Rechteproblem mit dem USB-Laufwerk. Ich habe bereits die Berechtigungen auf drwxr-xr-x 2 und den Benutzer auf pi gesetzt, aber ohne Erfolg. Mit 3.5.16 hatte ich nie ein solches Problem. Hat jemand einen Tipp, wie man dieses Problem lösen kann? Vielen Dank! canplum
Last updated: 2025-05-23
Post by josul on Web Client HTTPS Communication Issue
CODESYS Forge
talk
(Post)
Web Client Library Documentation Company: 3S - Smart Software Solutions GmbH Title: Web Client Version: 1.0.1.7 Categories: Application|Utils Namespace: WEB_CLIENT Author: 3S - Smart Software Solutions GmbH Placeholder: WebClient I encountered an issue using this library above. Note it is now part of Codesys IIoT Libraries SL in the form of Web Client SL, but I am not using this version. I was sending Content-Type: application/json, HTTP POST using a HTTPS URL. No issue observed initially, successful operation. At some point operation stopped and the codesyscontrol.log file started to accumulate errors: ERROR: TlsCreateContext2: Failed to save context. An application reset failed to resume operation and I was unable observe any TCP connection forming to a destination port 443. The error appeared as a TCP_INIT error. I can find no details as to what may have happened or why a reset of the PLC application did not resume operation. Testing with a curl operation proved to be successful, so I am confident there was no fundamental networking issue preventing a TCP connection forming. The solution was to reboot the hardware itself, but this is not satisfactory in the long term. Is there any description of the TLS error I received? Is there any suggestion here that there might be an issue with certificates? Any advice or information is appreciated.
Last updated: 2025-06-05
Post by danieldiaz on Problem with FB execution
CODESYS Forge
talk
(Post)
Hello everyone, I've been working on a system which needs an error function, with this purpose I've created a FB programmed in LD, after debugging I run the simulation. It seems that the variable linked to a coil doesn't change the value when the contacts are associated to input variables. When I use internal variables the logic works properly. I don't know if the problem is related to the variables definition or with the logic program. As you can see in the image, I1 and I2 are variables declared on the FB, the rest are input variables. If I force the eStop and Reset signals to TRUE the coil value should change, but it doesn't. However in the second network if I1 is TRUE the coil change to TRUE as it has to be. To sum up, my doubt is why that coil doesn't change its value? I would like someone to shed a light on this. Thanks!
Last updated: 2024-04-02
Post by rjwkerkhof on IIot Libraries SL --> Web Socket Client SL Pong issue
CODESYS Forge
talk
(Post)
Dear all, I am developing a Web Socket Client in Codesys 3.5 using the Web Socket Client SL library to retrieve data from a third party. Connecting and reading works fine however after 40 seconds the connection gets interrupted by the server due to keepalive ping timeout. After discussion with third party it seems that the Web Socket Client SL library replys to the Ping request of the Web Socket server BUT does not add the "Application data" = 4 bytes in the body of the Pingframe to the Pongframe. Therefor the server does not recognize the Pongframe send by the Web Socket Client SL library and automatically disconnects. Is this a known issue with the libary or am I doing something wrong? Is there a workaround to add the 4 bytes manually to the Pongframe before replying it to the server? Thanks in advance, Roy
Last updated: 2024-04-09
Post by joshskellig on Publish a JSON payload via MQTT Publish (using IIot Libraries)
CODESYS Forge
talk
(Post)
I am trying to figure out how to get a JSON payload to properly publish to my MQTT Broker. I am able to generate JSON using the examples from Codesys, but when I send that payload via MQTT there are characters that are extra or not recognized by my MQTT client. Any idea what could be causing it? PROGRAM PLC_PRG VAR hostname: STRING := 'localhost'; port: UINT := 1883; topic: WSTRING(1024) := "testing/"; payload: BYTE; factory : JSON.JSONDataFactory; eDataFactoryError : FBF.ERROR; pJsonData : POINTER TO JSON.JSONData := factory.Create(eError => eDataFactoryError); fb_JBuilder : JSON.JSONBuilder; wsValue : WSTRING := "Value1"; diRootIndex, diObject1Index : DINT; iValue : INT := 1234; jsonArrayWriter : JSON.JSONByteArrayWriter; wsJsonData : WSTRING(1000); xFirst : BOOL := TRUE; mqttClient: MQTT.MQTTClient; mqttPublish: MQTT.MQTTPublish; mqttPublishProperties: MQTT.MQTTPublishProperties := (bPayloadFormatIndicator := 1, wsContentType := "application/json"); END_VAR // Json Functionality IF xFirst THEN fb_JBuilder(pJsonData := pJsonData, diRootObj => diRootIndex); fb_JBuilder.SetKeyWithValue("Key1", wsValue, diParentIndex := diRootIndex); diObject1Index := fb_JBuilder.SetKeyWithObject("Key2", diParentIndex := diRootIndex); fb_JBuilder.SetKeyWithValue("Key3", iValue, diParentIndex := diObject1Index); xFirst := FALSE; END_IF jsonArrayWriter(pwData := ADR(wsJsonData), udiSize := SIZEOF(wsJsonData), jsonData := pJsonData^, xAsyncMode := FALSE); MSU.StrTrimW(pString:= ADR(wsJsonData)); // MQTT Functionality mqttClient( sHostname:=hostname, uiPort:=port, eMQTTVersion:=MQTT.MQTT_VERSION.V5 ); mqttPublish( mqttClient:=mqttClient, pbPayload:=ADR(wsJsonData), udiPayloadSize:=SIZEOF(wsJsonData), wsTopicName:=topic, mQTTPublishProperties:=mqttPublishProperties );
Last updated: 2024-04-10
Post by hanoues on setting date and time on CPX-E
CODESYS Forge
talk
(Post)
Hello, Can anybody here tell me how to modify the time and date on my CPX-E? I used the code I found on CODESYS online help, but it doesn't work. What am I missing? FUNCTION current_date_time : STRING VAR stUTC_Timestamp : SysTime; //utc time // ULINT#1528280694913 stLocal_TimeStamp : SysTime; //local time but is in general equal // ULINT#1528280694913 stdNow : SysTimeDate; //local time in an object to access each number (day, month...) dtNow : DATE_AND_TIME;//DT#2018-6-6-10:24:54 todNow : TIME_OF_DAY; // TOD#10:24:54.913 datNow : DATE; // D#2018-6-6 END_VAR SysTimeRtcHighResGet(stUTC_Timestamp); // ULINT#1528273494913 SysTimeRtcConvertHighResToLocal(stUTC_Timestamp, stdNow); //convert UTC ULINT to Local SysTime // stdNow.wYear = UINT#2018 // stdNow.wMonth = UINT#6 // stdNowy.wDay = UINT#6 // stdNow.wHour = UINT#10 // stdNow.wMinute = UINT#24 // stdNow.wSecond = UINT#54 // stdNow.wMilliseconds = UINT#913 // stdNow.wDayOfWeek = UINT#3 // stdNow.wYday = UINT#157 SysTimeRtcConvertDateToHighRes(stdNow, stLocal_TimeStamp); // ULINT#1528280694913 dtNow := TO_DT(stLocal_TimeStamp / 1000 ( ms )); // DT#2018-6-6-10:24:54 todNow := TO_TOD(stLocal_TimeStamp MOD TO_ULINT(T#1D)); // TOD#10:24:54.913 datNow := TO_DATE(dtNow); // D#2018-6-6 (convert to appropriate string) current_date_time := concat('$N[', TO_STRING(dtNow)); current_date_time:= concat(current_date_time,'.'); current_date_time:= concat(current_date_time, TO_STRING(stdNow.wMilliseconds)); current_date_time:= concat(current_date_time,'] - '); RETURN;
Last updated: 2024-05-21
Post by greenwood on CODESYS Control Raspberry Pi mit Servotreiber T6 von StepperOnline
CODESYS Forge
talk
(Post)
Hallo, Ich scheine den Grund gefunden zu haben, das Kabel mit dem RJ45 Stecker ist für RS232 verdrahtet (am anderen Ende des Kabels ist ein 9-poliger SUB-D Stecker, nicht wie von mir im Eingangspost behauptet ein USB Stecker). In der Anleitung des Treibers ist immer nur von RS 485 die Rede. Alerdings habe ich es gestern abend noch geschafft eine funktionierende Version der setup-software herunterzuladen, und die verbindet sich offenbar über RS232. Daraufhin habe ich mir in der Anleitung des Treibers das Pinout der RJ45 Buchse nochmal angesehen, und die hat Kontakte für RS232 und für RS485. (Die liegen jeweils ganz am Rand, so ist mir das vorher nicht aufgefallen). Ich muss also als Nächstes ein richtig verdrahtetes Kabel auftreiben, und dann sehen ob das mit dem Adapter den ich habe funktioniert. An einen Abschlusswiderstand habe ich auch schon gedacht, nur weiss ich nicht wo ich den an einem RJ45 Stecker / Buchse - Paar anbringen soll... Ich bitte um Entschuldigung für die Verwirrung, ich mache das alles zum ersten Mal und es ist ganz schön viel auf einmal für mich. Nochmal vielen Dank für die Unterstützung!
Last updated: 2024-06-01
Post by nikgind on Codesys Communication Manger - Required information model version exists in the model repository but is not found
CODESYS Forge
talk
(Post)
Hi I am trying to import a custom information model that I created using UA Modeler. I have only added two new methods and two new object types. It is possible to add the information model to the Communication Manager and the two new object types are shown in the Information Model tab. After compiling i get the following error: Communication Manager [Device: PLC Logic: Application]: The information model http://opcfoundation.org/UA/ is required by http://yourorganisation.org/Bsp_3.1/ with a minimal publication date from 15.12.2023 but the device has only a model from 15.09.2021 installed. Probably the information model from 15.09.2021 is missing in the information model repository. The error message does not make sense to me. Should it not be “Probably the information model from 15/12/2023 is missing in the information model repository”? Anyway I have installed the information model from 15/12/2023 but not from 15/09/2021. Which makes the error message even stranger.
Last updated: 2024-06-09
Post by dmb-fan on Nach "Alles Bereinigen" viele unklare Fehler, aber nur in Schrittketten
CODESYS Forge
talk
(Post)
Hi ! Ich habe ein GROSSES V2.3 Programm nach V3.5 SP22 konventiert. Ich bekomme es inzwischen fehlerfrei übersetzt, auch nach "Bereinigen". Wenn ich aber "Alles bereinigen" mache, bekomme ich 102 Fehler. ALLE sind in Schrittketten Bausteinen, ich sehe und verstehe aber nicht das Problem. Es sind immer diese 3 Fehler: [FEHLER] XyProgName: SK_XYZ [IPC: SPS-Logik: Application]: C0009: Unerwartetes Token ':' gefunden [FEHLER] XyProgName: SK_XYZ [IPC: SPS-Logik: Application]: C0189: ';' anstatt 'IecSfc' erwartet [FEHLER] XyProgName: SK_XYZ [IPC: SPS-Logik: Application]: C0006: ',, AT oder :' an Stelle von '.' erwartet Ich habe inzwischen viel Phanatise bei den CoDeSys Fehlermeldungen bewiesen aber jetzt bin ich wirklich am Ende... Links im Baum sind dann die Bausteien rot unterkrakelt, die Aktionen sind alle OK. Auf der rechten Seite ist nix rot oder unterstrichen. Es wird immer in die oberste Zeile gesprungen ("PROGRAM") Vielleicht hängt es ja mit den Projekteinstellungen >> "AS" zusammen aber ich blicke es nicht .... Wie gesagt, ohne alles bereinigen kann ich es übersetzen und simulieren. Nach alles bereinigen ist es kaputt. Irgendwelche Ideen? DANKeeee !
Last updated: 2026-09-18
Post by chaylak on MC_ReadActualPosition with ST code
CODESYS Forge
talk
(Post)
hi everyone, i am trying use MC_ReadActualPosition module in ST but i cant do it,( if i use CFC yes i read it) my axis is SoftMotion General Axis Pool->VirtAxisZ [Device: SoftMotion General Axis Pool] codesys V3.5 SP20 program: PROGRAM PLC_PRG VAR VirtAxisZ : AXIS_REF_VIRTUAL_SM3; fbPowerZ : MC_Power; fbReadPos : MC_ReadActualPosition; bEnable : BOOL := TRUE; lrActPos : LREAL; bValid : BOOL; bError : BOOL; fbResetZ : MC_Reset; xZ_Valid : BOOL; xZ_Busy : BOOL; xGlobalPower : BOOL; xGlobalReset : BOOL; xBtnTeachingMode : BOOL; lrGrvZ_OffsetTorque : LREAL := 0.5; lrPulseMmZ : LREAL; rPosFromBlock : LREAL; xZ_IsPowered : BOOL; xZ_PowerError : BOOL; iZ_PowerErrorID : LREAL; rZ_ActualPos : LREAL; lrTargetTorque : LREAL; sZ_ErrorString : STRING; //********** jog fbJogZ : MC_Jog; xJogForward : BOOL; xJogBackward : BOOL; rZ_ActVelocity : REAL; END_VAR fbResetZ( Axis:= VirtAxisZ, Execute:= xGlobalReset); fbPowerZ( Axis:= VirtAxisZ, Enable:= xGlobalPower, bRegulatorOn:= xGlobalPower, bDriveStart:=xGlobalPower , Status=> xZ_IsPowered, Busy=> xZ_Busy, Error=> xZ_PowerError, ErrorID=> iZ_PowerErrorID ); IF xGlobalPower THEN fbJogZ( Axis:= VirtAxisZ, JogForward:= xJogForward, JogBackward:= xJogBackward, Velocity:= 100, Acceleration:= 100, Deceleration:= 100, Jerk:= 1000); END_IF fbReadPos( Axis := VirtAxisZ, Enable := TRUE, Valid => bValid, Position => lrActPos, Error => bError ); IF VirtAxisZ.bError THEN sZ_ErrorString := 'Z Ex err'; ELSIF NOT xZ_IsPowered THEN sZ_ErrorString := 'Z Ex (Power Off)'; ELSE sZ_ErrorString := 'Z Ex Ready'; END_IF IF xBtnTeachingMode THEN lrTargetTorque := lrGrvZ_OffsetTorque; ELSE lrTargetTorque := 0; END_IF VAR_INPUT CFC_Motion: INT; END_VAR
Last updated: 2026-05-15
Post by wollvieh on Sysfile Konfiguration
CODESYS Forge
talk
(Post)
...auch noch eine schöne Beschreibung zur Sysfile Konfiguration! Mit Version 3.5.19 wurde die Dateiverwaltung geändert. Siehe folgendes Problem: CDS-81506 – Sicherheitslücke im Dateizugriffssystem des CODESYS Control SysFile-Systems. Es gibt zwei Lösungen: Ändern Sie den Speicherort der Datei (Sie müssen zu /PlcLogic/ wechseln). Wenn Sie die Datei nicht in PlcLogic speichern möchten, fügen Sie die folgende Zeile in der CODESYSControl.cfg unter [SysFile] hinzu: ForceIecFilePath=0 Hier die offizielle Versionsbeschreibung: [[COMPATIBILITY_INFORMATION]] Durch die Aktivierung von ForceIecFilePath ist der Dateizugriff von IEC nun auf die konfigurierten Pfade beschränkt (Dateisandbox)! [SysFile] ForceIecFilePath=1 (neuer Standardwert) Der Standardpfad ist das aktuelle Verzeichnis, der PlcLogic-Unterordner oder ein konfigurierter Pfad. Jeder Dateizugriff außerhalb dieses Pfades wird über PlaceholderFilePath konfiguriert, beispielsweise der Zugriff auf temporäre Dateien oder Wechseldatenträger: [SysFile] PlaceholderFilePath.1=/tmp, $TMP$ PlaceholderFilePath.2=/media/usb, $USB$ PlaceholderFilePath.2.Volatile=1 Weitere Informationen finden Sie in unserem Tutorial „Dateipfade & Platzhalter“. Um das alte Verhalten wiederherzustellen, kann ForceIecFilePath wie folgt konfiguriert werden: [SysFile] ForceIecFilePath=0 Wir empfehlen jedoch dringend, diese Einstellung auf dem neuen Standardwert zu belassen!
Last updated: 2026-01-21
Post by thommy54 on Lizenz wiederherstellen SP20
CODESYS Forge
talk
(Post)
Hallo Edwin, ich bräuchte mal eine schnelle Hilfe. ich testete einen zweiten Raspberry Pi 4 mit meinem Lizenzdongle eines laufenden Raspberry. Der 2. Raspberry ist als Redundanzlösung bei einem Crash gedacht. DIe Schwierigkeiten begannen, als ich mit dem Raspberry 4 V1.5 nicht mehr mit SP16 weiterarbeiten konnte. Ich updatede auf SP20.1. und die Schwerstarbeit begann. Das Image wurde rübergeschoben und alles auf dem zweiten Rechner soweit zum Laufen gebracht. Der Dongle wurde ebenfalls am 2. Rechner eingesteckt. Ob er überhaupt wirkte, kann ich nicht sagen, da für diesen Testfall Codesys so oft rauf und runter gefahren wurde, das die 2h-Grenze kaum erreicht wurde. Problem: Beim Zurückstecken des Dongles in den ursprücnglichen Rechner ist alles an Lizenzen weg. Der Lizenzmanager hat keinen Container mehr und der Befehl "lsusb" bringt nichts zurück. ich war der Meinung, das der Dongle genau für diesen Zweck gedacht war - die Lizenz von einem Rechner zum anderen mitzunehmen. Liege ich da falsch ? Wie komme ich nun wieder zu einem funktionfähigen Dongle ?? Weitere Versuche unternahm ich mit dem Wiederherstellen des Dongels. Dabei steckte ich ihn in meinen PC (Workstation) und siehe da, es werden noch 3 von ehemals (2020) 6 Lizenzzeilen angezeigt: (siehe Bild Problem_Lizenzen_Raspberry.jpg) Dann versuchte ich das Wiederherstellen über eine Lizenzaktualisierungsdatei vom Lizenzserver. Da kommt aber eine Datei mit anderem Dateityp (..WibuCmRaC) als im Lizenzmanager gesucht (WibuCmRaU). Die Datei ist dem Lizenzmanager auch nicht genehm (Bild Problem_Lizenzen_Raspberry_2.jpg). Nun steht Codesys auf besagtem Raspberry alle 2h still. Das soll die Lizenz doch verhindern. Angeblich soll seit SP13 auch kein eigenes Backup mehr nötig sein. Bis zum Erhalt des nicht brauchbaren Linzenzfiles hat da sja geklappt. Ich kann auch im Lizenzmanager keinen Punkt "Lizenz wiederherstellen" finden. Hat sich da mit SP20 etwas geändert? Wenn ich mir eine neue Lizenz hole - wie bringe ich sie auf den Dongle (der ja jetzt nicht "nagelneu" ist). Ich fürchte, das geht auch bloß schief. Im Voraus vielen Dank Thomas
Last updated: 2024-07-02
Post by thn-power on Updating OPC UA Core Nodeset on PLS
CODESYS Forge
talk
(Post)
Hi After much trail and error I think I found the root cause to my OPC UA problem. The problem is that I cannot manage to build and download a program with a a custom OPC UA Information model. We use a Weidmueller WL2000 PLS, but the problem also exsist on the Win V3 PLC. Our custom information model is based on the latest versions of the OPC UA Core Nodeset v 1.05.03 (2023-09-20) and UA/DI nodeset 1.04.0 (2022-11-03) Those nodesets are installed in the Codesys Information Model Repository (3.5.19.6) However, when trying to build I get the following error. [ERROR] Untitled1: Communication Manager [Device: PLC Logic: Application]: The information model http://opcfoundation.org/UA/ is required by http://bos.org/ with a minimal publication date from 15.12.2023 but the device has only a model from 15.09.2021 installed. Probably the information model from 15.09.2021 is missing in the information model repository. [ERROR] Untitled1: Communication Manager [Device: PLC Logic: Application]: The information model http://opcfoundation.org/UA/DI/ is required by http://bos.org/ with a minimal publication date from 03.11.2022 but the device has only a model from 09.03.2021 installed. Probably the information model from 09.03.2021 is missing in the information model repository. Build complete -- 2 errors, 1 warnings : No download possible I think the problem is that the UA Core nodeset is implemented in the PLC firmware (at least that in Siemens S7), and that only includes the "old" nodeset from 2021-09-21 etc. So the question is, how (or if?) can I transfer the new nodeset to the PLS? I have created separate Information models under Communication manager with the newer code nodesets (UA and DI). But it seems that the compiler does not recognize them being excising, neither in the Codesys IDE or on the PLC. Would have guessed that this is a common issue, sine many manufacturers use the latest versions of the OPC UA standard, and that it would be a solution to the problem.
Last updated: 2024-09-20
Post by ara32 on CODESYS 4 Linux:
CODESYS Forge
talk
(Post)
Hello! I managed to correctly launch CODESYS Developer Studio 3.5.17, almost all functionality works. The only issue remaining is that when connecting to a device and obtaining its public key, the NCryptEncrypt function is called, which is not fully implemented in the DLL source code, resulting in the connection not being established. Currently, the code of this function in the Wine repository looks like this: SECURITY_STATUS WINAPI NCryptEncrypt(NCRYPT_KEY_HANDLE key, BYTE *input, DWORD insize, void *padding, BYTE *output, DWORD outsize, DWORD *result, DWORD flags) { struct object *key_object = (struct object *)key; TRACE("(%#Ix, %p, %lu, %p, %p, %lu, %p, %#lx)\n", key, input, insize, padding, output, outsize, result, flags); if (flags & ~(NCRYPT_NO_PADDING_FLAG | NCRYPT_PAD_OAEP_FLAG | NCRYPT_PAD_PKCS1_FLAG | NCRYPT_SILENT_FLAG)) { FIXME("Flags %lx not supported\n", flags); return NTE_BAD_FLAGS; } if (flags & NCRYPT_NO_PADDING_FLAG || flags & NCRYPT_PAD_OAEP_FLAG) { FIXME("No padding and oaep padding not supported\n"); return NTE_NOT_SUPPORTED; } if (key_object->type != KEY) return NTE_INVALID_HANDLE; return map_ntstatus(BCryptEncrypt(key_object->key.bcrypt_key, input, insize, padding, NULL, 0, output, outsize, result, flags)); } The program crashes due to the NCRYPT_PAD_OAEP_FLAG flag. I'm not proficient in C++, but I attempted to add handling myself, and here's the result: SECURITY_STATUS WINAPI NCryptEncrypt(NCRYPT_KEY_HANDLE key, BYTE *input, DWORD insize, void *padding, BYTE *output, DWORD outsize, DWORD *result, DWORD flags) { struct object *key_object = (struct object *)key; TRACE("(%#Ix, %p, %lu, %p, %p, %lu, %p, %#lx)\n", key, input, insize, padding, output, outsize, result, flags); if (flags & ~(NCRYPT_NO_PADDING_FLAG | NCRYPT_PAD_OAEP_FLAG | NCRYPT_PAD_PKCS1_FLAG | NCRYPT_SILENT_FLAG)) { FIXME("Flags %lx not supported\n", flags); return NTE_BAD_FLAGS; } if (flags & NCRYPT_NO_PADDING_FLAG) { FIXME("No padding not supported\n"); return NTE_NOT_SUPPORTED; } BCRYPT_OAEP_PADDING_INFO oaepInfo = { 0 }; oaepInfo.pszAlgId = BCRYPT_SHA1_ALGORITHM; NTSTATUS status = BCryptEncrypt(key_object->key.bcrypt_key, input, insize, &oaepInfo, NULL, 0, output, outsize, result, flags); if (key_object->type != KEY) return NTE_INVALID_HANDLE; return map_ntstatus(BCryptEncrypt(key_object->key.bcrypt_key, input, insize, padding, NULL, 0, output, outsize, result, flags)); } Now, when calling the connection, it crashes with the error "bcrypt:BCryptEncrypt flags 0x4 not implemented." Can anyone help with enhancing this functionality or at least point me in the right direction?
Last updated: 2024-03-22
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 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 tvm on Web Client (HMI) Disconnects from Webvisu (Weidmuller u-OS)
CODESYS Forge
talk
(Post)
ok, that's different than our issue then. We're using Schneider Electric M262 PLCs, and we've had it where certain web browsers cause the web server to only allow https connections, but it's not recoverable with a refresh. It usually requires a power cycle or even a full firmware flash. Your issue might have more to do with the timing. I don't know if it helps you, but we normally run our visu task at 200mS, with an update rate of 200mS. Seems to work. I went through this: https://faq.codesys.com/pages/viewpage.action?pageId=112525371 but it really seems like trial and error.
Last updated: 2023-09-06
Post by matthew on Persistence Manager Backup
CODESYS Forge
talk
(Post)
Hi, Is there a process to restore Persistence Manager files? I have backups of persistence variables used in a machine that is currently operating and tuned and all set points adjusted. There are about 500 persistence variables, they are building another identical machine. I would like to use Persistence Manager files from the first machine in the second also. I have tried copying the files and replacing them on the new RPI but then the Persistence Manager gets errors and then they are all reset to 0 etc I have tried adjusting the times to match. Instead of replacing whole file, I tried just changing the contents inside the file, but still does not work. I may be missing something here, but surely there must be a way to load a backup. Thanks!
Last updated: 2023-10-18
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 bernd on Version 3.5.19.40 probleme bei FUN mit _to_ im Name
CODESYS Forge
talk
(Post)
Hallo, ich habe von Version 3.5.19.0 auf 3.5.19.40 hochgerüstet, jetzt bekomme ich bei allen FUNs die "to" im Namen haben einen Fehlermeldung. Oft in der OSCAT.LIB verwendet. Gleiche Meldung wenn ich einen FUN neu anlege. Sobald ich das to weglasse z.b. nur "t" ist der Fehler weg. Programm ist unverändert. Fehlermeldung: Typ.... wird nicht unterstützt. Hat jemand das gleiche Problem? Bzw. wo liegt das Problem? Bzw. nutzt jemand das SP4 und bei ihm kommt der Fehler nicht? Läuft bei mir auf Rasperry. Beispiel: DT_TO_SDT -> Fehlermeldung Typ DT_TO_SDT wird nicht unterstützt. DT_T_SDT -> Übersetzung Fehlerfrei
Last updated: 2023-11-09
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 ewi04 on Recipe Manager - RecipeManCommands, load & write wrong values, Bug?
CODESYS Forge
talk
(Post)
I'm getting closer to the error. The combination of STRUCT and ARRAY probably causes the strange behavior. As soon as the ARRAY is followed by a variable, the problem arises. Examples: X: ARRAY[1..2] OF INT; // okay Y: ARRAY[1..2] OF STRUCT; // problem Z: STRUCT; Z.ArrayOfInt[1]; // okay Z.ArrayOfStruct[1].Variable // problem // *update - array of array also causes the error A: ARRAY[1..2] OF ARRAY[1..4] OF BOOL; // problem I can't be the only one who has this problem. Or? Maybe there is a solution. Anyone? Or is it a bug after all?
Last updated: 2023-11-17
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
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.