Escolar Documentos
Profissional Documentos
Cultura Documentos
MODBUS TCP
Denilson Pegaia
Objetivo: Prover uma visão geral de como configurar comunicação MODBUS TCP usando
os controladores SIMATIC S7-1200 / S7-1500 / ET200 SP CPU. O documento é focado em
controladores Siemens, mas os conceitos gerais podem ser expandidos para com outros
dispositivos.
Aviso: Este documento apresenta dicas e exemplos sobre o produto e supõe que o leitor possua conhecimento básico
prévio sobre o mesmo. Para informações completas e atualizadas, deve-se consultar o manual do produto. O intuito deste
texto é meramente didático, podendo ser alterado pela Siemens sem aviso prévio. Os exemplos devem ser adaptados ao uso
final e exaustivamente testados antes de utilizados em projetos reais.
Índice
4. Técnicas de diagnóstico............................................................................................... 23
5. Dicas para múltiplos acessos ....................................................................................... 26
Acessos múltiplos a um mesmo servidor .......................................................................................................... 26
Acesso a vários servidores ............................................................................................................................... 28
28/04/2018 Página 1 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
1. Introdução - Conceitos
Existem algumas variações de MODBUS que dizem respeito ao meio físico e a formatação
do telegrama. As formas mais comuns de MODBUS encontradas são MODBUS RTU e
MODBUS TCP.
28/04/2018 Página 2 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
O MODBUS pode trabalhar com diferentes tipos de variáveis. Estes tipos de variáveis são
denominados coils (sinais binários) e registros (palavras de 16 bits).
O padrão MODBUS não especifica a forma como as variáveis internas dos equipamentos
são mapeadas (fica a cargo de cada fabricante). Por isso, a forma como os equipamentos
apresentam o endereçamento das variáveis internas pode variar, tanto no conceito como
nos valores:
Por exemplo, para a leitura da primeira variável de 16 bits, os fabricantes podem apresentar
as nomenclaturas:
“Function code” 3, registro 0 (as variáveis de 16 bits começa a ser contadas a partir
da posição 0).
“Function code” 3, registro 1 (as variáveis de 16 bits começa a ser contadas a partir
da posição 1).
Nos controladores S7-1200/ S7-1500 o MODBUS TCP as variáveis são endereçadas por
um binômio de duas variáveis: MB_MODE e MB_DATA_ADDR. Além destas duas
variáveis, uma terceira, MB_DATA_LEN indica a quantidade de coils/registros que serão
lidos de uma vez a partir do endereço inicial especificado.
Existem mais de uma opção MB_MODE / MB_DATA_ADDR para cada par “Function
code”/”número de registro”. Cada uma destas opções assume um endereçamento interno
começando de valores diferentes (por exemplo, começando do 0 ou de 40001). Isto permite
ao programador flexibilidade sobre a forma de representar os endereços em seu programa.
28/04/2018 Página 3 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
0 a 9998 1 1 a 9999 1
Escrita de um "output
bits" (bit) 05 0 a 65535 105 0 a 65535 1
28/04/2018 Página 4 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
Pela tabela, a leitura de registros é feita pelo Function Code 03. Há duas
possibilidades de endereçamento por parte do Siemens: MODE = 0 ou MODE = 103.
Como o fornecedor do equipamento usou endereçamento na da faixa dos 40.000,
sugere-se neste caso, usar MODE = 0. Desta forma, no programa do usuário,
poderá usar endereçamento igualmente na faixa dos 40.000 (MB_MODE = 0,
MB_DATA_ADDR = 40.056, MB_DATA_LEN = 1).
Pela tabela, a leitura de registros é feita pelo Function Code 03. Há duas
possibilidades de endereçamento por parte do Siemens: MODE = 1 ou MODE = 103.
Como o fornecedor do equipamento usou endereçamento fora da faixa dos 40.000,
sugere-se neste caso, usar MODE = 103. Desta forma, no programa do usuário,
poderá usar endereçamento igualmente fora da faixa dos 40.000 (MB_MODE = 1,
MB_DATA_ADDR = 127, MB_DATA_LEN = 3).
Pela tabela a escrita de registros é feita pelo Function Code 16. Há duas
possibilidades de endereçamento por parte do Siemens: MODE = 1 ou MODE = 116.
Como o fornecedor do equipamento usou endereçamento na faixa dos 40.000,
sugere-se neste caso, usar MODE = 1. Desta forma, no programa do usuário,
poderá usar endereçamento igualmente fora da faixa dos 40.000 (MB_MODE = 1,
MB_DATA_ADDR = 40.056, MB_DATA_LEN = 1).
Pela tabela a escrita de registros é feita pelo Function Code 16. Há duas
possibilidades de endereçamento por parte do Siemens: MODE = 1 ou MODE = 116.
Como o fornecedor do equipamento usou endereçamento fora da faixa dos 40.000,
sugere-se neste caso, usar MODE = 116. Desta forma, no programa do usuário,
poderá usar endereçamento igualmente fora da faixa do 40.000 (MB_MODE = 116,
MB_DATA_ADDR = 127, MB_DATA_LEN = 3).
28/04/2018 Página 5 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
Para que uma comunicação MODBUS possa ser configurada é necessário levantar as
seguintes informações:
28/04/2018 Página 6 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
3. Configuração
Configurar o hardware do equipamento como usual. Habilitar System memory bits e Clock
System memory bits.
Anotar a constante de sistema que identifica a porta Ethernet que vai ser usada. Isto é feito
no Device View -> selecionar a porta Ethernet -> Properties -> System Constants (neste
exemplo a porta tem nome simbólico Local~PROFINET_interface_1 e valor 64):
28/04/2018 Página 7 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
Criar uma variável neste DB (neste exemplo, “myConnection”) com data type =
TCON_IP_v4 (digitar este formato manualmente):
28/04/2018 Página 8 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
Dados do servidor:
Endereço IP do servidor a ser acessado (vide Figura 1 item G). Por exemplo, o
endereço 192.168.0.1 teria ADDR[1] = 192, ADDR[2] = 168, ADDR[3] = 0, ADDR[4]
= 2:
28/04/2018 Página 9 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
Dados do cliente:
28/04/2018 Página 10 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
Porta local (número único, e.g. 502 para a primeira conexão– vide Figura 1 item E):
28/04/2018 Página 11 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
REQ = atribuir uma variável pulsante (em geral sugere-se que esta entrada seja
ligada a um clock memory de tempo razoável para monitoração a olho nu durante a
fase de testes, neste exemplo, variável de sistema “Clock_1Hz”):
28/04/2018 Página 12 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
28/04/2018 Página 13 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
MB_DATA_LEN = atribuir quantos registros vão ser lidos a partir do endereço inicial
(para leitura/escrita de apenas uma variável, usar 1 - neste exemplo, 10 registros):
28/04/2018 Página 15 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
Configurar o hardware do equipamento como usual. Habilitar System memory bits e Clock
System memory bits.
Anotar a constante de sistema que identifica a porta Ethernet que vai ser usada. Isto é feito
no Device View -> selecionar a porta Ethernet -> Properties -> System Constants (neste
exemplo a porta tem nome simbólico Local~PROFINET_interface_1 e valor 64):
28/04/2018 Página 16 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
Criar uma variável neste DB (neste exemplo, “myConnection”) com data type =
TCON_IP_v4 (digitar este formato manualmente):
28/04/2018 Página 17 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
Dados do cliente:
Endereço IP do cliente que vai acessá-lo (vide Figura 1 item A). Por exemplo o
endereço 192.168.0.1 teria ADDR[1]=192, ADDR[2]=168, ADDR[3]=0, ADDR[4] =2:
Nota: usando o valor default 0.0.0.0, o servidor MODBUS aceitará conexão com
qualquer IP de cliente que queira se conectar falar com ele. Na ausência de
especificações em contrário, sugere-se usar o valor default.
Nota: usando o valor default 0, o servidor MODBUS aceitará conexão com qualquer
porta que o cliente queira usar na comunicação. Na ausência de especificações em
contrário, sugere-se usar o valor default.
28/04/2018 Página 18 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
Dados do cliente:
28/04/2018 Página 19 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
Porta local (número único, e.g. 502 para a primeira conexão– vide Figura 1 item K):
28/04/2018 Página 20 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
28/04/2018 Página 21 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
28/04/2018 Página 22 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
4. Técnicas de diagnóstico
Para efeitos de debug de primeiros testes e para obter um diagnóstico durante operação
sugere-se a implantação de programa de usuário adicional para processar as variáveis de
saída dos blocos MB_CLIENT e MB_SERVER.
DONE fica em TRUE durante um ciclo (“scan”), para indicar que o pedido de
reconfiguração do módulo de comunicação (REQ = TRUE) foi completado com
sucesso.
ERROR fica em TRUE durante um ciclo (“scan”) para indicar que o pedido de
reconfiguração do módulo de comunicação (REQ = TRUE) não foi completado com
sucesso, isto é, houve um erro.
STATUS indica o status do bloco durante o respectivo ciclo (“scan”). Apenas valores
na casa dos 8000 (hexadecimal) indicam efetivamente erros. Nota: a indicação do
tipo do erro ocorrido ocorre somente durante um ciclo (“scan”) correspondente ao
momento em que a variável ERROR fica em TRUE. O significado dos códigos de
erro podem ser obtidos do sistema de ajuda do TIA Portal (selecionar o bloco e
pressionar F1).
NDR fica em TRUE durante um ciclo (“scan”), para indicar que o cliente escreveu
novos dados com sucesso.
DR fica em TRUE durante um ciclo (“scan”), para indicar que o cliente leu dados
com sucesso.
ERROR fica em TRUE durante um ciclo (“scan”) para indicar que o pedido de
comunicação (REQ = TRUE) não foi completado com sucesso, isto é, houve um
erro.
STATUS indica o status do bloco durante o respectivo ciclo (“scan”). Apenas valores
na casa dos 8000 (hexadecimal) indicam efetivamente erros. Nota: a indicação do
tipo do erro ocorrido ocorre somente durante um ciclo (“scan”) correspondente ao
momento em que a variável ERROR fica em TRUE. O significado dos códigos de
erro podem ser obtidos do sistema de ajuda do TIA Portal (selecionar o bloco e
pressionar F1).
Os eventos registrados por estas variáveis ficam disponíveis por apenas um ciclo (“scan”)
do programa. Por isso é necessário processar estes sinais pelo programa a fim de que
usuário possa ter acesso a estas informações.
É interessante contar durante quantos ciclos (“scans”) o sinal de DONE, D, NDR e ERROR
ficaram em TRUE e salvar (MOVE) em alguma memória auxiliar (não temporária) o valor de
STATUS para o ciclo (“scan”) em que ERROR estiver em TRUE. Vide exemplos de lógica
abaixo:
28/04/2018 Página 23 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
Figura 4 - Exemplo de programa para avaliação do diagnóstico para o bloco MB_CLIENT memorizando o
valor de STATUS para o evento de ERROR = TRUE e contando o número de ciclos (“scans”) em que
DONE = TRUE (o mesmo conceito de contagem pode ser usado também).
28/04/2018 Página 24 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
Figura 5 – Exemplo de programa para avaliação do diagnóstico para o bloco MB_SERVER memorizando
o valor de STATUS para o evento de ERROR = TRUE e contando o número de ciclos (“scans”) em que
NDR, DR e ERROR ficam em TRUE.
28/04/2018 Página 25 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
A técnica mais simples para que um cliente faça múltiplos acessos a um mesmo servidor
(e.g. para ler e escrever valores) é alternar as chamadas de blocos MB_CLIENT de modo
que apenas uma destas chamadas seja executada por vez.
Figura 6 – Neste seguimento são geradas as variáveis de controle para a chamada do bloco MB_CLIENT.
A variável “Index” sofre um acréscimo de 1 a cada segundo. Seu valor varia de um até um número
máximo (neste exemplo 2). A variável “Trigger” gera um pulso atrasado um ciclo após uma alteração de
“Index”.
28/04/2018 Página 26 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
MB_CLIENT lê
variáveis do servidor
quando “Index”= 1
MB_CLIENT escreve
variáveis do servidor
quando “Index”= 2
Figura 7 – Chamadas condicionais do bloco MB_CLIENT de modo que faça leituras de variáveis do
servidor (para “Index”= 1) alternadamente com escritas (para “Index”= 2)
28/04/2018 Página 27 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
A técnica mais simples para que um cliente acessar mais de um servidor é usar um recurso
de comunicação (connection) para cada acesso. Em termos de programação isto implica
em:
O ID da conexão deverá ser único no PLC e, portanto, diferente para cada servidor
acessado. Em geral adota-se ID=1 para a primeira conexão, ID = 2 para a segunda
e assim sucessivamente.
Cada conexão deverá ter uma porta local única.
Notas:
28/04/2018 Página 28 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
o Em algumas raras vezes, os exemplos não contém a versão mais atual dos
blocos. Por isso é melhor olhar o que foi feito e realizar seu projeto copiando
ideias, mas não objetos do exemplo.
28/04/2018 Página 29 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
s MODBUS TCP
S7-1200 / S7-1500 / ET200SP CPU
7. Referências
FAQ desenvolvida por Denilson Pegaia e revisada por Fabricio Campidelli Gozzo.
Which ports are released for Modbus/TCP communication and how many Modbus
clients can communicate with a SIMATIC S7 PN-CPU as Modbus server?
https://support.industry.siemens.com/cs/br/en/view/34010717
Suporte Técnico
Informações: www.siemens.com.br/sitrain
Tel.: 0800 7 73 73 73
28/04/2018 Página 30 / 30
s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline