FB_SocketCloseAll
Beim TwinCAT Restart oder TwinCAT Stopp wird auch der TwinCAT TCP/IP Connection Server gestoppt. Alle bereits geöffneten Sockets (TCP/IP und UDP Verbindungshandles) werden dabei automatisch geschlossen. Nach einem "PLC reset" oder "Rebuild all..." oder einem neuen "Download" wird das SPS-Programm zurückgesetzt und die Informationen über die bereits geöffneten Sockets (Verbindungshandles) sind in der SPS nicht mehr vorhanden. Die geöffneten Verbindungen können dann nicht mehr ordnungsgemäß geschlossen werden.
Mit dem Funktionsbaustein FB_SocketCloseAll können alle Verbindungshandles (TCP/IP und UDP Sockets) geschlossen werden, die von einem SPS-Laufzeitsystem geöffnet wurden. D.h. wenn Sie FB_SocketCloseAll in einer der Tasks des ersten Laufzeitsystems (Port 801) aufrufen, werden alle Sockets geschlossen, die in dem ersten Laufzeitsystem geöffnet wurden. In jedem SPS-Laufzeitsystem, in dem die Socket-Funktionsbausteine benutzt werden, sollte eine Instanz von FB_SocketCloseAll beim SPS-Start aufgerufen werden (siehe weiter unten im Text).
VAR_INPUT
VAR_INPUT
sSrvNetId : T_AmsNetId := '';
bExecute : BOOL;
tTimeout : TIME := T#5s;
END_VAR
sSrvNetId: String mit der Netzwerkadresse des TwinCAT TCP/IP Connection Servers. Für den lokalen Rechner (default) kann auch ein Leerstring angegeben werden.
bExecute: Über eine positive Flanke an diesem Eingang wird der Baustein aktiviert.
tTimeout: Maximale Zeit, die bei der Ausführung des Funktionsbausteins nicht überschritten werden darf.
VAR_OUTPUT
VAR_OUTPUT
bBusy :BOOL;
bError :BOOL;
nErrId :UDINT;
END_VAR
bBusy: Dieser Ausgang wird bei der Aktivierung des Funktionsbausteins gesetzt und bleibt gesetzt, bis eine Rückmeldung erfolgt.
bError: Dieser Ausgang wird, nachdem der bBusy-Ausgang zurückgesetzt wurde, gesetzt, sollte ein Fehler bei der Übertragung des Kommandos erfolgen.
nErrId: Liefert bei einem gesetzten bError-Ausgang die TwinCAT TCP/IP Connection Server Fehlernummer.
Beispiel für eine Implementierung in ST:
Durch den folgenden Programmcode werden die vor einem "SPS Reset" oder "Download" geöffneten Verbindungshandles (Sockets) beim erneuten SPS Start ordnungsgemäß geschlossen.
PROGRAM MAIN
VAR
fbSocketCloseAll : FB_SocketCloseAll;
bCloseAll : BOOL := TRUE;
END_VAR
IF bCloseAll THEN(*On PLC reset or program download close all old connections *)
bCloseAll := FALSE;
fbSocketCloseAll( sSrvNetId:= '', bExecute:= TRUE, tTimeout:= T#10s );
ELSE
fbSocketCloseAll( bExecute:= FALSE );
END_IFIFNOT fbSocketCloseAll.bBusy THEN(*...
... continue program execution...
...*)
END_IF
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken |
---|---|---|
Alle TwinCAT v2.8.0 Versionen und höher | PC oder CX (x86) | TcpIp.Lib ( Standard.Lib; TcBase.Lib; TcSystem.Lib werden automatisch eingebunden ) |
TwinCAT v2.10.0 Build >= 1301 | CX (ARM) |