Skip to main content

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.

_rtslext_img_io_connection.png

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 std:BYTE, std:WORD, std:DWORD, std:LWORD. Auch andere einfache Datentypen sind zulässig.

Attributes channel

input oder output

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 codesysuser

JA

Prozesstrennung

JA