Vai al contenuto

Informazioni su comunicazione CANOpen

Home Forum Programmazione IEC 61131 (LogicLab) Informazioni su comunicazione CANOpen

Stai visualizzando 9 post - dal 1 a 9 (di 9 totali)
  • Autore
    Post
  • #71368
    Rubox
    Partecipante

    Sono completamente digiuno di comunicazione CANOpen, tranne per gli articoli letti sul sito e sul forum.

    Ho un dispositivo che può comunicare con protocollo CANOpen, mi hanno fornito il dizionario degli oggetti con Id, sub-Id, tipo di dato in lettura o scrittura.L’unico problema è che non so da che parte cominciare.

    Ho una CPU MPS054B210, che ha il CAN bus, ho provato alcuni esempi ma non sapendo come sbattere la testa… senza successo.

    Mi potete illustrare i passi per poter inviare un messaggio su bus CAN e per ricevere i messaggi che l’oggetto dovrebbe inviare?

    Ho provato a usare l’esempio alla pagina di SysCANSetMode ma non ottengo mai nessun dato.

    #71373
    Sergio Bertana
    Amministratore del forum

    Spiegarti velocemente il CANOpen è impossibile, intanto diciamo che le funzioni base SysCANTxMsg e SysCANRxMsg servono a inviare e ricevere messaggi CAN, il CANOpen utilizza i messaggi CAN secondo regole precise che ne determinano il funzionamento.

    Quindi intanto per gestirlo ti conviene fare riferimento alla CANOpenMaster, che permette di attivare una modalità sniffer per visualizzare i pacchetti in transito.  Il protocollo si basa su pacchetti di configurazione SDO (Che sono quelli a cui fa riferimento la documentazione) e pacchetti dato PDO.

    Una idea sul funzionamento del protocollo te la puoi fare guardando il sorgente della FB BeckhoffBK5100, in cui viene gestito un modlo di I/O.

    • Il master alla inizializzazione invia un comando CANOMMCTYPE#MODRST.
    • Poi inizia la configurazione del modulo scrivendo e leggendo i vari SDO, questo modulo è semplice quindi viene solo eseguita la lettura del tipo di dispositivo CANOMMCTYPE#SDORD.
    • Terminata la configurazione il modulo viene reso operativo CANOMMCTYPE#MODOP.
    • A questo punto il modulo comincerà ad inviare lo stato degli ingressi ed ad accettare il settaggio delle uscite attraverso pacchetti PDO.
    #71405
    Rubox
    Partecipante

    Grazie per le informazioni.
    Ho prima di tutto aggiornato sia LogicLab che le librerie.

    Volevo replicare l’esempio che esegue lo sniffer utilizzando l’oggetto CANOpenSniffer, ma in compilazione ottengo l’errore A4109 -> Tipo oggetto base non valido.

    Nell’albero delle librerie l’oggetto ha un pallino rosso ed è in grigio scuro (come disabilitato).

    Dove sbaglio?

    #71407
    Rubox
    Partecipante

    Provando l’esempio BeckhoffBK5100 alla riga dove si esegue MNode ottengo sei degli errori X4097 SysVsnprintf-> Recursive POU, relativi anche a SysSpyData e altre funzioni “printf”.

    #71423
    Sergio Bertana
    Amministratore del forum

    Probabilmente hai un sistema XTarget devi aggiornare a XUnified (Vedi articolo).

    In alternativa puoi inserire nel progetto la libreria eLLabXTargetAdjLib come indicato in questo articolo.

    #71454
    Rubox
    Partecipante

    Avevo impostato il progetto per XUnified, ma qualcosa deve esser andato storto. Ho ricreato il progetto per XUnified e quegli errori sono spariti.

    Adesso quando compilo ottengo l’errore:
    CANOpenSniffer (47) – errore A4107: SysTimeGetMs -> Funzione non trovata
    CANOpenSniffer (52) – errore A4107: SysTimeGetMs -> Funzione non trovata

    Nel progetto ho incluso la libreria eLLabCANOpenLib, e sono inserite dal LogicLab le librerie eLLabCommonLib e eLLabXUnified12Lib. Nella libreria eLLabUnified12Lib sotto la cartella DateTime è presente la funzione, ma non capisco cosa sbaglio ancora.

    Allo stesso modo in CANOpenMNode ho svariati errori A4107 per la funzione SysTimeGetMs non trovata.

    #71459
    Sergio Bertana
    Amministratore del forum

    Con il rilascio della versione 5.22.x.xx di LogicLab è stata introdotta la gestione degli operandi Data/Ora questo ha portato ad alcune modifiche del sistema operativo la più evidente è l’introduzione della funzione SysTimeGetMs.

    Tutte le nuove librerie che rilasciamo fanno riferimento a questa funzione, quindi per poterle utilizzare devi necessariamente utilizzare l’ultima versione di LogicLab e l’ultima versione del firmware (Vedi articolo).

    #71655
    Rubox
    Partecipante

    Ho aggiornato LogicLab e le librerie all’ultima versione.
    I programmi fatti con le versioni precedenti danno problemi di compilazione.
    La CPU è XUnified, nel progetto ho inserito le librerie eLLabCommonLib, eLLabDTimeAdjLib (funzioni e valori data/tempo non compilavano senza), eLLabObsoleteLib (per usare Modbus_Master_v1).

    Però ottengo ancora errori X4097 Recursive POU su varie funzioni e non riesco a capire come ovviare al tutto.

    Come mai in LogicLab il menù “Importa oggetti” non è più disponibile? Si deve collegare l’intera libreria per usare un oggetto, ad esempio EmailSender, o lo stesso ModbusMaster?

    #71676
    Sergio Bertana
    Amministratore del forum

    L’errore X4097 Recursive POU è un errore di ricorsione (es funzione che chiama sé stessa), il compilatore dovrebbe darti qualche indicazione in più. Eventualmente invia al supporto  il programma che diamo una occhiata.

    La gestione delle librerie è in corso di modifica nelle ultime versioni di LogicLab, la voce “Importa oggetti” si attiva solo selezionando una cartella nel tree di progetto (Screenshot).

Stai visualizzando 9 post - dal 1 a 9 (di 9 totali)
  • Devi essere connesso per rispondere a questo topic.