S7-SoftSPS:TwinCAT I/O Konfiguration

Aus IBHsoftec Wiki
Wechseln zu: Navigation, Suche

Der vorliegende Treiber ermöglicht es E/A Daten über den Beckhoff Treiber TwinCAT IO mit der IBH softec S7-SoftSPS auszutauschen. Über den TwinCAT IO Treiber lassen sich alle E/A Baugruppen der Firma Beckhoff ansprechen, so dass dieser Treiber unabhängig vom verwendeten Bussystem ist. Um mit der S7-SoftSPS die Beckhoff Peripheriebaugruppen ansprechen zu können, muss der TwinCAT IO Treiber von Beckhoff auf dem Rechner installiert und lizenziert sein.

Die IO-Tasks, die mit der S7-SoftSPS verwendet werden sollen, müssen mit dem Beckhoff TwinCAT System Manager konfiguriert werden. Die TwinCatIO.dll kann den E/A-Bereich des PAE/PAA zyklisch auf E/A-Baugruppen lesen/schreiben. Azyklischer Zugriff mittels der Peripheriebefehle ist ebenso möglich wie auch der azyklische Zugriff mit einem SFC/FC.

Um die gewünschten Funktionen in der S7-SoftSPS zu aktivieren sind folgende Schritte erforderlich:

  • Einfügen einer Station im TwinCAT System Manager
  • Anlegen eines Tasks im TwinCAT System Manager
  • Aufrufen der Ads-Funktionen aus dem SPS-Programm

Einfügen einer Station im TwinCAT System Manager

TwinCAT d1.png

Mittels eines Rechtsklicks auf "E/A Geräte" >> "Geräte Suchen..." erscheint ein Dialog mit dem sich eine E/A Baugruppe auswählen lässt (sofern im Netz vorhanden).

TwinCAT d2.png

Nachdem man das gewünschte Gerät ausgewählt hat, fragt der TwinCAT System Manager nach, ob nach neuen Boxen gesucht werden soll.

TwinCAT d3.png

Dieser Frage stimmt man zu, um die vorhandene Peripherie aus der E/A-Baugruppe zu lesen. Die E/A Baugruppe ist nun für den TwinCAT IO Treiber bekannt und kann von diesem angesprochen werden.

Anlegen eines Tasks im TwinCAT System Manager

TwinCAT d4.png

Mit einem Rechtsklicks auf "Zusätzliche Tasks" >> "Task Anfügen..." erstellt man einen neuen Task, mit dem die TwinCatIO.dll der S7-SoftSPS Daten austauscht.

Wichtige Eigenschaften des Tasks

Port: Der Port Nummer 301 dient normalerweise als Prozessabbild für die S7-SoftSPS. Dieser ist auch über einen SFC/FC ansprechbar.

AutoStart: Die S7-SoftSPS kümmert sich selbstständig um das Triggern des Feldbusses und meldet so dem TwinCAT-Treiber, dass sie noch funktionsbereit ist, so dass die Option AutoStart normalerweise nicht gewählt werden sollte. Wenn diese Option gewählt wird, muss der TwinCAT IO-Treiber so konfiguriert werden, dass er selbstständig feststellen kann, ob die SPS noch arbeitet, um gegebenenfalls die Ausgänge der E/A-Baugruppe in einen definierten Zustand zu schalten.


Konfigurieren des Tasks

Um die E/A-Baugruppen ansprechen zu können, müssen die E/A-Punkte mit dem Task verknüpft werden. Mittels eines Rechtsklicks auf "Eingänge" oder "Ausgänge" >> "Variable Einfügen..." können die E/A-Punkte dem Task zugeordnet werden.

TwinCAT d5.png

Je nach vorhandener E/A-Punkt muss der passende Variablentyp ausgewählt werden.

TwinCAT d6.png

Ist die Variable deklariert, muss diese mit der E/A-Baugruppe verknüpft werden. Hierzu betätigt man den Button "Verknüpft m." um die Zuordnung zu treffen.

TwinCAT d7.png

TwinCAT d8.png

Ist nun die gewünschte Anzahl an Variablen mit dem Task verknüpft, muss die Konfiguration aktiviert werden. Danach ist der TwinCAT IO-Task einsatzbereit, sobald in den Run-Modus gewechselt wurde.

Aufrufen von Sonderfunktionen und ADS-Funktionen aus dem SPS-Programm

SFC 14

