Comunicação Modbus RTU com CLP Keyence e
Inversor Mitsubishi FR■D700
Guia Didático passo-a-passo (baseado no KV■NC32T + KV■NC20L e FR■D700)
Este e■book foi organizado para explicar, de forma clara e passo a passo, o comportamento do programa
ladder que implementa Modbus RTU no CLP Keyence (KV■NC32T com módulo KV■NC20L)
comunicando com o inversor Mitsubishi FR■D700. As seções seguem as imagens que você forneceu e
explicam cada linha/rede do ladder, relacionando com CM/CR do módulo e com os registradores do
inversor.
Pré■requisitos
CLP Keyence KV■NC32T (com KV■NC20L instalado na porta serial apropriada). Inversor Mitsubishi
FR■D700 configurado para Modbus RTU (Pr.549 = 1) e com Station No. (Pr.117) definido. Cabos
RS■485 corretamente conectados (A↔A, B↔B), terminação no último nó. Parâmetros de comunicação
alinhados: baudrate (Pr.118), paridade/stop (Pr.119/Pr.120).
1) Inicialização da porta (primeiro scan)
Objetivo: garantir que o módulo KV■NC20L aplique as configurações de unidade e timing antes de enviar
qualquer frame Modbus. A imagem a seguir é o trecho do ladder que roda no primeiro scan (CR2008 =
1).
Passo a passo do código mostrado:
CR2008 ON (primeiro scan) — Executa a rotina de inicialização apenas na energização/entrada em
RUN.
MOV $0000 → CM7006 — Define a unidade de armazenamento da porta 2 (bytes/words). $0000 significa
padrão em bytes conforme manual.
MOV #1 → CM7571 — Define o tempo de espera entre transmissões: #1 = 1×10 ms = 10 ms
(transmission delay).
SET CR7204 — Solicita ao módulo que aplique a configuração escrita nos CM. O módulo processa e
aplica as novas configurações.
Aguardar CR7304 = 1 — CR7304 indica 'conclusão da alteração de configuração' na porta 2 — só então
seguimos com comunicações.
RES CR7204 — Limpa a solicitação de alteração.
Trecho ladder (exemplo para colar no KV Studio):
|--[ CR2008 ]--[ MOV $0000 CM7006 ]--[ MOV #1 CM7571 ]--[ SET CR7204 ]--| |--[
CR7304 ]--[ RES CR7204 ]----------------------------------------|
2) Preparar e enviar a requisição Modbus (rung principal)
Objetivo: quando o programa determina que é hora de ler/escrever, preenchemos os CM correspondentes
e acionamos CR7201 para o módulo montar e transmitir o frame Modbus RTU. A imagem abaixo é o rung
que contém as condições e os MOVs que preparam a requisição.
Explicação dos bits/condições à esquerda:
MR11813 — Flag do programa: indica 'está na hora de transmitir' (controlada pela lógica de
agendamento).
T190 — Temporizador que regula o espaçamento entre requisições (evita sobrescrita).
NOT CR7201 — Garante que não haja outra solicitação em andamento na porta 2 (CR7201 = solicitação
enviada).
NOT CR7302 — Garante que não há erro anterior (CR7302 = erro de execução).
NOT CR7303 — Garante que a porta não esteja ocupada (CR7303 = em execução).
MOVs (parâmetros enviados ao módulo):
MOV #1 → CM7001 — Slave ID do inversor (Pr.117). Ex.: 1.
MOV $0003 → CM7002 — Função Modbus: $0003 = 3 (Read Holding Registers).
MOV $00C8 → CM7007 — Endereço inicial em hexadecimal: $00C8 = 200 decimal → registrador 40201
(frequência real).
MOV #5 → CM7008 — Quantidade de registradores a ler (5). Ajuste conforme necessidade.
SET CR7201 — Aciona o módulo para montar e transmitir o frame Modbus RTU com os CM definidos.
Exemplo de frame enviado (hex):
Mestre → Escravo (ler 3 regs a partir de 00C8): 01 03 00 C8 00 03 CRC_L CRC_H
Trecho ladder (exemplo):
|--[ MR11813 AND T190 AND NOT CR7201 AND NOT CR7302 AND NOT CR7303 ]--| | MOV
#1 CM7001 (Slave ID) | | MOV $0003 CM7002 (Função 03) | | MOV $00C8 CM7007
(Endereço inicial = 200) | | MOV #5 CM7008 (Qtd regs = 5) | | SET CR7201 |
3) Recepção: copiar resposta do buffer para memória do CLP
Objetivo: quando o módulo indica que a execução terminou com sucesso (CR7301 = 1) copiamos os
dados recebidos da área CM7311 para D-registers/DM do CLP usando BMOV. Também tratamos erros
(CR7302).
Bits e ações principais:
CR7301 — Execution complete (Resposta recebida). Se ON, os dados em CM7311 são válidos.
NOT CR7302 — Garante que não houve erro de execução antes de mover os dados.
NOT CR7303 — A porta não está em execução (pronto para mover).
BMOV CM7311 → D400 K3 — Copia os N words do buffer de resposta (CM7311) para os D-registers do
CLP (ex.: D400..D402).
RST CR7201 / RES flags — Reseta o bit de solicitação e flags internas para preparar a próxima
requisição.
Exemplo de resposta (hex):
Escravo → Mestre: 01 03 06 XX XX YY YY ZZ ZZ CRC_L CRC_H (XX=Freq, YY=Corrente, ZZ=Tensão)
Trecho ladder (exemplo):
|--[ CR7301 AND NOT CR7302 ]--| | BMOV CM7311 D400 K3 | ; copia 3 words lidas
para D400..D402 | RST CR7201 | ; reseta solicitação
4) Timeout, erros e rotina de reset
No seu programa há timers e flags que detectam timeout e gerenciam tentativas/falhas. Principais pontos:
- T191: monitora timeout de resposta — se exceder, seta erro e incrementa contador (DM70). - CR7302:
indica erro de execução (timeout, CRC, exceção Modbus). Use NOT CR7302 para bloquear novas
solicitações até tratar o erro. - MR11907 / MR12415: flags de reset/restart da rotina de comunicação
(zeram contadores, limpam flags e reconfiguram porta).
5) Diagnóstico e boas práticas
Terminação RS■485 — Coloque resistor de terminação (120 Ω) no último nó; ative o resistor interno se
disponível.
Aterramento — Faça aterramento correto do shield em um ponto para reduzir ruído.
Parity/baud match — Confirme paridade/baud/stop bits idênticos no CLP e inversor.
Delay entre frames — Ajuste CM7571 (wait time) se o escravo precisar de mais tempo para processar.
Monitor de trace — Use o Modbus Dedicated Trace Monitor ou Built■in Function Monitor do KV Studio
para ver frames e erros.
Proteções — Se o inversor falhar na comunicação repetidamente, configure Pr.122 (detecção de perda
de sinal) e Pr.121/Pr.502 para comportamento seguro no FR■D700.
Appendix: Telegramas Modbus e resumo CM/CR
Telegrama exemplo (leitura função 03):
Mestre envia: 01 03 00 C8 00 03 CRC_L CRC_H
Resposta: 01 03 06 XX XX YY YY ZZ ZZ CRC_L CRC_H
Telegrama exemplo (escrita múltipla função 16):
Mestre envia: 01 10 00 00 00 02 04 AABB CCDD CRC_L CRC_H
Resposta (ack): 01 10 00 00 00 02 CRC_L CRC_H
Resumo:
CM = Control Memory (words) → parâmetros e buffers (ex.: CM7001, CM7007, CM7311).
CR = Control Relay (bits) → comandos e status (ex.: CR7201=solicitar, CR7301=ok, CR7302=erro,
CR7303=busy, CR7304=config ok).