Vai al contenuto
PLC Forum


Interfacciare encoder a master tramite Modbus


Stefano Prato

Messaggi consigliati

Stefano Prato

Gentili utenti,

Come da titolo desidero interfacciare un encoder a quadratura con uscita differenziale ad un master che gira su PC tramite modbus. Il master può solo leggere il conteggio e non posso passargli direttamente i segnali A,A*,B,B*. 
Specifico che non sono un esperto e potrei non considerare alcune ovvietà.
In passato avevo collegato l'encoder ad una scheda di sviluppo Nucleo di STM: la scheda leggeva in modalità single ended solo A e B, contava usando dei timer e tramite una libreria modbus rispondeva ai comandi del master. Ciò includeva una conversione dal segnale UART del controllore a RS485 e in seguito una conversione da RS485 a USB, il tutto con schede esterne.
Vorrei ora eliminare il controllore "fai da te", principalmente per la scomodità dei collegamenti ed affidarmi ad una soluzione professionale.
Non ho ben chiari i collegamenti. Mi sembra ci siano più opzioni.

1) La più semplice: esistono moduli che leggono direttamente un encoder a quadratura con uscita differenziale e tengono il conteggio che inviano tramite modbus al master. Questa soluzione è troppo costosa. Es: https://www.laurels.com/transmitter-quadrature.php (magari esistono soluzioni più economiche che non ho trovato).

2) Convertire da segnale differenziale a single ended (per farlo uso AM26LS33ACN di Texas Instruments), contare gli impulsi tramite un contatore su circuito integrato e inviare il conteggio al master tramite modulo I/O. Solo non mi è chiaro come effettuare quest'ultimo collegamento, alcuni contatori hanno uscite seriali ma non so come fare leggere queste uscite ad un modulo di I/O compatibile con modbus.

3) Molti moduli di I/O digitali includono dei contatori ma non capisco se permettono anche di usare due canali (A e B ) per decodificare il segnale in quadratura; nei manuali che ho consultato non viene citata questa funzione e, in base a quanto ho capito, senza leggere sia A che B il contatore non può sapere se contare in su o in giù.

La mia domanda riguarda il come fare il collegamento della soluzione 2 o se esistono soluzioni alternative più comode e economiche.

Grazie e saluti. 

 

Link al commento
Condividi su altri siti


Livio Orsini
2 ore fa, Stefano Prato ha scritto:

La mia domanda riguarda il come fare il collegamento della soluzione 2 o se esistono soluzioni alternative più comode e economiche.

 

in questa sezione si trattano solo problematiche relativa ad apparati commerciali ed alle loro applicazioni in ambito elettronica industriale.

Per problematiche realtiva all'autocostruzione bisogna usare la sezione "elettronica generica" del forum di elettronica.

 

2 ore fa, Stefano Prato ha scritto:

Il master può solo leggere il conteggio e non posso passargli direttamente i segnali A,A*,B,B*. 

 

In altri termini il master non ha un contatore di impulsi, quindi a te serve un contatore che possa essere letto via modbus. E così?

Link al commento
Condividi su altri siti

Stefano Prato
5 ore fa, Livio Orsini ha scritto:

In altri termini il master non ha un contatore di impulsi, quindi a te serve un contatore che possa essere letto via modbus. E così?

Esattamente. Il contatore deve anche gestire il segnale differenziale; il circuito integrato che uso per convertire da differenziale a single ended funzione bene ma non è una soluzione particolarmente elegante. Ho messo il link di un prodotto che sembrerebbe fare esattamente questo ma, considerato che con un microcontrollore della ST e una libreria online ho ottenuto lo stesso risultato, mi sembra una spesa eccessiva.

 

5 ore fa, Livio Orsini ha scritto:

in questa sezione si trattano solo problematiche relativa ad apparati commerciali ed alle loro applicazioni in ambito elettronica industriale.

Per problematiche realtiva all'autocostruzione bisogna usare la sezione "elettronica generica" del forum di elettronica.

Se necessario posso cancellare o spostare la discussione. Ho scelto la sezione un po' andando ad esclusione.


Anche l'eventuale funzionamento delle altre metodiche sarebbe per me interessante anche a scopo puramente formativo. In particolare non mi è chiaro come un generico dispositivo possa inviare una certa stringa di bit da un suo registro a quello di un modulo I/O che verrà poi letto dal master di turno. Che tipo di comunicazione interfaccia i due suddetti registri?

Link al commento
Condividi su altri siti

Livio Orsini
9 ore fa, Stefano Prato ha scritto:

