Nein 0 ist schon richtig Was steht denn in den Data Areas ? Ist hier was eingetragen?
Siemens Hilfe:
Zugriff auf Datenbereiche in DBs anstelle des direkten Zugriffs auf MODBUS-Adressen ab Version V4.0 (S7-1200, S7-1500)
Zugriff auf Datenbereiche in DBs anstelle des direkten Zugriffs auf MODBUS-Adressen ab Version V4.0 | |
Ab der Anweisungs-Version V4.0 von Modbus_Slave und ab den Firmware-Versionen V2.5 (S7-1500-CPUs) bzw. V4.2 (S7-1200-CPUs) können Sie anstelle des direkten Zugriffs auf Prozessabbilder und Holding-Register auf Datenbereiche in DBs zugreifen. Dabei muss für den DB das Attribut "Optimierter Bausteinzugriff" deaktiviert sein und er darf nicht ausschließlich im Ladespeicher liegen.
Wenn eine MODBUS-Anforderung eintrifft und Sie für den MODBUS-Datentyp des zugehörigen Funktionscodes keinen Datenbereich definiert haben, wird die Anforderung wie in den bisherigen Anweisungs-Versionen behandelt, d. h. es erfolgt ein direkter Zugriff auf Prozessabbilder und Holding-Register.
Wenn Sie hingegen für den MODBUS-Datentyp des Funktionscode einen Datenbereich definiert haben, liest die Anweisung Modbus_Slave aus diesem Datenbereich oder sie schreibt in ihn. Ob gelesen oder geschrieben wird, ist vom Auftragstyp abhängig.
Eine einzelne MODBUS-Anforderung kann immer nur von einem Datenbereich lesen oder in einen Datenbereich schreiben. Wenn Sie also z. B. Holding-Register lesen wollen, die sich über mehrere Datenbereiche erstrecken, benötigen Sie dafür mehrere MODBUS-Anforderungen.
Regeln zur Definition der Datenbereiche
Sie können bis zu acht Datenbereiche in unterschiedlichen DBs definieren; jeder DB darf nur einen Datenbereich enthalten. Eine einzelne MODBUS-Anforderung kann nur von genau einem Datenbereich lesen oder in genau einen Datenbereich schreiben. Dabei entspricht jeder Datenbereich einem MODBUS-Adressbereich. Die Definition erfolgt in der statischen Variable Data_Area_Array des Instanz-DB; Data_Area_Array ist ein Feld, das aus acht Elementen besteht.
Wenn Sie weniger als acht Datenbereiche verwenden wollen, müssen die gewünschten Datenbereiche lückenlos hintereinander liegen. Der erste Leereintrag in den Datenbereichen beendet die Datenbereich-Suche bei der Bearbeitung. Wenn Sie also z. B. die Feldelemente 1, 2, 4 und 5 definiert haben, werden nur die Feldelemente 1 und 2 erkannt, da das Feldelement 3 leer ist.
Das Feld Data_Area_Array besteht aus 8 Elementen: Data_Area_Array[1] … Data_Area_Array[8]
Jedes Feldelement Data_Area_Array[x], 1 <= x <= 8, ist ein UDT vom Typ MB_DataArea und hat folgenden Aufbau:
Parameter | Datentyp | Bedeutung |
---|
data_type | UInt | Kennung für den MODBUS-Datentyp, der auf diesen Datenbereich abgebildet wird:
- 0: Kennung für ein leeres Feldelement bzw. für einen nicht verwendeten Datenbereich. In diesem Fall sind die Werte von db, start und length irrelevant.
- 1: Prozessabbild der Ausgänge (verwendet bei den Funktionscodes 1, 5 und 15)
- 2: Prozessabbild der Eingänge (verwendet beim Funktionscode 2)
- 3: Holding-Register (verwendet bei den Funktionscodes 3, 6 und 16)
- 4: Input-Register (verwendet beim Funktionscode 4)
Hinweis: Wenn Sie für einen MODBUS-Datentyp einen Datenbereich definiert haben, kann die Anweisung MB_SERVER auf diesen MODBUS-Datentyp nicht mehr direkt zugreifen. Wenn die Adresse einer MODBUS-Anforderung für einen solchen Datentyp keinem definierten Datenbereich entspricht, wird in STATUS der Wert W#16#8383 zurückgeliefert. |
db | UInt | Nummer des Datenbausteins, in den die nachfolgend definierten MODBUS-Register oder Bits abgebildet werden.
Die DB-Nummer muss in den Datenbereichen eindeutig sein. Dieselbe DB-Nummer darf nicht in mehreren Datenbereichen definiert werden.
Der DB muss ein DB mit Standardzugriff sein und er darf nicht ausschließlich im Ladespeicher liegen.
Datenbereiche beginnen stets bei der Byte-Adresse 0 des DB.
Zulässige Werte: 1 bis 60999 |
start | UInt | Erste MODBUS-Adresse, die in den Datenbaustein ab Adresse 0.0 abgebildet wird.
Zulässige Werte: 0 bis 65535 |
length | UInt | Anzahl der Bits (für die Werte 1 und 2 von data_type) bzw. Anzahl der Register (für die Werte 3 und 4 von data_type).
Die MODBUS-Adressbereiche ein und desselben MODBUS-Datentyps dürfen sich nicht überlappen.
Zulässige Werte: 1 bis 65535 |
Beispiele zur Definition von Datenbereichen
- Erstes Beispiel: data_type = 3, db = 1, start = 10, length = 6
Die Holding Register (data_type = 3) werden im Datenbaustein 1 (db = 1) abgebildet. Die Modbus-Adresse 10 (start = 10) befindet sich an Datenwort 0. Die letzte gültige Modbus-Adresse 15 (length = 6) befindet sich an Datenwort 5.
- Zweites Beispiel: data_type = 2, db = 15, start = 1700, length = 112
Die Eingänge (data_type = 2) werden im Datenbaustein 15 (db = 15) abgebildet. Die Modbus-Adresse 1700 (start = 1700) befindet sich an Datenwort 0. Die letzte gültige Modbus-Adresse 1811 (length = 112) befindet sich an Datenwort 111.