Vai al contenuto

Tricka90

Salvare letture analogiche su PC

Recommended Posts

Tricka90

Buongiorno a tutti.

Possiedo un S7-400H connesso a 13 trasmettitori di pressione.

 

Vorrei leggere i 13 valori per periodi relativamente brevi (meno di un minuto) ad una frequenza di almeno 5 volte al secondo e salvarli su un PC (per trasportarli poi su un documento Excel).

Tale operazione risulta semplice in ambiente TIA Portal, grazie alle comode istruzioni di Data Logging. Tuttavia il PLC S7-400H funziona tramite Simatic Manager col quale, a giudicare dalle informazioni che sto trovando sul web, salvare dati su PC sembra essere più complicato. Sapreste consigliarmi una procedura semplice per riuscirci?

 

In alternativa potrei semplicemente ricevere i dati sul PC via Modbus e salvarli tramite appositi software (PLC Logger sembra fare al caso mio). Il PLC infatti è già impostato per inviare continuamente i 13 valori via Modbus, ma ad una frequenza che attualmente è piuttosto bassa: non più di due volte al secondo. Sarebbe possibile aumentare la frequenza di invio dati via Modbus?

 

( Il Baudrate è attualmente imostato a 19200 bps. Per la mia applicazione, necessito di soli 16x13x5 = 1040 bps perciò in linea teorica non starei chiedendo troppo).

 

Grazie infinite a chiunque mi darà una mano.

Buona giornata.

 

Condividi questa discussione


Link discussione
Condividi su altri siti
rguaresc

Se il minuto non è ripetitivo a breve termine ti consiglierei di salvare i dati in un DB da 13 x 60 x 5  posizioni e poi trasferire il DB. In questo modo ti svincoleresti dai limiti della comunicazione Modbus RTU.

I ritardi del Modbus RTU dipendono da molti fattori, immagino che usi una CP340/341 che lavora con i suoi tempi.

 


 

Condividi questa discussione


Link discussione
Condividi su altri siti
Tricka90

Ti ringrazio per la risposta chiara e tempestiva, il minuto non è ripetitivo, perciò la tua mi sembra un'ottima idea.

Ho però un dubbio: come posso trasferire i dati salvati nel DB sul mio computer?

Condividi questa discussione


Link discussione
Condividi su altri siti
rguaresc

Più o meno come facevi prima con la differenza che devi esplorare il DB per prelevare e trasmettere un dato alla volta. Lo farei con i puntatori

 

Quote

// in una funzione ciclica, comune
// solo una volta quando avvii il trasferimento

      AUF   DB   100                    // blocco dati con i valori INT, uno per word
      L     P#0.0                       // inizializza ....
      T     MD   200                    // ... il registro indice a 32 bit MD200

 

 

Quote

// in un OB a tempo da 500 millisecondi
      L     DBW [MD 200]                // carica la word dal DB 
//  e trasferisci al modbus con le istruzioni di prima
      L     L#16                          // carica 16, posizioni bit per andare alla word successiva
      L     MD   200
      +D                                // e incrementa il puntatore di 16 posizioni bit
// alla prossima scansione andrà il dato successivo

In modo analogo per la scrittura del DB, però un in OB a tempo più veloce da 200 mS

 

 

Condividi questa discussione


Link discussione
Condividi su altri siti
Tricka90

Scusami, non ho capito.

Così facendo starei comunque inviando i dati via Modbus, ma in blocco invece che valore per valore?

Condividi questa discussione


Link discussione
Condividi su altri siti
Livio Orsini

L'idea è quella di acquisire le letture velocemente, memorizzarle in un blocco di memoria PLC per poi acquisirle con la velocità consentita da Modbus

Condividi questa discussione


Link discussione
Condividi su altri siti
batta
Quote

Tale operazione risulta semplice in ambiente TIA Portal, grazie alle comode istruzioni di Data Logging. Tuttavia il PLC S7-400H funziona tramite Simatic Manager

Non è una questione di ambiente di sviluppo (TIA Portal o Simatic Manager), ma di CPU.

 

Per quanto riguarda invece la storicizzazione dei dati precedentemente memorizzati nel DB, più che creare un puntatore nel PLC (che richiede anche una sorta di handshake per l'incremento del puntatore), gestirei tutto dal lato PC. Se nel DB ho creato un array con 300 variabili, da PC, con un ciclo FOR, leggo e storicizzo tutte le variabili. Alla fine posso inviare un comando al PLC per azzerare tutto il DB. Oppure (ma impegna di più la comunicazione), nel ciclo FOR posso leggere, storicizzare e azzerare le variabili del DB.

Oppure, per ottimizzare la comunicazione, si potrebbe fare una o più letture multiple (da valutare quanti registri si possono leggere in un colpo solo con il Modbus), appoggiando tutto l'array del PLC su un array di variabili del PC, e poi, col solito ciclo FOR, storicizzare.

Condividi questa discussione


Link discussione
Condividi su altri siti
rguaresc

Si può fare in tanti modi, ma la mia proposta è per il "minimo sforzo", visto che la comunicazione ora funziona a 2 dati al secondo incanalare il DB allo stesso ritmo richiede minime modifiche.
Agendo dal PC, 13 x 60 x 5 sono 3900 word, se i buffer attuali sono inferiori (probabile) occorre mettere mano al dialogo Modbus tra la 440/441 e il PC

Condividi questa discussione


Link discussione
Condividi su altri siti
Tricka90

Grazie mille a tutti, mi avete dato delle ottime idee.

Alla fine ci sono riuscito senza passare dalla Modbus, ma connettendo il computer al PLC e leggendo i valori salvati sul DB tramite una Variable Table. Premendo Ctrl+A li seleziono tutti e poi con Ctrl+C li copio per portarli su Excel.

Tuttavia ho un piccolo problema: la Variable Table legge i valori delle sole righe che ci stanno nello schermo, circa una cinquantina. Perciò anche se copio tutta la Variable Table mi ritrovo i valori letti solo nelle prime 50 righe. Ciò mi costringe a scrollare la Variable Table copiando le righe 50 alla volta. Il metodo funziona ma ovviamente non è il. massimo. È possibile impostare la Variable Table per aggiornare anche le righe nascoste che non stanno su schermo, in modo da copiare tutto il DB in un colpo solo? 

Condividi questa discussione


Link discussione
Condividi su altri siti
Tricka90

A nessuno viene in mente come potrei risolvere?

Grazie 

Condividi questa discussione


Link discussione
Condividi su altri siti

Registrati o accedi per inserire messaggi

Devi essere un utente registrato per lasciare un messaggio. La registrazione è GRATUITA.

Crea un account

Iscriviti alla nostra comunità. È facile!

Registra un nuovo account

Connettiti

Hai già un account? Connettiti qui

Connettiti adesso


×