Vai al contenuto
PLC Forum


Salvare letture analogiche su PC


Tricka90

Messaggi consigliati

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.

 

Link al commento
Condividi su altri siti


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.

 


 

Link al commento
Condividi su altri siti

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?

Link al commento
Condividi su altri siti

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

 

 

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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? 

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