Mittels des Bausteins DPRD_DAT können Daten aus dem TwinCAT I/O Task gelesen werden

CALL SFC/FC 14
LADDR  := W#16#100 //INPUT WORD
RET_VAL  := MW 0 //RESULT INT
RECORD  := P#M 100.0 BYTE 1 //OUTPUT ANY

Parameter Datentyp Bedeutung
LADDR WORD Startadresse der zu lesenden Daten
RET_VAL INT 0 bei Erfolg
RECORD ANY ANY-Pointer auf gelesenen Daten


SFC 15

Mittels des Bausteins DPWR_DAT können Daten in den TwinCAT I/O Task geschrieben werden

CALL SFC/FC 15
LADDR  := W#16#100 //INPUT WORD
RECORD  := P#M 102.0 BYTE 1 //INPUT ANY
RET_VAL  := MW 0 //RESULT INT

Parameter Datentyp Bedeutung
LADDR WORD Startadresse der zu schreibenden Daten
RECORD ANY ANY-Pointer auf zu schreibende Daten
RET_VAL INT 0 bei Erfolg


ControlSFC

Mittels des Bausteins CONTROL kann auf jeden beliebigen TwinCAT I/O Task zugegriffen werden

CALL SFC/FC 1000
IN0  := FALSE //INPUT BOOL
IN1  := 301 //INPUT INT
IN2  := P#M 104.0 BYTE 1 //RESULT ANY
RET_VAL  := MW 0 //RESULT INT

Parameter Datentyp Bedeutung
IN0 BOOL false = Daten aus beliebigem TwinCAT I/O Task lesen

true = Daten in beliebigen TwinCAT I/O Task schreiben

IN1 INT Portnummer des TwinCAT I/O Tasks, auf dessen E/A Bereich zugegriffen werden soll
IN2 ANY ANY-Pointer auf zu lesende/schreibende Daten mit passender Länge (es sind nur ANY-Pointer vom Typ Byte zulässig)
RET_VAL INT 0 bei Erfolg, ansonsten werden die Rückgabewerte des TwinCAT I/O Treibers direkt durchgereicht

0x0057= ERROR_INVALID_PARAMETER - einer der übergebenen Parameter ist falsch


GetDeviceIdentification

Der Funktionsbaustein GETDEVID erlaubt es die Geräteidentifikationsdaten auszulesen

CALL SFC/FC 1001, DB 1001
EXEC  := M0.0 //INPUT BOOL
TMOUT  := TIME#0D_0H_0M_1S_0MS //INPUT TIME
BUSY  := M 0.1 //OUTPUT BOOL
ERR  := M 0.2 //OUTPUT BOOL
ERRID  := MD 4 //OUTPUT DWORD
DEVID  := P#M 10.0 BYTE 214 //IN_OUT ANY

Parameter Datentyp Bedeutung
IN0 BOOL TRUE startet das Kommando
IN1 TIME Nicht benutzt, da die darunterliegende ADS Funktion den Timeout liefert
OUT2 BOOL Die Daten werden aus dem CX ausgelesen. Nach fehlerfreier Ausführung stehen bei bBusy = FALSE die Daten in der Struktur stDevIdent
OUT3 BOOL Wird TRUE, sobald ein Fehler eintritt
OUT4 DWORD Liefert bei einem gesetzten bError-Ausgang die Fehlernummer
IO5 ANY ST_CxDeviceIdentification (Länge 214 Byte)


AdsRead

Der Funktionsbaustein ADSREAD erlaubt die Ausführung eines ADS-Lesebefehls, um Daten von einem ADS-Gerät anzufordern.

CALL SFC/FC 1002, DB 1002
NETID  := #stringvar //INPUT STRING
PORT  := W#16#0 //INPUT WORD
IDXGRP  := DW#16#0 //INPUT DWORD
IDXOFFS  := DW#16#0 //INPUT DWORD
LEN  := DW#16#0 //INPUT DWORD
DESTADDR  := P#M 10 BYTE 1 //INPUT ANY
READ  := M 0.0 //INPUT BOOL
TMOUT  := TIME#0D_0H_0M_1S_0MS //INPUT TIME
BUSY  := M 0.1 //OUTPUT BOOL
ERR  := M 0.2 //OUTPUT BOOL
ERRID  := MD 4 //OUTPUT DWORD

