# Variablen in CoDeSys V2.3 mit externem Programm lesen und schreiben



## desanta (20 Juni 2020)

Guten Tag, ich arbeite gerade mit CoDeSys V2.3 (nicht meine Entscheidung). Während der Simulation würde ich gerne Variablen mit einem externen Programm lesen und schreiben können, beispielsweise mit einem Python-Script. CoDeSys und das externe Programm sollen einfach auf dem gleichen lokalen Rechner laufen. Hierbei soll keine externe Hardware involviert sein.


Um etwas genauer zu werden: Ich möchte einen echten Controller simulieren. Der Benutzer sollte ein Programm schreiben können, welches ein paar Variablen setzt (Ausgänge). Das externe Programm soll diese Variablen lesen können und daraufhin andere Variablen (Eingänge) setzen können.


Beispiel:







Das Programm inkrementiert einfach in jedem Zyklus eine Variable. Nun soll die Variable "ACTIVE" mit einem externen Programm gesetzt werden können. Daraufhin soll das Zählen also nur dann laufen, wenn das externe Programm die Variable auf "TRUE" setzt, das Ergebnis soll dann auch in CoDeSys sichtbar sein.


Ich bin mir hier nicht sicher, ob es eine Art API oder ein Kommunikationsprotokoll gibt, womit ich das umsetzen könnte.


Beste Grüße!


----------



## Mrtain (20 Juni 2020)

Vielleicht wäre das für dich Interessant: 

https://infosys.beckhoff.com/index....adscommon_introads.htm&id=1593850731570799832


----------



## wollvieh (20 Juni 2020)

Frag den, der es entschieden hat.


----------



## HausSPSler (21 Juni 2020)

denke da musst du CODESYS V3 nehmen, sonst wird das nicht so einfach gehen.
In CODESYS V3 würde ich einen Python geschriebenen OPC UA Client nehmen und mit dem die Werte schreiben lesen.
Hier gibt’s ein Beispiel:
https://forge.codesys.com/forge/talk/Runtime/thread/04361f89ec/?limit=25&page=1#7f41
das geht natürlich auch auf Control Win (das ist die SPS die mit CODESYS mit installiert wird)

Grüße


----------



## oliver.tonn (21 Juni 2020)

Mrtain schrieb:


> Vielleicht wäre das für dich Interessant:
> 
> https://infosys.beckhoff.com/index....adscommon_introads.htm&id=1593850731570799832


Fürchte das hilft dem TE nicht, da es ADS, meine ich, nur bei Beckhoff gibt.
Vielleicht kann @HausSPSler hier ein wenig dazu beitragen.
Ups, hatte übersehen, dass er schon geantwortet hat, sorry.

Von irgendwas mit Internetzugang gesendet.


----------



## Mrtain (21 Juni 2020)

Danke für die Info. Ich verbinde immer Codesys automatisch mit Beckhoff.... frag nicht nicht warum


----------



## oliver.tonn (21 Juni 2020)

Mrtain schrieb:


> Danke für die Info. Ich verbinde immer Codesys automatisch mit Beckhoff.... frag nicht nicht warum


Tröste Dich, geht mir auch oft so, da ich zum überwiegenden Teil mit TwinCAT arbeite.

Von irgendwas mit Internetzugang gesendet.


----------



## Mrtain (21 Juni 2020)

Ich leider gar nicht mehr. Kenn das nur noch aus meiner Instandhalterzeit. Momentan programmiere ich Jetter–Steuerungen Aber so wie es aussieht, wird demnächst noch B&R dazukommen.


----------



## wollvieh (21 Juni 2020)

Gibt in Codesys2.x die Gateway Communication sowie OPC DA, wenngleich oldfashioned und obsolet, aber mit alten Windows Versionen laufen die heute noch. tempus fugit...


----------



## desanta (23 Juni 2020)

Danke schon mal für die Antworten und das Interesse, Codesys V3 darf ich leider nicht benutzen, es muss mit Codesys V2.X funktionieren.

