S7-SoftSPS:TwinCAT I/O Konfiguration: Unterschied zwischen den Versionen

Aus IBHsoftec Wiki
Wechseln zu: Navigation, Suche
 
(6 dazwischenliegende Versionen des gleichen Benutzers werden nicht angezeigt)
Zeile 6: Zeile 6:
 
Um die gewünschten Funktionen in der ''S7-SoftSPS'' zu aktivieren sind folgende Schritte erforderlich:
 
Um die gewünschten Funktionen in der ''S7-SoftSPS'' zu aktivieren sind folgende Schritte erforderlich:
  
* [[#Station_Einf_gen|Einfügen einer Station im TwinCAT System Manager]]
+
* Einfügen einer Station im TwinCAT System Manager
* [[#Task_Anlegen|Anlegen eines Tasks im TwinCAT System Manager]]
+
* Anlegen eines Tasks im TwinCAT System Manager
* [[#ADSvonSPS|Aufrufen der Ads-Funktionen aus dem SPS-Programm]]
+
* Aufrufen der Ads-Funktionen aus dem SPS-Programm
  
 
=== Einfügen einer Station im TwinCAT System Manager ===
 
=== Einfügen einer Station im TwinCAT System Manager ===
  
[[Image:../images/TwinCAT%20d1.png|frame|none]]
+
[[Image:TwinCAT%20d1.png|frame|none]]
  
 
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).
 
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).
  
[[Image:../images/TwinCAT%20d2.png|frame|none]]
+
[[Image:TwinCAT%20d2.png|frame|none]]
  
 
Nachdem man das gewünschte Gerät ausgewählt hat, fragt der TwinCAT System Manager nach, ob nach neuen Boxen gesucht werden soll.
 
Nachdem man das gewünschte Gerät ausgewählt hat, fragt der TwinCAT System Manager nach, ob nach neuen Boxen gesucht werden soll.
  
[[Image:../images/TwinCAT%20d3.png|frame|none]]
+
[[Image:TwinCAT%20d3.png|frame|none]]
  
 
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.
 
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.
Zeile 26: Zeile 26:
 
=== Anlegen eines Tasks im TwinCAT System Manager ===
 
=== Anlegen eines Tasks im TwinCAT System Manager ===
  
[[Image:../images/TwinCAT%20d4.png|frame|none]]
+
[[Image:TwinCAT%20d4.png|frame|none]]
  
 
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.
 
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.
Zeile 35: Zeile 35:
  
 
'''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.
 
'''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'''
 
'''Konfigurieren des Tasks'''
Zeile 40: Zeile 41:
 
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.
 
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.
  
[[Image:../images/TwinCAT%20d5.png|frame|none]]
+
[[Image:TwinCAT%20d5.png|frame|none]]
  
 
Je nach vorhandener E/A-Punkt muss der passende Variablentyp ausgewählt werden.
 
Je nach vorhandener E/A-Punkt muss der passende Variablentyp ausgewählt werden.
  
[[Image:../images/TwinCAT%20d6.png|frame|none]]
+
[[Image:TwinCAT%20d6.png|frame|none]]
  
 
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.
 
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.
  
[[Image:../images/TwinCAT%20d7.png]] [[Image:../images/TwinCAT%20d8.png]]
+
[[Image:TwinCAT%20d7.png]]  
 +
 
 +
[[Image:TwinCAT%20d8.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.
 
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.
Zeile 57: Zeile 60:
  
 
Mittels des Bausteins DPRD_DAT können Daten aus dem TwinCAT I/O Task gelesen werden
 
Mittels des Bausteins DPRD_DAT können Daten aus dem TwinCAT I/O Task gelesen werden
 
+
<code>
 
{|
 
{|
 
|-
 
|-
Zeile 68: Zeile 71:
 
| RECORD || := P#M 100.0 BYTE 1  || //OUTPUT ANY
 
| RECORD || := P#M 100.0 BYTE 1  || //OUTPUT ANY
 
|}
 
|}
 
+
</code>
  
 
{| class="wikitable"
 
{| class="wikitable"
Zeile 86: Zeile 89:
  
 
Mittels des Bausteins DPWR_DAT können Daten in den TwinCAT I/O Task geschrieben werden
 
Mittels des Bausteins DPWR_DAT können Daten in den TwinCAT I/O Task geschrieben werden
 
+
<code>
 
{|
 
{|
 
|-
 
|-
Zeile 97: Zeile 100:
 
| RET_VAL || := MW 0 || //RESULT INT
 
| RET_VAL || := MW 0 || //RESULT INT
 
|}
 
|}
 
+
</code>
  
 
{| class="wikitable"
 
{| class="wikitable"
Zeile 115: Zeile 118:
  
 
Mittels des Bausteins CONTROL kann auf jeden beliebigen TwinCAT I/O Task zugegriffen werden
 
Mittels des Bausteins CONTROL kann auf jeden beliebigen TwinCAT I/O Task zugegriffen werden
 
+
<code>
 
{|
 
{|
 
|-
 
|-
Zeile 128: Zeile 131:
 
| RET_VAL || := MW 0 || //RESULT INT
 
| RET_VAL || := MW 0 || //RESULT INT
 
|}
 
|}
 
+
</code>
  
 
{| class="wikitable"
 
{| class="wikitable"
Zeile 151: Zeile 154:
  
 
Der Funktionsbaustein GETDEVID erlaubt es die Geräteidentifikationsdaten auszulesen
 
Der Funktionsbaustein GETDEVID erlaubt es die Geräteidentifikationsdaten auszulesen
 
+
<code>
 
{|
 
{|
 
|-
 
|-
 
| CALL || SFC/FC 1001, DB 1001  
 
| CALL || SFC/FC 1001, DB 1001  
 
|-
 
|-
|style="width:8em"|  EXEC ||style="width:12em"|  := M0.0  ||  //INPUT BOOL
+
|style="width:8em"|  EXEC ||style="width:15em"|  := M0.0  ||  //INPUT BOOL
 
|-
 
|-
 
| TMOUT || := TIME#0D_0H_0M_1S_0MS || //INPUT TIME
 
| TMOUT || := TIME#0D_0H_0M_1S_0MS || //INPUT TIME
 
|-
 
|-
| BUSY || := M0.1 || //OUTPUT BOOL
+
| BUSY || := M 0.1 || //OUTPUT BOOL
 
|-
 
|-
| ERR || := M0.21 || //OUTPUT BOOL
+
| ERR || := M 0.2 || //OUTPUT BOOL
 
|-
 
|-
 
| ERRID || := MD 4 || //OUTPUT DWORD
 
| ERRID || := MD 4 || //OUTPUT DWORD
Zeile 168: Zeile 171:
 
| DEVID || := P#M 10.0 BYTE 214 || //IN_OUT ANY
 
| DEVID || := P#M 10.0 BYTE 214 || //IN_OUT ANY
 
|}
 
|}
 
+
</code>
  
 
{| class="wikitable"
 
{| class="wikitable"
Zeile 192: Zeile 195:
  
 
Der Funktionsbaustein ADSREAD erlaubt die Ausführung eines ADS-Lesebefehls, um Daten von einem ADS-Gerät anzufordern.
 
Der Funktionsbaustein ADSREAD erlaubt die Ausführung eines ADS-Lesebefehls, um Daten von einem ADS-Gerät anzufordern.
 
+
<code>
 
{|
 
{|
 
|-
 
|-
 
| CALL || SFC/FC 1002, DB 1002  
 
| CALL || SFC/FC 1002, DB 1002  
 
|-
 
|-
|style="width:8em"|  NETID ||style="width:12em"|  := #stringvar  ||  //INPUT STRING
+
|style="width:8em"|  NETID ||style="width:15em"|  := #stringvar  ||  //INPUT STRING
 
|-
 
|-
 
| PORT || := W#16#0 || //INPUT WORD
 
| PORT || := W#16#0 || //INPUT WORD
Zeile 209: Zeile 212:
 
| DESTADDR || := P#M 10 BYTE 1 || //INPUT ANY
 
| DESTADDR || := P#M 10 BYTE 1 || //INPUT ANY
 
|-
 
|-
| READ || := M0.0 || //INPUT BOOL
+
| READ || := M 0.0 || //INPUT BOOL
 
|-
 
|-
 
| TMOUT || := TIME#0D_0H_0M_1S_0MS || //INPUT TIME
 
| TMOUT || := TIME#0D_0H_0M_1S_0MS || //INPUT TIME
 
|-
 
|-
| BUSY || := M0.1 || //OUTPUT BOOL
+
| BUSY || := M 0.1 || //OUTPUT BOOL
 
|-
 
|-
| ERR || := M0.2 || //OUTPUT BOOL
+
| ERR || := M 0.2 || //OUTPUT BOOL
 
|-
 
|-
 
| ERRID || := MD 4 || //OUTPUT DWORD
 
| ERRID || := MD 4 || //OUTPUT DWORD
 
|}
 
|}
 
+
</code>
  
 
{| class="wikitable"
 
{| class="wikitable"
Zeile 250: Zeile 253:
  
  
'''AdsWrite'''<br />
+
'''AdsWrite'''
Der Baustein erlaubt die Ausführung eines ADS-Schreibbefehls, um Daten zu einem ADS-Gerät zu übermitteln.
+
  
<table>
+
Der Baustein erlaubt die Ausführung eines ADS-Schreibbefehls, um Daten zu einem ADS-Gerät zu übermitteln.
<tbody>
+
<code>
<tr class="odd">
+
{|
<td align="left">CALL</td>
+
|-
<td align="left">SFB/FB 1003, DB 1003</td>
+
| CALL || SFC/FC 1003, DB 1003  
<td align="left"></td>
+
|-
</tr>
+
|style="width:8em"NETID ||style="width:15em":= #stringvar ||  //INPUT STRING
<tr class="even">
+
|-
<td align="left">NETID</td>
+
| PORT || := W#16#0 || //INPUT WORD
<td align="left">:= #stringvar</td>
+
|-
<td align="left">//INPUT STRING</td>
+
| IDXGRP || := DW#16#0 || //INPUT DWORD
</tr>
+
|-
<tr class="odd">
+
| IDXOFFS || := DW#16#0 || //INPUT DWORD
<td align="left">PORT</td>
+
|-
<td align="left">:= W#16#0</td>
+
| LEN || := DW#16#0 || //INPUT DWORD
<td align="left">//INPUT WORD</td>
+
|-
</tr>
+
| SRCADDR || := P#M 10.0 BYTE 1 || //INPUT ANY
<tr class="even">
+
|-
<td align="left">IDXGRP</td>
+
| WRITE || := M 0.0 || //INPUT BOOL
<td align="left">:= DW#16#0</td>
+
|-
<td align="left">//INPUT DWORD</td>
+
| TMOUT || := TIME#0D_0H_0M_1S_0MS || //INPUT TIME
</tr>
+
|-
<tr class="odd">
+
| BUSY || := M 0.1 || //OUTPUT BOOL
<td align="left">IDXOFFS</td>
+
|-
<td align="left">:= DW#16#0</td>
+
| ERR || := M 0.2 || //OUTPUT BOOL
<td align="left">//INPUT DWORD</td>
+
|-
</tr>
+
| ERRID || := MD 4 || //OUTPUT DWORD
<tr class="even">
+
|}
<td align="left">LEN</td>
+
</code>
<td align="left">:= DW#16#0</td>
+
<td align="left">//INPUT DWORD</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">SRCADDR</td>
+
<td align="left">:= P#M 10.0 BYTE 1</td>
+
<td align="left">//INPUT ANY</td>
+
</tr>
+
<tr class="even">
+
<td align="left">WRITE</td>
+
<td align="left">:= M0.0</td>
+
<td align="left">//INPUT BOOL</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">TMOUT</td>
+
<td align="left">:= TIME#0D_0H_0M_1S_0MS</td>
+
<td align="left">//INPUT TIME</td>
+
</tr>
+
<tr class="even">
+
<td align="left">BUSY</td>
+
<td align="left">:= M0.1</td>
+
<td align="left">//OUTPUT BOOL</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">ERR</td>
+
<td align="left">:= M0.2</td>
+
<td align="left">//OUTPUT BOOL</td>
+
</tr>
+
<tr class="even">
+
<td align="left">ERRID</td>
+
<td align="left">:= MD 4</td>
+
<td align="left">//OUTPUT DWORD</td>
+
</tr>
+
</tbody>
+
</table>
+
  
<br />
+
{| class="wikitable"
 
+
|-
 
+
! Parameter !! Datentyp !! Bedeutung
<table>
+
|-
<tbody>
+
|style="width:9em"| NETID ||style="width:9em"| STRING || Ist ein String, der die AMS-Netzwerkkennung des Zielgerätes enthält, an das der ADS-Befehl gerichtet wird.
<tr class="odd">
+
|-
<td align="left">Parameter</td>
+
| PORT || WORD || Enthält die Portnummer des ADS-Gerätes, an das der Befehl gerichtet ist.  
<td align="left">Datentyp</td>
+
|-
<td align="left">Bedeutung</td>
+
| 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.
</tr>
+
|-
<tr class="even">
+
| 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.
<td align="left">NETID</td>
+
|-
<td align="left">STRING</td>
+
| LEN || DWORD || Enthält die Anzahl der zu lesenden Daten in Bytes.
<td align="left">Ist ein String, der die AMS-Netzwerkkennung des Zielgerätes enthält, an das der ADS-Befehl gerichtet wird.</td>
+
|-
</tr>
+
| 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.
<tr class="odd">
+
|-
<td align="left">PORT</td>
+
| WRITE || BOOL || TRUE an diesem Eingang löst den ADS-Befehl aus.
<td align="left">WORD</td>
+
|-
<td align="left">Enthält die Portnummer des ADS-Gerätes, an das der Befehl gerichtet ist.</td>
+
| TMOUT || TIME || Gibt die Zeit bis zum Abbrechen der Funktion an.
</tr>
+
|-
<tr class="even">
+
| BUSY || BOOL ||Bei der Aktivierung des Funktionsbausteins wird dieser Ausgang gesetzt und bleibt gesetzt, bis eine Rückmeldung erfolgt.
<td align="left">IDXGRP</td>
+
|-
<td align="left">DWORD</td>
+
| ERR || BOOL || Sollte ein ADS-Fehler bei der Übertragung des Kommandos erfolgen, wird dieser Ausgang gesetzt, nachdem der BUSY-Ausgang zurückgesetzt wurde.
<td align="left">Enthält die Index-Gruppennummer ( 32bit, unsigned ) des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.</td>
+
|-
</tr>
+
| ERRID || DWORD || Liefert bei einem gesetzten ERR-Ausgang die ADS- oder die gerätespezifische Fehlernummer.
<tr class="odd">
+
|}
<td align="left">IDXOFFS</td>
+
<td align="left">DWORD</td>
+
<td align="left">Enthält die Index-Offsetnummer ( 32bit, unsigned ) des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.</td>
+
</tr>
+
<tr class="even">
+
<td align="left">LEN</td>
+
<td align="left">DWORD</td>
+
<td align="left">Enthält die Anzahl der zu lesenden Daten in Bytes.</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">SRCADDR</td>
+
<td align="left">ANY</td>
+
<td align="left">Pointer auf Puffer, der die zu schreibenden Daten enthält. Der Puffer muss mindestens &quot;LEN&quot; Bytes Daten enthalten. Der Puffer kann eine Einzelvariable, ein Array oder eine Struktur sein.</td>
+
</tr>
+
<tr class="even">
+
<td align="left">WRITE</td>
+
<td align="left">BOOL</td>
+
<td align="left">TRUE an diesem Eingang löst den ADS-Befehl aus.</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">TMOUT</td>
+
<td align="left">TIME</td>
+
<td align="left">Gibt die Zeit bis zum Abbrechen der Funktion an.</td>
+
</tr>
+
<tr class="even">
+
<td align="left">BUSY</td>
+
<td align="left">BOOL</td>
+
<td align="left">Bei der Aktivierung des Funktionsbausteins wird dieser Ausgang gesetzt und bleibt gesetzt, bis eine Rückmeldung erfolgt.</td>
+
</tr>
+
<tr class="odd">
+
<td align="left">ERR</td>
+
<td align="left">BOOL</td>
+
<td align="left">Sollte ein ADS-Fehler bei der Übertragung des Kommandos erfolgen, wird dieser Ausgang gesetzt, nachdem der BUSY-Ausgang zurückgesetzt wurde.</td>
+
</tr>
+
<tr class="even">
+
<td align="left">ERRID</td>
+
<td align="left">DWORD</td>
+
<td align="left">Liefert bei einem gesetzten ERR-Ausgang die ADS- oder die gerätespezifische Fehlernummer.</td>
+
</tr>
+
</tbody>
+
</table>
+

Aktuelle Version vom 13. Dezember 2012, 08:43 Uhr

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.