Adaptador de protocolo Modbus-RTU
El componente adaptador de protocolo Modbus-RTU (aws.greengrass.Modbus
) recopila información de los dispositivos Modbus RTU locales.
Para solicitar información a un dispositivo Modbus RTU local con este componente, publique un mensaje en el tema al que está suscrito este componente. En el mensaje, especifique la solicitud de Modbus RTU que se va a enviar a un dispositivo. A continuación, este componente publica una respuesta que contiene el resultado de la solicitud de Modbus RTU.
nota
Este componente proporciona una funcionalidad similar a la del conector adaptador del protocolo Modbus RTU en AWS IoT Greengrass V1. Para obtener más información, consulte Conector del adaptador de protocolo Modbus RTU en la Guía para desarrolladores de AWS IoT Greengrass V1.
Temas
Versiones
Este componente tiene las siguientes versiones:
-
2.1.x
-
2.0.x
Tipo
Este componente es un componente de Lambda (aws.greengrass.lambda
). El núcleo de Greengrass ejecuta la función de Lambda de este componente mediante el componente lanzador de Lambda.
Para obtener más información, consulte Tipos de componentes.
Sistema operativo
Este componente solo se puede instalar en los dispositivos principales de Linux.
Requisitos
Este componente tiene los siguientes requisitos:
-
El dispositivo principal debe cumplir los requisitos para ejecutar las funciones de Lambda. Si desea que el dispositivo principal ejecute funciones de Lambda en contenedores, el dispositivo debe cumplir los requisitos para hacerlo. Para obtener más información, consulte Requisitos de la función de Lambda.
-
Versión 3.7 de Python
instalada en el dispositivo principal y agregada a la variable de entorno PATH. -
Una conexión física entre los dispositivos principales de AWS IoT Greengrass y de Modbus. El dispositivo principal debe ser conectado físicamente a la red de Modbus RTU a través de un puerto de serie (por ejemplo, un puerto USB).
-
Para recibir los datos de salida de este componente, debe combinar la siguiente actualización de configuración para el componente del enrutador de suscripción antiguo (
aws.greengrass.LegacySubscriptionRouter
) cuando implemente este componente. Esta configuración especifica el tema en el que este componente publica las respuestas.Para obtener más información, consulte Crear implementaciones.
-
Se admite la ejecución del adaptador de protocolo Modbus-RTU en una VPC.
Dependencias
Cuando implementa un componente, AWS IoT Greengrass también implementa versiones compatibles de sus dependencias. Esto significa que debe cumplir los requisitos del componente y de todas sus dependencias para poder implementar el componente correctamente. En esta sección, se enumeran las dependencias de las versiones publicadas de este componente y las restricciones de las versiones semánticas que definen las versiones de los componentes para cada dependencia. También puede ver las dependencias de cada versión del componente en la consola de AWS IoT Greengrass
Para obtener más información sobre las dependencias del componente, consulte la referencia de receta de componentes.
Configuración
Este componente ofrece los siguientes parámetros de configuración que puede personalizar cuando implemente el componente.
nota
La configuración predeterminada de este componente incluye los parámetros de la función de Lambda. Le recomendamos que edite solo los siguientes parámetros para configurar este componente en sus dispositivos.
Datos de entrada
Este componente acepta los parámetros de solicitud de Modbus RTU relacionados con el tema siguiente y envía la solicitud de Modbus RTU al dispositivo. De forma predeterminada, este componente se suscribe a mensajería de publicación y suscripción local. Para obtener más información sobre cómo publicar mensajes en este componente desde sus componentes personalizados, consulte Publicar/suscribir mensajes locales.
Tema predeterminado (publicación/suscripción local): modbus/adapter/request
El mensaje acepta las siguientes propiedades. Los mensajes de entrada deben tener un formato JSON válido.
request
-
Los parámetros de la solicitud de Modbus RTU que se van a enviar.
La forma del mensaje de solicitud depende del tipo de solicitud de Modbus RTU que representa. Las siguientes propiedades son necesarias para todas las solicitudes.
Tipo:
object
que contiene la siguiente información:operation
-
El nombre de la operación que se va a ejecutar. Por ejemplo, especifique
ReadCoilsRequest
para leer las bobinas de un dispositivo Modbus RTU. Para obtener más información acerca de las operaciones permitidas, consulte Solicitudes y respuestas de Modbus RTU.Tipo:
string
device
-
El dispositivo de destino de la solicitud.
El valor debe ser un número entero entre
0
y247
.Tipo:
integer
El resto de los parámetros que se incluirán en la solicitud dependen de la operación. Este componente gestiona la comprobación de redundancia cíclica (CRC)
para verificar las solicitudes de datos por usted. nota
Si la solicitud incluye una propiedad
address
, debe especificar su valor como un número entero. Por ejemplo,"address": 1
. id
-
Un ID arbitrario para la solicitud. Use esta propiedad para asignar una solicitud de entrada a una respuesta de salida. Si especifica esta propiedad, el componente establece la propiedad
id
en el objeto de respuesta para este valor.Tipo:
string
ejemplo Ejemplo de entrada: Solicitud de lectura de salidas digitales (coils)
{ "request": { "operation": "ReadCoilsRequest", "device": 1, "address": 1, "count": 1 }, "id": "MyRequest" }
Datos de salida
Este componente publica las respuestas como datos de salida sobre el siguiente tema MQTT de forma predeterminada. Debe especificar este tema como parte de subject
en la configuración del componente antiguo del enrutador de suscripciones. Para obtener más información sobre cómo suscribirse a los mensajes sobre este tema en sus componentes personalizados, consulte Publicación/suscripción de mensajes MQTT AWS IoT Core.
Tema predeterminado (AWS IoT Core MQTT): modbus/adapter/response
La forma del mensaje de respuesta depende de la operación de solicitud y del estado de la respuesta. Para ver ejemplos, consulte Solicitudes y respuestas de ejemplo.
Cada respuesta incluye las siguientes propiedades:
response
-
La respuesta del dispositivo Modbus RTU.
Tipo:
object
que contiene la siguiente información:status
-
El estado de la solicitud. El estado puede ser uno de los siguientes valores:
-
Success
: la solicitud es válida, el componente envía la solicitud a la red de Modbus RTU y la red de Modbus RTU devuelve una respuesta. -
Exception
: la solicitud es válida, el componente envía la solicitud a la red de Modbus RTU y la red de Modbus RTU devuelve una excepción. Para obtener más información, consulte Estado de respuesta: excepción. -
No Response
: la solicitud no era válida y el componente detecta el error antes de que la solicitud se envíe a través de la red de Modbus RTU. Para obtener más información, consulte Estado de respuesta: sin respuesta.
-
operation
-
La operación que solicitó el componente.
device
-
El dispositivo al que el componente envió la solicitud.
payload
-
La respuesta del dispositivo Modbus RTU. Si
status
esNo Response
, este objeto contiene únicamente una propiedaderror
con la descripción de error (por ejemplo,[Input/Output] No Response received from the remote unit
).
id
-
El identificador de la solicitud, que puede utilizar para identificar qué respuesta corresponde a qué solicitud.
nota
Una respuesta para una operación de escritura es simplemente un eco de la solicitud. Aunque no se devuelve información significante para las respuestas de escritura, se recomienda comprobar el estado de la respuesta para verificar si la solicitud tiene éxito o falla.
ejemplo Ejemplo de salida: Correcto
{ "response" : { "status" : "success", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 1, "bits": [1] } }, "id" : "MyRequest" }
ejemplo Ejemplo de salida: Error
{ "response" : { "status" : "fail", "error_message": "Internal Error", "error": "Exception", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 129, "exception_code": 2 } }, "id" : "MyRequest" }
Para obtener más ejemplos, consulte Solicitudes y respuestas de ejemplo.
Solicitudes y respuestas de Modbus RTU
Este conector acepta los parámetros de solicitud de Modbus RTU como datos de entrada y publica las respuestas como datos de salida.
Se admiten las siguientes operaciones comunes.
Nombre de la operación en la solicitud | Código de característica en la respuesta |
---|---|
ReadCoilsRequest | 01 |
ReadDiscreteInputsRequest | 02 |
ReadHoldingRegistersRequest | 03 |
ReadInputRegistersRequest | 04 |
WriteSingleCoilRequest | 05 |
WriteSingleRegisterRequest | 06 |
WriteMultipleCoilsRequest | 15 |
WriteMultipleRegistersRequest | 16 |
MaskWriteRegisterRequest | 22 |
ReadWriteMultipleRegistersRequest | 23 |
A continuación, se muestran ejemplos de solicitudes y respuestas de las operaciones compatibles.
- Leer bobinas
-
Ejemplo de solicitud:
{ "request": { "operation": "ReadCoilsRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
Ejemplo de respuesta:
{ "response": { "status": "success", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 1, "bits": [1] } }, "id" : "TestRequest" }
- Leer entradas discretas
-
Ejemplo de solicitud:
{ "request": { "operation": "ReadDiscreteInputsRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
Ejemplo de respuesta:
{ "response": { "status": "success", "device": 1, "operation": "ReadDiscreteInputsRequest", "payload": { "function_code": 2, "bits": [1] } }, "id" : "TestRequest" }
- Leer registros mantenidos
-
Ejemplo de solicitud:
{ "request": { "operation": "ReadHoldingRegistersRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
Ejemplo de respuesta:
{ "response": { "status": "success", "device": 1, "operation": "ReadHoldingRegistersRequest", "payload": { "function_code": 3, "registers": [20,30] } }, "id" : "TestRequest" }
- Leer registros de entrada
-
Ejemplo de solicitud:
{ "request": { "operation": "ReadInputRegistersRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
- Escribir una única bobina
-
Ejemplo de solicitud:
{ "request": { "operation": "WriteSingleCoilRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
Ejemplo de respuesta:
{ "response": { "status": "success", "device": 1, "operation": "WriteSingleCoilRequest", "payload": { "function_code": 5, "address": 1, "value": true } }, "id" : "TestRequest" }
- Escribir un único registro
-
Ejemplo de solicitud:
{ "request": { "operation": "WriteSingleRegisterRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
- Escribir varias bobinas
-
Ejemplo de solicitud:
{ "request": { "operation": "WriteMultipleCoilsRequest", "device": 1, "address": 1, "values": [1,0,0,1] }, "id": "TestRequest" }
Ejemplo de respuesta:
{ "response": { "status": "success", "device": 1, "operation": "WriteMultipleCoilsRequest", "payload": { "function_code": 15, "address": 1, "count": 4 } }, "id" : "TestRequest" }
- Escribir varios registros
-
Ejemplo de solicitud:
{ "request": { "operation": "WriteMultipleRegistersRequest", "device": 1, "address": 1, "values": [20,30,10] }, "id": "TestRequest" }
Ejemplo de respuesta:
{ "response": { "status": "success", "device": 1, "operation": "WriteMultipleRegistersRequest", "payload": { "function_code": 23, "address": 1, "count": 3 } }, "id" : "TestRequest" }
- Enmascarar el registro de escritura
-
Ejemplo de solicitud:
{ "request": { "operation": "MaskWriteRegisterRequest", "device": 1, "address": 1, "and_mask": 175, "or_mask": 1 }, "id": "TestRequest" }
Ejemplo de respuesta:
{ "response": { "status": "success", "device": 1, "operation": "MaskWriteRegisterRequest", "payload": { "function_code": 22, "and_mask": 0, "or_mask": 8 } }, "id" : "TestRequest" }
- Leer y escribir varios registros
-
Ejemplo de solicitud:
{ "request": { "operation": "ReadWriteMultipleRegistersRequest", "device": 1, "read_address": 1, "read_count": 2, "write_address": 3, "write_registers": [20,30,40] }, "id": "TestRequest" }
Ejemplo de respuesta:
{ "response": { "status": "success", "device": 1, "operation": "ReadWriteMultipleRegistersRequest", "payload": { "function_code": 23, "registers": [10,20,10,20] } }, "id" : "TestRequest" }
nota
La respuesta incluye los registros que lee el componente.
Las excepciones pueden producirse cuando el formato de la solicitud es válido, pero la solicitud no se completó correctamente. En este caso, la respuesta contiene la siguiente información:
-
status
se establece enException
. -
function_code
equivale al código de la característica de la solicitud + 128. -
exception_code
contiene el código de excepción. Para obtener más información, consulte los códigos de excepción de Modbus.
Ejemplo:
{ "response": { "status": "fail", "error_message": "Internal Error", "error": "Exception", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 129, "exception_code": 2 } }, "id": "TestRequest" }
Este conector realiza las comprobaciones de validación de la solicitud de Modbus. Por ejemplo, comprueba los formatos no válidos y los campos que faltan. Si no se supera la validación, el conector no envía la solicitud. En su lugar, devuelve una respuesta que contiene la siguiente información:
-
status
se establece enNo Response
. -
error
contiene el motivo del error. -
error_message
contiene el mensaje de error.
Ejemplos:
{ "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" }
Si la solicitud selecciona como destino un dispositivo inexistente o si la red de Modbus RTU no funciona, es posible que aparezca una respuesta ModbusIOException
, que utiliza el formato de respuesta No.
{ "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" }
Archivo de registro local
Este componente usa el siguiente archivo de registro.
/logs/aws.greengrass.Modbus.log
/greengrass/v2
Visualización de los registros de este componente
-
Ejecute el siguiente comando en el dispositivo principal para ver el archivo de registro de este componente en tiempo real. Sustituya
por la ruta a la carpeta raíz de AWS IoT Greengrass./greengrass/v2
sudo tail -f
/logs/aws.greengrass.Modbus.log/greengrass/v2
Licencias
Este componente incluye las siguientes licencias o software de terceros:
Este conector se publica en el Contrato de Licencia de Software de Greengrass Core
Registros de cambios
En la siguiente tabla, se describen los cambios en cada versión del componente.
Versión |
Cambios |
---|---|
2.1.9 |
Versión actualizada para el lanzamiento de la versión 2.13.0 del núcleo de Greengrass. |
2.1.8 |
Versión actualizada para el lanzamiento de la versión 2.12.0 del núcleo de Greengrass. |
2.1.7 |
Versión actualizada para el lanzamiento de la versión 2.11.0 del núcleo de Greengrass. |
2.1.6 |
Versión actualizada para el lanzamiento de la versión 2.10.0 del núcleo de Greengrass. |
2.1.5 |
|
2.1.4 |
Versión actualizada para el lanzamiento de la versión 2.9.0 del núcleo de Greengrass. |
2.1.3 |
Versión actualizada para el lanzamiento de la versión 2.8.0 del núcleo de Greengrass. |
2.1.2 |
Versión actualizada para el lanzamiento de la versión 2.7.0 del núcleo de Greengrass. |
2.1.1 |
Versión actualizada para el lanzamiento de la versión 2.6.0 del núcleo de Greengrass. |
2.1.0 |
|
2.0.8 |
Versión actualizada para el lanzamiento de la versión 2.5.0 del núcleo de Greengrass. |
2.0.7 |
Versión actualizada para el lanzamiento de la versión 2.4.0 del núcleo de Greengrass. |
2.0.6 |
Versión actualizada para el lanzamiento de la versión 2.3.0 del núcleo de Greengrass. |
2.0.5 |
Versión actualizada para el lanzamiento de la versión 2.2.0 del núcleo de Greengrass. |
2.0.4 |
Versión actualizada para el lanzamiento de la versión 2.1.0 del núcleo de Greengrass. |
2.0.3 |
Versión inicial. |