Erweiterte ADS-Funktionsbausteine
Die erweiterten ADS-Funktionsbausteine ermöglichen den Aufbau einer Client-Server-Kommunikation zwischen einem ADS-Gerät und einer SPS-Task. Bei dem ADS-Gerät kann sich z.B. um eine Windows-Applikation ( nutzt die AdsDLL/AdsOcx ) oder ein anderes SPS-Laufzeitsystem handeln. Die Kommunikation zwischen dem ADS-Gerät und der SPS-Task wird mittels folgenden Dienstprimitiven abgewickelt:
- Request
- Indication
- Response
- Confirmation
Die Kommunikation zwischen einem ADS-Gerät und einer SPS-Task hat folgenden Ablauf: Ein ADS-Gerät sendet ein Request ( Anfrage ) an das Zielgerät ( SPS-Task ). Diese Anfrage wird durch eine Indication in dem Zielgerät registriert. Das Zielgerät ( SPS-Task ) führt darauf einen entsprechenden Dienst aus. Der auszuführende Dienst wird über die Index-Group/Offset Parameter verschlüsselt. Danach sendet die SPS-Task ein Response ( Antwort ) an das ADS-Gerät. Das Response wird von dem ADS-Quellgerät als Confirmation registriert.
Pro SPS-Task kann sinnvoll nur eine Instanz des Indication- und Response-Funktionsbausteins benutzt werden (eine Instanz von ADSREADIND, ADSREADRES, ADSWRITEIND, ADSWRITERES, ADSRDWRTIND und ADSRDWRTRES ). Entsprechend den verfügbaren ADS-Diensten: READ, WRITE und READ & WRITE gibt es zu jedem Dienst einen entsprechenden Indication bzw. Response Funktionsbaustein.
Dienst | Name | Beschreibung |
---|---|---|
READ | ADSREAD-Indication. | |
ADSREAD-Response | ||
WRITE | ADSWRITE-Indication | |
ADSWRITE-Response | ||
READ & WRITE | ADS-READ & WRITE-Indication | |
ADS-READ & WRITE-Response |
Die ADS-Geräte werden über eine Portadresse und eine Netzwerkadresse ( NETID ) adressiert. Die Zieladresse der SPS-Task wird auf folgende Weise gebildet:
Portadresse der SPS-Task = Portnummer des Laufzeitsystems + Tasknummer die angesprochen werden soll
Die aktuelle Tasknummer kann mit dem GETCURTASKINDEX-Funktionsbaustein ermittelt werden.
Beispiel:
Die erste SPS-Task des ersten SPS-Laufzeitsystems auf einem lokalen Rechner soll angesprochen werden. Die Portnummer der SPS-Task ergibt sich aus:
PORT = 801 + 1 = 802
NETID = '' ( Leerstring )
Bemerkungen:
- Damit ein Request an die SPS-Task weitergeleitet wird, muss in dem IndexGroup-Parameter beim Request das höchstwertige Bit gesetzt werden z.B. IG:=0x80000001.
- Jede SPS-Task besitzt 3 Fifos in die die ankommenden Requests (Indications) zuerst abgelegt werden. Das heißt es gibt einen ADSREADIND-Fifo, ADSWRITEIND-Fifo und einen ADSRDWRTIND-Fifo.
In jedem Fifo können maximal 10 Indications gespeichert werden bis diese abgearbeitet wurden (bis Response abgeschickt wurde). Wenn Sie z.B. gleichzeitig 12 ADSREAD-Requests an eine SPS-Task senden, dann werden 10 Requests als Indications in dem Fifo abgelegt und zwei mit der ADS-Fehlermeldung 1814 (0x716) quittiert (verworfen). In diesem Fall müssen Sie den Fehlercode auswerten und die zwei fehlgeschlagenen ADSREAD-Requests gegebenenfalls wiederholen. Durch den Aufruf der ADSxxxxxxIND-Instanz werden die Indications einzeln aus dem dazugehörigen Fifo rausgenommen. Erst danach können neue Indications erfolgreich in dem Fifo abgelegt werden.