Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
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 de la V1. AWS IoT Greengrass Para obtener más información, consulte el conector adaptador del protocolo Modbus RTU en la Guía para desarrolladores de la AWS IoT Greengrass V1.
Temas
Versiones
Este componente tiene las siguientes versiones:
-
2.1.x
-
2.0.x
Tipo
Este componente es un componente Lambda () aws.greengrass.lambda
. El núcleo de Greengrass ejecuta la función Lambda de este componente mediante el componente Lambda launcher.
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 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 añadida a la variable de entorno PATH. -
Una conexión física entre el dispositivo AWS IoT Greengrass principal y los dispositivos Modbus. El dispositivo principal debe estar conectado físicamente a la red Modbus RTU a través de un puerto serie, como 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 router de suscripción antiguo (
aws.greengrass.LegacySubscriptionRouter
) al implementar 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
Al implementar un componente, AWS IoT Greengrass también despliega versiones compatibles de sus dependencias. Esto significa que debe cumplir los requisitos del componente y de todas sus dependencias para poder implementarlo 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. AWS IoT Greengrass
Configuración
Este componente proporciona los siguientes parámetros de configuración que puede personalizar al implementar el componente.
nota
La configuración predeterminada de este componente incluye los parámetros de la función 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 los mensajes de publicación/suscripción locales. 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 va a enviar.
La forma del mensaje de solicitud depende del tipo de solicitud de Modbus RTU que represente. Las siguientes propiedades son obligatorias 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
que se lean las bobinas de un dispositivo Modbus RTU. Para obtener más información sobre las operaciones compatibles, consulte. Solicitudes y respuestas de Modbus RTUTipo:
string
device
-
El dispositivo de destino de la solicitud.
Este valor debe ser un número entero comprendido 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 comprobar las solicitudes de datos por usted. nota
Si la solicitud incluye una
address
propiedad, debe especificar su valor como un número entero. Por ejemplo,"address": 1
. id
-
Un ID arbitrario para la solicitud. Utilice esta propiedad para asignar una solicitud de entrada a una respuesta de salida. Al especificar esta propiedad, el componente establece la
id
propiedad del objeto de respuesta en 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 de MQTT de forma predeterminada. Debe especificar este tema como parte de subject
la configuración del componente antiguo del router de suscripciones. Para obtener más información sobre cómo suscribirse a los mensajes sobre este tema en sus componentes personalizados, consultePublicar/suscribir 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 era válida, el componente la envió a la red Modbus RTU y la red Modbus RTU devolvió una respuesta. -
Exception
— La solicitud era válida, el componente la envió a la red Modbus RTU y la red Modbus RTU devolvió 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 detectó el error antes de enviarla a la red 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
es asíNo Response
, este objeto contiene solo unaerror
propiedad con la descripción del 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. Si bien las respuestas escritas no incluyen información significativa, se recomienda comprobar el estado de la respuesta para ver si la solicitud se realiza correctamente o no.
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.
- Bobinas de lectura
-
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" }
- Lea 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" }
- Lea los registros de retención
-
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" }
- Lea los registros de entrada
-
Ejemplo de solicitud:
{ "request": { "operation": "ReadInputRegistersRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
- Escribe una sola 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" }
- Escribe un registro único
-
Ejemplo de solicitud:
{ "request": { "operation": "WriteSingleRegisterRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
- Escribe 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" }
- Escribe 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, escribir registro
-
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" }
- Lectura y escritura de 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 utiliza el siguiente archivo de registro.
/logs/aws.greengrass.Modbus.log
/greengrass/v2
Para ver 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.
Sustitúyalo por la ruta a la carpeta AWS IoT Greengrass raíz./greengrass/v2
sudo tail -f
/logs/aws.greengrass.Modbus.log/greengrass/v2
Licencias
Este componente incluye el siguiente software o licencias de terceros:
-
Licencia pyserie/BSD
Este componente se publica en virtud del contrato de licencia de software principal de Greengrass
Registros de cambios
En la siguiente tabla se describen los cambios en cada versión del componente.
Versión |
Cambios |
---|---|
2.1.8 |
Versión actualizada para la versión 2.12.0 de Greengrass Nucleus. |
2.1.7 |
Versión actualizada para el lanzamiento de la versión 2.11.0 de Greengrass nucleus. |
2.1.6 |
Versión actualizada para el lanzamiento de la versión 2.10.0 de Greengrass nucleus. |
2.1.5 |
|
2.1.4 |
Versión actualizada para la versión 2.9.0 de Greengrass Nucleus. |
2.1.3 |
Versión actualizada para el lanzamiento de la versión 2.8.0 de Greengrass nucleus. |
2.1.2 |
Versión actualizada para el lanzamiento de la versión 2.7.0 de Greengrass nucleus. |
2.1.1 |
Versión actualizada para la versión 2.6.0 de Greengrass Nucleus. |
2.1.0 |
|
2.0.8 |
Versión actualizada para el lanzamiento de la versión 2.5.0 de Greengrass nucleus. |
2.0.7 |
Versión actualizada para la versión 2.4.0 de Greengrass Nucleus. |
2.0.6 |
Versión actualizada para el lanzamiento de la versión 2.3.0 de Greengrass nucleus. |
2.0.5 |
Versión actualizada para el lanzamiento de la versión 2.2.0 de Greengrass nucleus. |
2.0.4 |
Versión actualizada para el lanzamiento de la versión 2.1.0 de Greengrass nucleus. |
2.0.3 |
Versión inicial. |