Informazioni su comunicazione CANOpen
Home › Forum › Programmazione IEC 61131 (LogicLab) › Informazioni su comunicazione CANOpen
- Questo topic ha 8 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 1 anno, 11 mesi fa da
Sergio Bertana.
-
AutorePost
-
Aprile 2, 2023 alle 5:39 pm #71368
Rubox
PartecipanteSono 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.
Aprile 3, 2023 alle 5:59 pm #71373Sergio Bertana
Amministratore del forumSpiegarti 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.
Aprile 4, 2023 alle 7:17 pm #71405Rubox
PartecipanteGrazie 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?
Aprile 4, 2023 alle 7:39 pm #71407Rubox
PartecipanteProvando 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”.
Aprile 5, 2023 alle 8:50 am #71423Sergio Bertana
Amministratore del forumProbabilmente hai un sistema XTarget devi aggiornare a XUnified (Vedi articolo).
In alternativa puoi inserire nel progetto la libreria eLLabXTargetAdjLib come indicato in questo articolo.
Aprile 5, 2023 alle 5:38 pm #71454Rubox
PartecipanteAvevo 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 trovataNel 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.
Aprile 6, 2023 alle 9:23 am #71459Sergio Bertana
Amministratore del forumCon 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).
Aprile 22, 2023 alle 5:09 pm #71655Rubox
PartecipanteHo 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?
Aprile 26, 2023 alle 10:34 am #71676Sergio Bertana
Amministratore del forumL’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).
-
AutorePost
- Devi essere connesso per rispondere a questo topic.