// this script demonstrates how the CANopen IC and SC could be used // to receive and send every CAN Layer 2 message. // Therefore it is possible to make a transparent monitor script // this script writes information about a received message to serial // side to read it in a terminal ScriptName "CAN-Layer-2 Test" ScriptAuthor "(dA)" ScriptVersion "V 1.0" Var CANInputBuffer : Buffer[10] ; Var CANOutputBuffer : Buffer[10] ; Var CANInputLen : WORD ; MoveConst ( CANInputLen , 10 ) ; Var CANOutputLen : WORD ; MoveConst ( CANOutputLen , 10 ) ; Var w_Const0: Word; MoveConst (w_Const0, 0); Var w_Const2: Word; MoveConst (w_Const2, 2); Var w_Const5: Word; MoveConst (w_Const5, 5); Var b_Const0: BYTE; MoveConst (b_Const0, 0); Var b_CR: BYTE; MoveConst (b_CR, 13); Var COBId : BUFFER[5] ; // By setting the first parameter to 0 we activate CAN Layer 2 mode. // all other parameters are dummy parameters. CO_InitChannel ( w_Const0 , b_Const0 , w_Const0 , w_Const0 , w_Const0 ) ; BusStart ; Wait ( Bus_Active ) ; :Mainloop; Get ( AvailableBusData , CANInputLen ) ; if CANInputLen equal w_Const0 then :CheckRS ; ReadBus ( CANInputBuffer[0] , CANInputLen ) ; Convert ( CANInputBuffer[0] , Word , COBId[1] , ASCII_DEZ_3 ) ; MoveConst(COBId[0], ":"); MoveConst(COBId[4], ":"); SendRS ( COBId[0] , w_Const5 ) ; CalculateWord ( CANInputLen , w_Const2 , sub , CANInputLen ) ; SendRS ( CANInputBuffer[2] , CANInputLen ) ; :CheckRS; // close input with CR ReceiveSpecialCharRS ( b_CR , w_Const2 , CANOutputBuffer[0] , CANOutputLen ) ; if CANOutputLen equal w_Const0 then :Mainloop ; MoveConst( CANOutputBuffer[0], 3); // MSB fix 01H WriteBus ( CANOutputBuffer[0] , CANOutputLen ) ; jump :Mainloop ;