Vielleicht macht es Sinn, die Frage noch mal etwas anders zu formulieren. Normalerweise kommuniziert Codesys bei uns mit realen Eingangs- und Ausgangskarten, an die Sensoren und Motoren angeschlossen sind (Lichtschranke, etc.).
Jetzt soll es möglich sein, diese reale Hardware durch eine simulierte Hardware zu ersetzen. D. h. wenn ich in Codesys einen Ausgang auf "TRUE" schalte, soll ich das in meiner geschriebenen Simulationssoftware erkennen können und daraufhin auch Eingänge in Codesys setzen können.

Das ganze muss "leider" auf Windows 8.1/10 laufen und sozusagen als "Übungssoftware" dienen.

> Gateway
Hab ich auch schon entdeckt, "Codesys Gateway Server" und "Codesys Gateway DDE Server" scheinen wohl standardmäßig mitinstalliert zu sein.
Leider fehlt mir hier generell das Hintergrundwissen, ich weiß nicht wirklich, was die Funktion des Gateways in Codesys ist.
Meine Software wäre dann hier ja der Client, der mit dem Server kommunizieren würde.
Kann ich mein Vorhaben über den Gateway umsetzen? Gibt es hier ein besonderes Protokoll oder Schema, über das man die Variablen/Eingänge/Ausgänge abfragen kann?


----------



## oliver.tonn (23 Juni 2020)

Das Problem das Ihr bekommen werdet ist, dass Ihr die TC2 Runtime auf einem PC laufen lassen wollt. Das geht nur mit einem 32Bit OS, was aber auch der Person klar sein sollte, der auf TC2 besteht. Habt Ihr keinen Rechner mit einem 32Bit OS erübrigen sich alle weiteren Überlegungen, weil es schlcht nicht gehen wird.


----------



## desanta (26 Juni 2020)

oliver.tonn schrieb:


> Das Problem das Ihr bekommen werdet ist, dass Ihr die TC2 Runtime auf einem PC laufen lassen wollt. Das geht nur mit einem 32Bit OS, was aber auch der Person klar sein sollte, der auf TC2 besteht. Habt Ihr keinen Rechner mit einem 32Bit OS erübrigen sich alle weiteren Überlegungen, weil es schlcht nicht gehen wird.


Mit TwinCAT 2 / Beckhoff arbeite ich doch gar nicht.

Ich habe gerade von PLCWinNT gehört, das kommt mit CoDeSys mitinstalliert und soll wohl eine Art virtueller PLC sein. Also im Grunde genau das, was ich benötige.
Hat jemand vielleicht schon davon gehört oder mal damit gearbeitet?


----------



## oliver.tonn (26 Juni 2020)

desanta schrieb:


> Mit TwinCAT 2 / Beckhoff arbeite ich doch gar nicht.
> 
> Ich habe gerade von PLCWinNT gehört, das kommt mit CoDeSys mitinstalliert und soll wohl eine Art virtueller PLC sein. Also im Grunde genau das, was ich benötige.
> Hat jemand vielleicht schon davon gehört oder mal damit gearbeitet?


Sorry, mein klassischer Fehler, ich arbeite hauptsächlich mit TwinCAT. Das Ganze gilt aber auch für Codesys V2.3 und alle seine Derivate (eben auch TC2), auch da läuft die Runtime nur unter einem 32 Bit OS. PLCWinNT ist sozusagen eine SofSPS, mit dieser kann man sein Programm im gewissen Rahmen ausführen.


----------



## wollvieh (26 Juni 2020)

Vielleicht selbst mal ein bischen recherchieren, oder den Fragen der es entschieden hat.

Info vom Hersteller :

https://store.codesys.com/codesys-23.html#Systemvoraussetzung


----------



## desanta (4 Juli 2020)

Ich habe mein Konzept etwas überdacht und paar Unklarheiten gelöst, ich wusste anfangs nicht genau, wonach ich eigentlich suche. 

