Vai al contenuto
PLC Forum


Modbus TCP/IP S7-1214C Nemo 96HDLe


Davide.Paio

Messaggi consigliati

Buongiorno a tutti, ho un leggero problemino di comunicazione/configurazione con il Modbus TCP/IP.

Setup: CPU S7-1200 1214C DC/DC/DC

HMI: WEINTEK CMT3072

INVERTER: G120C

MULTIMETRO: NEMO 96HDLe

ESPANSIONE ETHERNET MULTIMETRO: IF96015

SOFTWARE: TIA v17

 

Ho seguito le istruzioni per configurare il multimetro e l'espansione e fin qua quasi tutto ok. L'unica pecca è che non vi è specificato il tipo CLIENT/SERVER, quindi ho testato entrambi nella CPU.

 

ISTRUZIONE CLIENT SU S7-1200

image.png.dcc5f372ad0645c9fc14452cd0b8d4a0.pngimage.thumb.png.1a25f0a679c7d2ce1ba9afb03deae8a1.png

 

ISTRUZIONE SERVER SU S7-1200

 

image.png.4badc0168ca9fc923ce2a77c4fd70cf4.pngimage.thumb.png.9b713175a460e3f570d573825d972b58.png

 

DATA ARRAY 

image.thumb.png.88f88b92fe131e9246c83651ec55b672.png

 

Questi sono alcuni valori che dovrei leggere dal multimetro:

image.png.3209d9e88ec3be9c3b0e60ac78c4bd0b.png

 

Provando a lanciare il tutto la variabile STATUS cambia stato diventando 16#7006, secondo il manuale di Siemens di quelle istanze significa che sta leggendo i dati ma l'array rimane sempre vuoto.

Cosa sto sbagliando?

Heeelp PLS
 

Link al commento
Condividi su altri siti


ho dato un'occhio al volo, MB_Server non ti serve, serve solo se qualcuno deve leggere dei dati del tuo plc via mb,

se vuoi leggerli tu da qualche dispositivo devi usare la MB_client

primo errore che ho visto è che il req è forzato alto, il blocco lavora sul fronte, quindi se devi fare una lettura ciclica devi farlo clockare

il secondo errore potrebbe essere che leggi dal holding register sbagliato, a naso direi che devi cominciare a leggere dal hr 40000(dec) + 0x301(hex)

terzo errore, stai provando a leggere dei dati di tipo UD_WORD e dichiari l'array di tipo word, io lo dichiarerei di tipo UDINT.

 

prova così

 

 

Link al commento
Condividi su altri siti

Il 28/12/2022 alle 18:54 , Mattia Spoldi ha scritto:

ho dato un'occhio al volo, MB_Server non ti serve, serve solo se qualcuno deve leggere dei dati del tuo plc via mb,

se vuoi leggerli tu da qualche dispositivo devi usare la MB_client

primo errore che ho visto è che il req è forzato alto, il blocco lavora sul fronte, quindi se devi fare una lettura ciclica devi farlo clockare

il secondo errore potrebbe essere che leggi dal holding register sbagliato, a naso direi che devi cominciare a leggere dal hr 40000(dec) + 0x301(hex)

terzo errore, stai provando a leggere dei dati di tipo UD_WORD e dichiari l'array di tipo word, io lo dichiarerei di tipo UDINT.

 

prova così

 

 

Grazie per la risposta, domani provo ad utilizzare solamente MB_Client e gli aggiungo un clock, il bit REQ deve rimanere alto per qualche secondo mi basta un semplice impulso?

Per quanto riguarda l'holding register mi basta convertire 0x301(hex) in valore DEC (769) e sommarlo a 40000, diventado così 40769? Corretto?

Il 28/12/2022 alle 20:42 , Yiogo ha scritto:

è sbagliato provare prima con un plc, risolvi prima i problemi di comunicazione con un client modbus da pc, una volta che ti sei chiarito tutto passi al plc

