Vai al contenuto
PLC Forum


Modbus RTU 485 Slave


JohnWick

Messaggi consigliati

Buongiorno a tutti, sono nuovo del forum e volevo chiedere supporto sull'impostazione di una mappa Modbus seriale.

 

Devo impostare s7-1200 come Slave per una comunicazione Modbus ma la mappa dei registri è definita da un documento di requisiti esterno. In questo documento di specifica la mappa dei registri è definita a grandi linee come segue:

 

Primo dato nel registro 1000

Seguendo i dati 1001, 1002, 1003 e così via, fino al 1100 per esempio

Quindi un gruppo di dati a partire dal 2000 (2001, 2002...fino al 2100 per esempio)

Poi un altro gruppo di dati a partire da 3000.

 

Quindi ci sono molti buchi nel mezzo e l'aspettativa del Master è di ricevere un messaggio di errore nel caso in cui la richiesta cada in un buco. Questo requisito è comprensibile sulla base della mia esperienza con Modbus per schede elettroniche e PLC differenti (Schneider ad esempio). In Codesys, ad esempio, è possibile definire ciascun registro separatamente.

 

Per quanto di mia conoscenza del modulo Modbus RTU Slave di S7-1200, il db collegato al blocco con funzioni di holding register può essere solo uno e senza buchi nel mezzo. Se creo una mappa con word messe a zero come riempitivo ho due problemi: la risposta dello Slave sarà zero e non errore; il db sarà molto grande e consumerà memoria. Quindi la mia domanda è: posso definire una mappa del registro in modo diverso per soddisfare tutti i requisiti?

 

Grazie mille per il supporto

 

Link al commento
Condividi su altri siti


Devi effettuare piu' letture consecutive.

Per farlo devi considerare i bit di stato della comunicazione e realizzare una macchina a stati in cui richiami piu' volte l'istanza dell'FB della siemens

 

 

Link al commento
Condividi su altri siti

Grazie mille per l’ottimo suggerimento, però una volta completati gli stati e verificato che nessuno di questi risponde (perché fuori mappa), ho modo di inviare un messaggio di errore? Oppure semplicemente non ci sarà risposta alcuna?

Approfitto per un altra domanda. A quanto capisco l’indirizzamento proposto da Siemens sul db prevede che al registro X corrisponda il byte 2X, e dunque se il Master richiede due byte al registro X verranno trasmessi i byte 2X e 2X+1. È possibile invece in qualche modo assegnare il numero dei registri in maniera più libera, tipo uno ogni quattro byte invece che due?

 

grazie mille

Link al commento
Condividi su altri siti

2 ore fa, JohnWick ha scritto:

Grazie mille per l’ottimo suggerimento, però una volta completati gli stati e verificato che nessuno di questi risponde (perché fuori mappa), ho modo di inviare un messaggio di errore? Oppure semplicemente non ci sarà risposta alcuna?

 

Se non ottieni risposta dalla richiesta ti verrà ritornato un errore dall'FB e vuol dire che stai dando dei comandi inesistenti , oppure che non hai connessione

 

2 ore fa, JohnWick ha scritto:

A quanto capisco l’indirizzamento proposto da Siemens sul db prevede che al registro X corrisponda il byte 2X, e dunque se il Master richiede due byte al registro X verranno trasmessi i byte 2X e 2X+1. È possibile invece in qualche modo assegnare il numero dei registri in maniera più libera, tipo uno ogni quattro byte invece che due?

Il Modbus lavora a registri di 2 bytes e si consiglia vivamente a chi pubblica i dati di lavorare a multipli di interi e di non sovrapporre delle aree.

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