Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
RTUModbus-Protokolladapter
Die RTU Modbus-Protokolladapter-Komponente (aws.greengrass.Modbus
) fragt Informationen von lokalen Modbus-Geräten ab. RTU
Um mit dieser Komponente Informationen von einem lokalen RTU Modbus-Gerät anzufordern, veröffentlichen Sie eine Nachricht zu dem Thema, das diese Komponente abonniert. Geben Sie in der Nachricht die RTU Modbus-Anfrage an, die an ein Gerät gesendet werden soll. Anschließend veröffentlicht diese Komponente eine Antwort, die das Ergebnis der RTU Modbus-Anfrage enthält.
Anmerkung
Diese Komponente bietet ähnliche Funktionen wie der RTU Modbus-Protokolladapter-Anschluss in AWS IoT Greengrass V1. Weitere Informationen finden Sie unter RTUModbus-Protokolladapter-Anschluss im AWS IoT Greengrass V1-Entwicklerhandbuch.
Themen
Versionen
Diese Komponente hat die folgenden Versionen:
-
2.1.x
-
2.0.x
Typ
Diese Komponente ist eine Lambda-Komponente (aws.greengrass.lambda
). Der Greengrass-Kern führt die Lambda-Funktion dieser Komponente mithilfe der Lambda-Launcher-Komponente aus.
Weitere Informationen finden Sie unter Komponententypen.
Betriebssystem
Diese Komponente kann nur auf Linux-Kerngeräten installiert werden.
Voraussetzungen
Für diese Komponente gelten die folgenden Anforderungen:
-
Ihr Kerngerät muss die Anforderungen für die Ausführung von Lambda-Funktionen erfüllen. Wenn Sie möchten, dass das Kerngerät containerisierte Lambda-Funktionen ausführt, muss das Gerät die entsprechenden Anforderungen erfüllen. Weitere Informationen finden Sie unter Anforderungen an die Lambda-Funktion.
-
Python-Version
3.7 wurde auf dem Core-Gerät installiert und zur PATH Umgebungsvariablen hinzugefügt. -
Eine physische Verbindung zwischen dem AWS IoT Greengrass Kerngerät und den Modbus-Geräten. Das Kerngerät muss über eine serielle Schnittstelle, z. B. eine Schnittstelle, physisch mit dem RTU Modbus-Netzwerk verbunden sein. USB
-
Um Ausgabedaten von dieser Komponente zu empfangen, müssen Sie bei der Bereitstellung dieser Komponente das folgende Konfigurationsupdate für die ältere Abonnement-Router-Komponente (
aws.greengrass.LegacySubscriptionRouter
) zusammenführen. Diese Konfiguration gibt das Thema an, zu dem diese Komponente Antworten veröffentlicht.Weitere Informationen finden Sie unter Erstellen von Bereitstellungen.
-
Der RTU Modbus-Protokolladapter wird für die Ausführung in einem unterstützt. VPC
Abhängigkeiten
Wenn Sie eine Komponente bereitstellen, stellt AWS IoT Greengrass auch kompatible Versionen ihrer Abhängigkeiten bereit. Das bedeutet, dass Sie die Anforderungen für die Komponente und all ihre Abhängigkeiten erfüllen müssen, um die Komponente erfolgreich bereitstellen zu können. In diesem Abschnitt werden die Abhängigkeiten für die veröffentlichten Versionen dieser Komponente sowie die semantischen Versionseinschränkungen aufgeführt, die die Komponentenversionen für jede Abhängigkeit definieren. Sie können auch die Abhängigkeiten für jede Version der Komponente in der AWS IoT Greengrass Konsole
Weitere Informationen zu Komponentenabhängigkeiten finden Sie in der Referenz zu den Komponentenrezepten.
Konfiguration
Diese Komponente stellt die folgenden Konfigurationsparameter bereit, die Sie bei der Bereitstellung der Komponente anpassen können.
Anmerkung
Die Standardkonfiguration dieser Komponente umfasst Lambda-Funktionsparameter. Wir empfehlen, dass Sie nur die folgenden Parameter bearbeiten, um diese Komponente auf Ihren Geräten zu konfigurieren.
Eingabedaten
Diese Komponente akzeptiert RTU Modbus-Anforderungsparameter zum folgenden Thema und sendet die RTU Modbus-Anfrage an das Gerät. Standardmäßig abonniert diese Komponente lokale Publish/Subscribe-Nachrichten. Weitere Informationen zum Veröffentlichen von Nachrichten aus Ihren benutzerdefinierten Komponenten in dieser Komponente finden Sie unter. Lokale Nachrichten veröffentlichen/abonnieren
Standardthema (lokales Veröffentlichen/Abonnieren): modbus/adapter/request
Die Nachricht akzeptiert die folgenden Eigenschaften. Eingabenachrichten müssen JSON ein Format haben.
request
-
Die Parameter für die zu sendende RTU Modbus-Anforderung.
Die Form der Anforderungsnachricht hängt von der Art der RTU Modbus-Anforderung ab, die sie darstellt. Die folgenden Eigenschaften sind für alle Anfragen erforderlich.
Typ:
object
der die folgenden Informationen enthält:operation
-
Der Name des auszuführenden Vorgangs. Geben Sie beispielsweise
ReadCoilsRequest
an, dass Spulen auf einem RTU Modbus-Gerät gelesen werden sollen. Weitere Hinweise zu unterstützten Vorgängen finden Sie unterRTUModbus-Anfragen und -Antworten.Typ:
string
device
-
Das Zielgerät der Anfrage.
Dieser Wert muss eine Ganzzahl zwischen
0
und sein247
.Typ:
integer
Die weiteren Parameter, die in die Anforderung aufgenommen werden sollen, hängen von der Operation ab. Diese Komponente führt die zyklische Redundanzprüfung (CRC)
durch, um Datenanfragen für Sie zu verifizieren. Anmerkung
Wenn Ihre Anfrage eine
address
Eigenschaft enthält, müssen Sie ihren Wert als Ganzzahl angeben. Beispiel,"address": 1
. id
-
Eine willkürliche ID für die Anforderung. Verwenden Sie diese Eigenschaft, um eine Eingabeanforderung einer Ausgabeantwort zuzuordnen. Wenn Sie diese Eigenschaft angeben, setzt die Komponente die
id
Eigenschaft im Antwortobjekt auf diesen Wert.Typ:
string
Beispieleingabe: Lesen Spulenanforderungen
{ "request": { "operation": "ReadCoilsRequest", "device": 1, "address": 1, "count": 1 }, "id": "MyRequest" }
Ausgabedaten
Diese Komponente veröffentlicht standardmäßig Antworten als Ausgabedaten zum folgenden MQTT Thema. Sie müssen dieses Thema subject
in der Konfiguration für die ältere Abonnement-Router-Komponente angeben. Weitere Informationen zum Abonnieren von Nachrichten zu diesem Thema in Ihren benutzerdefinierten Komponenten finden Sie unterNachrichten veröffentlichen/abonnieren AWS IoT Core MQTT.
Standardthema (AWS IoT Core MQTT): modbus/adapter/response
Die Form der Antwortnachricht hängt vom Anforderungsvorgang und vom Antwortstatus ab. Beispiele finden Sie unter Beispiel: Anforderungen und Antworten.
Jede Antwort beinhaltet die folgenden Eigenschaften:
response
-
Die Antwort des RTU Modbus-Geräts.
Typ: der
object
die folgenden Informationen enthält:status
-
Der Status der Anforderung. Der Status kann einer der folgenden Werte sein:
-
Success
— Die Anfrage war gültig, die Komponente hat die Anfrage an das RTU Modbus-Netzwerk gesendet und das RTU Modbus-Netzwerk hat eine Antwort zurückgegeben. -
Exception
— Die Anfrage war gültig, die Komponente hat die Anfrage an das RTU Modbus-Netzwerk gesendet und das RTU Modbus-Netzwerk hat eine Ausnahme zurückgegeben. Weitere Informationen finden Sie unter Antwortstatus: Ausnahme. -
No Response
— Die Anfrage war ungültig und die Komponente hat den Fehler erkannt, bevor sie die Anfrage an das RTU Modbus-Netzwerk gesendet hat. Weitere Informationen finden Sie unter Antwortstatus: Keine Antwort.
-
operation
-
Der Vorgang, den die Komponente angefordert hat.
device
-
Das Gerät, an das die Komponente die Anfrage gesendet hat.
payload
-
Die Antwort des RTU Modbus-Geräts. Wenn ja
status
No Response
, enthält dieses Objekt nur eineerror
Eigenschaft mit der Beschreibung des Fehlers (z. B.[Input/Output] No Response received from the remote unit
).
id
-
Die ID der Anfrage, anhand derer Sie ermitteln können, welche Antwort welcher Anfrage entspricht.
Anmerkung
Eine Antwort für einen Schreibvorgang ist lediglich ein Echo der Anforderung. Schreibantworten enthalten zwar keine aussagekräftigen Informationen, es empfiehlt sich jedoch, den Status der Antwort zu überprüfen, um festzustellen, ob die Anfrage erfolgreich ist oder nicht.
Beispielausgabe: Erfolg
{ "response" : { "status" : "success", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 1, "bits": [1] } }, "id" : "MyRequest" }
Beispielausgabe: Fehler
{ "response" : { "status" : "fail", "error_message": "Internal Error", "error": "Exception", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 129, "exception_code": 2 } }, "id" : "MyRequest" }
Weitere Beispiele finden Sie unter Beispiel: Anforderungen und Antworten.
RTUModbus-Anfragen und -Antworten
Dieser Konnektor akzeptiert RTU Modbus-Anforderungsparameter als Eingabedaten und veröffentlicht Antworten als Ausgabedaten.
Die folgenden allgemeinen Operationen werden unterstützt.
Vorgangsname in Anforderung | Funktionscode in Antwort |
---|---|
ReadCoilsRequest | 01 |
ReadDiscreteInputsRequest | 02 |
ReadHoldingRegistersRequest | 03 |
ReadInputRegistersRequest | 04 |
WriteSingleCoilRequest | 05 |
WriteSingleRegisterRequest | 06 |
WriteMultipleCoilsRequest | 15 |
WriteMultipleRegistersRequest | 16 |
MaskWriteRegisterRequest | 22 |
ReadWriteMultipleRegistersRequest | 23 |
Im Folgenden finden Sie Beispiele für Anfragen und Antworten für unterstützte Operationen.
- Lesen Sie die Spulen
-
Anfragebeispiel:
{ "request": { "operation": "ReadCoilsRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
Antwortbeispiel:
{ "response": { "status": "success", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 1, "bits": [1] } }, "id" : "TestRequest" }
- Lesen Sie diskrete Eingänge
-
Anfragebeispiel:
{ "request": { "operation": "ReadDiscreteInputsRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
Antwortbeispiel:
{ "response": { "status": "success", "device": 1, "operation": "ReadDiscreteInputsRequest", "payload": { "function_code": 2, "bits": [1] } }, "id" : "TestRequest" }
- Lesen Sie die Halteregister
-
Anfragebeispiel:
{ "request": { "operation": "ReadHoldingRegistersRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
Antwortbeispiel:
{ "response": { "status": "success", "device": 1, "operation": "ReadHoldingRegistersRequest", "payload": { "function_code": 3, "registers": [20,30] } }, "id" : "TestRequest" }
- Eingaberegister lesen
-
Anfragebeispiel:
{ "request": { "operation": "ReadInputRegistersRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
- Schreiben Sie Single Coil
-
Anfragebeispiel:
{ "request": { "operation": "WriteSingleCoilRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
Antwortbeispiel:
{ "response": { "status": "success", "device": 1, "operation": "WriteSingleCoilRequest", "payload": { "function_code": 5, "address": 1, "value": true } }, "id" : "TestRequest" }
- Schreiben Sie ein einzelnes Register
-
Anfragebeispiel:
{ "request": { "operation": "WriteSingleRegisterRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
- Schreiben Sie mehrere Spulen
-
Anfragebeispiel:
{ "request": { "operation": "WriteMultipleCoilsRequest", "device": 1, "address": 1, "values": [1,0,0,1] }, "id": "TestRequest" }
Antwortbeispiel:
{ "response": { "status": "success", "device": 1, "operation": "WriteMultipleCoilsRequest", "payload": { "function_code": 15, "address": 1, "count": 4 } }, "id" : "TestRequest" }
- Schreiben Sie mehrere Register
-
Anfragebeispiel:
{ "request": { "operation": "WriteMultipleRegistersRequest", "device": 1, "address": 1, "values": [20,30,10] }, "id": "TestRequest" }
Antwortbeispiel:
{ "response": { "status": "success", "device": 1, "operation": "WriteMultipleRegistersRequest", "payload": { "function_code": 23, "address": 1, "count": 3 } }, "id" : "TestRequest" }
- Maske schreiben, Register schreiben
-
Anfragebeispiel:
{ "request": { "operation": "MaskWriteRegisterRequest", "device": 1, "address": 1, "and_mask": 175, "or_mask": 1 }, "id": "TestRequest" }
Antwortbeispiel:
{ "response": { "status": "success", "device": 1, "operation": "MaskWriteRegisterRequest", "payload": { "function_code": 22, "and_mask": 0, "or_mask": 8 } }, "id" : "TestRequest" }
- Mehrere Register lesen, schreiben
-
Anfragebeispiel:
{ "request": { "operation": "ReadWriteMultipleRegistersRequest", "device": 1, "read_address": 1, "read_count": 2, "write_address": 3, "write_registers": [20,30,40] }, "id": "TestRequest" }
Antwortbeispiel:
{ "response": { "status": "success", "device": 1, "operation": "ReadWriteMultipleRegistersRequest", "payload": { "function_code": 23, "registers": [10,20,10,20] } }, "id" : "TestRequest" }
Anmerkung
Die Antwort beinhaltet die Register, die die Komponente liest.
Ausnahmen können auftreten, wenn das Anfrageformat gültig ist, die Anfrage aber nicht erfolgreich abgeschlossen wurde. In diesem Fall enthält die Antwort die folgenden Informationen:
-
Der
status
wird aufException
gesetzt. -
Der
function_code
entspricht dem Funktionscode der Anforderung + 128. -
Der
exception_code
enthält den Ausnahmecode. Weitere Informationen finden Sie unter Modbus-Ausnahmecodes.
Beispiel:
{ "response": { "status": "fail", "error_message": "Internal Error", "error": "Exception", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 129, "exception_code": 2 } }, "id": "TestRequest" }
Dieser Konnektor führt Validierungsprüfungen für die Modbus-Anforderung durch. So wird beispielsweise nach ungültigen Formaten und fehlenden Feldern gesucht. Wenn die Validierung fehlschlägt, sendet der Konnektor die Anforderung nicht. Stattdessen gibt er eine Antwort zurück, die die folgenden Informationen enthält:
-
Der
status
wird aufNo Response
gesetzt. -
Der
error
enthält die Fehlerursache. -
Die
error_message
enthält die Fehlermeldung.
Beispiele:
{ "response": { "status": "fail", "error_message": "Invalid address field. Expected <type 'int'>, got <type 'str'>", "error": "No Response", "device": 1, "operation": "ReadCoilsRequest", "payload": { "error": "Invalid address field. Expected Expected <type 'int'>, got <type 'str'>" } }, "id": "TestRequest" }
Wenn die Anfrage auf ein nicht vorhandenes Gerät abzielt oder wenn das RTU Modbus-Netzwerk nicht funktioniert, erhalten Sie möglicherweise eineModbusIOException
, die das Format No Response verwendet.
{ "response": { "status": "fail", "error_message": "[Input/Output] No Response received from the remote unit", "error": "No Response", "device": 1, "operation": "ReadCoilsRequest", "payload": { "error": "[Input/Output] No Response received from the remote unit" } }, "id": "TestRequest" }
Lokale Protokolldatei
Diese Komponente verwendet die folgende Protokolldatei.
/logs/aws.greengrass.Modbus.log
/greengrass/v2
Um die Protokolle dieser Komponente einzusehen
-
Führen Sie den folgenden Befehl auf dem Kerngerät aus, um die Protokolldatei dieser Komponente in Echtzeit anzuzeigen.
Ersetzen Sie es durch den Pfad zum AWS IoT Greengrass Stammordner./greengrass/v2
sudo tail -f
/logs/aws.greengrass.Modbus.log/greengrass/v2
Lizenzen
Diese Komponente umfasst die folgende Software/Lizenzierung von Drittanbietern:
-
pymodbus//Lizenz
BSD -
pyserial//Lizenz
BSD
Diese Komponente wird im Rahmen der Greengrass Core Software-Lizenzvereinbarung
Änderungsprotokoll
In der folgenden Tabelle werden die Änderungen in den einzelnen Versionen der Komponente beschrieben.
Version |
Änderungen |
---|---|
2.1.10 |
Die Version wurde für die Version 2.14.0 von Greengrass Nucleus aktualisiert. |
2.1.9 |
Die Version wurde für die Version 2.13.0 von Greengrass Nucleus aktualisiert. |
2.1.8 |
Die Version wurde für die Version 2.12.0 von Greengrass Nucleus aktualisiert. |
2.1.7 |
Die Version wurde für die Version 2.11.0 von Greengrass Nucleus aktualisiert. |
2.1.6 |
Die Version wurde für die Version 2.10.0 von Greengrass Nucleus aktualisiert. |
2.1.5 |
|
2.1.4 |
Die Version wurde für die Version 2.9.0 von Greengrass Nucleus aktualisiert. |
2.1.3 |
Die Version wurde für die Version 2.8.0 von Greengrass Nucleus aktualisiert. |
2.1.2 |
Die Version wurde für die Version 2.7.0 von Greengrass Nucleus aktualisiert. |
2.1.1 |
Die Version wurde für die Version 2.6.0 von Greengrass Nucleus aktualisiert. |
2.1.0 |
|
2.0.8 |
Die Version wurde für die Version 2.5.0 von Greengrass Nucleus aktualisiert. |
2.0.7 |
Die Version wurde für die Version 2.4.0 von Greengrass Nucleus aktualisiert. |
2.0.6 |
Die Version wurde für die Version 2.3.0 von Greengrass Nucleus aktualisiert. |
2.0.5 |
Die Version wurde für die Version 2.2.0 von Greengrass Nucleus aktualisiert. |
2.0.4 |
Die Version wurde für die Version 2.1.0 von Greengrass Nucleus aktualisiert. |
2.0.3 |
Erste Version |