La funziona carica i messaggi da trasmettere nel buffer FIFO di trasmissione, il controller CAN controlla se messaggi nel buffer e quando il bus è libero trasmette il primo messaggio caricato e poi di seguito con tutti gli altri. Mentre il controller trasmette svuotando il buffer è possibile se vi è spazio (Funzione SysIsCANRxTxAv) caricare altri messaggi da trasmettere.
Il messaggio da trasmettere và creato in una variabile di tipo SYSCANMESSAGE il cui indirizzo và passato alla funzione nel parametro Msg.
Function
CODESYS: Non disponibile
LogicLab: eLLabXUnified12Lib
Msg (@SYSCANMESSAGE)) Indirizzo variabile di tipo SYSCANMESSAGE che contiene il messaggio da trasmettere.
La funzione ritorna (BOOL) TRUE se messaggio trasferito nel buffer.
Esempi
Come utilizzare gli esempi.
Nell'esempio ogni secondo viene inviato un messaggio CAN di 4 bytes di lunghezza, il contenuto del messaggio è il valore della variabile UDINT TxData.
PROGRAM ST_SysCANTxMsg VAR Pulse : BOOL; (* Pulse *) i : UDINT; (* Auxiliary counter *) TxData : UDINT; (* Tx data *) CANMsg : SYSCANMESSAGE; (* CAN message *) END_VAR // ***************************************************************************** // PROGRAM "ST_SysCANTxMsg" // ***************************************************************************** // A 29 bit CAN message is sent at every 1 second. // ----------------------------------------------------------------------------- // ------------------------------------------------------------------------- // INITIALIZATION // ------------------------------------------------------------------------- IF (SysFirstLoop) THEN i:=SysCANSetMode(CAN_250KBIT, 16#00000000, 16#00000000); //Accept all 11 and 29 bits messages END_IF; // ------------------------------------------------------------------------- // MESSAGE TRANSMISSION // ------------------------------------------------------------------------- // At every 1 second a CAM message is sent. IF NOT(SysIsCANRxTxAv(TRUE)) THEN RETURN; END_IF; IF (SysClock1000 <> Pulse) THEN Pulse:=SysClock1000; //Pulse TxData:=TxData+1; //Tx data // Prepare the CAM message and send it. CANMsg.RmReq:=FALSE; //eFALSE:Data frame, eTRUE:Remote request CANMsg.Length:=4; //Data length CANMsg.MsgID:=16#92345678; //Message ID 29 Bit CANMsg.Data[0]:=TO_BYTE(TxData/16#1000000); //Message data CANMsg.Data[1]:=TO_BYTE(TxData/16#10000); //Message data CANMsg.Data[2]:=TO_BYTE(TxData/16#100); //Message data CANMsg.Data[3]:=TO_BYTE(TxData); //Message data i:=SysCANTxMsg(ADR(CANMsg)); //Eseguo trasmissione END_IF; // [End of file]