Modbus RTU
Modbus por um barramento serial, com a linha física modelada explicitamente e compartilhada pelos dispositivos endereçados por unidade.
O driver Modbus RTU conversa com dispositivos Modbus num barramento serial: RS-485 ou RS-232, alcançado por uma porta COM física, um adaptador USB ou uma porta virtual ou redirecionada. Como o barramento é fisicamente compartilhado, a topologia é Driver → Linha → Dispositivo → Tag: a linha é dona de tudo que é elétrico (porta, baud, formato, tempos), e cada dispositivo nela é dono apenas do seu endereço de unidade, da sua leitura cíclica e das suas tags.
Linha serial
| Campo | Significado | Padrão |
|---|---|---|
| Nome | Nome amigável do barramento. Editável a qualquer momento. | obrigatório |
| Porta serial | A porta do sistema operacional, por exemplo COM3. O campo é texto livre (portas físicas, virtuais e redirecionadas funcionam todas) e a seta ao lado dele oferece as portas que o Windows detecta no momento (com um Atualizar para adaptadores conectados a quente); a lista detectada é uma conveniência, nunca uma lista de permissão. |
COM1 |
| Velocidade em baud | Taxa de bits compartilhada por todo dispositivo do barramento. | 9600 |
| Modo de transmissão | Como cada dispositivo do barramento enquadra suas mensagens: RTU, quadros binários verificados por um CRC, ou ASCII, quadros escritos como texto de um dois-pontos até a quebra de linha e verificados por um LRC, que equipamentos antigos falam. Um barramento fala um só modo, por isso ele é da linha. | RTU |
| Formato serial | Escolha fechada entre 8N1, 8N2, 8E1, 8E2, 8O1, 8O2, e numa linha ASCII também 7N2, 7E1, 7E2, 7O1: o dígito são os bits de dados, a letra é a paridade (N nenhuma, E par, O ímpar), o último dígito são os bits de parada. Um quadro RTU precisa de 8 bits de dados, então uma linha RTU só oferece os formatos de 8 bits; um formato de 7 bits que sobrou de uma linha ASCII aparece vazio e é recusado até que outro seja escolhido. Outras larguras, paridade mark/space e 1,5 bit de parada não são suportados. |
8E1 |
| Timeout de resposta (ms) | Espera máxima pela resposta de uma unidade, de 100 a 60.000. Timeouts maiores acomodam equipamento lento, mas tornam mais demorado identificar unidades ausentes e concluir a descoberta. | 1000 |
| Intervalo mínimo entre transações (ms) | Ritmo de compatibilidade para a linha inteira, de 0 a 1000. Zero mantém só o silêncio automático do protocolo; um valor positivo pode elevá-lo, nunca reduzi-lo. | 0 |
Numa linha ASCII o silêncio descrito a seguir não se aplica: um quadro ASCII termina na quebra de linha, então o silêncio automático mostra 0 ms e o Intervalo mínimo entre transações (ms) é a única pausa entre quadros, como o cartão diz logo abaixo dele: "Quadros ASCII terminam com uma quebra de linha, então a linha não acrescenta silêncio próprio: este intervalo é a única pausa entre quadros." O modo de transmissão é uma configuração física, travada junto com a porta, a velocidade, o formato e o timeout de resposta enquanto a linha está habilitada; o endereço de runtime de um dispositivo numa linha ASCII termina em /ascii.
O próprio protocolo exige silêncio entre quadros, e a linha sempre o impõe: em 19.200 baud ou abaixo, o silêncio automático é de 3,5 tempos de caractere, calculados a partir do formato configurado; acima de 19.200 baud, é o 1,75 ms fixo que a especificação recomenda. O silêncio efetivo é o maior entre esse piso automático e o intervalo configurado, nunca a soma dos dois, e o painel mostra os dois valores. Elevar o intervalo desacelera deliberadamente toda unidade da linha; ele é um recurso de compatibilidade, não um conserto para fiação, terminação, aterramento ou ruído.
Uma linha nova nasce desabilitada, para que as definições físicas dela possam ser configuradas primeiro. Cada porta física pertence a no máximo uma linha, comparada sem diferenciar maiúsculas de minúsculas e mesmo enquanto as linhas estão desabilitadas. O nome e o intervalo entre transações continuam editáveis enquanto a linha roda (uma edição de tempo vale sem ciclar a porta); a porta, o baud, o formato e o timeout de resposta ficam travados enquanto a linha está habilitada: desabilite-a e salve primeiro. Desabilitar uma linha interrompe a comunicação de todos os dispositivos dela sem alterar as escolhas individuais de Habilitado deles.
A linha reporta o transporte físico separadamente dos dispositivos dela: Desligado, Ocioso (nenhum dispositivo habilitado), Conectando, Conectado ou Falha de porta, com um diagnóstico. Excluir uma linha vazia remove só a linha; excluir uma que contém dispositivos pede confirmação explícita e exclui também esses dispositivos e as tags deles.
Dispositivo
| Campo | Significado | Padrão |
|---|---|---|
| Linha serial | Fixa: um dispositivo é criado sob a linha dele e herda a tupla física, mostrada somente leitura no painel. Adicione o dispositivo sob a linha pretendida. | a linha sob a qual ele é adicionado |
| Unit ID | O endereço Modbus do dispositivo no barramento, de 1 a 247, único dentro da linha (dispositivos desabilitados incluídos). | 1 |
| Intervalo de leitura (ms) | Taxa de leitura padrão para as tags que não a sobrepõem. | 1000 |
O endereço interno do runtime é
modbus+rtu://<line-id>/<port>/<baud>/<format>/<timeout>/<unitId>/<interval>:
ele carrega a identidade estável da linha e as definições físicas completas, nunca o
nome amigável dela.
Comportamento da linha compartilhada
O driver abre uma sessão serial por linha e serializa toda requisição de todo dispositivo por um único despachante, então leituras e escritas nunca se sobrepõem no barramento. Uma escrita pendente toma a próxima vez livre com prioridade limitada: escritas são atendidas rápido, mas escrever sem parar não consegue matar a leitura cíclica de fome. Os timeouts de cada unidade são isolados, com recuo progressivo, então um dispositivo silencioso desacelera só a si mesmo. Uma exceção Modbus com CRC válido é um erro por requisição naquela tag: a linha continua saudável. Só uma falha física de entrada e saída (a porta sumindo, o adaptador desconectado) invalida a sessão compartilhada e inicia uma reabertura coordenada para a linha inteira. O último dispositivo liberado fecha a porta.
Endereçamento da tag
O endereçamento de tag é idêntico ao do Modbus TCP: uma Classe do registrador (Bobina (0xxxx), Entrada discreta (1xxxx), Registrador de entrada (3xxxx), Registrador de retenção (4xxxx), derivada por padrão do tipo e do acesso da tag), um Número do registrador em base 0, uma Quantidade (registradores, vazio = automático) automática (Boolean, Int16 e UInt16 1 registrador, Int32 e Float 2, String 4; a caixa é desenhada só em tags String, porque toda outra largura é fixa) e as duas caixas de ordem: Byte mais significativo primeiro (MSB first, big-endian) para a ordem dos bytes e Palavra mais significativa primeiro (palavra alta primeiro) para a ordem das palavras (desenhada só nos tipos de dois registradores, Int32 e Float), ambas ligadas por padrão. O cartão Origem termina com Endereço no manual, o endereço da tag como o manual do equipamento o imprime (o registrador de entrada 0 é 30001). Os tipos de valor suportados são os mesmos seis (Boolean, Int16, UInt16, Int32, Float e String): Int16 e UInt16 leem um único registrador de 16 bits, com ou sem sinal, e só a ordem de bytes se aplica a eles (a caixa da ordem de palavras não é desenhada). Os códigos de função de leitura e escrita e os arranjos de barramento estão documentados na página Modbus TCP e valem aqui sem mudança.
Descoberta
A descoberta sonda uma faixa de unit ids por uma linha existente e vive no painel daquela linha:
| Campo | Significado | Padrão |
|---|---|---|
| Unit id inicial | Primeiro unit id a sondar, de 1 a 247. | 1 |
| Unit id final | Último unit id, crescente a partir do inicial. | 32 |
Numa linha ASCII a sondagem é a mesma requisição num quadro ASCII, e o LRC ocupa o lugar do CRC: uma exceção com LRC válido prova que há uma unidade presente, e um quadro com LRC inválido não prova nada.
A varredura recarrega as definições físicas salvas da linha, abre a porta uma vez e sonda a faixa sequencialmente com a Read Basic Device Identification (função 43/14), ritmando cada sondagem com o silêncio entre quadros efetivo da linha. Ela nunca tenta combinações de definições e nunca lê registradores. Uma exceção Modbus com CRC válido prova que uma unidade está presente sem afirmar a identidade dela; um timeout ou um quadro inválido não prova.
Uma linha em uso nunca é interrompida nem chaveada automaticamente: desabilite-a antes de varrer e reabilite-a você mesmo depois. Cancelar fecha a sessão serial e deixa os resultados já mostrados como candidatos transitórios até você adicioná-los explicitamente. Um unit id já configurado é marcado como tal e abre o dispositivo existente em vez de criar uma duplicata; os resultados não carregam tags: os registradores são configurados depois do Adicionar.
A descoberta e a configuração da linha compartilham uma reserva de falha imediata por porta física, então uma varredura e uma mudança de definições não podem brigar pela porta: quem perde é avisado de qual operação a está segurando.
Limites que vale conhecer
- Os seis tipos de valor são todo o vocabulário do codec de barramento; outras larguras de inteiro e Double não são oferecidos.
- A vazão é uma propriedade do barramento: todo dispositivo da linha compartilha um único fluxo de requisições, ritmado pelo silêncio entre quadros efetivo, então muitos dispositivos ou um intervalo elevado alongam todo ciclo de leitura.