Array in die SPS schreiben oder aus der SPS lesen
Systemvoraussetzungen:
- Delphi 6.0 oder höher;
- TwinCAT v2.10 oder höher;
Benutzen Sie die für bestimmte Datentypen "aufgelösten" Methoden. Wenn Sie z. B. ein Array in der SPS vom Typ INT lesen wollen, können, abhängig von der Zugriffsart, z. B. folgende Methoden benutzt werden:
AdsSyncReadIntegerVarReq( hVar : Integer, length : Integer, var pData : Smallint )
AdsSyncReadIntegerReq( indexGroup : Integer, indexOffset : Integer, length : Integer, var pData : Smallint )
AdsSyncWriteIntegerVarReq(hVar : Integer, length : Integer, var pData : Smallint )
AdsSyncWriteIntegerReq( indexGroup : Integer, indexOffset : Integer, length : Integer, var pData : Smallint )
AdsReadIntegerReq( nInvokeId : Integer, nIndexGroup : Integer, nIndexOffset : Integer, cbLength : Integer )
AdsWriteIntegerReq( nInvokeId : Integer, nIndexGroup : Integer, nIndexOffset : Integer, cbLength : Integer, var pData : Smallint )
Auf String-Arrays kann auf diese Weise nicht zugegriffen werden. Die Länge der Daten, die gelesen oder geschrieben werden sollen, ergibt sich aus der Anzahl der zu lesenden oder zu schreibenden Elemente, multipliziert mit der Byte-Größe eines Elementes. Diese Länge muss in dem length- oder cbLength-Parameter übergeben werden. Über den Parameter pData wird das erste Element des Delphi-Arrays übergeben.
Beispiel:
PROGRAM MAIN
VAR
varIntArray :ARRAY[1..9] OF INT:=9(1);
END_VAR
Delphi 6 Programm:
Array aus der SPS lesen:
procedure TForm1.SyncReadArrayVarButtonClick(Sender: TObject);
var i, hVar, AdsResult:integer;
varIntArray : ARRAY[1..9] OF Smallint;
begin
AdsResult := AdsOcx1.AdsCreateVarHandle( 'MAIN.VARINTARRAY', hVar );
if AdsResult = 0 then
begin
AdsResult := AdsOcx1.AdsSyncReadIntegerVarReq( hVar, sizeof(varIntArray), varIntArray[1] );
if AdsResult = 0 then
begin
ListBox1.Clear();
for i:=1 to 9 do
ListBox1.Items.Add( Format('varIntArray[%d] = %d', [i, varIntArray[i]] ) );
end
else Label1.Caption := Format('AdsSyncReadIntegerVarReq error:%d', [AdsResult] );
AdsOcx1.AdsDeleteVarHandle( hVar );
end
else Label1.Caption := Format('AdsCreateVarHandle error:%d', [AdsResult] );
end;
Array in die SPS schreiben:
procedure TForm1.SyncWriteArrayVarButtonClick(Sender: TObject);
var i, hVar, AdsResult:integer;
varIntArray : ARRAY[1..9] OF Smallint;
begin
for i:=1 to 9 do
varIntArray[i] := i;
AdsResult := AdsOcx1.AdsCreateVarHandle( 'MAIN.VARINTARRAY', hVar );
if AdsResult = 0 then
begin
AdsResult := AdsOcx1.AdsSyncWriteIntegerVarReq( hVar, sizeof(varIntArray), varIntArray[1] );
if AdsResult > 0 then
Label1.Caption := Format('AdsSyncWriteIntegerVarReq error:%d', [AdsResult] );
AdsOcx1.AdsDeleteVarHandle( hVar );
end
else Label1.Caption := Format('AdsCreateVarHandle error:%d', [AdsResult] );
end;
Sprache / IDE | Beispielprogramm auspacken |
---|---|
Delphi XE2 | |
Delphi 6 oder höher (classic) |