Professional Documents
Culture Documents
MKM
Características
A comunicação baseada no protocolo MODBUS possibilita a conexão com até 247 módulos MKM
numa linha RS-485.
Especificações:
A interface de comunicação é do padrão RS-485, a dois fios, half-duplex, baudrate de 9600 ou 19200,
1 start bit, 8 bits de dados, 2 stop bits e sem paridade. Com exceção da velocidade, os demais
parâmetros são fixos. A especificação da velocidade é feita na especificação do pedido e, uma vez
definida, esta não mais poderá ser alterada.
Apenas o master pode começar um diálogo com os slaves, sendo este diálogo do tipo question/reply
(endereço de apenas um slave) ou endereçando a mensagem para todos os slaves (endereço 0 =
broadcast) sem obter um reply.
No protocolo MODBUS, o instrumento sai de fábrica com apenas o número de série programado,
ficando a cargo do usuário definir um endereço na rede para o dispositivo que vai de 1 até 247.
Algoritmo
Uma mensagem é iniciada com um intervalo de silêncio de no mínimo 3,5 vezes a velocidade de
comunicação de um caracter. Por exemplo, a 9600 bps, um caracter leva 1,15ms para ser transmitido
(8N2 = 11 bits), portanto deve haver um silêncio na rede de 4 ms antes de uma mensagem ser
transmitida. O número máximo de caracteres numa mensagem é 29.
A rede é monitorada continuamente pelo slave, incluindo durante o intervalo de silêncio. Quando o
1o. caracter é recebido, cada dispositivo decodifica-o para verificar se é o seu endereço. Se não for, o
dispositivo deve aguardar que a rede fique em silêncio ( sem transmissão ) por 3,5 vezes a velocidade
de comunicação de um caracter. Se o endereço for o do dispositivo, o mesmo deve receber todo o resto
do frame. O fim do frame é indicado pelo intervalo de silêncio. Uma mensagem deve ser transmitida
como uma cadeia continua de bytes.
Quando ocorrer erro de comunicação, uma retransmissão (retry) para o mesmo slave deve esperar no
mínimo 3 segundos.
O CRC contém dois bytes e é calculado pelo dispositivo transmissor, que anexa o CRC na mensagem.
O dispositivo receptor recalcula o CRC após a recepção da mensagem e compara o valor calculado
com o valor recebido. Se os valores não são iguais, a mensagem é descartada.
void main()
{
unsigned char buf_485[30];
union CRC
{ unsigned char c_crc[2];
unsigned int i_crc;
} crc;
crc.i_crc = 0;
buf_485[0] = 0x1B; // Endereço do Slave
buf_485[1] = 0x04; // Função MODBUS: Read Input Register
buf_485[2] = 0x00; // Registro inicial para ler (MSB)
#define NUM_SHIFT 8
#define POLINOMIAL 0xA001 // Polinomial constant (RTU mode)
Código do Dispositivo
Este documento apresenta as funções MODBUS disponíveis para toda a linha de dispositivos MKM.
Para distinguir as características conforme o modelo do MKM, é fornecido um código que indica
quais funções MODBUS estão disponíveis para um instrumento em particular. Consulte mais adiante
neste manual a função “Report Slave ID (17)” para obter o código do dispositivo.
Funções MODBUS
As funções MODBUS para o MKM são:
* Broadcast - funções que podem ser endereçadas para todos os slaves (endereço 0)
Esta função permite ler o estado das portas de entrada e saída digitais do instrumento. Os seguintes
registros estão disponíveis:
Função
MASTER
Endereço 0x02 0x00 0x00 0x00 0x04 CRC
do Slave 8 bit – 8 bit
(1) Registro
inicial para ler Total de
registros para ler
(1) O registro inicial para ler é obtido removendo o indicativo (número 1) e subtraindo o resultado por
1. No exemplo, o registro 10001 (decimal) é transmitido como 0x0000 (hexadecimal): 10001 = 0001
= (0001 - 1) = 0000 = 0x0000 hexadecimal.
SLAVE
Endereço 0x02 0x01 ESTADO CRC
do Slave 8 bit 8 bit - 8 bit
O estado das entradas e saídas digitais deve ser interpretado conforme tabela abaixo, onde bit 1 indica
porta ligada e bit 0 indica porta desligada.
BIT D7 D6 D5 D4 D3 D2 D1 D0
REGISTRO --- --- --- --- SD-2 SD-1 EDP-2 EDP-1
Esta função permite ler os registros de configuração do instrumento. Os seguintes registros estão
disponíveis:
TIPO DE LIGAÇÃO TL
4 FIOS - 3 ELEMENTOS 0
4 FIOS - 2 ELEMENTOS 1
4 FIOS - 1 ELEMENTO 2
3 FIOS - 3 ELEMENTOS 16
3 FIOS - 2 ELEMENTOS 17
3 FIOS - 1 ELEMENTO 18
3 FIOS - 2 ELEMENTOS (Delta TL48) 48
3 FIOS - 2 ELEMENTOS (Delta TL80) 80
Observe que para cada registro temos dois bytes. Os frames desta função para o master e slave são:
Função
MASTER
Endereço 0x03 0x00 0x02 0x00 0x02 CRC
do Slave 8 bit - 8 bit
(1) Registro
inicial para ler Total de
registros para ler
(1) O registro inicial para ler é obtido removendo o indicativo (número 4) e subtraindo o resultado por
1. No exemplo, o registro 40003 (decimal) é transmitido como 0x0002 (hexadecimal): 40003 = 0003
= (0003 - 1) = 0002 = 0x0002 hexadecimal.
SLAVE
Endereço 0x03 0x04 0x00 0x80 0x89 0x44 CRC
do Slave 8 bit - 8 bit
Byte Count
O registro byte count é igual ao total de registros para ler vezes 2, pois cada registro possui 2 bytes.
No exemplo anterior o master pediu uma leitura dos registros referentes ao TC (40003 e 40004) e
obteve como resposta o valor 0x00808944 (IEEE 32-bit floating point). Convertendo este valor para
decimal temos que TC = 1100,0.
Esta função permite ler os registros no qual as grandezas elétricas estão armazenadas. Os seguintes
registros estão disponíveis no MKM:
(1) Registro
inicial para ler (2) Total de
registros para ler
(1) O registro inicial para ler é obtido removendo o indicativo (número 3) e subtraindo o resultado
por 1. No exemplo, o registro 30015 (decimal) é transmitido como 0x000E (hexadecimal): 30015
= 0015 = (0015 - 1) = 00014 = 0x000E hexadecimal.
(2) No máximo podem ser lidos 12 registros (6 grandezas elétricas) para cada requisição.
SLAVE
Endereço 0x04 0x04 0x00 0x00 0x70 0x42 CRC
do Slave 8 bit - 8 bit
Byte Count
No exemplo anterior o master pediu uma leitura dos registros que contém a frequência (30015 e
30016) e obteve como resposta o valor 0x00007042 (IEEE 32-bit floating point). Convertendo este
valor para decimal temos que Frequência = 60,0 Hz.
Função
MASTER
Endereço 0x05 0x00 0x04 0xFF 0x00 CRC
do Slave 8 bit - 8 bit
(1) Este registro é obtido subtraindo 1 do comando desejado. No exemplo o comando 005 é enviado
como 0x0004.
(2) Utilizado para ligar (0xFF00) ou desligar (0x0000) as saídas digitais. Ignorado pelos outros
comandos
SLAVE
Endereço 0x05 0x00 0x04 0xFF 0x00 CRC
do Slave 8 bit - 8 bit
Esta função serve para programar um dos registros de configuração do instrumento (“Holding
Registers”). Para saber quais são estes registros consulte a função “Read Holding Register (3)”. Os
frames desta função para o master e slave são:
Função
MASTER
Endereço 0x06 0x00 0x05 0x00 0x01 CRC
do Slave 8 bit - 8 bit
(1) O registro para programar é obtido removendo o indicativo (número 4) e subtraindo o resultado
por 1. No exemplo, o registro 40006 (decimal) é transmitido como 0x0005 (hexadecimal): 40006 =
0006 = (0006 - 1) = 0005 = 0x0005 hexadecimal.
Função
SLAVE (echo of the command received)
Endereço 0x06 0x00 0x05 0x00 0x01 CRC
do Slave 8 bit - 8 bit
CÓDIGO DESCRIÇÃO
0x00 Funcionamento correto
0x01 Inversão de Fase ou falta de Fase
0x02 Erro matemático
0x04 Overflow na geração do Pulso de Energia
0x08 Excedido o limite permitido para Urms e/ou Irms
0x10 Sistema reinicializado incorretamente
0x80 Falha Memória de Massa
Observe que o código é binário, ou seja, pode haver uma combinação de códigos. Assim, um código de
erro 09 identifica um código de erro 01 mais código 08.
MASTER
Endereço 07 CRC
do Slave 8 bit - 8 bit
SLAVE
Endereço 07 Código CRC
do Slave 8 bit - 8 bit
Esta função serve para programar vários registros de configuração do instrumento (“Holding
Registers”). Para saber quais são estes registros consulte a função “Read Holding Register (3)”.
(1) O registro inicial para programar é obtido removendo o indicativo (número 4) e subtraindo o
resultado por 1. No exemplo, o registro 40001 (decimal) é transmitido como 0x0000 (hexadecimal):
40001 = 0001 = (0001 - 1) = 0000 = 0x0000 hexadecimal.
Função
SLAVE
Endereço 0x10 0x00 0x00 0x00 0x02 CRC
do Slave 8 bit - 8 bit
No exemplo acima o master programou os registros referentes ao TP (40001 e 40002) como 1500
(IEEE 32-bit float pointing = 0x0080BB44).
MASTER
Slave 0x11 CRC
Address 8 bit - 8 bit
SLAVE
Endereço 0x11 Byte CÓDIGO ON / XX XX CRC
do Slave Count OFF
Onde:
• Byte Count = Sempre 0x04
• CÓDIGO = Código do Dispositivo
• ON / OFF = Sempre ON → 0xFF
• XX XX = Reservado
1. “No reply”: Caso o slave detecte um erro no formato dos dados, CRC, etc, ele ignorará a
mensagem não gerando um reply (resposta).
SLAVE
Endereço 0x80 + Função Código CRC
do Slave de Erro 8 bit - 8 bit
Número da
função enviada
pelo master com
o bit 7 = 1
• ConfigAddress (0 / 0x42)
ConfigAddress ( 0 / 0x42)
Esta função, embora seja especial, é compatível com os dispositivos Electrex e TKE-01. O slave não
deverá gerar reply e, no caso do MKM, este não necessita estar com o jumper CONFIGURAÇÃO.
Esta função permite configurar o endereço de um dispositivo através de seu número de série. Os
endereços válidos vão de 1 até 247, sendo que cada dispositivo deve possuir um endereço único na
rede. Para certificar-se que o endereço desejado já não está cadastrado em outro dispositivo, antes de
executar esta função envie, por exemplo, a função 07 com o endereço desejado para a rede. Caso você
não obtenha resposta, significa que nenhum dispositivo foi configurado com este endereço.
MASTER
0x00 0x42 Número de Série do Dispositivo Novo Endereço CRC
8 bit - 8 bit - 8 bit - 8 bit 8 bit 8 bit - 8 bit
Por exemplo, supondo um dispositivo com número de série 21000, para configurá-lo para o endereço
100:
MASTER
0x00 0x42 0x00 0x00 0x52 0x08 0x64 CRC
Timing
Os seguintes tempos devem ser respeitados na comunicação entre o Master e o Slave:
Ação Equate
Retry para um mesmo slave DELAY_RETRY_SEND_FRAME
Delay para iniciar a transmissão de um frame DELAY_SEND_FRAME
Aguardar a recepção de um frame TIMEOUT_RECEIVE_FRAME
Delay para transmitir um byte do frame DELAY_SEND_BYTE
Aguardar a recepção de um byte do frame TIMEOUT_RECEIVE_BYTE
Tempo para confirmar silêncio na rede CONFIRM_SILENT
DELAY_RETRY_SEND_FRAME 3 segundos
DELAY_SEND_FRAME > 10 ms
TIMEOUT_RECEIVE_FRAME 1 segundo