Especificação de implementação para o CLP Delta DVP-28SV11R2. Cada bloco abaixo corresponde a uma seção do programa, com a lógica e o porquê de cada intertravamento.
← voltar para a página centralY0 e Y1 entram depois dessa
malha: o CLP só consegue pedir calor quando a segurança física já permitiu.
Executado uma vez, no primeiro scan (M1002).
M1002 (primeiro scan) ├─ MOV H0091 D1120 ; formato: 19200, 8, N, 1 ├─ MOV K1 D1121 ; endereço do escravo = 1 ├─ SET M1120 ; retém a configuração de D1120 └─ SET M1143 ; seleciona modo RTU (desligado = ASCII)
D1120 no manual da série SV2 antes de
gravar. O registrador é um campo de bits (baud, paridade, stop, comprimento) e o
valor muda entre famílias Delta. O valor era H0086 aqui e estava errado:
decompondo, H0086 é 1000 0110 — b0=0 (7 bits), b1-b2=11 (paridade par),
b3=0 (1 stop), b4-b7=1000 (9600), ou seja 9600-7-E-1, que é justamente o padrão de
fábrica da Delta. O valor correto para 19200-8-N-1 é H0091
(1001 0001: 8 bits, sem paridade, 1 stop, 19200). Conferido no manual da série
e validado no CLP real em 31/08/2026 — depois de gravar, o PLC Information passou
a mostrar COM2: 1 (19200, 8, N, 1).M1002 e (D103 = K0) ├─ MOV K2000 D103 ; setpoint 200,0 °C ├─ MOV K1900 D104 ; mínima de cura 190,0 °C ├─ MOV K50 D105 ; histerese liga 5,0 °C ├─ MOV K30 D106 ; histerese desliga 3,0 °C ├─ MOV K1200 D107 ; tempo de cura 1200 s = 20 min └─ MOV K1 D109 ; receita ativa = 1
D104 e D107 vêm da
ficha técnica do pó que a fábrica usa e mudam por fornecedor. Ajuste antes de emitir
certificado para cliente.
Três canais do módulo DVP-04TC-S (termopar tipo K), lidos por FROM
a cada scan. O módulo é o primeiro da direita, portanto número K0.
M1000 (sempre ligado)
└─ FROM K0 K6 D100 K3 ; CR#6..#8 → D100, D101, D102
; CH1 zona 1 · CH2 zona 2 · CH3 peça
; já em 0,1 °C — bate com o mapa (×10)
CR#6, mas o
endereço exato precisa ser lido do manual da revisão que você tem em mãos. Confirme
também que o módulo está em Celsius e em tipo K (registrador de modo,
normalmente CR#1) — em Fahrenheit o certificado inteiro sai errado sem
nenhum sintoma visível.Para cada canal (repetir para D100, D101):
CMP D100 K-32768 M0 ; o módulo devolve -32768 em falha
M2 (igual) → SET M116 ; alarme de termopar rompido (zona 1)
; D101 → M117 (zona 2)
Todos os sinais de segurança são NF: contato fechado é a condição normal. Um fio rompido abre o contato e vira alarme.
| Entrada | Sinal | Alarme | Gravidade |
|---|---|---|---|
| X10 | Termostato limitador atuou | M110 | alta |
| X11 | Detector de gás | M111 | alta |
| X12 | Central de incêndio | M112 | alta |
| X2 | Emergência | M113 | alta |
| X5 | Bloqueio do queimador | M114 | alta |
| X6 | Pressostato de gás | M120 | média |
| X7 | Pressostato de ar | M121 | média |
| X14 | Filtro obstruído | M122 | baixa |
Padrão, repetido para cada linha da tabela acima: X10 (NF, aberto = anormal) ──|/|──────────────────────────── SET M110 Os alarmes são RETENTIVOS: usar SET, nunca OUT. Só saem no bloco 10, por reconhecimento e com a causa física já normalizada.
OUT em vez de SET faria o alarme sumir
sozinho assim que o sinal voltasse — e um incidente que se apaga sozinho é um
incidente que ninguém investiga.Na borda de subida de qualquer alarme (M110..M123): ├─ MOV Knnn D150 ; número do bit M que disparou └─ MOV D108 D151 ; fase do ciclo naquele instante
; O gateway incrementa D205 a cada leitura.
; Comparar com a cópia anterior detecta se ele parou.
M1000
└─ CMP D205 D300 M10 ; D300 = cópia anterior do heartbeat
M12 (D205 ≠ D300) → MOV D205 D300
RST T10 ; reinicia a contagem
M11 (D205 = D300) → TMR T10 K300 ; 300 × 100 ms = 30 s
T10 → RST M20 ; M20 = supervisão viva
NOT T10 → SET M20
M20 (supervisão viva) X20 (chave em REMOTO) ──| |───────────────────| |──────────────────── OUT M21 M21 = "aceita comando remoto"
D203 e D204 — o app pode escrever o que quiser, nada
acontece. Ajuste o endereço X20 conforme a entrada realmente usada; a
lista de I/O reserva as entradas até X15, então a chave entra numa
expansão ou numa das entradas livres.X3 X2 X10 X11 X12 X6 X7 M114 porta emg limit gás incênd press press bloqueio ──| |──| |──| |──| |──| |──| |──| |──|/|──── OUT M30 M30 = "permissivas atendidas" Observe: X3, X2, X6, X7, X10, X11 e X12 são NF — contato FECHADO é a condição boa, por isso entram como contato NA no ladder. M114 entra negado porque é um bit de alarme, não uma entrada.
O estado vive em D108 e é a base de tudo — inclusive da detecção de borda
de ciclo no servidor.
| D108 | Estado | Sai para | Quando |
|---|---|---|---|
| 0 | Ocioso | 1 | comando iniciar, com permissivas |
| 1 | Rampa | 2 | zona 1 ≥ setpoint − 2,0 °C |
| 2 | Patamar | 3 | cura acumulada ≥ tempo exigido |
| 3 | Resfriamento | 0 | zona 1 < 80,0 °C |
| 4 | Abortado | 0 | após reconhecimento |
| 5 | Bloqueado | 0 | após reconhecimento, causa normalizada |
; Botoeira local OU comando remoto aceito
X0 (botoeira iniciar)
──| |──────────────────────────┐
M21 e (D204 = K1) ├── e M30 (permissivas) e (D108 = K0)
──| |──────────────────────────┘ │
▼
├─ DINC D110 ; número do ciclo (32 bits)
├─ MOV K1 D108 ; estado = rampa
├─ DMOV K0 D112 ; zera tempo decorrido
├─ DMOV K0 D114 ; zera tempo de chama
├─ DMOV K0 D116 ; zera tempo acima da cura
├─ MOV K0 D118 ; zera partidas
├─ MOV K0 D119 ; zera tempo de rampa
├─ MOV D100 D120 ; máxima parte da temperatura atual
├─ MOV K9999 D121 ; mínima do patamar começa alta
├─ DMOV K0 D122 ; zera soma para média
├─ MOV K0 D124 ; zera contagem de amostras
├─ RST M109 ; limpa "cura completa"
└─ MOV K0 D204 ; zera o comando IMEDIATAMENTE
D204 na mesma varredura é obrigatório. O
gateway confirma pela mudança de D108, nunca pelo eco do comando — se o
registrador ficasse com K1, o ciclo reiniciaria sozinho a cada scan.(D108 = K1) e (D100 ≥ D103 − K20) ; 20 = 2,0 °C em décimos ├─ MOV K2 D108 └─ MOV D100 D121 ; inicia a mínima do patamar
(D108 = K2) e (D116:D117 ≥ D107) ├─ SET M109 ; cura completa — lote aprovado └─ MOV K3 D108
M109 é o bit que o app usa para liberar a descarga sem
esperar o resfriamento acabar.(D108 = K3) e (D100 < K800) ; 80,0 °C ├─ DINC D130 ; queimas totais ├─ INC D140 ; queimas desde a manutenção └─ MOV K0 D108
; Parar — botoeira local ou comando remoto
X1 (NF, botão parar) aberto OU (M21 e D204 = K2)
e (D108 ≠ K0)
├─ SET M123 ; ciclo abortado pelo operador
├─ MOV K4 D108 ; estado = abortado
└─ MOV K0 D204
; Bloqueio — qualquer alarme de gravidade alta com ciclo ativo
(M110 ou M111 ou M112 ou M113 ou M114) e (D108 = K1 ou K2)
└─ MOV K5 D108 ; estado = bloqueado
5 não volta sozinho para ocioso. Exige
reconhecimento e que a causa física tenha sumido — ver bloco 10.Controle por histerese, não PID: o queimador liga ou desliga, sem modulação.
NOT M40 (chama desligada) └─ TMR T20 K600 ; 600 × 100 ms = 60 s T20 = "já pode religar"
; LIGAR: temperatura caiu abaixo de (setpoint − histerese liga)
(D108 = K1 ou K2) e M30 (permissivas) e T20
e (D100 ≤ D103 − D105)
├─ SET M40 ; pedido de chama
├─ INC D118 ; partidas no ciclo
└─ DINC D134 ; partidas totais
; DESLIGAR: passou de (setpoint + histerese desliga)
(D100 ≥ D103 + D106) → RST M40
; Corte incondicional
(D108 ≠ K1 e D108 ≠ K2) → RST M40
NOT X3 (porta aberta) → RST M40
M110|M111|M112|M113|M114 → RST M40
; M40 pedindo chama, mas X4 (chama detectada) não confirma em 10 s M40 e NOT X4 → TMR T21 K100 ; 10 s T21 ├─ SET M115 ; falha de ignição ├─ INC D141 ; falhas acumuladas ├─ INC D301 ; falhas SEGUIDAS ├─ RST M40 └─ RST T21 X4 (chama confirmou) → MOV K0 D301 ; zera a sequência (D301 ≥ K3) ├─ SET M114 ; bloqueio do queimador └─ MOV K5 D108
Todos os contadores de tempo usam o pulso de 1 s do CLP (M1013), que é mais
confiável que contar scans.
M1013 (pulso de 1 s) e (D108 = K1, K2 ou K3) └─ DINC D112 ; tempo decorrido M1013 e (D108 = K1) └─ INC D119 ; tempo de rampa M1013 e M40 (chama acesa) ├─ DINC D114 ; tempo de chama no ciclo └─ DINC D132 ; horímetro de chama total M1013 e Y2 (ventilador ligado) └─ DINC D138 ; horímetro do ventilador
; Conta SÓ enquanto a referência está acima da mínima da receita.
; A referência é a temperatura da PEÇA (D102) quando o termopar móvel
; está instalado; senão, a MENOR das duas zonas.
; Escolhe a referência:
D102 ≠ K-32768 → MOV D102 D302 ; peça instalada
D102 = K-32768 → MOV D100 D302
(D101 < D302) → MOV D101 D302 ; menor zona
; Acumula:
M1013 e (D108 = K2) e (D302 ≥ D104)
└─ DINC D116
D104 — não é a duração do
ciclo. O servidor recalcula o mesmo valor a partir das amostras, e as duas contas
precisam bater: divergência grande indica termopar ou relógio com problema.(D108 = K1, K2 ou K3) e (D100 > D120) → MOV D100 D120 ; máxima (D108 = K2) e (D100 < D121) → MOV D100 D121 ; mínima no patamar M1013 e (D108 = K1, K2 ou K3) ├─ DADD D122 D100 D122 ; soma acumulada (32 bits) └─ INC D124 ; número de amostras
D122:D123 ÷ D124 ÷ 10. Divisão inteira no CLP perderia precisão
justamente no número que vai no laudo.D só são retentivos dentro de uma faixa específica — tipicamente a partir de
D4000. Os totalizadores do mapa moram em D130–D141, que
não é retentiva por padrão: uma queda de energia zeraria a contagem de queimas.
; Os rungs dos blocos 6 e 7 devem incrementar a faixa RETENTIVA: ; D130 → D4130 queimas totais ; D132 → D4132 horímetro de chama ; D134 → D4134 partidas totais ; D136 → D4136 volume de gás ; D138 → D4138 horímetro do ventilador ; D140 → D4140 queimas desde a manutenção ; D141 → D4141 falhas de ignição ; E um único rung espelha para a área que o Modbus lê: M1000 └─ BMOV D4130 D130 K12 ; 12 registradores de uma vez
; Consumo = tempo de chama × vazão nominal. Não precisa de medidor na v1. ; Com vazão de 12 m³/h → 12000 L/h → 3,333 L/s ; Para evitar fração, acumula décimos de litro a cada segundo: M1013 e M40 └─ DADD D4136 K33 D4136 ; 33 décimos de litro = 3,3 L/s ; O gateway divide por 10.000 para obter m³ (mapa define litros; ; ajuste a escala aqui conforme a vazão real do SEU queimador).
X15 e conte pulsos em vez de estimar.M40 e M30 e X3 → OUT Y0 ; pedido de calor M40 e M30 e X3 → OUT Y1 ; permissiva da solenoide (D108 = K1, K2 ou K3) → OUT Y2 ; ventilador de recirculação (D108 = K1, K2 ou K3) → OUT Y3 ; exaustor
; Vermelho tem prioridade sobre amarelo, amarelo sobre verde. M110|M111|M112|M113|M114 → OUT Y6 ; vermelho M115..M123 e NOT Y6 → OUT Y5 ; amarelo (D108 ≠ K0) e NOT Y6 e NOT Y5 → OUT Y4 ; verde ; Sirene operacional: pulsa, para poder ser diferenciada da de incêndio Y6 e M1013 → OUT Y7
; Reconhecimento: botoeira local ou comando remoto aceito M21 e (D204 = K3) → SET M50 X21 (botoeira reconhecer) → SET M50 M50 ├─ X10 fechado → RST M110 ; só apaga se a causa normalizou ├─ X11 fechado → RST M111 ├─ X12 fechado → RST M112 ├─ X2 fechado → RST M113 ├─ X5 aberto → RST M114 ; bloqueio liberado no programador ├─ RST M115 M118 M119 M123 ; alarmes sem causa persistente ├─ D100 válido → RST M116 ├─ D101 válido → RST M117 ├─ X6 fechado → RST M120 ├─ X7 fechado → RST M121 ├─ X14 aberto → RST M122 ├─ RST M50 └─ MOV K0 D204 ; Só volta a ocioso quando NÃO resta alarme de gravidade alta (D108 = K4 ou K5) e NOT (M110|M111|M112|M113|M114) └─ MOV K0 D108
M110 volta a ligar no scan seguinte de qualquer jeito — e é assim que
tem que ser. O operador não consegue silenciar um problema real apertando um botão.Executar com o gás fechado, na bancada, antes de instalar no painel. O simulador Modbus do projeto reproduz o comportamento esperado — se o ladder divergir dele, um dos dois está errado.
D100–D124 num bloco só e conferir contra o displayD100 responde no registrador Modbus 4196M100 responde na coil 2148D204 = 1 e confirmar que nada aconteceD204 = 1 e ver D108 ir para 1D204 volta a zero na mesma varreduraY0 e Y1-32768 chegar ao gatewayD116 só corre no patamar e acima de D104M118 subir e a cura pausarD110 incrementouD130, desligar o CLP da energia, religar e conferir que não zerouD132, D134, D136 e D140| Recurso | Uso |
|---|---|
| T10 | Watchdog da supervisão — 30 s |
| T20 | Tempo mínimo do queimador desligado — 60 s |
| T21 | Prazo de confirmação de chama — 10 s |
| M0–M12 | Resultados de comparação (CMP) |
| M20 | Supervisão viva |
| M21 | Aceita comando remoto |
| M30 | Permissivas atendidas |
| M40 | Pedido de chama |
| M50 | Pulso de reconhecimento |
| D300 | Cópia anterior do heartbeat |
| D301 | Falhas de ignição seguidas |
| D302 | Referência de temperatura para a cura |
| D4130–D4141 | Totalizadores na área retentiva |
M0–M50 e D300–D302 foram
escolhidos fora de qualquer faixa do mapa de memória, justamente para não colidirem com
o contrato do gateway. Se precisar de mais auxiliares, use a mesma regra: nunca entre
M100–M123, D100–D151 ou D200–D205.
OUT em bits de alarme — precisam ser retentivos com SET-32768 por zero ou pelo último valor válidoD204 para confirmar comando — a confirmação é D108