Arbeiten mit Handles von SPS-Variablen

Systemvoraussetzungen:

Alle benötigten Handles können ein Mal beim Start der Applikation angefordert werden und beim Beenden der Applikation freigegeben werden. Ständiges Anfordern und Freigeben der Handles verursacht unnötige Belastung des Systems.

Die bereits angeforderten Handles werden beim TwinCAT Restart ungültig und müssen neu angefordert werden, ebenso nach jedem 'Rebuild All' in der SPS. Bei 'Rebuild All' wird in das Laufzeitsystem ein komplett neues Programm geladen, dadurch werden alle bereits angeforderten Handles ungültig und und von TwinCAT automatisch freigegeben. Die nicht mehr benötigten Handles müssen immer freigegeben werden. Dies kann aber nur dann erfolgen, wenn das TwinCAT System noch läuft. Wurde das TwinCAT System bereits gestoppt, dann werden alle Handles automatisch freigegeben.

Mit dem ersten Laufzeitsystem auf dem lokalen PC verbinden und das Handle der SPS-Variablen holen:

procedure TForm1.FormCreate(Sender: TObject);
var adsResult : Integer;
begin
   AdsOcx1.AdsAmsServerNetId := AdsOcx1.AdsAmsClientNetId;
   AdsOcx1.AdsAmsServerPort := 801;
   adsResult := AdsOcx1.AdsCreateVarHandle( 'MAIN.VARINTARRAY', hVar );
   if adsResult <> 0 then
      ShowMessage( Format( 'AdsCreateVarHandle() error:%d', [adsResult] ) );
end;

Beim Beenden der Applikation Handle freigeben:

procedure TForm1.FormDestroy(Sender: TObject);
var adsResult : Integer;
begin
   adsResult := AdsOcx1.AdsDeleteVarHandle( hVar );
   if AdsResult <> 0 then
      ShowMessage( Format( 'AdsDeleteVarHandle() error:%d', [adsResult] ) );
   hVar := 0;
end;

Sprache / IDE

Beispielprogramm auspacken

Delphi XE2

Sample05.exe

Delphi 7 oder höher (classic)