Vai al contenuto
PLC Forum


Valori digitali


nikopoli

Messaggi consigliati

Buonasera, volevo chiedere se era possibile con gxworks 2 leggere dei valori digitali 24 bit, premetto che magari sto chiedendo una ****, ma avendo lavorato con dei micro controllori mi chiedevo se potesse fare anche  con un plc.

grazie! 

Modificato: da nikopoli
Link al commento
Condividi su altri siti


Ci sono delle istruzioni apposite per fare le conversioni da operandi booleiani, non ricordo il nome preciso dell'istruzione, mi sembra BIN, però non so quale sia il limite dei bit binari da inserire, l'ho fatto in passato per leggere il valore di un vecchio encoder assoluto che aveva la rappresentazione della posizione con tre cifre rappresentate con uscite digitali che identificavano il valore digitale dei gradi della posizione dell'asse, occhio però che questo tipo di codifica è legato al tempo della scansione di programma

Link al commento
Condividi su altri siti

Allora non avevo capito bene la domanda.

Dunque, prima di tutto gli ingressi del PLC sono a 24Vdc, pertanto se ti aspetti di leggere segnali digitali a 5V o a 3,3V, non puoi farlo senza appositi circuiti adattatori.

Poi li mandi a un banco di ingressi, magari sequenziali per semplificarsi la vita nel software. A quel punto muoverai i bit di ingresso in una doppia word per avere il dato che ti interessa.

Link al commento
Condividi su altri siti

Per quanto riguarda la tensione ne ero già al corrente, ma supponendo di collegare il Tx e RX in uscita dal mio apparecchio ai rispettivi ingressi x0 e x1 qual’è poi la funzione con la quale posso leggere i bit? Più che altro come li faccio comunicare tra di loro? 
Premetto che non ne so proprio nulla in quanto fino a ieri non sapevo nemmeno se fosse possibile! 

Link al commento
Condividi su altri siti

No, scordati di vedere segnali di comunicazione mediante ingressi normali, sono ingressi per sensori.

Parli di Rx e Tx, quindi una qualche seriale. Non so che PLC hai, ma di serie i Mitsubishi hanno la RS422/RS485, per cui ci vorrebbe un adattamento. Inoltre sarebbe da vedere il tipo di protocollo utilizzato.

Perché non provi a specificare meglio che cosa è il tuo apparecchio?

Link al commento
Condividi su altri siti

Il plc è quello del manuale che vedi in allegato mentre il dispositivo con cui mi piacerebbe interfacciarmi è un hx711 è un convertitore analogico digitale per celle di carico, so che esistono gli amplificatori analogici e dispongo già di essi, ma vorrei mettere le due condizioni a confronto. Grazie mille!!!https://cdn.sparkfun.com/datasheets/Sensors/ForceFlex/hx711_english.pdf 

Coolmay MX2N series HMI PLC all in one programming Manual.pdf

Link al commento
Condividi su altri siti

Eh, non ce la puoi fare. Non è una seriale normale, ma un segnale digitale sincronizzato con un clock (che dovrebbe dare il PLC). Ma da datasheet, il tempo massimo di ON del clock è di 50us, considera che un tempo di scansione buono (non con quel PLC) è minimo 1ms (cioè 1000us, 20 volte più lungo...).

Dovresti mettere un altro trabiccolo (che so, un arduino) che legge lo HX711 e converte i dati in seriale RS232 o RS485...

Link al commento
Condividi su altri siti

Ho capito allora cercherò di realizzare un programma per arduino per effettuare la conversione e poi magari ti romperò nuovamente le scatole perché sono proprio curioso di apprende e sfruttare le potenzialità di questo tipo di comunicazione che non conoscevo fino ad oggi (mi stavo documentando e correggimi se sbaglio ma la comunicazione che si andrebbe ad utilizzare è una modbus corretto?Nel mio caso qual’è sarebbe più opportuno usare 232 o 485? Ho letto che la 485 è quella più utilizza in quanto permette distanze maggiori ma da cosa capisco se è utilizzabile sul mio plc?) intanto grazie mille!!!!!!! 

Modificato: da nikopoli
Link al commento
Condividi su altri siti

Il ModBus (RTU o ASCII, meglio il primo) è un protocollo libero, di cui si ha tutta la documentazione. Non è difficile da implementare (probabilmente per Arduino trovi anche delle librerie già fatte).

Ma sinceramente non mi pare sia nativo degli FX2N (o il tuo MX2N), per cui non potresti comunicare con il PLC in tal modo. Mi riservo comunque di ricontrollare, tempo permettendo.

Il protocollo nativo di Mitsubishi mi pare non sia pubblico. Ma mi pareva che ci fosse anche la possibilità di avere messaggi senza protocollo, quindi stringhe di byte senza formattazione specifica, e in tal caso te lo dovresti fare te. Vale lo stesso il fatto di controllare.

 

Per quel che riguarda il layer fisico, i Mitsubishi, come detto, ha di serie la RS422 (che non è altro una doppia RS485 con Rx e Tx separati). Consente, mediante buon cavo e giuste terminazioni, anche 1km di distanza a velocità decenti, contrariamente ai 15m della RS232. Nei manuali dovrebbero essere riportate le connessioni per la RS485. La uso comunemente con gli FX5U (che tra l'altro hanno di serie il Modbus RTU).

 

Link al commento
Condividi su altri siti

Leggendo nel Manuale de mio plc sotto modbus rtu c’è un po’ di roba quindi prima mi documenterò su questo tipo di trasmissione così poi magari riuscirò a comprendere meglio senza dover fare troppe domande, intanto grazie! 

Link al commento
Condividi su altri siti

Da quel che vedo nel manuale che hai postato, il Modbus RTU è implementato se monti l'apposito modulo RS485, ma non puoi usare la RS232 contemporaneamente. Quindi, di base il PLC non ce l'ha, devi acquistare il modulo.

Link al commento
Condividi su altri siti

Stefano Dellanoce

Eccoti qui, ti ho trovato Nikopoli. Non so se sul forum di Arduino leggerai la mia risposta al tuo messaggio privato, ma comunque te la copio anche qui, perché può far comodo a molti, dato che i sensori e le espansioni del mondo PLC sono molto più costose di quelle del mondo Arduino (l'affidabilità è un altro discorso che per adesso lascerei stare...).

 

Si, sono riuscito a leggere le celle di carico con il classico amplificatore HX711.

Prima facevo leggere la cella dall'amplificatore e poi passavo da un Arduino (come ho visto che ti è stato intelligentemente suggerito), poi ho sostituito l'Arduino con un Attiny, più piccolo, per poterlo mettere in una scatolina insieme al HX711.

Poi, IDEA (!!!!), avendo un clone Mitsubishi FX3u (e anche su questi cloni credo che ormai bisognerebbe aprire un discorso per le enormi qualità che hanno), con già a bordo entrate e uscite analogiche, (oppure se hai un FX3u Mitsubishi devi prendere l'espansione.... che comunque ti costa solo quella più del clone !!!) ho pensato di togliere l'attiny e pilotare il CLK dell'amplificatore da una uscita di queste a cui, prima, ho dato come valore minimo 0 e come valore massimo 2048 (che corrisponde a 5 volt), in modo da non bruciare l'amplificatore.
Per la lettura del pin DATA, anche quello a 5 volt, sono passato da un transistor NPN alimentato a 24 volt, usandolo come commutatore elettronico, semplicemente come si usa per pilotare un relé. Da questo transistor, quindi, escono i 24V da mandare ad un ingresso del plc.

 

Nel momento in cui scrivo mi hai fatto venire un'altra IDEA !!!! (hahahahahahah). Siccome ho gli ingressi analogici, magari posso leggere il pin DATA del HX711 da quel pin e togliere il transistor.... Vabbé, vedremo se si può.

Uso GXWorks 2 e non ho nessun problema a mandarti le 10 righe di ladder.

Ti dirò che la velocita del FX3u mi ha...SPAVENTATO, perché è paragonabile QUASI all'Arduino, ma sto parlando di un clone FX3u fatto con una CPU ARM e non so se l'originale ha la stessa potenza di questa CPU.
 

Modificato: da Stefano Dellanoce
Link al commento
Condividi su altri siti

Stefano, ma come caspio fai a pilotare il clock con una uscita del PLC? L'unica è usare un treno di impulsi (uscita PWM a 50%), ma non avresti nessun controllo tra la partenza del treno e il sincronismo dell'ingresso. Io uso spesso gli FX5U, estremamente più veloce di un FX3U, ma al minimo si riescono ad avere tempi di scansione di 0,5ms (500us) quindi al massimo avremmo un periodo di clock di 1ms (0,5ms x 2) cioè 1kHz. Siamo lontanissimi dalla tempistica riportata a datasheet. Se poi si cerca di usare l'uscita analogica del PLC anche se ha una velocità di conversione di 30us, il valore da emettere è aggiornato ad ogni ciclo di scansione, per cui si ritorna ai tempi di prima.

Anche per gli ingressi, non si possono utilizzare contatori veloci, sempre per problemi di sincronizzazione e per il fatto che ne conteremmo solo il numero di impulsi, non la sequenza. Anche mettendo al minimo i filtri sugli ingressi digitali, saremmo comunque succubi del tempo di ciclo, e questo anche nel caso di gestione ad interrupt.

Quindi, mi puoi spiegare, sono curioso, come hai potuto gestire tali tempistiche? Io in passato ho usato dei moduli lettura peso con bus di campo (modbus RTU o meglio Modbus TCP), per evitare ulteriori errori dovuti alle conversioni analogico/digitali.

Link al commento
Condividi su altri siti

Stefano Dellanoce

Guarda, Ctec, io non sapevo nemmeno come leggere i bit uno a uno lo scorso anno, poi ho chiamato in Mitsubishi (la loro assistenza tecnica è sempre precisa, puntuale ed esauriente) e mi hanno detto di usare l'istruzione ladder [SFTL X001 M0 K24 K1] per leggere i 24 bit dell'amplificatore HX711 che prima, però, facevo passare da arduino e poi ritrasmettevo al FX3u. Il sincronismo lo davo io con arduino: Leggevo i dati da X1 e il sincronismo lo ricevevo con X0. Quindi usavo i due ingressi digitali.

Ha sempre funzionato perfettamente perché la schedina HX711 è velocissima mentre la trasmissione all'FX la facevo più lentamente.

Poi ho provato a passare ad Attiny (non cambiava nulla, era solo per le dimensioni) e poi direttamente e li, onestamente, ho avuto un po' di problemi perché rallentavo troppo pensando che il PLC non leggesse così velocemente. E' stata una sorpresa anche per me ma, ripeto, NON E' un FX3u Mitsubishi ma un clone con processore ARM (che, da quanto ho potuto vedere, se lo mangia il Mitsubishi!!!).

Posso mandarti anche i files in Ladder, sotto GXworks 2, ma non so come si fa...

 

Modificato: da Stefano Dellanoce
Link al commento
Condividi su altri siti

12 minuti fa, Stefano Dellanoce ha scritto:

che prima, però, facevo passare da arduino e poi ritrasmettevo al FX3u

Ah, ecco, ora mi torna. Non importa mandarmi nulla, mi pareva strano farlo direttamente con lo FX, tutto qui.

Alla fine è un po' come la soluzione che avevo proposto io, solo che io suggerivo l'uso di Arduino con uscita seriale Modbus.

Link al commento
Condividi su altri siti

Stefano Dellanoce

Questo onestamente non lo so, il programma è di poche righe, quindi il tempo di scansione è molto elevato ma non mi sono messo li a calcolare i cicli quando una cosa funziona

Link al commento
Condividi su altri siti

11 ore fa, Stefano Dellanoce ha scritto:

il programma è di poche righe, quindi il tempo di scansione è molto elevato

 

Forse intendi dire che il tempo di scansione è molto piccolo quindi la velocità è molto elevata.

 

11 ore fa, Stefano Dellanoce ha scritto:

...non mi sono messo li a calcolare i cicli quando una cosa funziona

 

Questo certamente non è molto professionale.  Non c'è nemmeno bisogno di contare i cicli, si possono fare facilmente delle misure del tempo di ciclo;anzi molti PLC lo fanno direttamente e lo mettono a disposizione in un dato di memeoria.

Link al commento
Condividi su altri siti

CTec mi sono cimentato un po’ nel capire com’è e come funziona il modbus a grandi linee, e mi sono accorto che si possono pilotare delle slave che funzionano anche solamente da pin out o pin input ed è molto interessante perché posso espandere il plc con poco, quindi mi sono informato a riguardo del mio plc ed ha la 485 con uscite A e B leggendo il manuale del mio plc ad un tratto parla del settaggio di d8120 ma è poco chiaro a riguardo in quanto non capisco cosa dovrei fare e più che altro non saprei come settare un registro (vedi foto).

 

Stefano ti ho risposto al messaggio.

6E479225-0CE5-4AC7-A94F-8290F1525DE1.png

Modificato: da nikopoli
Link al commento
Condividi su altri siti

Il D8120 definisce le caratteristiche della comunicazione, quindi è fondamentale. Cerco di fare chiarezza.

I primi 8 bit [0..7] definiscono i dati e la velocità di trasmissione (Layer fisico). Questi vanno impostati in accordo con quelli del ricevente, altrimenti non funzionerà un tubo.

Lunghezza dati: può essere di 7 o 8 bit, consiglio 8.

Parità: è possibile definire un bit di parità per fare un controllo integrità dati. Se il sistema non è molto rumoroso e il cavo è buono, si può tranquillamente mettere None.

Stop Bit: normalmente a 1, si imposta a 2 bit di stop in casi di problemi.

BaudRate: è la velocità di comunicazione, si sceglie in genere la più alta possibile. Più è lungo il collegamento, più bassa si metterà a causa delle perdite capacitive.

Per questi dati, una buona velocità è 38400, 8N1 (8bit, Nessuna parità, 1 bit di stop). Funziona sempre. Salvo limitazioni del ricevente.

 

I bit [10..12] definiscono il protocollo di comunicazione utilizzato (Layer logico). Nel tuo caso devi avere il PLC come master Modbus RTU, per cui dovranno essere 011.

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...