Integration in TwinCAT und Test
Nachfolgend wird beschrieben, wie SPS-Server und -Client vorbereitet und gestartet werden. Die SPS-Beispiele werden als TwinCAT‑3‑SPS‑Projektdateien zur Verfügung gestellt. Um ein SPS-Projekt in das TwinCAT XAE zu importieren, erstellen Sie zunächst eine neue TwinCAT 3 Solution. Wählen Sie anschließend im Kontextmenü des PLC-Knoten den Befehl Add Existing Item und in dem sich öffnenden Dialog die heruntergeladenen Beispieldatei (Plc 3.x Project archive (*.tpzip) als Dateityp auswählen). Nach Bestätigung des Dialogs wird das SPS-Projekt der Solution hinzugefügt.
Beispiel SPS-Server
Erstellen Sie im TwinCAT XAE eine neue TwinCAT 3 Solution und importieren Sie das TCP/IP‑Server‑Projekt. Wählen Sie ein Zielsystem. Auf dem Zielsystem muss die Function ebenfalls installiert sein und es müssen Lizenzen für TF6310 generiert worden sein. Lassen Sie die TwinCAT 3 Solution geöffnet.
PROGRAM MAIN
VAR
fbServer : FB_LocalServer := ( sLocalHost := '127.0.0.1' (*own IP address!*), nLocalPort := 200 );
bEnableServer : BOOL := TRUE;
fbSocketCloseAll : FB_SocketCloseAll := ( sSrvNetID := '', tTimeout := DEFAULT_ADS_TIMEOUT );
bCloseAll : BOOL := TRUE;
END_VAR
IF bCloseAll THEN (*On PLC reset or program download close all old connections *)
bCloseAll := FALSE;
fbSocketCloseAll( bExecute:= TRUE );
ELSE
fbSocketCloseAll( bExecute:= FALSE );
END_IF
IF NOT fbSocketCloseAll.bBusy THEN
fbServer( bEnable := bEnableServer );
END_IF
Beispiel SPS-Client
Importieren Sie das TCP/IP‑Client‑Projekt als zweites SPS-Projekt in die TwinCAT 3 Solution. Verlinken Sie dieses SPS-Projekt mit einer anderen Task als das Server-Beispiel. Die IP-Adresse des Servers muss an Ihr System angepasst werden (Initialisierungswerte der sRemoteHost-Variable). In diesem Fall ist der Server auf demselben PC, tragen Sie also 127.0.0.1. ein. Aktivieren Sie die Konfiguration, loggen sich ein und starten Sie das Server- und anschließend das Client-SPS-Projekt.
PROGRAM MAIN
VAR
fbClient1 : FB_LocalClient := ( sRemoteHost:= '127.0.0.1' (* IP address of remote server! *), nRemotePort:= 200 );
fbClient2 : FB_LocalClient := ( sRemoteHost:= '127.0.0.1', nRemotePort:= 200 );
fbClient3 : FB_LocalClient := ( sRemoteHost:= '127.0.0.1', nRemotePort:= 200 );
fbClient4 : FB_LocalClient := ( sRemoteHost:= '127.0.0.1', nRemotePort:= 200 );
fbClient5 : FB_LocalClient := ( sRemoteHost:= '127.0.0.1', nRemotePort:= 200 );
bEnableClient1 : BOOL := TRUE;
bEnableClient2 : BOOL := FALSE;
bEnableClient3 : BOOL := FALSE;
bEnableClient4 : BOOL := FALSE;
bEnableClient5 : BOOL := FALSE;
fbSocketCloseAll : FB_SocketCloseAll := ( sSrvNetID := '', tTimeout := DEFAULT_ADS_TIMEOUT );
bCloseAll : BOOL := TRUE;
nCount : UDINT;
END_VAR
IF bCloseAll THEN (*On PLC reset or program download close all old connections *)
bCloseAll := FALSE;
fbSocketCloseAll( bExecute:= TRUE );
ELSE
fbSocketCloseAll( bExecute:= FALSE );
END_IF
IF NOT fbSocketCloseAll.bBusy THEN
nCount := nCount + 1;
fbClient1( bEnable := bEnableClient1, sToServer := CONCAT( 'CLIENT1-', UDINT_TO_STRING( nCount ) ) );
fbClient2( bEnable := bEnableClient2, sToServer := CONCAT( 'CLIENT2-', UDINT_TO_STRING( nCount ) ) );
fbClient3( bEnable := bEnableClient3, sToServer := CONCAT( 'CLIENT3-', UDINT_TO_STRING( nCount ) ) );
fbClient4( bEnable := bEnableClient4 );
fbClient5( bEnable := bEnableClient5 );
END_IF
Beim Setzen einer der bEnableCientX-Variablen können bis zu fünf Client-Instanzen aktiviert werden. Jeder Client sendet pro Sekunde einen String zum Server (default: 'TEST'). Der gleiche String wird vom Server zum Client zurückgesendet (Echo-Server). Für den Test wird bei den ersten drei Instanzen ein String mit einem Zählerwert automatisch generiert. Der erste Client wird beim Programmstart automatisch aktiviert. Setzen Sie die bEnableCilent4-Variable im Client-Projekt auf TRUE. Der neue Client versucht dann, eine Verbindung zum Server aufzubauen. Beim Erfolg wird der 'TEST'-String zyklisch gesendet. Öffnen Sie jetzt die fbClient4-Instanz des FB_LocalClient-Funktionsbausteins. Öffnen Sie den Dialog zum Schreiben der sToString-Variablen mit einem Doppelklick und ändern Sie den Wert der Stringvariablen z. B. auf 'Hallo'.
Schließen Sie den Dialog mit OK. Forcen Sie den neuen Wert in die SPS. Kurz danach ist der vom Server zurückgegebene Wert online zu sehen.
In dem Server-Projekt öffnen Sie jetzt die fbServer-Instanz des FB_LocalServer-Funktionsbausteins. Unser String: 'Hallo' kann in den Online-Daten des Servers gesehen werden.