ScriptName "example for DN and EDS" ScriptAuthor "GS" ScriptVersion "V 1.1" // 08.03.05 St V1.1 LenIn von 8 auf 3 geändert // LenOut von 8 auf 5 " SetErrorHandler(:ErrorHandler); SetSystemErrorHandler(:SystemErrorHandler); //======================================================== // Constants //======================================================== Var LenBusDataIn : Byte; MoveConst(LenBusDataIn, 3 ); Var LenBusDataOut : Byte; MoveConst(LenBusDataOut, 5 ); Var TRUE : Byte; Moveconst(TRUE,1); Var variable : Buffer[21]; Moveconst (variable[0], "UNIGATE DeviceNet/0"); // Max_Name_Len 24 and "/0"termination Var TimeOut : Word; Moveconst(TimeOut, 1); Var w0 : Word; Moveconst(w0,0); Var w1 : Word; Moveconst(w1,1); Var b2 : Byte; Moveconst(b2,2); //======================================================== // Variables //======================================================== Var MyErrorCode : Byte; Var MySysErrorCode : Byte; Var NewBusData : Byte; Var aRSInBuf : Buffer[10]; Var wLenBusDataIn : Word; Var wLenBusDataOut : Word; Var BusInBuf : Buffer[10]; Var BusOutBuf : Buffer[10]; Var bErrorCode : Byte; Var wOffset : Word; //======================================================== // Init DeviceNet //======================================================== Set(VendorID, 272); // VendCode = 272; Set(DeviceType, 12); // ProdType = 12; Set(DeviceRevision, 0x021E); // 02 = MajRev=2, 1E=MinRev=30 Set(ProductCode, 0x1234); // 0x1234 => 4660 decimal SetByVar ( DeviceName , variable[0] ) ; // ProductName SetByVar(BusInputSize, LenBusDataIn); // 3, $ consumed size SetByVar(BusOutputSize, LenBusDataOut); // 5, $ produced size Set ( BusBaudrate , 125000 ) ; Set ( fieldbusID , 1 ) ; //======================================================== // StartTheBus //======================================================== BusStart; Wait(Bus_Active); // Get ( BusinputSize , LenBusDataIn ) ; // Get ( BusoutputSize , LenBusDataOut ) ; Convert ( LenBusDataIn , Byte , wLenBusDataIn , Word ) ; Convert ( LenBusDataOut, Byte , wLenBusDataOut, Word ) ; //======================================================== :MainLoop; //======================================================== Get(BusDataChanged, NewBusData); If NewBusData Equal True Then :CheckNewBusData1 Else :CheckNewRSData; //======================================================== :CheckNewBusData1; //======================================================== ReadBus ( BusInBuf[0] , wLenBusDataIn ) ; // mit ReadBus wird der SystemBuffer freigemacht SendRS ( BusInBuf[0] , wLenBusDataIn ) ; //... jump :MainLoop; //======================================================== :CheckNewRSData; //======================================================== ReceiveSomeCharRS( TimeOut, aRSInBuf[0], w1 ); Get ( ErrorCode , bErrorCode ) ; if bErrorCode equal b2 then :write_bus; // else :storeData ; //:storeData; CopyIndexed ( w1 , aRSInBuf[0] , w0 , BusOutBuf[0] , wOffset ) ; CalculateByte ( wOffset , w1 , add , wOffset ) ; if wOffset equal wLenBusDataOut then :write_bus; jump :CheckNewRSData; :write_bus; moveconst (wOffset, 0); WriteBus( BusOutBuf[0], wLenBusDataOut) ; jump :MainLoop; //======================================================== :ErrorHandler; //======================================================== Get(ErrorCode, MyErrorCode); // TBD Return; //======================================================== :SystemErrorHandler; //======================================================== Get(SystemError, MySysErrorCode); // TBD Return;