Post by kblundy on Change the Opening Position of the Dialog using VU.FbOpenDialog
CODESYS Forge
talk
(Post)
I hope the community can help me with this. I need to use the Visu Utils FbOpenDialog to control the opening and closing of a dialog. I have the Opening and Closing working, but I can’t get the dialogue's position to be controlled. The code looks like this: PROGRAM OPEN_DIALOG VAR xOpenLatchSettingDialog : BOOL; TopLeftDialog : VisuStructPoint ; fbOpenLatchSettingsDialog : VU.FbOpenDialog ; END_VAR IF xOpenLatchSettingDialog THEN xOpenLatchSettingDialog:= FALSE ; TopLeftDialog.iX := 100; TopLeftDialog.iY := 23; fbOpenLatchSettingsDialog(sDialogName := 'visu_AlarmLatchSettings', xExecute := xOpenLatchSettingDialog , xModal := TRUE, itfClientFilter := VU.Globals.OnlyTargetVisu, pTopLeftPosition := ADR(TopLeftDialog)); CloseVisuDialog(sDialogName:= 'visu_AlarmLatchSettings'); ELSE xOpenLatchSettingDialog:= TRUE ; IF fbOpenLatchSettingsDialog.xError THEN xOpenLatchSettingDialog := FALSE; END_IF END_IF I can't seem to work out a way to make the values in TopLeftDialog.iX and TopleftDialog.iY be passed correctly in the call and for it to change the position of the dialogue box. The code is compiled, but the position has not been changed. Any guidance or suggestions for revising this code would be incredibly valuable. Your insights could be the key to solving this issue.
Last updated: 2024-05-05
Post by bschraud on Code erzeugen mit kryptischer Fehlermeldung mit GVL_Io_dd05d808
CODESYS Forge
talk
(Post)
Hallo, beim Codeerzeugen bekomme ich wiederholt Fehlermeldungen, bei denen nicht mit einem Klick in das betroffene Modul gewechselt werden kann. Die Fehlermeldung tritt allerdings nach "Gerät aktualisieren" nicht mehr auf. Wenn ich das Projekt speichere, Codesys schließe, anschließend Codesys wieder starte und Code erzeugen will, tritt der Fehler wieder auf: ------ Übersetzungslauf gestartet: Applikation: Device.Application ------- Code typisieren... [FEHLER] PAC: C0032: Typ 'Unbekannter Typ: 'ADR(GVL_Io_dd05d808_33e6_4f6b_ba3a_6ba1d0dcc882_HPS_7.Io_dd05d808_33e6_4f6b_ba3a_6ba1d0dcc882_HPS_7)'' kann nicht in Typ 'POINTER TO IoConfigParameter' konvertiert werden [FEHLER] PAC: C0077: Unbekannter Typ: 'GVL_Io_dd05d808_33e6_4f6b_ba3a_6ba1d0dcc882_HPS_7.Io_dd05d808_33e6_4f6b_ba3a_6ba1d0dcc882_HPS_7' [FEHLER] PAC: C0046: Bezeichner 'GVL_Io_dd05d808_33e6_4f6b_ba3a_6ba1d0dcc882_HPS_7' nicht definiert Kompilierung abgeschlossen -- 3 Fehler, 1 Warnungen Übersetzung abgeschlossen -- 3 Fehler, 1 Warnungen : Kein Download möglich Die Recherche nach der Bedeutung von "HPS_7" oder "GVL_Io_dd05d808" verlief leider ergebnislos. Ich habe nur einen ähnlich erscheinenden Thread gefunden, der aber nicht gelöst wurde: https://forge.codesys.com/forge/talk/Engineering/thread/0666dce94f/ Ich verwende Codesys 3.5 SP20 (64bit) mit CODESYS Control for Raspberry Pi MC SL 4.11.0.0. Alle anderen Geräte sowie die Projektumgebung sind frisch aktualisiert. Kennt jemand die Bedeutung dieser Fehler bzw. wie man sie beheben kann? Vielen Dank für die Hilfe
Last updated: 2024-05-16
Post by william-blandon on RecipeManCommands.ReloadRecipes
CODESYS Forge
talk
(Post)
Hi Dave. Thanks for your answer. I still struggling with this. I have done everything according with the Codesys help even I have looked in detail at the example. I have double checked the recipe manager configuration and the use of all the methods. There are two methods that do not work as expected. I'm using Codesys 3.5.19.20 and recipe management 4.4.0.0 .CreateRecipe just create a recipe in the recipe definition but do not create the file. This have a walk around just giving a .ReadAndSaveRecipe afterwards. .ReloadRecipes do nothing but do not generate any error as well. After calling it I call the .GetRecipeCount and the number is always 0. When I create a new recipe (using the function block methods) then the number changes. Looks like this method is looking to the wrong directory finding nothing. I don't know if there is a missing configuration in the CODESYSControl.cfg file. I'm thinking in a walk around for this but I need to create a strings array with the recipe names as retentive and making all the management when deleting and adding recipes. Have had some one the same problem?
Last updated: 2024-05-23
Post by wollvieh on Display minutes as hours & minutes
CODESYS Forge
talk
(Post)
Here a code for an Operation Counter with : days,hours,minutes,seconds as an example, maybe it points you the right direction ? FUNCTION_BLOCK OperationDayHour VAR_INPUT IN : BOOL; // Betrieb Takt : BOOL; // 1Hz Systemtakt END_VAR VAR_OUTPUT BetrTag : UDINT; // Ausgabe Betriebstage Betrstd : UDINT; // Ausgabe Betriebsstunden Betrmin : UDINT; // Ausgabe Betriebsminuten Betrsec : UDINT; // Ausgabe Betriebsekunden BetrString : STRING; // Ausgabe als String END_VAR VAR ///Erkennung Taktflanke Flanke: R_TRIG; END_VAR VAR_IN_OUT BetrsecAbsolut: UDINT; //Ein/Ausgangsvariable Betriebssekunden RETAIN !!! END_VAR Flanke(CLK:= Takt, Q=> ); (*Erkennung Taktflanke*) IF (IN AND Flanke.Q) THEN (*Sekunden hochzählen*) BetrsecAbsolut := BetrsecAbsolut + 1; END_IF Betrsec := BetrsecAbsolut MOD 60; Betrmin := ( BetrsecAbsolut / 60) MOD 60; Betrstd := ( BetrsecAbsolut / 60 / 60 ) MOD 24; BetrTag := ( BetrsecAbsolut / 60 / 60 /24 ); BetrString := RIGHT ( UDINT_TO_STRING( BetrTag + 100000),5); BetrString := CONCAT (BetrString, 'd_'); BetrString := CONCAT (BetrString,RIGHT ( UDINT_TO_STRING( Betrstd + 100000),5)); BetrString := CONCAT (BetrString, 'h_'); BetrString := CONCAT (BetrString, RIGHT ( UDINT_TO_STRING( Betrmin + 100),2)); BetrString := CONCAT (BetrString, 'm_'); BetrString := CONCAT (BetrString, RIGHT ( UDINT_TO_STRING( Betrsec + 100),2)); BetrString := CONCAT (BetrString, 's');
Last updated: 2024-05-27
Post by sigurdrb on send appliaction files to wago plc (codesys 3.5) via ssh
CODESYS Forge
talk
(Post)
Hi, I was hoping I could send the two files "application.app" and "application.crc" directly to the directory "/home/codesys/PlcLogic/Application" instead of logging into the device with codesys, downloading the program to the controller and then do the "create boot application", so it will reboot with the correct program running. I think i also need to edit the file "eRUNTIME.cfg" located in the "/home/codesys/ folder, because when I create the boot application from the codesys IDE, these lines are added to the file: [CmpApp] Application.1 = Application [SysFileMap] /home/codesys/PlcLogic/Application/Application.app=0x212520, 0x2DBC747E, 2DBC747E.app I think the "eRUNTIME.cfg" file is the same as CODESYSControl.cfg I also dont know the purpose of the hexadecimal numbers etc. that is generated. When I tried to replicate what codesys was doing, I placed the same files in the same folder as when codesys generated the boot file. And also added the lines in the eRUNTIME.cfg file: [CmpApp] Application.1 = Application [SysFileMap] /home/codesys/PlcLogic/Application/Application.app The controller did not boot up with any program, so my method did not work at all. I guess these lines tells the controller to run an application and where to find it? Could any of you help me with the best way to get the compiled program to the controller without using codesys or wago-software?
Last updated: 2024-05-28
Post by jkessler on IoDrvModbusTCP_Diag not defined when using MODBUS
CODESYS Forge
talk
(Post)
Hi, Same for me ! Works in Codesys 3.5.19 but not in 3.5.20. I'm currenly using with a WAGO PLC200 [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'IoDrvModbusTCP_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'IoDrvModbusTCP_Diag' n’est pas un composant de 'IoDrvModbusTCP' [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'ModbusTCPSlave_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'ModbusTCPSlave_Diag' n’est pas un composant de 'IoDrvModbusTCP' [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'ModbusTCPSlaveUnit_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'ModbusTCPSlaveUnit_Diag' n’est pas un composant de 'IoDrvModbusTCP' Thanks in advance
Last updated: 2024-05-29
Post by jkessler on IoDrvModbusTCP_Diag not defined when using MODBUS
CODESYS Forge
talk
(Post)
Hi, Same for me ! Works in Codesys 3.5.19 but not in 3.5.20. I'm currenly using with a WAGO PLC200 [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'IoDrvModbusTCP_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'IoDrvModbusTCP_Diag' n’est pas un composant de 'IoDrvModbusTCP' [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'ModbusTCPSlave_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'ModbusTCPSlave_Diag' n’est pas un composant de 'IoDrvModbusTCP' [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'ModbusTCPSlaveUnit_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'ModbusTCPSlaveUnit_Diag' n’est pas un composant de 'IoDrvModbusTCP' Thanks in advance
Last updated: 2024-05-29
Post by jkessler on IoDrvModbusTCP_Diag not defined when using MODBUS
CODESYS Forge
talk
(Post)
Hi, Same for me ! Works in Codesys 3.5.19 but not in 3.5.20. I'm currenly using with a WAGO PLC200 [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'IoDrvModbusTCP_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'IoDrvModbusTCP_Diag' n’est pas un composant de 'IoDrvModbusTCP' [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'ModbusTCPSlave_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'ModbusTCPSlave_Diag' n’est pas un composant de 'IoDrvModbusTCP' [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'ModbusTCPSlaveUnit_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'ModbusTCPSlaveUnit_Diag' n’est pas un composant de 'IoDrvModbusTCP' Thanks in advance
Last updated: 2024-05-29
Post by jkessler on IoDrvModbusTCP_Diag not defined when using MODBUS
CODESYS Forge
talk
(Post)
Hi, Same for me ! Works in Codesys 3.5.19 but not in 3.5.20. I'm currenly using with a WAGO PLC200 [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'IoDrvModbusTCP_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'IoDrvModbusTCP_Diag' n’est pas un composant de 'IoDrvModbusTCP' [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'ModbusTCPSlave_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'ModbusTCPSlave_Diag' n’est pas un composant de 'IoDrvModbusTCP' [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'ModbusTCPSlaveUnit_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'ModbusTCPSlaveUnit_Diag' n’est pas un composant de 'IoDrvModbusTCP' Thanks in advance
Last updated: 2024-05-29
Post by jkessler on IoDrvModbusTCP_Diag not defined when using MODBUS
CODESYS Forge
talk
(Post)
Hi, Same for me ! Works in Codesys 3.5.19 but not in 3.5.20. I'm currenly using with a WAGO PLC200 [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'IoDrvModbusTCP_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'IoDrvModbusTCP_Diag' n’est pas un composant de 'IoDrvModbusTCP' [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'ModbusTCPSlave_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'ModbusTCPSlave_Diag' n’est pas un composant de 'IoDrvModbusTCP' [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0046: Identificateur 'ModbusTCPSlaveUnit_Diag' non défini [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0080: Le bloc fonctionnel 'IoDrvModbusTCP' doit être instancié pour permettre l’accès [ERREUR] EmPlcProgram: Application [Device: Logique API]: C0004: 'ModbusTCPSlaveUnit_Diag' n’est pas un composant de 'IoDrvModbusTCP' Thanks in advance
Last updated: 2024-05-29
Post by paro on Modbus Client Request Not Processed
CODESYS Forge
talk
(Post)
Hi, Problem in your code is that you are not calling the ClientFb cyclic. Please look at the Example from CODESYS: https://forge.codesys.com/prj/codesys-example/modbus/home/Home/ Your code works if the client fb is called cyclic! IF NOT initDone THEN initDone := TRUE; // configure clientTcp clientTcp(aIPaddr:=Ethernet.IPAddress, uiPort:=502); // configure clientSerial clientSerial(iPort:=SysCom.SYS_COMPORT2, dwBaudRate:=SysCom.SYS_BR_115200, byDataBits:=8, eParity:=SysCom.SYS_EVENPARITY, eStopBits:=SysCom.SYS_ONESTOPBIT, eRtuAscii:=ModbusFB.RtuAscii.RTU); // configure clientRequestReadCoils_1 clientRequestReadCoils_1(rClient:=clientTcp, uiUnitId:=42, udiTimeout:=TO_UDINT(T#10MS)); // configure clientRequestWriteSingleRegister clientRequestWriteSingleRegister(rClient:=clientTcp, uiUnitId:=43, udiTimeout:=TO_UDINT(T#10MS)); // configure clientRequestReadCoils_2 clientRequestReadCoils_2(rClient:=clientTcp, uiUnitId:=44, udiTimeout:=TO_UDINT(T#10MS)); // configure clientRequestReadInputRegisters clientRequestReadInputRegisters(rClient:=clientTcp, uiUnitId:=44, udiTimeout:=TO_UDINT(T#10MS)); END_IF // call the client FB's clientTcp(); clientSerial(); // call client request FB's clientRequestReadCoils_1(rClient:=clientTcp, xExecute:=TRUE, uiStartItem:=2, uiQuantity:=3, pData:=ADR(aDataCoils_1[0])); // for more details see Example_TCP, especially ClientRequest control (xExecute, xDone, xError). IF clientRequestReadCoils_1.xDone THEN // get data from aDataCoils_1 ... END_IF clientRequestWriteSingleRegister(rClient:=clientTcp, xExecute:=TRUE, uiItem:=3, uiValue:=123); clientRequestReadCoils_2(rClient:=clientTcp, xExecute:=TRUE, uiStartItem:=2, uiQuantity:=3, pData:=ADR(aDataCoils_2[0])); clientRequestReadInputRegisters(rClient:=clientTcp, xExecute:=TRUE, uiStartItem:=16, uiQuantity:=3, pData:=ADR(aDataInputRegisters[0]));
Last updated: 2024-05-29
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 caprez95 on Trace Restart Visuelement
CODESYS Forge
talk
(Post)
Hallo zusammen. Ich habe schon länger mit dem Problem zu kämpfen, dass ich einen Trend (Visuelement) nicht resetten (neustarten) kann. Ich habe es jetzt mit dem Beispiel hinbekommen, die Trace-Aufzeichnung über die CmpTraceMgr Bibliothek zu steuern. Aber wie bekomme ich diese Trace-Aufzeichnung in ein Visuelement? Der Code sieht wie folgt aus: // Configure trace IF xInit THEN // Create a trace packet PacketConfig.pszName := ADR('IECTraceConfiguration.Trace1'); // Name of trace PacketConfig.pszApplicationName := ADR('IECTraceConfiguration'); // Name of the application PacketConfig.pszIecTaskName := ADR('Task'); // Name of the task PacketConfig.pszComment := ADR('Demo packet'); PacketConfig.ulEveryNCycles := 1; PacketConfig.ulBufferEntries := 1000; PacketConfig.ulFlags := TRACE_PACKET_FLAGS.TRACE_PACKET_FLAGS_TIMESTAMP_MS AND TRACE_PACKET_FLAGS.TRACE_PACKET_FLAGS_AUTOSTART; IF (NOT fbTraceManager.CreatePacket(PacketConfig := PacketConfig, hPacket=>hPacket1)) THEN xError := TRUE; END_IF // Create a trace record RecordConfig.pszVariable := ADR('iSignal'); // This is the name of variable to record RecordConfig.tcClass := INT_TO_UDINT(TypeClass.TYPE_INT); // Type of the recording variable RecordConfig.ulSize := SIZEOF(iSignal); // Size of the recording variable pApp := AppFindApplicationByName('IECTraceConfiguration', 0); AppGetAreaOffsetByAddress(pApp, ADR(iSignal), ADR(RecordConfig.tvaAddress.taAddress.Area.usArea), ADR(RecordConfig.tvaAddress.taAddress.Area.ulOffset)); // Get and set area offsets RecordConfig.tvaAddress.ulAddressFlags := TRACE_VAR_ADDRESS_FLAGS_IEC OR TRACE_VAR_ADDRESS_FLAGS_AREA_OFFSET; RecordConfig.ulGraphColor := 16#FF00FF00; // green RecordConfig.ulGraphType := 1; // Line with points IF (NOT fbTraceManager.AddRecord(RecordConfig := RecordConfig, hPacket := hPacket1, hRecord => hRecord1)) THEN xError := TRUE; END_IF xInit := FALSE; END_IF // Starts the recording IF xStart THEN IF (NOT fbTraceManager.StartPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xStart := FALSE; END_IF // Stop the recording IF xStop THEN IF (NOT fbTraceManager.StopPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xStop := FALSE; END_IF // Reset the recording IF xReset THEN IF (NOT fbTraceManager.ResetPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xReset := FALSE; END_IF
Last updated: 2024-06-04
Post by caprez95 on Trace Restart Visuelement
CODESYS Forge
talk
(Post)
Hello everyone. I've been struggling with the problem for a long time that I can't reset (restart) a trend (visual element). With the example I have now managed to control the trace recording via the CmpTraceMgr library. But how do I get this trace recording into a visual element? The code looks like this: // Configure trace IF xInit THEN // Create a trace packet PacketConfig.pszName := ADR('IECTraceConfiguration.Trace1'); // Name of trace PacketConfig.pszApplicationName := ADR('IECTraceConfiguration'); // Name of the application PacketConfig.pszIecTaskName := ADR('Task'); // Name of the task PacketConfig.pszComment := ADR('Demo packet'); PacketConfig.ulEveryNCycles := 1; PacketConfig.ulBufferEntries := 1000; PacketConfig.ulFlags := TRACE_PACKET_FLAGS.TRACE_PACKET_FLAGS_TIMESTAMP_MS AND TRACE_PACKET_FLAGS.TRACE_PACKET_FLAGS_AUTOSTART; IF (NOT fbTraceManager.CreatePacket(PacketConfig := PacketConfig, hPacket=>hPacket1)) THEN xError := TRUE; END_IF // Create a trace record RecordConfig.pszVariable := ADR('iSignal'); // This is the name of variable to record RecordConfig.tcClass := INT_TO_UDINT(TypeClass.TYPE_INT); // Type of the recording variable RecordConfig.ulSize := SIZEOF(iSignal); // Size of the recording variable pApp := AppFindApplicationByName('IECTraceConfiguration', 0); AppGetAreaOffsetByAddress(pApp, ADR(iSignal), ADR(RecordConfig.tvaAddress.taAddress.Area.usArea), ADR(RecordConfig.tvaAddress.taAddress.Area.ulOffset)); // Get and set area offsets RecordConfig.tvaAddress.ulAddressFlags := TRACE_VAR_ADDRESS_FLAGS_IEC OR TRACE_VAR_ADDRESS_FLAGS_AREA_OFFSET; RecordConfig.ulGraphColor := 16#FF00FF00; // green RecordConfig.ulGraphType := 1; // Line with points IF (NOT fbTraceManager.AddRecord(RecordConfig := RecordConfig, hPacket := hPacket1, hRecord => hRecord1)) THEN xError := TRUE; END_IF xInit := FALSE; END_IF // Starts the recording IF xStart THEN IF (NOT fbTraceManager.StartPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xStart := FALSE; END_IF // Stop the recording IF xStop THEN IF (NOT fbTraceManager.StopPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xStop := FALSE; END_IF // Reset the recording IF xReset THEN IF (NOT fbTraceManager.ResetPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xReset := FALSE; END_IF
Last updated: 2024-06-04
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 hppatrick on Datenkonvertierung fĂĽr ein SPS-AO-Modul
CODESYS Forge
talk
(Post)
Hi Leute , ich bin neu hier im Forum und habe seit kurzer Zeit mein eigenes SPS-Projekt. Ich stoße hin und wieder an Probleme aber habe diese auf kurz oder lang gelöst. Nun zu meinem Problem: Als Projekt habe ich eine Kühlwassersteuerung , die einen Relativdruck einließst, und anhand desssen Werte dann einen Frequenzumrichter ansteuert. Z. Bsp. 5Bar -> FU auf 70Prozent. Ich lese in Codesys den Analogwert mit der Wago A20_750_455_020 ein. Dieser Wert wird umgerechnet mit LIN_TRAFO in 0-10 (Bar)und und wird dann über einen PID Regler geregelt. (Bibliothek UTIL). Dieser Wert wird dann wieder für die Ausgangskarte Umgerechnet (LIN_TRAFO) . Nun zu meinem Problem : Die Ausgangskarte nimmt nur einen Word Datentyp und meine Bausteine haben den REAL Datentyp. Wenn ich einen Konvertierungsbaustein nehme, Schmeist mir Codesys einen Fehler und das Programm wird geschlossen. Könnt Ihr mir helfen? Vielen Dank im Voraus (Datei habe ich angehängt). Die Ausgangskarte ist eine Wago 750-555-08
Last updated: 2024-06-14
Post by mp9876 on Problem using MeasureFrequence FB
CODESYS Forge
talk
(Post)
Hi everyone, new at Codesys and PLC programming in general. I am using Codesys Win V3.5 SP20 I would like to measure an encoder's frequency output (obtaining that pulse train from Factory IO) and intended to use the MeasureFrequence FB (Intern/CAA/Utilities/CAA Mathematics/3.5.19.0). As mentioned in the title what I need to measure is low frequency, such as lower than 40hz (a cycle every 25mS) or so; I could even go lower frequency if required as this is for test purposes) therefore I am not expecting problem measuring a low frequency with that FB The library in question appears to be installed as I can retrieve it from the Library Repository. I can also see it from the Device's Library Manager. Problem arises when I am trying to instantiate this particular FB. I go like this: VAR MeasF:MeasureFrequence; END_VAR Please note that as soon as I start typing the "MeasureFrequence", the MeasureFrequence comes out as a viable option in auto-typing; seems to indicate that the FB is recognized somehow. But there is no way I can compile this as it comes back with the following: C0046: Identifier 'MeasureFrequence' not defined. Tried to rename that to ABC instead of MeasF; same issue. Possibly that the library is not properly installed ? Placeholder ? I would greatly appreciate a bit of guidance if possible. Thank you and regards, Mike
Last updated: 2024-06-24
Post by joachimk on Profinet Controller IP-Adresse ändern
CODESYS Forge
talk
(Post)
Die IP-Adresse des Profinet-Controllers soll zur Laufzeit geändert werden. Dabei handelt es sich um eine Anwendung auf einem PC mit einer Standard-Ethernetschittstelle (ControlWinV3+WinPcap). Die Datei "CODESYSControl.cfg" wurde dazu angepasst: .... Adapter.0.Name="Ethernet 4" Adapter.0.EnableSetIpAndMask=1 Die konfigurierte IP-Adresse wird zur Laufzeit an die tatsächliche IP-Adresse der Netzwerkschnittstelle mit dem folgenden Befehl angepasst (die Änderung von 192.168.2.33 auf 192.168.2.34 funktioniert auch): Ethernet.UpdateConfiguredIPSettings(IpAddress:=Ethernet.IPAddress, subnetmask:=Ethernet.Subnetmask, gateway:=Ethernet.GatewayAddress); Der Profinet-Controller geht danach auf Störung und gibt die folgende Fehlermeldung aus: "Controller-Status: currently active IP does not match the controller's configuration" Unter "Ethernet diagnostic information" kann man die geänderte IP-Adresse von 192.168.2.34. Ethernet läuft auch ohne Fehler. Unter "PROFINET IO Driver diagnostic information" -> "IPParameter" sieht man noch die alte (konfigurierte) IP-Adresse 192.168.2.33. Wie kann man die Störung beseitigen? Leider habe ich keine Methode zum Ändern der IP-Adresse auf dem Profinet-Controller gefunden? Reconfiguration des Profinet-Controllers?
Last updated: 2024-06-27
Post by wbj0t on What the right way to update TCP/COM slave device holding registers
CODESYS Forge
talk
(Post)
Hi all :) I have an plc. This plc has option to be as slave device. There are TCP -> Serial Slave Device and COM -> Serial Slave Device. There are 4096 ModBus holding registers with mark "internal modify" for the both devices above. So, COM Slave has 4096 registers and TCP Slave has 4096 registers. And, finally, I have an ARRAY[0..4095] OF WORD. This array glued with COM Slave and TCP slave. Yes, I need plc's opportunity to be communication both TCP and COM ways for the same registers. For example, the next task structure: * TASK_0: 1. pou_READ_Registers 2. pou_0 3. pou_1 4. ... 5. pou_N 6. pou_WRITE_Registers At the first pou I read registers for the other pous, after job we have sort of state of the plc. At the last pou (6) we write modified registers. It is a good scenario: some one wrote registers for the job, after job we save these (modified) registers. But, what if registers wrote between 1 and 6 pou by operator, for example, at the 3 pou -> the last pou 'pou_WRITE' will rewrite this request from operator. What the right way to work with this logic? Thanks you.
Last updated: 2024-07-01
Post by marek71 on Ambiguous use of name - CO136
CODESYS Forge
talk
(Post)
My PLC is WAGO PFC200 Firmware Revision 26. target After updating WAGO_Devices_and_Libraries with newer Firmware 27, CODESYS wants to update all libraries to new versions. I will only add that I did not update the Firmware in the PLC. After compiling the program, I received the following errors: ------ Build started: Application: Device.Application ------- Typify code... [ERROR] wagosyscom_internal_pfc, 1.0.2.5 (wago): FbSerialInterface_internal: C0136: Ambiguous use of name 'RTS_IEC_HANDLE' [ERROR] wagosyscom_internal_pfc, 1.0.2.5 (wago): FbSerialInterface_internal: C0136: Ambiguous use of name 'RTS_IEC_RESULT' [ERROR] wagosyscom_internal_pfc, 1.0.2.5 (wago): Initialize [FbSerialInterface_internal]: C0032: Cannot convert type 'Unknown type: 'RTS_INVALID_HANDLE'' to type 'POINTER TO BYTE' [ERROR] wagosyscom_internal_pfc, 1.0.2.5 (wago): Initialize [FbSerialInterface_internal]: C0136: Ambiguous use of name 'RTS_INVALID_HANDLE' [ERROR] wagosyscom_internal_pfc, 1.0.2.5 (wago): Initialize [FbSerialInterface_internal]: C0046: Identifier 'RTS_INVALID_HANDLE' not defined [ERROR] wagosyscom_internal_pfc, 1.0.2.5 (wago): comextra_is_tx_empty: C0136: Ambiguous use of name 'RTS_IEC_HANDLE' [ERROR] wagosyscom_internal_pfc, 1.0.2.5 (wago): comextra_get_line_state: C0136: Ambiguous use of name 'RTS_IEC_HANDLE' [ERROR] wagosyscom_internal_pfc, 1.0.2.5 (wago): comextra_is_line_available: C0136: Ambiguous use of name 'RTS_IEC_HANDLE' [ERROR] wagosyscom_internal_pfc, 1.0.2.5 (wago): COMSW_SET_MODE: C0136: Ambiguous use of name 'RTS_IEC_HANDLE' [ERROR] wagosyscom_internal_pfc, 1.0.2.5 (wago): comextra_set_line_state: C0136: Ambiguous use of name 'RTS_IEC_HANDLE' Compile complete -- 10 errors, 0 warnings Build complete -- 10 errors, 0 warnings : No download possible The problem was caused by the WagoSysPlainMem(WAGO) library in the original version 1.5.3.0 after updating to 1.5.3.1. After returning to version 1.5.3.0, the problems disappeared. Probably the version number of this library is responsible for supporting the appropriate Firmware Revision. Can anyone confirm or deny my suspicions?
Last updated: 2024-07-06
Post by dekelec on Codesys 2.3 & Peak PCAN
CODESYS Forge
talk
(Post)
I use Peak USB adapter daily to download from CoDeSys 2.3 and 3.5 to IFM, EPEC and other controllers. The process: - First you need to install the appropriate driver. Link: https://www.peak-system.com/Drivers.523.0.html?&L=1 - Restart the computer - Start the CoDeSys application - Change the name of the adapter in Communication parameters, as mentioned in previous comment. Write the name exactly as written "Peak_USB", as it could also be case sensitive (defines which .dll file to use). If this doesn't work I would contact the vendor of the controller to find out the procedure. In the attachment I've added a FAQ document from IFM regarding using PCAN USB. P.S. I've noticed in your picture of communication parameters a channel via TCP/IP is mentioned. In this case a USB to CAN connection is not being used. First you should change the channel/gateway to connect via CANbus or connect using an Ethernet cable.
Last updated: 2024-07-09
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 faceplant on CmpDynamicText unresolved references
CODESYS Forge
talk
(Post)
Hello! I am new to codesys so I am sorry if this is not the right place to ask this question. I am using codesys V3.5 SP20 Patch 1 + (64-bit) and a Groov EPIC PLC (GRV-EPIC-PR2). I am trying to build and deploy my application to the PLC, but when I log in I get 6 errors (codesys_error.png). It seems that the errors have to do with the CmpDynamicText system library which I have as version 3.5.20.0. I have tried to add CmpDynamicText to the ComponentManager section in the PLC's CODESYSControl.cfg file as described in this forum post and still hit the same error. I noticed that the library is grayed out in the library manager, which I think might be the issue. However I don't remember if it was grayed out before I encountered this issue. Please let me know if I can provide anymore info. Thank you!!!
Last updated: 2024-07-19
Post by biiebs on Aufbau von Ablaufsteuerungen ermitteln
CODESYS Forge
talk
(Post)
Hallo Zusammen, gibt es in CODESYS bei Ablaufsteuerungen weitere Möglichkeiten außer den AS-Einstellungen z.B. die Aufbaustruktur der Ablaufsteuerung herauszufinden? Gesamtanzahl der verwendeten Aktionen / Schritte - Im besten Fall auch die einzelnen Verzweigungen? Ich würde den gesamten Aufbau der Schrittkette gerne als "View" in einer übergeordneten Software abbilden lassen, da sich die Ablaufsteuerungen, je nach Projekt im Aufbau unterscheiden bräuchte ich die Kenntniss über den Aufbau dieser Schrittketten. Oder müsste ich mir hier einen "Workaround" programmieren, der z.B. bei Init erstmal den Aufbau der Ablaufsteuerung durchläuft und mir die nötigen Informationen liefert? Natürlich wäre auch ein Weg den Aufbau des AS-Bausteins über die PLCopen XML zu exportieren, jedoch müsste dies bei Änderungen jeweils nachgezogen werden - was etwas unschön wäre, falls dies vergessen würde. Mittlerweile habe ich auch das Tool "SFC Visu Generator" gefunden, dessen Funktion im Prinzip genau das darstellt, was ich benötige - jedoch leider nur als CODESYS interne Visualisierung. Ich würde den Export des Bausteins gerne in meine übergeordnete Software implementieren. Gibt es hier die Möglichkeit das Vorgehen zu Erfahren oder den vom Baustein generierten Export bei mir zu implementieren? Hat hier jemand sowas ähnliches schonmal gelöst? Vielen Dank im Voraus Mit freundlichen Grüßen Biiebs
Last updated: 2024-07-25
Post by kleeswi on Visualization scaling problem with B&R T30 panel
CODESYS Forge
talk
(Post)
The probelm arises for the B&R T30 panel after updating Codesys from 3.5.17 to 3.5.19 patch 5. We have to use 3.5.19 for other reasons so we cannot downgrade the version. The scaling problem only exists for the B&R 6PPT30.0702.20F025 panel, the B&R T50 panel and a esa lumia panel work. When we choose a fixed resolution it looks also good, however we also want to support the esa lumia panel with a different resolution. The images show the anisotropic and isotropic option. In the anisotropic option it scales the hight correctly but not the width and in the isotropic option is scales both hight and width false, it also does not start in the top left corner. Does someone have any suggestion why it does not work anymore with the new codesys version and are there workarounds? I added all versions with visualization packages as an image, visuElems is 4.4.0.0.
Last updated: 2024-07-29
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
.