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 RTU protocolo Modbus
El componente adaptador de RTU protocolo Modbus (aws.greengrass.Modbus
) recopila información de los dispositivos RTU Modbus locales.
Para solicitar información a un RTU dispositivo Modbus local con este componente, publique un mensaje en el tema al que está suscrito este componente. En el mensaje, especifique la RTU solicitud Modbus que se va a enviar a un dispositivo. A continuación, este componente publica una respuesta que contiene el resultado de la solicitud ModbusRTU.
nota
Este componente proporciona una funcionalidad similar a la del conector adaptador del RTU protocolo Modbus de la V1. AWS IoT Greengrass Para obtener más información, consulte el conector del adaptador de RTU protocolo Modbus 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.
-
La versión 3.7 de Python
se instaló en el dispositivo principal y se agregó a la variable de PATH entorno. -
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 RTU red Modbus a través de un puerto serie, como un USB puerto.
-
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 que el adaptador de RTU protocolo Modbus se ejecute en un. 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 RTU solicitud Modbus del tema siguiente y envía la RTU solicitud Modbus 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 estar en JSON formato.
request
-
Los parámetros de la RTU solicitud Modbus que se va a enviar.
La forma del mensaje de solicitud depende del tipo de RTU solicitud Modbus 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 ModbusRTU. Para obtener más información sobre las operaciones compatibles, consulte. RTUSolicitudes y respuestas de ModbusTipo:
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 MQTT tema 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 AWS IoT Core MQTT.
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 RTU dispositivo Modbus.
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 y la RTU red Modbus RTU devolvió una respuesta. -
Exception
— La solicitud era válida, el componente la envió a la red Modbus y la RTU red Modbus devolvió RTU 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 RTU Modbus. 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 RTU dispositivo Modbus. 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.
RTUSolicitudes y respuestas de Modbus
Este conector acepta los parámetros de RTU solicitud Modbus 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 se dirige a un dispositivo inexistente o si la RTU red Modbus no funciona, es posible que recibas una ModbusIOException
que utilice el formato No Response.
{ "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:
-
pyserie/Licencia
BSD
Este componente se publica en virtud del contrato de licencia de software principal de Greengrass
Registros de cambios
La siguiente tabla describe los cambios en cada versión del componente.
Versión |
Cambios |
---|---|
2.1.9 |
Versión actualizada para la versión 2.13.0 de Greengrass nucleus. |
2.1.8 |
Versión actualizada para la versión 2.12.0 de Greengrass nucleus. |
2.1.7 |
Versión actualizada para la versión 2.11.0 de Greengrass nucleus. |
2.1.6 |
Versión actualizada para 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 la versión 2.8.0 de Greengrass nucleus. |
2.1.2 |
Versión actualizada para 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 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 la versión 2.3.0 de Greengrass nucleus. |
2.0.5 |
Versión actualizada para la versión 2.2.0 de Greengrass nucleus. |
2.0.4 |
Versión actualizada para la versión 2.1.0 de Greengrass nucleus. |
2.0.3 |
Versión inicial. |