Eine SoftSPS ist genau das, was ich brauche. Wir haben einen PFC200 (750-8202) von Wago wo normalerweise die Programme drauf laufen.
Jetzt soll das Programm aber auf einem Simulator laufen, der die physikalischen Eingänge und Ausgänge lesen und setzen, also simulieren kann.

Ich habe PLCWinNT tatsächlich ohne große Probleme zum Laufen bekommen. Dafür habe ich das Zielsystem einfach auf PLCWinNT gesetzt und die Kommunikationsparameter angepasst.
Jetzt läuft CoDeSys nicht mehr im Simulationsmodus und das Programm läuft über PLCWinNT.

Dass CoDeSys und der Rest nur als 32-bit Variante verfügbar ist, ist doch eigentlich kein Problem. Auf meiner Win10 64-bit Version laufen doch auch zahlreiche Programme in der 32-bit Variante.

Jetzt möchte ich gerne über OPC UA mit PLCWinNT kommunizieren und darüber Variablen lesen und setzen.
Das hier geht in die Richtung, die ich mir als Ziel gesetzt habe: https://www.codesys-blog.com/kommunikation/python-opc-ua-client-mit-codesys-verbinden/ (leider für CoDeSys V3)

Ich habe recherchiert und paar URLs in der Form von "opcua://localhost:4840" und "opc.tcp://localhost:4840" gesehen. Ich bin mir aber nicht sicher, ob der OPC Server von CoDeSys überhaupt läuft. CoDeSys und PLCWinNT laufen über den Port 1200, denke mal nicht, dass die OPC Kommunikation dann über den gleichen Port läuft.

Also noch mal eine andere Frage, hat jemand vielleicht schon mit PLCWinNT und OPC gearbeitet?
Alternativ habe ich erst mal UaExpert als Client installiert, um zu schauen, ob die Verbindung überhaupt funktioniert.

Viele Grüße!


----------



## wollvieh (4 Juli 2020)

Die PLCWinNT hat "nur" den OPC DA Server, basierend auf COM/DCOM. Stelle die Frage doch einfach im Codesys Forge Forum,  denke nicht, das Du da eine andere Antwort bekommst. OPC DA oder die nicht mehr unterstützte Gateway Kommunikation.
Wer nicht mit der Zeit geht, geht mit der Zeit.  ;-)


----------



## HausSPSler (5 Juli 2020)

...ganz ehrlich es wäre halt so einfach, wenn du einfach CODESYS V3 auf deinem PFC installieren würdest und komplett alles in V3 machen würdest.
Der OPCUA server ist sowohl im PFC200 als auch in der Control Win ( das ist die Steuerung auf V3 - PLCWinNT)
Für OPC DA mit V2.3 brauchst du für den Server eine Lizenz, OPC UA Server in V3 ist im Runtime verbaut und lizensiert. ( PFC / Wago Touch Panel TP600 und Control Win)

Ich würde echt überlegen, ob das nicht ein Zeitpunkt wäre alles umzustellen, es gibt keine Neuentwicklungen mehr für CODESYS V2.3 kein OPCUA kein Profinet / kein Ethercat / kein IO-Link / kein Automation Server keine IOT Bibliotheken einfach nichts Neues und dann noch die alte betagte JAVA Webvisu in V2.3.

Wenn du das in V3 mit all den Möglichkeiten dir anschaust, kann ich es kaum nachvollziehen nicht umzusteigen.
Irgendwann müsst ihr es vermutlich eh tun. 
Grüße


----------



## Tobsturbo (7 Juli 2020)

Ich steige auch mal in das Thema ein , ich suche genau wie der Themen Starter nach einer Möglichkeit per Codesys 2.3 über OPC-DA  oder UA eine Verbindung herzustellen, bis jetzt ist mir das nur Per Modbus TCP gelungen, hier kann man auch Variablen freigeben. Ein weiterer Test Variablen per OPC-DA zu lesen und zu schreiben steht noch aus. Ein Umstieg auf Codesys V3 macht wirklich Sinn, ich bereite gerade auch alles dafür vor.


----------

