As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Adaptador de RTU protocolo Modbus
O componente do adaptador de RTU protocolo Modbus (aws.greengrass.Modbus
) pesquisa informações de dispositivos RTU Modbus locais.
Para solicitar informações de um RTU dispositivo Modbus local com esse componente, publique uma mensagem no tópico em que esse componente se inscreve. Na mensagem, especifique a RTU solicitação Modbus a ser enviada para um dispositivo. Em seguida, esse componente publica uma resposta que contém o resultado da solicitação do ModbusRTU.
nota
Esse componente fornece funcionalidade semelhante ao conector do adaptador de RTU protocolo Modbus na AWS IoT Greengrass V1. Para obter mais informações, consulte Conector do adaptador de RTU protocolo Modbus no Guia do desenvolvedor AWS IoT Greengrass V1.
Tópicos
Versões
Esse componente tem as seguintes versões:
-
2.1.x
-
2.0.x
Tipo
Esse é um componente do Lambda (aws.greengrass.lambda
).. O núcleo do Greengrass executa a função do Lambda desse componente usando o componente inicializador do Lambda.
Para obter mais informações, consulte Tipos de componente.
Sistema operacional
Esse componente pode ser instalado somente nos dispositivos principais do Linux.
Requisitos
Esse componente tem os seguintes requisitos:
-
O dispositivo principal deve atender aos requisitos para executar as funções do Lambda. Se você deseja que o dispositivo principal execute funções do Lambda em contêiner, o dispositivo deve atender aos requisitos para isso. Para obter mais informações, consulte Requisitos da função do Lambda.
-
Python
versão 3.7 instalado no dispositivo principal e adicionado à variável de ambiente. PATH -
Uma conexão física entre o dispositivo AWS IoT Greengrass principal e os dispositivos Modbus. O dispositivo principal deve estar fisicamente conectado à RTU rede Modbus por meio de uma porta serial, como uma USB porta.
-
Para receber os dados de saída desse componente, você deve mesclar a seguinte atualização de configuração no componente legado de roteador de assinatura (
aws.greengrass.LegacySubscriptionRouter
) ao implantar esse componente. Essa configuração especifica o tópico em que esse componente publica as respostas.Para obter mais informações, consulte Criar implantações.
-
O adaptador de RTU protocolo Modbus é suportado para ser executado em umVPC.
Dependências
Quando você implanta um componente, AWS IoT Greengrass também implanta versões compatíveis de suas dependências. Isso significa que é preciso atender aos requisitos do componente e de todas as dependências dele para implantá-lo com êxito. Nesta seção, há uma lista de todas as dependências das versões lançadas desse componente e as restrições de versão semântica que definem as versões dos componentes para cada dependência. Também é possível visualizar as dependências de cada versão do componente no console do AWS IoT Greengrass
Para obter mais informações sobre as dependências dos componentes, consulte referência de fórmula do componente.
Configuração
Esse componente fornece os seguintes parâmetros de configuração que podem ser personalizados ao implantar o componente.
nota
A configuração padrão desse componente inclui parâmetros da função do Lambda. Recomendamos que você edite somente os parâmetros a seguir para configurar esse componente em seus dispositivos.
Dados de entrada
Esse componente aceita parâmetros de RTU solicitação Modbus no tópico a seguir e envia a RTU solicitação Modbus para o dispositivo. Por padrão, esse componente assina mensagens locais de publicação/assinatura. Para obter mais informações sobre como publicar mensagens nesse componente a partir de seus componentes personalizados, consulte Publicar/assinar mensagens locais.
Tópico padrão (publicação/assinatura local): modbus/adapter/request
A mensagem aceita as propriedades a seguir. As mensagens de entrada devem estar em JSON formato.
request
-
Os parâmetros para o envio da RTU solicitação Modbus.
O formato da mensagem de solicitação depende do tipo de RTU solicitação Modbus que ela representa. As propriedades a seguir são necessárias para todas as solicitações.
Tipo: o
object
que contém as seguintes informações:operation
-
O nome da operação a ser executada. Por exemplo, especifique
ReadCoilsRequest
a leitura de bobinas em um dispositivo ModbusRTU. Para obter mais informações sobre as operações compatíveis, consulte RTUSolicitações e respostas do Modbus.Tipo:
string
device
-
O dispositivo de destino da solicitação.
Esse valor deve ser um número inteiro entre
0
e247
.Tipo:
integer
Os outros parâmetros a ser incluídos na solicitação dependem da operação. Esse componente manipula a verificação de redundância cíclica (CRC)
para verificar as solicitações de dados para você. nota
Se sua solicitação incluir uma propriedade
address
, você deverá especificar seu valor como um número inteiro. Por exemplo,"address": 1
. id
-
Um ID arbitrário para a solicitação. Use essa propriedade para mapear uma solicitação de entrada para uma resposta de saída. Quando você especifica essa propriedade, o componente define a propriedade
id
no objeto de resposta com esse valor.Tipo:
string
exemplo Exemplo de entrada: solicitação de bobinas de leitura
{ "request": { "operation": "ReadCoilsRequest", "device": 1, "address": 1, "count": 1 }, "id": "MyRequest" }
Dados de saída
Por padrão, esse componente publica respostas como dados de saída no MQTT tópico a seguir. Você deve especificar esse tópico como subject
na configuração do componente legado de roteador de assinatura. Para obter mais informações sobre como assinar mensagens nesse tópico nos componentes personalizados, consulte Publicar/assinar mensagens AWS IoT Core MQTT.
Tópico padrão (AWS IoT Core MQTT): modbus/adapter/response
O formato da mensagem de resposta depende da operação da solicitação e do status da resposta. Para obter exemplos, consulte Exemplos de solicitações e respostas.
Cada resposta inclui as seguintes propriedades:
response
-
A resposta do RTU dispositivo Modbus.
Tipo: o
object
que contém as seguintes informações:status
-
O status da solicitação. O status pode ser um dos valores a seguir:
-
Success
— A solicitação era válida, o componente enviou a solicitação para a rede Modbus e a RTU rede Modbus RTU retornou uma resposta. -
Exception
— A solicitação era válida, o componente enviou a solicitação para a rede Modbus e a RTU rede Modbus RTU retornou uma exceção. Para obter mais informações, consulte Status da resposta: Exceção. -
No Response
— A solicitação era inválida e o componente detectou o erro antes de enviar a solicitação para a rede ModbusRTU. Para obter mais informações, consulte Status de resposta: Sem resposta.
-
operation
-
A operação solicitada pelo componente.
device
-
O dispositivo para o qual o componente enviou a solicitação.
payload
-
A resposta do RTU dispositivo Modbus. Se
status
forNo Response
, esse objeto conterá apenas uma propriedadeerror
com a descrição do erro (por exemplo,[Input/Output] No Response received from the remote unit
).
id
-
O ID da solicitação, que você pode usar para identificar qual resposta corresponde a qual solicitação.
nota
Uma resposta para uma operação de gravação é simplesmente um eco da solicitação. Embora as respostas de escrita não incluam informações significativas, é uma prática recomendada verificar o estado da resposta para ver se a solicitação foi bem-sucedida ou falhou.
exemplo Exemplo de resultado: sucesso
{ "response" : { "status" : "success", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 1, "bits": [1] } }, "id" : "MyRequest" }
exemplo Exemplo de resultado: falha
{ "response" : { "status" : "fail", "error_message": "Internal Error", "error": "Exception", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 129, "exception_code": 2 } }, "id" : "MyRequest" }
Para obter mais exemplos, consulte Exemplos de solicitações e respostas.
RTUSolicitações e respostas do Modbus
Esse conector aceita parâmetros de RTU solicitação Modbus como dados de entrada e publica respostas como dados de saída.
As operações comuns a seguir têm suporte.
Nome da operação na solicitação | Código da função em resposta |
---|---|
ReadCoilsRequest | 01 |
ReadDiscreteInputsRequest | 02 |
ReadHoldingRegistersRequest | 03 |
ReadInputRegistersRequest | 04 |
WriteSingleCoilRequest | 05 |
WriteSingleRegisterRequest | 06 |
WriteMultipleCoilsRequest | 15 |
WriteMultipleRegistersRequest | 16 |
MaskWriteRegisterRequest | 22 |
ReadWriteMultipleRegistersRequest | 23 |
Veja a seguir exemplos de solicitações e respostas para operações com suporte.
- Bobinas de leitura
-
Exemplo de solicitação:
{ "request": { "operation": "ReadCoilsRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
Exemplo de resposta:
{ "response": { "status": "success", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 1, "bits": [1] } }, "id" : "TestRequest" }
- Ler entradas discretas
-
Exemplo de solicitação:
{ "request": { "operation": "ReadDiscreteInputsRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
Exemplo de resposta:
{ "response": { "status": "success", "device": 1, "operation": "ReadDiscreteInputsRequest", "payload": { "function_code": 2, "bits": [1] } }, "id" : "TestRequest" }
- Registros de leitura em espera
-
Exemplo de solicitação:
{ "request": { "operation": "ReadHoldingRegistersRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
Exemplo de resposta:
{ "response": { "status": "success", "device": 1, "operation": "ReadHoldingRegistersRequest", "payload": { "function_code": 3, "registers": [20,30] } }, "id" : "TestRequest" }
- Registros de entrada de leitura
-
Exemplo de solicitação:
{ "request": { "operation": "ReadInputRegistersRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
- Bobina de gravação única
-
Exemplo de solicitação:
{ "request": { "operation": "WriteSingleCoilRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
Exemplo de resposta:
{ "response": { "status": "success", "device": 1, "operation": "WriteSingleCoilRequest", "payload": { "function_code": 5, "address": 1, "value": true } }, "id" : "TestRequest" }
- Registro de gravação único
-
Exemplo de solicitação:
{ "request": { "operation": "WriteSingleRegisterRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
- Várias bobinas de gravação
-
Exemplo de solicitação:
{ "request": { "operation": "WriteMultipleCoilsRequest", "device": 1, "address": 1, "values": [1,0,0,1] }, "id": "TestRequest" }
Exemplo de resposta:
{ "response": { "status": "success", "device": 1, "operation": "WriteMultipleCoilsRequest", "payload": { "function_code": 15, "address": 1, "count": 4 } }, "id" : "TestRequest" }
- Vários registros de gravação
-
Exemplo de solicitação:
{ "request": { "operation": "WriteMultipleRegistersRequest", "device": 1, "address": 1, "values": [20,30,10] }, "id": "TestRequest" }
Exemplo de resposta:
{ "response": { "status": "success", "device": 1, "operation": "WriteMultipleRegistersRequest", "payload": { "function_code": 23, "address": 1, "count": 3 } }, "id" : "TestRequest" }
- Registro de gravação Mask
-
Exemplo de solicitação:
{ "request": { "operation": "MaskWriteRegisterRequest", "device": 1, "address": 1, "and_mask": 175, "or_mask": 1 }, "id": "TestRequest" }
Exemplo de resposta:
{ "response": { "status": "success", "device": 1, "operation": "MaskWriteRegisterRequest", "payload": { "function_code": 22, "and_mask": 0, "or_mask": 8 } }, "id" : "TestRequest" }
- Vários registros de leitura/gravação
-
Exemplo de solicitação:
{ "request": { "operation": "ReadWriteMultipleRegistersRequest", "device": 1, "read_address": 1, "read_count": 2, "write_address": 3, "write_registers": [20,30,40] }, "id": "TestRequest" }
Exemplo de resposta:
{ "response": { "status": "success", "device": 1, "operation": "ReadWriteMultipleRegistersRequest", "payload": { "function_code": 23, "registers": [10,20,10,20] } }, "id" : "TestRequest" }
nota
A resposta inclui os registros que o componente lê.
As exceções pode ocorrer quando o formato da solicitação é válido, mas a solicitação não é concluída com êxito. Nesse caso, a resposta contém as seguintes informações:
-
A
status
é definida comoException
. -
O código da função
function_code
é igual ao código da função da solicitação + 128. -
O
exception_code
contém o código da exceção. Para obter mais informações, consulte os códigos de exceção Modbus.
Exemplo:
{ "response": { "status": "fail", "error_message": "Internal Error", "error": "Exception", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 129, "exception_code": 2 } }, "id": "TestRequest" }
Esse conector executa verificações de validação na solicitação Modbus. Por exemplo, ele verifica se há formatos inválidos e campos ausentes. Se a validação falhar, o conector não enviará a solicitação. Em vez disso, ele retornará uma resposta com as seguintes informações:
-
A
status
é definida comoNo Response
. -
O
error
contém o motivo do erro. -
O
error_message
contém a mensagem do erro.
Exemplos:
{ "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" }
Se a solicitação for direcionada a um dispositivo inexistente ou se a RTU rede Modbus não estiver funcionando, você poderá obter umModbusIOException
, que usa o formato Sem Resposta.
{ "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" }
Arquivo de log local
Esse componente usa o arquivo de log abaixo.
/logs/aws.greengrass.Modbus.log
/greengrass/v2
Para exibir os logs desse componente
-
Execute o comando a seguir no dispositivo principal para visualizar o arquivo de log desse componente em tempo real.
Substitua pelo caminho para a pasta AWS IoT Greengrass raiz./greengrass/v2
sudo tail -f
/logs/aws.greengrass.Modbus.log/greengrass/v2
Licenças
Esse componente inclui o seguinte licenciamento/software de terceiros:
-
pyserial
//Licença BSD
Esse componente é liberado de acordo com o Contrato de licença de software Greengrass Core
Changelog
A tabela a seguir descreve as alterações em cada versão do componente.
Versão |
Alterações |
---|---|
2.1.10 |
Versão atualizada para a versão 2.14.0 do Greengrass nucleus. |
2.1.9 |
Versão atualizada para o lançamento da versão 2.13.0 do núcleo do Greengrass. |
2.1.8 |
Versão atualizada para o núcleo do Greengrass 2.12.0. |
2.1.7 |
Versão atualizada para o lançamento da versão 2.11.0 do núcleo do Greengrass. |
2.1.6 |
Versão atualizada para o lançamento da versão 2.10.0 do núcleo do Greengrass. |
2.1.5 |
|
2.1.4 |
Versão atualizada para o núcleo do Greengrass 2.9.0. |
2.1.3 |
Versão atualizada para o lançamento da versão 2.8.0 do núcleo do Greengrass. |
2.1.2 |
Versão atualizada para o lançamento da versão 2.7.0 do núcleo do Greengrass. |
2.1.1 |
Versão atualizada para o lançamento da versão 2.6.0 do núcleo do Greengrass. |
2.1.0 |
|
2.0.8 |
Versão atualizada para o lançamento da versão 2.5.0 do núcleo do Greengrass. |
2.0.7 |
Versão atualizada para o lançamento da versão 2.4.0 do núcleo do Greengrass. |
2.0.6 |
Versão atualizada para o lançamento da versão 2.3.0 do núcleo do Greengrass. |
2.0.5 |
Versão atualizada para o lançamento do núcleo do Greengrass versão 2.2.0. |
2.0.4 |
Versão atualizada para o lançamento do núcleo do Greengrass versão 2.1.0. |
2.0.3 |
Versão inicial. |