Parameter Datentyp Bedeutung
NETID STRING Ist ein String, der die AMS-Netzwerkkennung des Zielgerätes enthält, an das der ADS-Befehl gerichtet wird.
PORT WORD Enthält die Portnummer des ADS-Gerätes.
IDXGRP DWORD Enthält die Index-Gruppennummer ( 32bit, unsigned ) des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.
IDXOFFS DWORD Enthält die Index-Offsetummer ( 32bit, unsigned ) des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.
LEN DWORD Enthält die Anzahl der zu lesenden Daten in Bytes.
DESTADDR ANY Pointer auf Puffer, der die gelesenen Daten aufnehmen soll. Der Puffer muss groß genug sein um "LEN" Bytes aufzunehmen. Der Puffer kann eine Einzelvariable, ein Array oder eine Struktur sein.
READ BOOL TRUE an diesem Eingang löst den ADS-Befehl aus.
TMOUT TIME Gibt die Zeit bis zum Abbrechen der Funktion an.
BUSY BOOL Dieser Ausgang bleibt solange auf TRUE, bis der Baustein eine Befehlsanforderung ausführt, längstens aber für die Dauer der an dem 'Timeout'-Eingang angelegten Zeit. Während Busy = TRUE wird an den Eingängen kein neuer Befehl angenommen. Bitte beachten Sie, dass nicht die Ausführung des Dienstes, sondern nur dessen Annahme zeitlich überwacht wird.
ERR BOOL Dieser Ausgang wird auf TRUE geschaltet, wenn bei der Ausführung eines Befehls ein Fehler aufgetreten ist. Der befehlsspezifische Fehlercode ist in 'ErrorId' enthalten. Wenn der Baustein einen Timeout-Fehler hat, so ist 'Error' = TRUE und 'ErrorId' = 1861 (Hexadezimal 0x745). Wird durch das Ausführen eines Befehls an den Eingängen auf FALSE zurückgesetzt.
ERRID DWORD Enthält den befehlsspezifischen Fehlercode des zuletzt ausgeführten Befehls. Wird durch das Ausführen eines Befehls an den Eingängen auf 0 zurückgesetzt.


AdsWrite

Der Baustein erlaubt die Ausführung eines ADS-Schreibbefehls, um Daten zu einem ADS-Gerät zu übermitteln.

CALL SFC/FC 1003, DB 1003
NETID  := #stringvar //INPUT STRING
PORT  := W#16#0 //INPUT WORD
IDXGRP  := DW#16#0 //INPUT DWORD
IDXOFFS  := DW#16#0 //INPUT DWORD
LEN  := DW#16#0 //INPUT DWORD
SRCADDR  := P#M 10.0 BYTE 1 //INPUT ANY
WRITE  := M 0.0 //INPUT BOOL
TMOUT  := TIME#0D_0H_0M_1S_0MS //INPUT TIME
BUSY  := M 0.1 //OUTPUT BOOL
ERR  := M 0.2 //OUTPUT BOOL
ERRID  := MD 4 //OUTPUT DWORD

Parameter Datentyp Bedeutung
NETID STRING Ist ein String, der die AMS-Netzwerkkennung des Zielgerätes enthält, an das der ADS-Befehl gerichtet wird.
PORT WORD Enthält die Portnummer des ADS-Gerätes, an das der Befehl gerichtet ist.
IDXGRP DWORD Enthält die Index-Gruppennummer ( 32bit, unsigned ) des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.
IDXOFFS DWORD Enthält die Index-Offsetnummer ( 32bit, unsigned ) des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.
LEN DWORD Enthält die Anzahl der zu lesenden Daten in Bytes.
SRCADDR ANY Pointer auf Puffer, der die zu schreibenden Daten enthält. Der Puffer muss mindestens "LEN" Bytes Daten enthalten. Der Puffer kann eine Einzelvariable, ein Array oder eine Struktur sein.
WRITE BOOL TRUE an diesem Eingang löst den ADS-Befehl aus.
TMOUT TIME Gibt die Zeit bis zum Abbrechen der Funktion an.
BUSY BOOL Bei der Aktivierung des Funktionsbausteins wird dieser Ausgang gesetzt und bleibt gesetzt, bis eine Rückmeldung erfolgt.
ERR BOOL Sollte ein ADS-Fehler bei der Übertragung des Kommandos erfolgen, wird dieser Ausgang gesetzt, nachdem der BUSY-Ausgang zurückgesetzt wurde.
ERRID DWORD Liefert bei einem gesetzten ERR-Ausgang die ADS- oder die gerätespezifische Fehlernummer.