CANOpenMaster, manages the CANopen master

Home / Knowledge Base / Manualistica / Programmazione IEC 61131-3 / Gestione CAN Bus / CANOpenMaster, manages the CANopen master

Questo blocco funzione esegue la gestione del protocollo CANOpen, questo è un blocco funzione protetto per utilizzarlo occorre richiedere il codice di protezione, vedi protezione funzioni e blocchi funzione. E' comunque possibile utilizzarlo liberamente in modo test per 15 Min.

Il CAN è un bus di campo progettato come rete di comunicazione ed il protocollo CANopen è diventato uno standard nel settore industriale specialmente quando servono requisiti real-time. Questo FB rappresenta il cuore della comunicazione CANopen eseguendo tutte le funzioni richieste da un sistema master.

Per gestire la comunicazione occorre istanziarlo nel proprio programma questo FB viene gestito direttamente di FBs di gestione dei moduli slaves a cui deve esserne passato l'indirizzo di allocazione. Tutti suoi parametri di I/O sono gestiti direttamente dai vari FBs collegati.

Attivando Enable viene inizializzato il controller CAN con i parametri di comunicazione definiti in BRate e sarà possibile gestire tutti i FBs collegati. Sul fronte di attivazione di Sync viene inviato il messaggio di sincronizzazione a tutti i nodi collegati.

Function block
CODESYS: Non disponibile
LogicLab: eLLabCANOpenLib

Enable (BOOL) Attiva la gestione del nodo CANopen in modalità master.

SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB.

Sync (BOOL) Sul fronte  di attivazione viene inviato  il messaggio di SYNC sulla rete CANOpen.

BRate (CAN_BRATE) Definizioni dei valori di bit rate sul controller CAN (Vedi definizione).

Mode (CANOMMODE) Modo operativo (Gestito direttamente dai FBs collegati).

CANTx (SYSCANMESSAGE) Messaggio CAN da trasmettere (Gestito direttamente dai FBs collegati).

Fault (BOOL) Settato per un loop in caso di errore nella gestione.

RxD (BOOL) Settato per un loop su ricezione messaggio CAN (Gestito direttamente dai FBs collegati).

TxD (BOOL) Settato per un loop su trasmissione di messaggio CAN (Gestito direttamente dai FBs collegati).

CANRx (SYSCANMESSAGE) Messaggio CAN ricevuto (Gestito direttamente dai FBs collegati).

Trigger di spy

Se SpyOn attivo è possibile utilizzare utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.

Errori

In caso di errore eseguendo immediatamente dopo la funzione SysGetLastError è possibile rilevare il codice di errore. Fare riferimento alla tabella seguente per la descrizione.

Esempi

Come utilizzare gli esempi.
Per eseguire gli esempi occorre importare la libreria eLLabCANopenLib nel progetto (Articolo).

ST_CANOpenMaster: Sono gestiti due moduli di I/O su bus CANOpen e viene comandato il lampeggio di una uscita su ogni modulo.

BeckhoffBK5100: Semplice FB per la gestione di un modulo Beckhoff BK5100.

LogicLab (Ptp184)
PROGRAM ST_CANOpenMaster
VAR
    i : UDINT; (* Auxiliary counter *)
    COMaster : CANOpenMaster; (* CANOpen master *)
    BKModule : BeckhoffBK5100; (* Beckhoff I/O module *)
    WNModule : iRCop; (* Weintek I/O module *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_CANOpenMaster"
// *****************************************************************************
// Is managed a CANOpen bus set to 250KBit with 2 attached slave modules.
// A Beckhoff BK51000 I/O module with node ID 1.
// A Weintek iR-COP cpu module with a iR-DM16-P 8IN/8Out with node 10.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // DEfine settings for the used FBs.

    IF (SysFirstLoop) THEN
        COMaster.Enable:=TRUE; //Enable
        COMaster.SpyOn:=TRUE; //Spy On
        COMaster.BRate:=CAN_250KBIT; //CAN Bus bit rate

        BKModule.Enable:=TRUE; //Enable
        BKModule.SpyOn:=TRUE; //SpyOn
        BKModule.NodeID:=1; //Node ID
        BKModule.COMaster:=ADR(COMaster); //CANOpen master

        WNModule.Enable:=TRUE; //Enable
        WNModule.SpyOn:=TRUE; //SpyOn
        WNModule.NodeID:=10; //Node ID
        WNModule.COMaster:=ADR(COMaster); //CANOpen master
    END_IF;

    // -------------------------------------------------------------------------
    // MANAGE THE CANOPEN BUS
    // -------------------------------------------------------------------------
    // Manage the CANOpen bus and attached slave modules.

    WHILE (TRUE) DO
        COMaster(Mode:=CANOMMODE#CANMRX); //CANOpen master (Rx)
        BKModule(); //Beckhoff I/O module
        WNModule(); //Weintek I/O module
        IF NOT(COMaster.RxD) THEN EXIT; END_IF;
    END_WHILE;

    // -------------------------------------------------------------------------
    // GESTIONE CAN OPEN BUS
    // -------------------------------------------------------------------------
    // Blink an output on both slave modules.

    BKModule.Output:=(BKModule.Output AND SysClock1000) OR SysClock1000; //Outputs to module
    WNModule.Output:=(BKModule.Output AND SysClock1000) OR SysClock1000; //Outputs to module

// [End of file]
LogicLab (Ptp184)

Ti è stato utile questo articolo ?