In particolare non mi è chiaro come un generico dispositivo possa inviare una certa stringa di bit da un suo registro a quello di un modulo I/O che verrà poi letto dal master di turno. Che tipo di comunicazione interfaccia i due suddetti registri?

 

Domanda troppo generica e vaga.

Se vuoi una risposta plausibile sopecifica di che dispositivi si tratta.

Ci sono tantissimi modi per inviare dei dati in modo seriale: con protocolli elettrici e software standrd e con protocolli elettrici e software proprietari. Se non si sa di cosa si sta parlando non è possibile dare una risposta attendibile.

Link al commento
Condividi su altri siti

Stefano Prato

In effetti posta così la domanda richiederebbe una spiegazione enorme sulla comunicazione seriale. Non era questo il mio intento anche se rileggendo noto sia ciò che ho di fatto chiesto.


La mia domanda potrebbe essere riformulata restando generica ma senza aprire a discussioni da corso universitario. 
Così come è possibile configurare tramite software, se l'interfaccia fisica lo consente, una comunicazione seriale tra vari moduli, è possibile configurare anche le regole di comunicazione seriale (qualunque essa sia) tra i registri dei moduli di input e qualsivoglia, nei limiti della compatibilità, registro di un dispositivo esterno ad esso collegato? 
Banalmente: è possibile programmare così a basso livello con un sistema PLC? se un determinato componente esterno supporta una comunicazione seriale X il modulo I/O può essere programmato per supportare anche lui il protocollo X? in questo caso è il modulo di I/O ad avere un'intelligenza che gestisca ciò o viene chiamata in causa la CPU del modulo di controllo?

 

Link al commento
Condividi su altri siti

In generale, ma prendo il modbus RTU per semplicità, le trasmissioni seriali avvengono quasi sempre su un paradigma domanda-risposta. Cioè il cosiddetto Master (più correttamente un Client) manda un messaggio "domanda" a uno slave (o Server) il quale invierà la "risposta" corretta.

Sta al master indicare nella domanda quello di cui si vuole risposta. Per esempio, se vuole leggere dei registri (aree di memoria a 16 bit per il modbus), manderà un frame con indicato il server (numero nodo), il registro di partenza, e quanti registri leggere. Lo slave, ricevuta la domanda e identificata che è per lui ed è un'area consentita, invierà come risposta un frame contenente i dati richiesti.

Chiaramente sia il master che lo slave dovranno non solo parlare la stessa "lingua" (protocollo), ma anche avere dei parametri fisici corrispondenti (velocità, composizione dato, ecc).

Quando si interroga un modulo I/O, usualmente questo è slave (server) di rete, per cui risponderà solo se arriverà una domanda destinata a lui e in un'area che è consentita.

 

Per il tuo uso, ammesso che tu connetta l'encoder a un contatore che poi è interfacciato con un I/O, dovrai interrogare il modulo leggendo lo stato degli ingressi e poi ricostruire il dato inviato. Quindi la comunicazione partirà dal PLC verso lo I/O.

Notare però che tale procedimento non è molto veloce. Dipende dalla velocità di trasmissione, dal numero dei dati inviati e richiesti, e dalla velocità di interrogazione (velocità di polling).

Questo, per una lettura di un encoder, potrebbe essere piuttosto limitante. Anche il tempo di accesso dell'I/O verso il contatore potrebbe essere un problema. Probabilmente ci vorrebbe un latch per memorizzare il dato al momento della richiesta, in modo che sia stabile fino alla sua ritrasmissione.

 

Ora una mia domanda: con gli STM32 (Nucleo) è possibile leggere un encoder incrementale ad alta velocità, mediante l'apposita funzionalità dei suoi timer. Il frame modbus lo potresti inviare anche direttamente su USB (non l'ho mai fatto). Per connessioni ad alta velocità consiglio Modbus/TCP (via ethernet).

Link al commento
Condividi su altri siti

Stefano Prato
11 minuti fa, Ctec ha scritto:

Quando si interroga un modulo I/O, usualmente questo è slave (server) di rete, per cui risponderà solo se arriverà una domanda destinata a lui e in un'area che è consentita.

