Beispiel mit AdsWrite-Funktionsbaustein
Das Beispiel demonstriert die Verwendung des ADSWRITE-Funktionsbausteins in einer ADS-Client-Applikation.
Die kompletten Sourcen der ADS-Client-Applikation können hier entpackt werden: AdsWriteReqClientExample.zip
Deklarationsteil
PROGRAM MAIN
VAR
fbWriteReq : ADSWRITE := ( NETID := '', PORT := 851, TMOUT := DEFAULT_ADS_TIMEOUT );
bWrite : BOOL;(* Rising edge at this variable starts command execution *)
nState : BYTE;
bBusy : BOOL;
bError : BOOL;
nErrID : UDINT;
arrInt : ARRAY[0..9] OF INT;(* Server data to be written *)
i : INT;
END_VAR
Implementierung
FOR i:=0 TO 9 BY 1 DO (* modify/simulate new data *)
arrInt[i] := arrInt[i] + 1;
END_FOR
CASE nState OF
0:
IF bWrite THEN
bWrite := FALSE;
bBusy := TRUE;
bError := FALSE;
nErrID := 0;
fbWriteReq( WRITE := FALSE );
fbWriteReq( IDXGRP := 16#80000005, IDXOFFS := 7,
LEN := SIZEOF( arrInt ), SRCADDR := ADR( arrInt ),
WRITE := TRUE );
nState := 1;
END_IF
1:
fbWriteReq( WRITE := FALSE, BUSY=>bBusy, ERR=>bError, ERRID=>nErrID );
IF NOT bBusy THEN
IF NOT bError THEN
nState := 0;(* Success *)
ELSE
nState := 100;(* Error *)
END_IF
END_IF
100:(* TODO::Implement error handler *)
nState := 0;
END_CASE