5.3.1.8 Fetch Comm Event Counter (Código de função 0x0B):
Esta função devolve uma palavra de status e um contador de eventos a partir do contador de eventos de comunicação do slave. O master consegue verificar com este contador se o slave processou corretamente as mensagens.
O valor de contagem é atualizado após cada processamento de mensagem bem sucedido. Esta contagem não é efetuada nas respostas de exceção, comandos de poll ou consultas do contador.
É possível reinicializar o contador de eventos através da função de diagnóstico (código 0x08), através da subfunção Restart Communications Option (código 0x01) ou de Clear Counters e do registro de diagnóstico (código 0x0A).
Consulta:
Neste exemplo é efetuada a leitura do contador de comunicação do slave 11:
Nome do campo |
Exemplo |
RTU |
ASCII |
|
Start of frame |
- |
t1-t2-t3 |
”:” |
0x3a |
Slave address |
0x0B |
0x0B |
”0B” |
0x30, 0x42 |
Function code |
0x0B |
0x0B |
”0B” |
0x30, 0x42 |
Error Check (LRC / CRC) |
- |
0x47 |
”EA” |
0x45, 0x41 |
|
|
0x47 |
|
|
End of frame |
|
t1-t2-t3 |
- |
0xD, 0xA |
Tabela 5.42: Exemplo consulta, Fetch Comm Event Counter
Resposta:
A resposta contém uma palavra de status de 2 bytes e um contador de eventos de 2 bytes. A palavra de status contém apenas zeros.
Na tabela que se segue está apresentado um exemplo para uma resposta:
Nome de campo |
Exemplo |
RTU |
ASCII |
|
Start of frame |
- |
t1-t2-t3 |
”:” |
0x3a |
Slave address |
0x0B |
0x0B |
”0B” |
0x30, 0x42 |
Function code |
0x0B |
0x0B |
”0B” |
0x30, 0x42 |
Status high |
0x00 |
0x00 |
”00” |
0x30, 0x30 |
Status low |
0x00 |
0x00 |
”00” |
0x31, 0x33 |
Event count high |
0x00 |
0x00 |
”00” |
0x30, 0x30 |
Event count low |
0x03 |
0x03 |
”03” |
0x30, 0x33 |
Error Check (LRC / CRC) |
- |
0xE4 |
”E7” |
0x45, 0x37 |
|
|
0xA0 |
|
|
End of frame |
|
t1-t2-t3 |
- |
0xD, 0xA |
Tabela 5.43: Exemplo resposta, Fetch Comm Event Counter
O contador de eventos mostra que foram contados 3 (0x03) eventos.
MODBUS / Configuração |
63 |
01-03-16 |
|
|
5.3.1.9 Force Multiple Coils (Código de função 0x0F):
Através desta função são definidas uma série de bits de saída para 1 ou 0. Em um envio por difusão os mesmos bits são definidos em todos os slaves ativados. O número máximo é de 256 bits.
Função!
Consulta:
O primeiro ponto é endereçado com 0. Em Modicon o endereçamento começa com 1 (0x01).
A mensagem de consulta especifica os bits que devem ser definidos. Os estados solicitados de 1 ou 0 são determinados pelos conteúdos do campo de dados de consulta. Em este exemplo são definidos 16 bits com o endereço 0 no slave 11. A consulta contém 2 bytes com o valor 0xA5F0, ou seja, 1010 0101 1111 0000 em binário.
Bit: |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
Coil: |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
O primeiro byte transmite os 0xA5 para o endereço 7 a 0, sendo 0 o bit com o valor mais baixo. O byte seguinte transmite 0xF0 para o endereço 15 a 8, sendo o bit mais baixo de 8 bits.
Nome do campo |
Exemplo |
RTU |
ASCII |
|
Start of frame |
- |
t1-t2-t3 |
”:” |
0x3a |
Slave address |
0x0B |
0x0B |
”0B” |
0x30, 0x42 |
Function code |
0x0F |
0x0F |
”0F” |
0x30, 0x46 |
Coil address high |
0x00 |
0x00 |
”00” |
0x30, 0x30 |
Coil address low |
0x00 |
0x00 |
”00” |
0x30, 0x30 |
Quantity of coils high |
0x00 |
0x00 |
”00” |
0x30, 0x30 |
Quantity of coils low |
0x10 |
0x10 |
”10” |
0x31, 0x30 |
Byte Counter |
0x02 |
0x02 |
”02” |
0x30, 0x32 |
Force data high (coils 7 ... 0) |
0xA5 |
0xA5 |
”A5” |
0x41, 0x35 |
Force data low (coils 15 ... 8) |
0xF0 |
0xF0 |
”F0” |
0x46, 0x30 |
Error Check (LRC / CRC) |
- |
0xE7 |
”3F” |
0x33, 0x46 |
|
|
0x94 |
|
|
End of frame |
|
t1-t2-t3 |
- |
0xD, 0xA |
Tabela 5.44: Exemplo consulta, Force Multiple Coils
Resposta:
A resposta é o endereço do slave, do código de função, o endereço de partida e o número dos bits definidos.
Nome do campo |
Exemplo |
RTU |
ASCII |
|
Start of frame |
- |
t1-t2-t3 |
”:” |
0x3a |
Slave address |
0x0B |
0x0B |
”0B” |
0x30, 0x42 |
Function code |
0x0F |
0x0F |
”0F” |
0x30, 0x46 |
Coil address high |
0x00 |
0x00 |
”00” |
0x30, 0x30 |
Coil address low |
0x00 |
0x00 |
”00” |
0x30, 0x30 |
Quantity of coils high |
0x00 |
0x00 |
”00” |
0x30, 0x30 |
Quantity of coils low |
0x10 |
0x10 |
”10” |
0x31, 0x30 |
Error Check (LRC / CRC) |
- |
0x54 |
”D6” |
0x44, 0x36 |
|
|
0xAD |
|
|
End of frame |
|
t1-t2-t3 |
- |
0xD, 0xA |
Tabela 5.45: Exemplo resposta, Force Multiple Coils
64 |
MODBUS / Configuração |
|
01-03-16 |
|
5.3.1.10 Registros Preset Multiple (código de função 0x10):
Esta função registra valores em uma série de palavras de saída (também designado por ”Registro de saída”). Em um envio por difusão os valores são registrados em todos os slaves. O número máximo de registros por frame é de 128.
|
|
Consulta: |
|
|
|
|
|
|
Função! |
|
|
|
|
|
|||
|
O primeiro ponto é endereçado com 0. Em Modicon o endereçamento começa com 1 |
|||||||
|
|
|||||||
|
|
(0x01). |
|
|
|
|
|
|
|
|
A mensagem de consulta determina os registros que devem ser definidos. Os dados são |
||||||
|
|
enviados como 2 bytes por registro. |
|
|
|
|||
|
|
No exemplo é indicado a forma como são definidos os dados nos dois registros 0 e 1 no |
||||||
|
|
slave 11: |
|
|
|
|
|
|
|
|
Nome do campo |
Exemplo |
RTU |
ASCII |
|
|
|
|
|
Start of frame |
- |
t1-t2-t3 |
”:” |
0x3a |
|
|
|
|
Slave address |
0x0B |
0x0B |
”0B” |
0x30, 0x42 |
|
|
|
|
Function code |
0x10 |
0x10 |
”10” |
0x31, 0x30 |
|
|
|
|
Starting address high |
0x00 |
0x00 |
”00” |
0x30, 0x30 |
|
|
|
|
Starting address low |
0x00 |
0x00 |
”00” |
0x30, 0x30 |
|
|
|
|
Number of register high |
0x00 |
0x00 |
”00” |
0x30, 0x30 |
|
|
|
|
Number of register low |
0x02 |
0x02 |
”02” |
0x30, 0x32 |
|
|
|
|
Byte Counter |
0x04 |
0x04 |
”04” |
0x30, 0x34 |
|
|
|
|
Data high |
(register 0) |
0x12 |
0x12 |
”12” |
0x31, 0x32 |
|
|
|
Data low |
(register 0) |
0x34 |
0x34 |
”34” |
0x33, 0x34 |
|
|
|
Data high |
(register 1) |
0x56 |
0x56 |
”56” |
0x35, 0x36 |
|
|
|
Data low |
(register 1) |
0x78 |
0x78 |
”78” |
0x37, 0x38 |
|
|
|
Error Check (LRC / CRC) |
- |
0xA9 |
”CB” |
0x43, 0x42 |
|
|
|
|
|
|
|
0x43 |
|
|
|
|
|
End of frame |
|
t1-t2-t3 |
- |
0xD, 0xA |
|
|
Tabela 5.46: Exemplo consulta, registro Preset Multiple
Resposta:
A resposta devolve o endereço do slave, o código de função, o endereço de partida e o número dos registros definidos.
Nome do campo |
Exemplo |
RTU |
ASCII |
|
Start of frame |
- |
t1-t2-t3 |
”:” |
0x3a |
Slave address |
0x0B |
0x0B |
”0B” |
0x30, 0x42 |
Function code |
0x10 |
0x10 |
”10” |
0x31, 0x30 |
Starting address high |
0x00 |
0x00 |
”00” |
0x30, 0x30 |
Starting address low |
0x00 |
0x00 |
”00” |
0x30, 0x30 |
Number of register high |
0x00 |
0x00 |
”00” |
0x30, 0x30 |
Number of register low |
0x02 |
0x02 |
”02” |
0x30, 0x32 |
Error Check (LRC / CRC) |
- |
0x41 |
”E3” |
0x45, 0x33 |
|
|
0x62 |
|
|
End of frame |
|
t1-t2-t3 |
- |
0xD, 0xA |
Tabela 5.47: Exemplo resposta, registro Preset Multiple
MODBUS / Configuração |
65 |
01-03-16 |
|
|
5.3.2Watchdog (comportamento em caso de falha do bus de campo)
Função! O Watchdog serve para a vigilância da transmissão de dados entre o comando superior e o acoplador/controlador. Para tal, o comando superior aciona ciclicamente uma função de tempo (Time-out) no acoplador/controlador. No caso de uma comunicação isenta de erros, não é possível este tempo alcançar o seu valor final, porque a comunicação é anteriormente iniciada de forma contínua. Se este tempo tiver decorrido existe uma falha do bus de campo.
O Watchdog tem de estar ligado para que possa ser ativado (ver ‘acoplador/ajustes’ ou ‘controlador/ajustes’).
No acoplador/controlador existem registros especiais para a excitação e para a consulta de status do Watchdog devido ao comando superior (endereços de registro 0x1000 a 0x1008).
Depois de ligar a tensão de alimentação o Watchdog não está ainda ativado. Primeiro deve determinar-se o valor de Time-out (registro 0x1000). O Watchdog pode ser ativado pelo fato de no registro de máscaras (0x1001) ser registrado um código de função que não seja igual a 0. Existe uma segunda possibilidade de ativação registrando um valor diferente de 0 no registro de comutação (0x1003).
Ao ler o tempo de acionamento mínimo (registro 0x1004) é determinado se a reação de erro do Watchdog foi ativada. Se este valor de tempo for 0 pressupõe-se que se trata de uma falha do bus de campo. O Watchdog pode ser iniciado de acordo com as duas possibilidades anteriormente referidas ou por meio do registro 0x1007.
Uma vez iniciado, o usuário só pode parar o Watchdog, por motivos de segurança, através de uma determinada via (registro 0x1005 ou 0x1008).
66 |
MODBUS / Configuração |
|
01-03-16 |
|
Registros Watchdog:
Pode ser utilizada a comunicação com os registros Watchdog!
Ender. |
Denominação |
Acesso |
Compr. |
Valor |
de |
Descrição |
|
|
registro |
|
|||||||
|
|
|
(palavra) |
referência |
|
|
||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
||
0 x 1000 |
Tempo excedido |
Leitura / |
1 |
pu/co |
|
Este registro memoriza o valor para o tempo |
||
|
(Time-out), |
registro |
|
0x0000 |
|
excedido (Time-out). Para que o Watchdog |
||
|
WD_TIME |
|
|
|
|
possa ser iniciado, o valor de referência tem de |
||
|
|
|
|
|
|
|
ser alterado para um valor que não seja igual a |
|
|
|
|
|
|
|
|
zero. O tempo é definido em múltiplos de 100 |
|
|
|
|
|
|
|
|
ms, por conseguinte, 0x0009 significa um |
|
|
|
|
|
|
|
|
tempo de Time-out de 0.9 s. Este valor não |
|
|
|
|
|
|
|
|
pode ser alterado no Watchdog em curso. Não |
|
|
|
|
|
|
|
|
existe nenhum código através do qual o valor |
|
|
|
|
|
|
|
|
de dados atual possa ser novamente registrado |
|
|
|
|
|
|
|
|
enquanto o Watchdog estiver ativo. |
|
|
|
|
|
|
|
|
||
0 x 1001 |
Função Watchdog |
Leitura / |
1 |
pu/co |
|
Por meio desta máscara é possível ajustar os |
||
|
Máscara de |
registro |
|
0x0000 |
|
códigos de função, para acionar a função do |
||
|
codificação, |
|
|
|
|
Watchdog. Através do 1 pode ser selecionado |
||
|
Código de função |
|
|
|
|
(Código de função-1) |
+ |
|
|
1...16, |
|
|
|
|
|
o código de função ( = 2 |
|
|
|
|
|
|
|
....) |
|
|
|
WDFCM_1_16 |
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
D1001.0 corresponde ao código de função 1, |
|
|
|
|
|
|
|
|
D1001.1 corresponde ao código de função 2... |
|
|
|
|
|
|
|
|
Se existir aqui um valor que não seja igual a |
|
|
|
|
|
|
|
|
zero, é iniciada a função de Watchdog. Se na |
|
|
|
|
|
|
|
|
máscara apenas forem registrados códigos de |
|
|
|
|
|
|
|
|
funções não suportadas, o Watchdog não é |
|
|
|
|
|
|
|
|
iniciado. Um erro existente é reinicializado, |
|
|
|
|
|
|
|
|
sendo possível descrever novamente a figura |
|
|
|
|
|
|
|
|
do processo. Se o Watchdog estiver ativo |
|
|
|
|
|
|
|
|
também não é possível efetuar quaisquer |
|
|
|
|
|
|
|
|
alterações. Não existe nenhum código através |
|
|
|
|
|
|
|
|
do qual o valor de dados atual possa ser |
|
|
|
|
|
|
|
|
novamente registrado enquanto o Watchdog |
|
|
|
|
|
|
|
|
estiver ativo. |
|
|
|
|
|
|
|
|
|
|
0 x 1002 |
Função |
Watchdog |
Leitura / |
1 |
pu/co |
|
A mesma função da anterior, embora com os |
|
|
Máscara |
de |
registro |
|
0x0000 |
|
códigos de função 17 a 32. Estes códigos não |
|
|
codificação, |
|
|
|
|
são suportados, pelo que este registro deve |
||
|
Código |
de função |
|
|
|
|
permanecer no valor de referência. Não existe |
|
|
17...32, |
|
|
|
|
|
nenhum código de exceção pelo qual o valor |
|
|
WD_FCM_17_32 |
|
|
|
|
de dados atual possa ser novamente registrado |
||
|
|
|
|
|
|
|
enquanto o Watchdog estiver ativo. |
|
|
|
|
|
|
|
|
|
|
0 x 1003 |
Watchdog-Trigger, |
Leitura / |
1 |
pu/co |
|
Este registro é utilizado para um método de |
||
WD_TRIGGER |
|
|||||||
|
|
|
registro |
|
0x0000 |
|
Trigger alternativo. Ao registrar valores |
|
|
|
|
|
|
|
|
distintos em este registro, é acionado o |
|
|
|
|
|
|
|
|
Watchdog. Os valores subsequentes têm de |
|
|
|
|
|
|
|
|
ter tamanhos diferentes. O registro de um valor |
|
|
|
|
|
|
|
|
que não seja igual a zero inicia o Watchdog. |
|
|
|
|
|
|
|
|
Um erro de Watchdog é reinicializado, sendo |
|
|
|
|
|
|
|
|
novamente possível o registro dos dados do |
|
|
|
|
|
|
|
|
processo. |
|
|
|
|
|
|
|
|
|
|
0 x 1004 |
Tempo |
de |
Leitura / |
1 |
pu/co |
|
Através deste valor é possível efetuar a leitura |
|
acionamento |
|
|||||||
|
mínimo |
atual, |
registro |
|
0xFFFF |
|
do status do Watchdog atual. Se o Watchdog |
|
|
WD_AC_TRG_TIME |
|
|
|
|
for acionado, o valor memorizado é comparado |
||
|
|
|
|
|
com o valor atual. Se o valor atual for inferior |
|||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
ao valor memorizado, este é substituído pelo |
|
|
|
|
|
|
|
|
valor atual. A unidade é 100 ms/Digit. Ao |
|
|
|
|
|
|
|
|
registrar valores novos é alterado o valor |
|
|
|
|
|
|
|
|
memorizado, não tendo qualquer efeito sobre o |
|
|
|
|
|
|
|
|
Watchdog. 0x000 não é permitido. |
|
|
|
|
|
|
|
|
|
|
MODBUS / Configuração |
67 |
01-03-16 |
|
|