Se il master fosse capace di prelevare i segnali A e B dell'encoder e di contare non avrei nessun problema. Essendo solo 1 o 0 di fatto sarebbe come avere interruttori molto veloci. Il problema è che al master dovrò fornire il numero del conteggio, ad esempio a 8 bit, dal contatore e quindi mi servirebbe una comunicazione seriale con il master che potrebbe essere modbus, risolvendo il problema, e di nessun altro tipo (il master non supporta nulla di seriale oltre modbus). Nelle soluzioni economicamente più abbordabili, come i circuiti integrati, modbus non è supportato e volevo sapere se un modulo di espansione I/O potesse gestire autonomamente altri tipo di comunicazione seriale, sincroni (e quindi magari condividendo il clock) o asincroni, per mettere il dato in un registro che venga poi interrogato dal master tramite modbus.
La mia idea di funzionamento era: registro del contatore interrogato tramite un qualche protocollo seriale, implementato direttamente nel circuito integrato del contatore, da un modulo di input (intelligente) -> registro del modulo di input interrogato dal master tramite modbus. Il problema è che non so se questo metodo di funzionamento abbia senso; ripeto che sono ingorante in materia ed oltre a risolvere il problema vorrei usarlo come esempio per capire meglio; anzi oserei dire che risolvere il problema sia quasi secondario.
Ho anche visto che alcuni moduli di input supportano la funzione di contatore, che sarebbe una soluzione ideale, ma non capisco dalla documentazione se sono anche autonomamente capaci di leggere non solo semplici segnali ma anche segnali in quadrature, usando quindi due input e contando ad aumentare ed a diminuire.

 

35 minuti fa, Ctec ha scritto:

Notare però che tale procedimento non è molto veloce. Dipende dalla velocità di trasmissione, dal numero dei dati inviati e richiesti, e dalla velocità di interrogazione (velocità di polling).

Il master (pc con software mach3 per CNC) interroga ogni 25ms. L'encoder è un volantino che controlla gli assi di una macchinario che fresa. Non credo di poterlo girare manualmente velocemente abbastanza da creare problemi.

 

 

38 minuti fa, Ctec ha scritto:

Ora una mia domanda: con gli STM32 (Nucleo) è possibile leggere un encoder incrementale ad alta velocità, mediante l'apposita funzionalità dei suoi timer. Il frame modbus lo potresti inviare anche direttamente su USB (non l'ho mai fatto). Per connessioni ad alta velocità consiglio Modbus/TCP (via ethernet).

