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