ScriptAuthor "Deutschmann Automation GmbH" ScriptName "FB-PB" ScriptVersion "V 1.1" // V 1.0 start script // V 1.1 fieldbus ID read from hardware switch // change RS Baudrate to 62500 // This script realized a script for our filedbus-fieldbus gateway // where one side is Profibus-DP // Declaration of Variable // VA_=Variable Array, VW_=Variable Word, VB_=Variable Byte Var VA_BusInput : BUFFER[82] ; // max.Fieldbus-Length Var VA_BusOutput : BUFFER[20] ; // max.Fieldbus-Length Var VA_BusOutput1 : BUFFER[20] ; // max.Fieldbus-Length Var VA_BusOutput2 : BUFFER[20] ; // max.Fieldbus-Length Var VA_BusOutput3 : BUFFER[20] ; // max.Fieldbus-Length Var VA_BusOutput4 : BUFFER[20] ; // max.Fieldbus-Length Var VA_BusOutput20 : BUFFER[20] ; // max.Fieldbus-Length Var VA_BusOutput21 : BUFFER[20] ; // max.Fieldbus-Length Var VA_BusOutput22 : BUFFER[20] ; // max.Fieldbus-Length Var VA_BusOutput23 : BUFFER[20] ; // max.Fieldbus-Length Var VA_BusOutput24 : BUFFER[20] ; // max.Fieldbus-Length Var VW_BusInputLen: Word ; Var VW_BusOutputLen: Word ; Var Vb_BusInputLen: Byte ; Var Vb_BusOutputLen: Byte ; Var VW_Timeout_ms: Word ; MoveConst (VW_Timeout_ms , 20) ; // 2ms Timeout => Wartezeit zwischen Datenblöcken Var VW_Const_0: Word ; MoveConst (VW_Const_0, 0); Var VW_Const_1: Word ; MoveConst (VW_Const_1, 1); Var Vb_Const_1: Byte ; MoveConst (Vb_Const_1, 1); Var Vb_Const_4: Byte ; MoveConst (Vb_Const_4, 4); Var Vb_Const_126: Byte ; MoveConst (Vb_Const_126, 126); Var Vb_Const_255: Byte ; MoveConst (Vb_Const_255, 255); Var vw_DestOffset: Word ; Var vb_ReturnCode: Byte ; Var VB_ErrorNr: Byte ; Var VB_Const_0: Byte ; MoveConst (VB_Const_0, 0) ; // Returncode 0 = No Error Var VB_BusLen: Byte ; Var VB_Const_0FH: Byte ; MoveConst (VB_Const_0FH, 0x0F); Var VB_Const_20H: Byte ; MoveConst (VB_Const_20H, 0x20); Var vb_TempB: Byte ; Var vb_rx_char: Byte ; Var vb_NewBusData: Byte ; Var vb_fieldbusID: Byte ; Var vl_fieldbusID: Long ; Var vb_tempnibble: Byte ; Var vb_temp : Byte ; // Errorhandler init => After Error, script will automatic jump to "Errorhandler" SetErrorHandler ( :ErrorHandler ) ; // Init serial port Set ( Baudrate , 62500 ) ; Set ( Databits , 8 ) ; Set ( Startbits , 1 ) ; Set ( Stopbits , 1 ) ; Set ( Parity , none ) ; Set ( ShiftRegisterOutputType , RiseClock_RiseLoad ) ; Set ( ShiftRegisterOutputBitLength , 8 ) ; // Fieldbus ID init Set ( ShiftRegisterInputType , RiseClock_LowLoad ) ; Set ( ShiftRegisterInputBitLength , 8 ) ; ReadShiftRegister ( vb_fieldbusID ) ; CalculateByte ( vb_fieldbusID , vb_const_1 , not , vb_fieldbusID ) ; call : ConvertID ; if vb_fieldbusID greater vb_const_0 then :CheckLess126 else :TestMode ; : CheckLess126 ; if vb_fieldbusID less vb_const_126 then :SetIDfromSwitch else :TestMode ; : SetIDfromSwitch ; Convert ( vb_fieldbusID , Byte , vl_fieldbusID , Long ) ; SetByVar ( FieldbusID , vl_fieldbusID ) ; // must be a long type jump : EndID_Init ; : TestMode ; if vb_fieldbusID equal vb_const_255 then :SetIDto1 else :EndID_Init ; : SetIDto1 ; Set ( FieldbusID , 1 ) ; jump : EndID_Init ; : EndID_Init ; MoveConst (VB_ErrorNr, 0x10 ) ; // 1xH = grün, x0H = All yellow LED's off Call :ErrorDisplay ; // Start Bus and wait until running BusStart ; Wait ( Bus_Active ) ; Get ( BusInputSize , Vb_BusInputLen ) ; Get ( BusOutputSize , Vb_BusOutputLen ) ; if vb_fieldbusID equal vb_const_255 then :IC_TestModeLoop else :CheckNewBusData ; : IC_TestModeLoop ; ReadShiftRegister ( vb_fieldbusID ) ; CalculateByte ( vb_fieldbusID , vb_const_1 , not , vb_fieldbusID ) ; call : ConvertID ; WriteBus ( vb_fieldbusID , vb_const_1 ) ; jump : IC_TestModeLoop ; // Check if Busdata available :CheckNewBusData ; Get ( BusDataChanged , vb_NewBusData ) ; if vb_NewBusData equal vb_Const_0 then :NoBusData else :CopyBusDataToRS ; //Get ( AvailableBusData , VW_BusInputLen ) ; //if VW_BusInputLen equal VW_Const_0 then :NoBusData else :CopyBusDataToRS ; :CopyBusDataToRS ; ReadBus ( VA_BusInput[0] , Vb_BusInputLen ) ; SendRS ( VA_BusInput[0] , Vb_BusInputLen ) ; // State-LED = green; Yellow-LED's = Bus-Receive-Data-Len MoveConst (VB_ErrorNr, 0x10 ) ; // 1xH = grün, x0H = All yellow LED's off //Convert ( vw_BusInputLen , Word , vb_TempB , Byte ) ; //CalculateByte ( vb_TempB , VB_Const_0FH , and , VB_BusLen ) ; CalculateByte ( Vb_BusInputLen , VB_Const_0FH , and , VB_BusLen ) ; CalculateByte ( VB_ErrorNr , VB_BusLen , add , VB_ErrorNr ) ; //Call :ErrorDisplay ; // Check if RS-Data available :NoBusData ; MoveConst(vw_DestOffset, 0); :ReadRS ; // Read always one char until timeout ReceiveSomeCharRS ( vw_Timeout_ms , vb_rx_char , vw_const_1) ; Get ( ErrorCode , vb_ReturnCode ) ; if vb_ReturnCode equal vb_Const_0 then :SaveRxChar else :CopyRSDataToBus ; :SaveRxChar ; CopyIndexed ( vw_const_1 , vb_rx_char , vw_const_0 , va_BusOutput[0] , vw_DestOffset ) ; CalculateWord ( vw_DestOffset , vw_const_1 , add , vw_DestOffset ) ; jump :ReadRS ; //Get ( NumberRSInputCharacter , vb_TempB ) ; //Convert ( vb_TempB , Byte , VW_BusOutputLen , Word ) ; //if VW_BusOutputLen equal VW_Const_0 then :NoRSData else :CopyRSDataToBus ; :CopyRSDataToBus ; //ReceiveSomeCharRS ( VW_Timeout_ms , VA_BusOutput[0] , vw_DestOffset ) ; WriteBus ( VA_BusOutput[0] , vw_DestOffset ) ; :NoRSData ; jump :CheckNewBusData ; // The following code will automaticly executed after a scriptcommand returns with error :ErrorHandler ; //MoveConst (VB_ErrorNr, 0x21 ) ; // xyH: x = 2 => rot, y = ErrorCode Get ( ErrorCode , vb_ReturnCode ) ; CalculateByte ( vb_ReturnCode , VB_Const_0FH , and , vb_ReturnCode ) ; CalculateByte ( vb_ReturnCode , VB_Const_20H , add , VB_ErrorNr ) ; Call :ErrorDisplay ; Return ; // Display "ErrorNr" on bicolor and yellow LEDs :ErrorDisplay ; WriteShiftRegister ( VB_ErrorNr ) ; Return ; :SwapNibble; Copy ( vb_tempnibble , vb_temp , vb_const_1 ) ; // make a copy CalculateByte ( vb_tempnibble , vb_const_4 , shr , vb_tempnibble ) ; // shift High Nibble to Low Nibble CalculateByte ( vb_temp , vb_const_4 , shl , vb_temp ) ; // shift Low Nibble to High Nibble CalculateByte ( vb_tempnibble , vb_temp , add , vb_tempnibble ) ; return ; : ConvertID ; Copy ( vb_fieldbusID , vb_tempnibble , vb_const_1 ) ; call : SwapNibble ; Copy ( vb_tempnibble , vb_fieldbusID , vb_const_1 ) ; return ;