Herunterladen Diese Seite drucken

Beckhoff CX7031 Originalhandbuch Seite 87

Embedded-pc für profibus-slave

Werbung

TwinCAT
     udInvokeId := fbAdsWriteInd.INVOKEID; //for the Response
     udGroup := UDINT_TO_DWORD(fbAdsWriteInd.IDXGRP);
     udOffset := fbAdsWriteInd.IDXOFFS; //Prm or Cfg Data or DPV1 Services
     udLenght := fbAdsWriteInd.LENGTH; //Len of the data
     ptrByte := fbAdsWriteInd.DATAADDR; //Pointer from the data
        //Result without Error, if you want so send an Error use "1"
        IF F_CreateAmsNetId(nIds:=gvl.CX7031_NetID )=sNetId THEN //Check the AMSNet ID from CX7031
-> IF sNetId='5.23.4.5.4.1' THEN ....
            IF nPort=1000 + 22 THEN //Slave with Adress 22
                CASE udOffset OF //Offset which kind of data is comming
                     20: //For DP-V1 Services (20 is here the PB Index)
                         MEMCPY(ADR(DPV1_Write),ptrByte,udLenght);
                         fbAdsWriteRes.RESULT := 0;
                     ELSE
                         fbAdsWriteRes.RESULT := 16#0700_00B0 ; //Access, Invalid Index;
                END_CASE
            END_IF
            IF iCase = 0 THEN
                     iCase := 10; //Send response
            END_IF
        END_IF
END_IF
CASE iCase OF
     0: (* WAIT *);
     10: (* send ADS-Response *)
            fbAdsWriteRes(
                  NETID := sNetId,
                  PORT := nPort,
                  INVOKEID := udInvokeId,
                  RESULT := ,
                  RESPOND := TRUE);
            fbAdsWriteInd(CLEAR:=TRUE); (* confirm ADS-Indication *)
            iCase := 20;
     20:  fbAdsWriteRes(RESPOND:=FALSE);
            fbAdsWriteInd(CLEAR:=FALSE);
            iCase := 0;
END_CASE
//READ Indication for DPV1 Read Data
ADSREADINDEX(
     CLEAR:= ,
     MINIDXGRP:= ,
     VALID=> ,
     NETID=> ,
     PORT=> ,
     INVOKEID=> ,
     IDXGRP=> ,
     IDXOFFS=> ,
     LENGTH=> );
IF ADSREADINDEX.VALID THEN
     sNetId_READ     :=ADSREADINDEX.NETID; //AMD Net ID from device (CX7031)
     nPort_READ      :=ADSREADINDEX.PORT; //PB Adresse + 1000 dec
     udInvokeId_READ :=ADSREADINDEX.INVOKEID; //for the Response
     udGroup_READ    :=UDINT_TO_DWORD(ADSREADINDEX.IDXGRP);
     udOffset_READ   :=ADSREADINDEX.IDXOFFS; //Prm or Cfg Data
     udLenght_READ   :=ADSREADINDEX.LENGTH; //Len of the data
        iRead:=10;
        IF F_CreateAmsNetId(nIds:=gvl.CX7031_NetID )=sNetId_READ THEN //Check the AMSNet ID from
CX7031 -> IF sNetId='5.23.4.5.4.1' THEN ....
            IF nPort_READ =1022 THEN //Check Slave Addr 22
                 IF (16#FF AND udGroup_READ) = 2 THEN //Check Slot Number
                     IF udOffset_READ=16#15 THEN //Check Index Number, here is the Index 21=0x15
                            DataRead[0]:=DPV1_Write[0]+1;
                            ADSREADRES.RESULT:=0; //no Error
                     ELSE
                            ADSREADRES.RESULT :=16#0700_00B0 ; //Access, Invalid Index
                     END_IF
                 ELSE
                     ADSREADRES.RESULT :=16#0700_00B2 ; //Access, Invalid Slot
                 END_IF
            END_IF
        END_IF
END_IF
CASE iRead OF
    0:   //Wait
    10:
CX7031
Version: 1.0
87

Werbung

loading

Diese Anleitung auch für:

Cx7000