ScriptName "Set CO ID and baudrate " ScriptAuthor "G/St" ScriptVersion "V 1.0" // This example need the base board to set the CO ID and baudrate over the dip switch // 06.07.2004 Wait Bus_Activ eingefügt call :Init_ICCO_Basis; BusStart; Wait ( Bus_Active ) ; :start; jump :start; :Init_ICCO_Basis; var vb_Baud :byte ; var vb_fieldbusID :byte ; var vb_fbSwitch :byte ; var vl_fieldbusID :long ; var vbc0 :byte ; moveconst ( vbc0 , 0 ) ; var vbc1 :byte ; moveconst ( vbc1 , 1 ) ; var vbc4 :byte ; moveconst ( vbc4 , 4 ); var vbc64 :byte ; moveconst ( vbc64 , 64 ) ; var vbc128 :byte ; moveconst ( vbc128 , 128 ) ; var vbcx3F :byte ; moveconst ( vbcx3F , 0x3F ) ; var vbcxC0 :byte ; moveconst ( vbcxC0 , 0xC0 ) ; Set ( ShiftRegisterInputType , RiseClock_LowLoad ) ; Set ( ShiftRegisterInputBitLength , 16 ) ; Set ( ShiftRegisterOutputType , RiseClock_RiseLoad ) ; Set ( ShiftRegisterOutputBitLength , 8 ) ; ReadShiftRegister ( vb_fbSwitch ) ; CalculateByte ( vb_fbSwitch , vbc1 , not , vb_fbSwitch ) ; // Hardware ist low aktiv CalculateByte ( vb_fbSwitch , vbc4 , rol , vb_fbSwitch ) ; // oben Links Baudrate: 7 6 ; CO ID: 5 4 3 2 1 0 :Set_CO_Init ; Set ( BusInputSize , 8 ) ; Set ( BusOutputSize , 8 ) ; :CO_SwapNibble; CalculateByte ( vb_fbSwitch , vbcx3F , and , vb_fieldbusID ) ; // ID Mask CalculateByte ( vb_fbSwitch , vbcxC0 , and , vb_Baud ) ; // CO Baudrate call :CO_SetFieldbusID ; call :CO_SetBaudrate ; return; //**************************** :CO_SetFieldbusID ; if vb_fieldbusID greater vbc0 then :CheckLess64 else :TestMode ; :CheckLess64 ; if vb_fieldbusID less vbc64 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 vbc0 then :SetIDto1 else :EndID_Init ; :SetIDto1 ; Set ( FieldbusID , 1 ) ; :EndID_Init ; return ; //************************* //************************* :CO_SetBaudrate ; if vb_Baud equal vbc0 then :SetBaud_1_Mbaud else :CheckBaud_500_kbaud ; :SetBaud_1_Mbaud ; Set ( BusBaudrate, 1000000 ); // CANopen only jump :SetBaudrateEnd ; :CheckBaud_500_kbaud ; if vb_Baud equal vbc64 then :SetBaud_500_kbaud else :CheckBaud_250_kbaud ; :SetBaud_500_kbaud ; Set ( BusBaudrate, 500000 ); // CANopen, DeviceNet jump :SetBaudrateEnd ; :CheckBaud_250_kbaud ; if vb_Baud equal vbc128 then :SetBaud_250_kbaud else :SetBaud_125_kbaud ; :SetBaud_250_kbaud ; Set ( BusBaudrate, 250000 ); // CANopen, DeviceNet jump :SetBaudrateEnd ; :SetBaud_125_kbaud ; Set ( BusBaudrate, 125000 ); // CANopen, DeviceNet :SetBaudrateEnd ; return ; //*************************