Vai al contenuto
PLC Forum


Lettura multipla su ModBus


LSP77

Messaggi consigliati

Ciao a tutti,

sono nuovo del forum e anche del mondo dei PLC e vi chiedo il vostro aiuto per la seguente questione.

Con PLC S7-1200, tramite modbus 485, sto interrogando uno strumento SENECA S203TA-D, che da delle misure elettriche di tensione potenza consumo ecc...

I registri che vado a leggere sono di tipo Float a 32 bit. Io sul prog PLC ho preparato una DB dove parcheggiare questi valori, con N registri di tipo real.

Leggo quindi 2 registri alla volta per avere una singola misura.

Fin qui tutto ok, il problema è se voglio fare letture di registri multiple, non riesco a farle.

Uso il blocchetto modbus mastrer, e su mode imposto = come da specifiche siemens che mi pare va bene per tutti i tipi di letture.

Se faccio una lettura multipla come dicevo, il blocchetto mi restituisce il bit di errore e su status mi da il codice 16#818B che da manuale siemens significa 

Puntatore non valido all'origine o alla destinazione locale dei dati: dimensione non corretta.

Come dicevo, se vado a leggere singolarmente questi registri tutto OK.

Sapete dirmi come posso fare letture multiple? Il costruttore dello strumento mi ha assicurato che è fattibile.

Grazie a tutti!

Link al commento
Condividi su altri siti


Giuseppe Signorella

Ciao, 

Se ricordo bene il DB deve essere non ottimizzato.

Ti consiglio di crearti un array di word, di dimensioni pari al numero di registri da leggere.

Giusto per chiarimenti. Ogni registro modbus può leggere al massimo sedici bit. (1 word). Trattandosi di dati float (32 bit) per ogni lettura ti occorrono due registri (2 word). 

Pertanto se devi leggere 10 valori l'array dovrà essere di 20 word.

Questa soluzione ti facilita molto dopo riorganizzare le DWORD (float) nel formato corretto.

Fammi sapere se risolvi.

Ciao

 

Link al commento
Condividi su altri siti

Non è detto che sia fattibile, non sono espertissimo in materia ma ci sono dentro nel mio lavoro e sto imparando pure io.

HO notato che la quantità di registri inviabile via Mpodbus non è standard, ma varia da strumento a strumento. Alcuni arrivano a 99 registri consecutivi.

 

TI posso garantire che funziona quel blocco, io lo uso su diversi inverter, ultimo il Santerno che ho rifatto completamente un mese fa'.

 

Vado ad aprirmi il programma 

Link al commento
Condividi su altri siti

Modo di funzionamento   0 ( ZERO ) se vuoi leggere i registri dal 40.000 in su, quelli che suppongo tu abbia bisogno ..

 

in DATA_PTR devi mettere ( esempio P#DB1000.DBX0.0 )  il primo bit della tua DB che ovviamente avrà ALMENO le Word pari alla lunghezza che tu hai richiesto, senno' genera quell'errore

 

Come detto da Giuseppe, ogni registro ti da una word ( due caratteri esadecimali ) e potrebbero essere il tuo dato, altrimenti se il dato è 32 bit devi lavorarteli unendo due registri, ma questo lo vedi nel protocollo fornito da chi ha fatto lo strumento.

Link al commento
Condividi su altri siti

Stavo rileggendo ora .... tu stai già facendo una lettura multipla se leggi 2 registri per ottenere un float a 32 bit ....

 

Non capisco come tu possa riscontrare errori. La DB va fatta come un array di word, in cui le word sono il numero di registri a 16 bit ( 2 word per 32 bit  ok, ma questa è una elaborazione che avviene DOPO la lettura dei registri )

Link al commento
Condividi su altri siti

ifachsoftware

In generale con Modbus dovresti prestare attenzione alle seguento problematiche :

1) Che le aree di memoria da leggere siano consecutive ,

2)  Non tutti i dispositivi supportano le letture multiple 

3) Le numerazioni dei registri (con alcuni strumenti partono da 1 , altri da 30000 altre da 30001 ....)

 

Se vuoi un consiglio , prova prima con un simulatore modbus i singoli comandi che funzionino e poi passi al PLC

Link al commento
Condividi su altri siti

Ciao a tutti e grazie per le risposte!

Le ho provate tutte ma non riesco a fare letture multiple (massimo 2 variabili per leggere il dato in formato real) quindi ho deciso di fare tutte letture singole cicliche.

Adesso, dovrei integrare queste letture in una rete modbus, dove il PLC va già a scrivere variabili su una 15ina di inverter.

Essendo inesperto, vi schiedo consiglio su come incastrare tutte queste letture. Io attualmente, col "done" di una lettura/scrittura, passo alla successiva e così via. E' corretto o mi consigliate di fare in altri modi?

Grazie in anticipo

Link al commento
Condividi su altri siti

Giuseppe Signorella

Trovo alquanto strano che non si riescano ad effettuare letture multiple e/o che lo strumento non accetti questa modalità (codice funzione).

 

Quando i device da leggere e scrivere sono più di uno, io in genere procedo nel seguente modo:

1) creo una variabile che normalmente chiamo ID_device, che identifica il device da interrogare.

Questa variabile viene incrementata di una unità ad ogni conclusione di ciclo di lettura/scrittura.

Quando ho terminato la lettura di tutti i device, la resetto riportandola al valore iniziale (in genere 1).

 

2) Creo degli array di strutture (quanti ne occorrono) in funzione al numero dei device.. 

Al suo interno creo le variabili che conterranno i valori ricevuti e trasmessi.

 

La stessa variabile ID_device fungerà da indice dell'array di struct.

 

Ad ogni ciclo di lettura-scrittura verifico se la comunicazione si è conclusa senza errori, altrimenti segnalo che un determinato device non risponde. Lo identifico sempre con  variabile ID_device. Mi piace associare anche la medesima variabile ad un elenco testi sul pannello operatore così si può identificare con un nome il device. Facilita la storicizzazione negli allarmi. 

 

Se si è verificato un errore, dopo gli accorgimenti del caso, salto alla fine del ciclo ed incremento la variabile  ID_device per passare al device

successivo.

 

Ciao

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