Riusciresti a consigliarmene 1? Grazie

Link al commento
Condividi su altri siti

Il 28/12/2022 alle 18:54 , Mattia Spoldi ha scritto:

ho dato un'occhio al volo, MB_Server non ti serve, serve solo se qualcuno deve leggere dei dati del tuo plc via mb,

se vuoi leggerli tu da qualche dispositivo devi usare la MB_client

primo errore che ho visto è che il req è forzato alto, il blocco lavora sul fronte, quindi se devi fare una lettura ciclica devi farlo clockare

il secondo errore potrebbe essere che leggi dal holding register sbagliato, a naso direi che devi cominciare a leggere dal hr 40000(dec) + 0x301(hex)

terzo errore, stai provando a leggere dei dati di tipo UD_WORD e dichiari l'array di tipo word, io lo dichiarerei di tipo UDINT.

 

prova così

 

 

Ho provato a effettuare le modifiche che mi hai proposto ma nulla in merito. Ho provato anche a cambiare MB_MODE in 104 ma o si blocca nella lettura dei dati oppure mi dice che un' altra istanza modbus è in corso. Ho cambiato l'array in DInt, holder register start a 40769 oppure solamente 769 ma non legge niente. MB_DATA_LENGHT ho provato anche ad abbasare questo arrivando a portalo a 1 ma la faccenda non cambia.

I'm sad

Link al commento
Condividi su altri siti

Mattia Spoldi

secondo me, i valori del multimetro che devi leggere, non sono negli holding register, ma devi "pescarli" da qualche altra parte, a naso direi dagli ingressi, ma senza manuale del multimetro ci si fa poco.

Link al commento
Condividi su altri siti

Il 8/1/2023 alle 10:01 , Mattia Spoldi ha scritto:

secondo me, i valori del multimetro che devi leggere, non sono negli holding register, ma devi "pescarli" da qualche altra parte, a naso direi dagli ingressi, ma senza manuale del multimetro ci si fa poco.

questo è il link con il manuale degli indirizzi: https://www.imeitaly.com/wp-content/uploads/technical-sheets/PR106.pdf. Provando con il tasto cerca non viene neanche menzionato l'holding register

Link al commento
Condividi su altri siti

il manuale dice che devi leggere con il codice funzione modbus 0x03(pag 7), il manuale di siemens dice che per il codice funzione 0x03, devi usare o il mb_mode a 0 o a 103,

la differenza(credo) è come vengono interpretati gli indirizzi, con 0 parti a leggere dal famoso 40001, mentre col 103 parti dal registro 0.

io proverei con 

mb_mode a 0 e come indirizzo 40001 + 769 

mb_mode a 103 e come indirizzo 769

 

per il parametro mb_Data_len, non riesco bene a capire come viene gestito, il manuale siemens parla di inserire il numero di registri che vai a leggere, il protocollo modbus specifica che i registri sono a 16 bit, nel caso del tuo strumento ti invia dati a 32 bit, quindi secondo me, tu devi leggere 6 registri del tuo strumento, ma siemens li vuole gestiti come 12 registri, quindi, sempre secondo me, dovresti inserire 12

 

per l'array di destinazione, io farei (almeno per incominciare a provare) un'array di 100 elementi di tipo udint o dword, poi una volta capito il giochino, lo riduci alle sole (spero) 6 che ti servono.

 

Ultimo ma non ultimo, quando cambi il mb_mode con la cpu in run, il blocco mb_client, si incasina, se stai facendo delle prove con impianti in produzione, prima di cambiarlo, blocca il req e alza il disconnect, se stai facendo prove a banco, fai uno stop-run della cpu che fai prima.

 

Alla mal parata, ti consiglio di recuperare un software di test per il modbus e provare prima con quello, escludi il plc e fai tutto da pc, una volta capito come ti risponde lo strumento, gli vai dietro con il plc.

image.thumb.png.a874a403658b56ab53c80712a6c36f9e.png

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