Anbindung eigener EA’s
Mit dieser Funktionalität lassen sich lokale E/As an eine Steuerung anbinden und aus der IEC-Applikation verwenden.
Editieren der Gerätebeschreibung
In dem mitgelieferten Beispiel UDSIoDrvExample.project
werden mit der Gerätebeschreibung zwei Ein- und Ausgänge erstellt, die über den Unix Domain Socket angebunden werden. Sie finden das Beispiel im Installationsverzeichnis von CODESYS im Unterverzeichnis CODESYS Control SL Extension Package\<version>\Examples\ExternalIoDrv
.

Um eigene Eingänge und Ausgänge zu definieren, muss die Gerätebeschreibungsdatei SocketUnixIOTemplate.devdesc.xml
angepasst werden. Für jeden der Eingänge und Ausgänge muss ein xml-Element Parameter
definiert werden. Die ParameterId
muss hier innerhalb der Gerätebeschreibungsdatei eindeutig sein. Wir empfehlen einfach aufsteigend lückenlos zu nummerieren (1000, 1001, 1002 usw.) Eingänge sind ab 1000 zu nummerieren, Ausgänge ab 2000.
Hinweis
Wenn die Gerätebeschreibung anpasst wird, muss sie erneut in das Geräterepository installiert werden, damit sie im Projekt verfügbar ist.
<Parameter ParameterId="1000" type="std:DWORD"> <Attributes channel="input"/> <Default/> <Name name="local:in1">/Namne> </Parameter>
Name | Beschreibung |
---|---|
ParameterId | Eindeutige ID, über die der Eingang/Ausgang aufgerufen wird |
type | Definition der Breite des Eingangs/Ausgangs. Sie erfolgt über die Angabe eines entsprechend breiten Datentyps wie |
Attributes channel |
|
Name name | Name für den dazugehörigen Eingang/Ausgang |
Außerdem muss die Geräte-ID vergeben werden, die in <DeviceIdentification>
definiert wird. Dafür ist der Bereich 0x0001 8000 bis 0x0001 80FF vorgesehen, um Kollisionen mit bestehenden Gräten zu vermeiden.
Wichtig
Die Gerätebeschreibung sowie auch der darunter liegende E/A-Treiber sollen nicht mehrfach unter einer SPS instanziiert werden, da die Reihenfolge der Module nicht festgelegt ist. Dies kann dazu führen, dass der E/A-Treiber die Zuordnung nicht sicherstellen kann.
Python-Beispiel
Im Python-Beispiel uds_io_driver.py
werden die Ausgänge entgegengenommen und die Eingänge des Geräts geschrieben. Eingangsparameter (IEC-Ausgänge) werden als Tupel von Strings (paramType
, paramValue)
mit der Parameter-ID der Gerätebeschreibung als Index übergeben.
Der Treiber kann die Datentypen USINT
, UINT
, UDINT
, ULINT
handhaben. Andere Datentypen müssen in einen passenden Datentyp gecastet werden.
Beispiel: ('2000': ('UDINT', '11'), '2001': ('UDINT', '22')}
. Die Ausgangsparameter sind im gleichen Format.
Auch für die Gegenstelle ist ein „Output“/Ausgangsparameter trotzdem ein Ausgangswert, der von der IEC-Applikation „nach außen“ hin transportiert werden soll (beispielsweise auf reale GPIOs hinausgeschrieben). Die im Beispiel implementierte Klasse UDS_IODriver_0
erweitert die Klasse ExternalFunctionBase
. Der Name der Klasse leitet sich aus UDS_IODriver_
gefolgt vom Instanzindex in aufsteigender Reihenfolge ab. Notwendig ist die Funktion Call()
, die von dem Mechanismus aus IEC aufgerufen wird. Hier können nun die IEC-Ausgänge ausgewertet und IEC-Eingänge übergeben werden.
Verwendung der Schnittstelle nur als Mitglied der Linux-Benutzergruppe | JA |
Prozesstrennung | JA |