Si, è possibile e l'ho fatto. L'ho usato ed era funzionante;sia tramite USB con ST-Link sia tramite segnale rs-485 con un convertitore che trasformava l'uscita UART del controllore in RS485 e poi un altro convertitore che passava da RS-485 a USB. Poi ho bruciato la scheda con un truciolo che ha cortocircuitato l'alimentazione, non ho messo la copertura in plastica al lato di un morsetto DIN lasciato volante.
Come detto voglio imparare. Ho risolto in un modo e ora volevo sapere se si poteva risolvere in altro modo e confrontare. 
La cosa che più vorrei fare è interfacciare questo encoder senza usare il microcontrollore, da me programmato (tramite libreria), e piuttosto passare i segnali A e B ed i rispettivi negati ad un circuito integrato che lo trasformi in segnale single ended (questa parte già l'ho fatta) e poi passare per un nuovo circuito integrato che conti e passi il conteggio ad uno degli input di un modulo di I/O che suppongo abbia un controllore che gestisca modbus con una libreria più affidabile di quella che ho scaricato sulla scheda ST.
La soluzione ottimale, ma costosa, invece sarebbe un modulo che faccia tutto da solo e montabile su guida DIN, non mi piace avere schede PCB a vista nel armadio elettrico.  

Link al commento
Condividi su altri siti

9 minuti fa, Stefano Prato ha scritto:

Il master (pc con software mach3 per CNC) interroga ogni 25ms. L'encoder è un volantino che controlla gli assi di una macchinario che fresa. Non credo di poterlo girare manualmente velocemente abbastanza da creare problemi.

Questo non aiuta. Esistono, mi pare, dei moduli di I/O che hanno la possibilità di avere contatori veloci, ma generalmente limitati a 1kHz. E spesso hanno bisogno di segnali separati per il conteggio Up/Down, non in quadratura.

Una possibile soluzione, ma costosa, sono i moduli componibili di I/O (tipo per esempio il bus coupler BK7350 con un modulo KL5101 per leggere un encoder direttamente in line driver).

Non è possibile gestire il modbus senza microcontroller, infatti qualsiasi unità che si interfaccia con un protocollo ha bisogno di un minimo di intelligenza per gestirlo. Non troverai mai un integrato (che non sia un microcontroller) che gestisca direttamente un protocollo non hardware come il modbus.

 

Perché dici che la libreria modbus di ST non è affidabile? Io addirittura me ne feci un port io in C per un 8051 derivato. E ho un paio di sistemi che interfacciano un mio impianto (bus proprietario) con un PC in modbus utilizzando una Discovery board con STM32 e libreria di allora. Sono in funzione dal 2009 senza problemi...

Le schede basta metterle in un opportuno contenitore e non hai schede a vista. Del resto, anche i PLC sono fatti con schede... 😉

 

Link al commento
Condividi su altri siti

Livio Orsini
43 minuti fa, Stefano Prato ha scritto:

Il master (pc con software mach3 per CNC) interroga ogni 25ms. L'encoder è un volantino che controlla gli assi di una macchinario che fresa. Non credo di poterlo girare manualmente velocemente abbastanza da creare problemi.

 

Finalmente cominciamo ad avere dati più precisi e non vaghi.

 

Hai la necessità di contare gli impulsi e di avere un qualche cosa che mette il regstro di conteggio su di una linea seriale, trasferire poi questi dati secondo un protocollo.

Che tu usi un piccolo PLC dotato di contatori e linea seriale, o che usi un sistema dedicato la soluzione ha sempre questi punti fermi.

 

Comunque questo master avrà un suo protocollo di comunicazione, quindi anche il dispositivo dedicato al conteggio dovrà comunicare con il medesimo protocollo.

 

 

 

Link al commento
Condividi su altri siti

Stefano Prato
24 minuti fa, Ctec ha scritto:

Non è possibile gestire il modbus senza microcontroller

Speravo infatti di far fare questo al microcontrollore del modulo di input piuttosto che ad uno programmato da me.

 

 

25 minuti fa, Ctec ha scritto:

Perché dici che la libreria modbus di ST non è affidabile?

Sicuramente una libreria ben fatta funzionerà bene, possibilmente sarà proprio un controllore ST a stare dentro molti moduli di input. Il problema è che la mia conoscenza di programmazione si ferma ad una triennale in ingegneria informatica (so programmare ma non insegano a gestire l'hardware o nemmeno il SO)  e non ho mai approfondito questo aspetto autonomamente, cosa che vale enormemente di più di una laurea. Ho scaricato una libreria che sicuramente funziona ma non mi fido delle modifiche che ho fatto per adattarla alle mie esigenze. Tra i vari progetti che volevo mandare avanti c'era di comprare il microcontrollore senza alcuna scheda e montarlo su PCB che avendo un macchinario a controllo numerico potrei facilmente fresare da solo. La scheda la stavo progettando su Fusion 360 ma alla fine i costi e il fatto di dover apprendere molto lato elettronico (filtri vari ad ogni input) mi hanno fatto desistere. Per quanto di limitata utilità pratica l'università ha l'enorme vantaggio di insegnare in maniera molto organizzata; abituati a questo, il doversi informare racimolando informazioni da un sito all'altro è quasi frustrante. Purtroppo il costo di questa organizzazione è il non poter liberamente scegliere quali componenti trattare come scatole chiuse e quali studiare fino quasi alla struttura dell'atomo trattando superficialmente tutto ciò che compone la scatola.

Link al commento
Condividi su altri siti

Stefano Prato
24 minuti fa, Livio Orsini ha scritto:

Comunque questo master avrà un suo protocollo di comunicazione, quindi anche il dispositivo dedicato al conteggio dovrà comunicare con il medesimo protocollo.

Il master nasce per funzionare tramite porta parallela alla quale si possono collegare vari input e dalla quale vengono inviati i segnali per i motori (impulsi Step e Dir) coerenti con la traiettoria calcolata. Col tempo sono stati creati dei dispositivi che scaricano di lavoro il computer andando a interfacciarsi con USB o Ethernet ( anche PCI per soluzioni più costose) e gestendo loro input e output (motori compresi). Il software permette come detto anche la comunicazione modbus. L'encoder può essere collegato sia tramite modbus (non permettendo però di contare e prendendo solo il conteggio) sia collegando i segnali dell'encoder alla porta parallela, o dispositivo esterno sopracitato; in questo caso, pur non supportando il passaggio da differenziale a single ended, il master è capacissimo di contare. Nell'esperienza con il microcontrollore ho anche notato che la comunicazione tramite porta parallela è più responsiva di quella con modbus. 
Il motivo per cui preferirei usare modbus, sperando che soluzioni migliori portino meno ritardi di quella con il microcontrollore, è legato all'ordine dell'impianto. Collegare l'encoder al dispositivo che fa le veci della porta parallela richiede un cavo in più e più lungo. Il volantino (encoder) è montato su una pulsantiera e i pulsanti sono tutti collegati via modbus con un semplice cavo rs 485 dal quale vorrei passasse anche la comunicazione con l'encoder.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...