Disponibilità protocollo Modbus sullo SlimLine CODESYS
Home › Forum › Obsoleti › SlimLine (CODESYS) › Disponibilità protocollo Modbus sullo SlimLine CODESYS
- Questo topic ha 20 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 9 anni, 2 mesi fa da
Sergio Bertana.
-
AutorePost
-
Febbraio 13, 2015 alle 10:27 pm #35734
Enrico Viviani
PartecipanteIl modulo “CODESYS” viene definito come Modbus compatibile ma non trovo una libreria che supporti modbus RTU/ASCII RS485 Master. Avete qualche esempio ?
Febbraio 17, 2015 alle 11:33 am #38738Sergio Bertana
Amministratore del forumA differenza della linea programmabile con LogicLab, dove abbiamo sviluppato e continuiamo a sviluppare, librerie e programmi di esempio, sulla linea CODESYS vista la grande diffusione dell’ambiente abbiamo una fertilità creativa inferiore. Gli utenti più smaliziati hanno già le loro librerie (Che utilizzano su altri prodotti programmabili in CODESYS) e/o trovano sulla rete spunti da cui partire.
Sul Modbus c’è parecchia letteratura in rete, per il momento mi sono cimentato nel porting del FB ModbusSlave dall’ambiente LogicLab all’ambiente CODESYS, ecco l’estratto del manuale. Ho realizzato un progetto CODESYS che contiene i due esempi riportati nel manuale (Nella cartella dell’esempio si trova la libreria con il blocco funzione) (Download progetto).
Febbraio 17, 2015 alle 4:04 pm #38739Sergio Bertana
Amministratore del forumGiornata tranquilla oggi ho trovato il tempo di fare il porting anche del FB ModbusMaster, ecco l’estratto del manuale. Ho realizzato anche un semplice progetto dove su di uno SlimLine coesistono i FB Master e Slave ed i due FB dialogano tra di loro utilizzando le due porte seriali (Download progetto).
Come si vede nell’esempio sul FB ModbusMaster è attivato lo Spy, in questo modo tramite una console di spionaggio (Fai riferimento al manuale) è possibile visualizzare i frame dati in transito. Questa soluzione è molto comoda per capire eventuali errori di protocollo (Screenshot).
Febbraio 23, 2015 alle 9:09 am #38757Antonio
PartecipanteNella libreria eSLineC2SysLib_A000 trovo i blocchi funzionali SysTCPClient e SysTCPServer, nelle librerie Oscat trovo i blocchi MB_Client ed MB_Server possono essere utilizzati ambedue o è meglio utilizzare le librerie Elsist ?
Febbraio 23, 2015 alle 9:53 am #38758Sergio Bertana
Amministratore del forumLe funzioni a cui ti riferisci non c’entrano nulla con il Modbus, si tratta di funzioni di sistema per gestire le connessioni TCP. Per il modbus i nostri FB sono MobusMaster (Equivalente alla MB_Client) e MobusSlave (Equivalente alla MB_Server).
A differenza delle FB di Oscat che sono solo TCP/IP e UDP, le nostre possono operare su un qualsiasi stream di I/O (Anche la porta seriale) e gestiscono tutti e 3 i tipi di Modbus (Ascii, RTU, TCP).
Detto questo quale FB usare è una tua scelta, se usi le nostre FB puoi chiedere informazioni a noi, se usi le Oscat devi rivolgerti al Sig. Oscat…
Febbraio 23, 2015 alle 4:51 pm #38762Antonio
PartecipanteScusa, ho citato Oscat perchè voi stessi a pagina 30/101 del manuale di programmazione lo itate e pensavo che fosse normale utilizzare quei blocchi, non certo perche io lo conosca. Comunque non preocuparti, per quanto tu possa essere sarcastico, continuerò a chiedere, non mi sono offeso.
Febbraio 23, 2015 alle 5:14 pm #38763Sergio Bertana
Amministratore del forumAbbiamo citato le Oscat in quanto molti costruttori di prodotti basati su CODESYS ne fanno un gran strombazzare. Queste librerie rappresentano un lodevole impegno nel campo del software libero applicato alla automazione industriale. Anche se personalmente preferisco “costruirmi” la mia libreria di funzioni e FB, trovo apprezzabile il lavoro svolto e mi è succeso di rifarmi alle Oscat per trarre ispirazione su particolari esigenze che poi ho applicato anche per librerie in LogicLab.
Per quanto riguarda il Modbus sono anni che lo utilizziamo in LogicLab ed è stato normale eseguirne il porting in CODESYS. Lo SlimLine CODESYS è pensato per essere “trasparente” alla versione LogicLab tant’è che lo abbiamo fornito dello stesso set di funzioni ed FB embedded presenti sulla versione LogicLab.
Lo spirito del forum è di supportare i clienti e certo possiamo farlo nel modo migliore solo se si utilizzano le nostre funzioni ed FB. Però non vogliamo neanche chiuderci nel nostro cortile, e ben vengano esperienze con altre librerie ogni segnalazione è uno stimolo a cercare ed a migliorarsi.
Sono contento che la battuta a te apparsa sarcastica (In realtà voleva essere ironica) non ti abbia urtato, non è certo mia intenzione urtare le persone. Magari Oscat è il cognome di una bella tedescona… e una telefonata ci può anche stare…
Febbraio 25, 2015 alle 10:50 am #38767Antonio
PartecipanteSperiamo che non sia come la Merkel, per parlare d’altro, stavo verificando gli esempi di Modbus master e slave che tu hai pubblicato, ho alcune domande che riguardano l’applicazione a TCP/IP. Il settaggio è composto da tre righe di programma, il blocco Sysfopen che, penso con anche il bolcco Modbus master o slave, dovremmo utilizzare anche per il Modbus TCP, ma, il SysSerialPort, dovrà essere sostituito ? e se si, con cosa ?
Febbraio 25, 2015 alle 1:55 pm #38768Sergio Bertana
Amministratore del forumSi hai inteso bene, con la funzione Sysfopen apri lo stream I/O di comunicazione che è di tipo FILEP, lo stream va passato poi al blocco funzione di gestione Modbus. Se lo stream di I/O è una seriale si deve utilizzare come nell’esempio il FB SysSerialPort, se invece si tratta di un socket TCP si utilizzerà il FB SysTCPClient o SysTCPServer. Fai riferimento al manuale programmazione IEC61131-3 dove troverai esempi di utilizzo del Modbus master sia su connessione seriale che TCP client, e del modbus slave sia su seriale che su più socket TCP server.
Marzo 9, 2015 alle 5:18 pm #38791Enrico Viviani
PartecipanteSalve, sto tentando di utilizzare le funzioni modbus con un dispositivo della IME il Nemo D4-Le. Oltre a non capire se riesce la connessione o no (va sempre in timeout), leggo dal manuale che il protocollo del dispositivo prevede l’uso di un CRC nella trasmissione del messaggio. Come posso implementare tale funzione ?
Marzo 9, 2015 alle 5:51 pm #38792Sergio Bertana
Amministratore del forumIl CRC fa parte del protocollo Modbus RTU ed è automaticamente gestito dal FB che lo genera per il frame di comando e lo controlla nel frame di ricezione. I problemi di comunicazione possono nascere da molti fattori: Hai controllato le impostazioni della porta seriale che siano uguali a quelle del modulo? L’indirizzo di nodo Modbus è corretto? L’indirizzo ed il numero di registri da Leggere/Scrivere sono corretti ?Il codice funzione di Lettura/Scrittura è gestito dallo strumento? Attivando l’ingresso SpyOn del blocco funzione è possibile inviare alla console di spionaggio i frame Modbus inviati e ricevuti dal FB (Vedi sul Manuale programmazione IEC61131-3 come utilizzare la console di spionaggio). Se mi invii il report di spionaggio magari posso indirizzarti verso la soluzione del problema.
Marzo 11, 2015 alle 4:07 pm #38796Enrico Viviani
PartecipanteSi a tutte le domande, sul dispositivo non posso impostare numero di bit e stop, ma ho provato già tutte le velocità possibili e le parità possibili.
Marzo 12, 2015 alle 8:22 am #38798Sergio Bertana
Amministratore del forumSe tutto è corretto dovrebbe funzionare, ma visto che non funziona, ti posso dare indicazioni solo se mi invii uno screenshot della cattura dei pacchetti nella console di spionaggio (Topic).
Marzo 12, 2015 alle 10:29 am #38799Enrico Viviani
PartecipanteVisto che non sò se lo strumento IME funziona ho provato un’altra strada. Possiedo una CPU SlimLine LogicLab MPS050 con RS485, ho collegato il modulo CPU CODESYS con il modulo CPU LogicLab, ho impostato la seriale dei due moduli con le stesse caratteristiche (19200,N,8,1) nodo 2, ovviamente c’è un programma stupido nella CPU LogicLab, scrive il valore 100 nella variabile word MW100.100 al primo loop e non fa altro.
Nel modulo CPU CODESYS c’è solo il programma (scaricato dal vostro sito) con la funzione master, ho impostato la porta (ho provato COM2 e COM3 e COM4), gli stessi parametri, uso la funzione 16#03 per leggere la variabile 100 ma ottengo sempre e solo l’errore 10007050. Forse mi stò perdendo qualcosa, allego screenshot programma CODESYS con lo Spy su Toolly.
Marzo 12, 2015 alle 11:33 am #38800Sergio Bertana
Amministratore del forumCome si vede dallo screenshot dello spionaggio, il sistema slave non risponde alla interrogazione, ho eseguito la stessa prova fatta da te ma prima alcune doverose precisazioni.1) Visto che i parametri di default sulla porta di comunicazione dello SlimLine LogicLab sono 115200, e, 8 ed il nodo Modbus 1 nel mio esempio ho impostato queti parametri nel programma CODESYS (Ecco lo screenshot con lo spionaggio). Visto che nel tuo esempio usavi parametri diversi credo come tu dici abbia provveduto ad impostarli dalla pagina web del modulo CPU di SlimLine LogicLab.2) Per accedere alla DB 100 dello SlimLine LogicLab occorre utilizzare l’indirizzo modbus 40050 e non 100 (Topic). All’indirizzo 100 come utilizzato anche nel mio esempio viene ritornato il valore del Real Time Clock, secondi, minuti e così via. Se vedi nel mio scrennshot di spionaggio ho bordato il valore dei secondi (00 3B -> 59) e dei minuti (00 09 -> 9) tra due letture successive.3) La porta seriale RS485 del modulo CPU CODESYS si indirizza come COM3.4) Ho chiesto all’ufficio commerciale e mi risulta che hai acquistato un modulo CPU MPS052*200 che è un modulo CAN quindi non ha la porta RS485. Se vuoi utilizzare il Modbus RTU su RS485 puoi usare una seriale RS232 con un convertitore seriale.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.