ADS-OCX-Applikation zurücksetzen
Nach einem Programmfehler kann oft nicht, wie sonst üblich, über die Bedienfunktion "Start -> Programm Reset" die Applikation beendet werden. Folgende Meldung des Debuggers ist die Folge:
Die Ursache liegt darin, dass bei der Benutzung des ADS-OCX eine Client-Server Verbindung zum TwinCAT Router erzeugt wird, die beim Beenden der Applikation abgebaut werden, muss. Die Delphi-Applikation kann über den Menübefehl "Programm Reset" nicht beendet werden, weil zu diesem Zeitpunkt eine Verbindung zum TwinCAT Router besteht. In der Applikation wird die Verbindung durch Zuweisung der AdsAmsNetId und der Portnummer erzeugt.
Es gibt folgende Möglichkeiten, die Applikation zu beenden, ohne den Rechner neu starten zu müssen:
- Zuerst den Laufzeitfehler mit OK bestätigen, dann TwinCAT System Stop über die Taskleiste aufrufen und dann Delphi-Applikation zurücksetzen. Es werden dabei bestehende Verbindungen zu den Clients abgebaut. Nachteil: Das TwinCAT System und die SPS muss danach neu gestartet werden;
- Zuerst den Laufzeitfehler mit OK bestätigen und Router-Cleanup über die Taskleiste aufrufen und dann Delphi-Applikation zurücksetzen;
- Exception-Handling benutzen. Über die Methode AdsAmsDisconnect() kann die Verbindung zum Router explizit abgebaut werden;
- try n:=8; Switch[n].Tag:=0; // Dieser Index ist unzulässig except on EAccessViolation do begin AdsOcxSPS.AdsAmsDisconnect(); Application.Terminate(); end; end;