Data e Hora
Lógica Temporal
Domine o relógio do seu PLC. Desde o registro preciso de eventos até cálculos complexos de tempo e conversões de formato, controle cada milissegundo.
Por que gerenciar o tempo em um PLC?
O gerenciamento de tempo é crucial para a automação industrial. Permite o registro preciso de eventos de produção, o acionamento de tarefas de manutenção agendadas, o cálculo de tempos de ciclo de máquinas e a sincronização de sistemas distribuídos via protocolos NTP.
PLCs Siemens modernos oferecem tipos de dados avançados como DTL (Date and Time Long), que fornece acesso direto a componentes individuais (Ano, Mês, Dia, Hora) sem manipulação complexa de bits, simplificando muito a programação em comparação com os formatos DT legados.
Leitura de Tempo
Acessando os relógios do sistema e locais
T_CONV — Extração de Tempo do Sistema
T_CONVO que faz
Extrai componentes específicos de um valor de data/hora ou converte entre formatos. É essencial para obter horas/minutos legíveis de um carimbo de data/hora bruto.
Quando usar
Quando você precisa exibir apenas a hora em uma HMI a partir de uma tag Date_And_Time completa.
Dicas Profissionais
Use T_CONV para converter um TOD (Time_Of_Day) em uma String para facilitar o registro.
Certifique-se de que os tipos de entrada e saída sejam compatíveis para evitar erros de estouro (overflow).
No SCL, esta instrução é frequentemente tratada implicitamente por atribuições simples.
RD_SYS_T — Ler Tempo do Sistema
RD_SYS_TO que faz
Lê o tempo atual do sistema da CPU (UTC). Diferente do RD_LOC_T, não inclui o horário de verão ou compensações de fuso horário.
Quando usar
Ideal para registro interno onde uma referência de tempo contínua e sem saltos é necessária (evita problemas durante as mudanças de horário de verão).
Dicas Profissionais
Sempre use UTC para armazenamento em banco de dados para garantir consistência global.
A saída RET_VAL fornece informações de status (por exemplo, se o relógio está sincronizado).
Combine com RD_LOC_T se precisar exibir tanto o tempo 'Técnico' quanto o tempo 'Humano'.
Aritmética
Cálculos em durações e carimbos de data/hora
T_ADD — Adicionar Tempo
T_ADDO que faz
Adiciona uma duração (Time ou LTime) a um ponto específico de data/hora. Ele trata corretamente estouros de minutos, horas e dias.
Quando usar
Cálculo de um tempo de expiração ou um ponto de reinicialização agendado (por exemplo, tempo atual + 24 horas).
Dicas Profissionais
Muito útil para implementar watchdogs personalizados com durações dinâmicas.
Use tipos LTime para precisão de nanossegundos em CPUs S7-1500.
Se o resultado exceder a data máxima (Ano 2262), a CPU define um status de erro.
T_DIFF — Diferença de Tempo
T_DIFFO que faz
Calcula a diferença entre dois carimbos de data/hora e retorna o resultado como uma duração (Time ou LTime).
Quando usar
Medição da duração exata de uma etapa do processo ou cálculo do tempo de atividade (uptime) de uma máquina.
Dicas Profissionais
Perfeito para cálculos de OEE (Eficácia Geral do Equipamento).
Subtrair uma data maior de uma menor retorna um valor de Time negativo.
No S7-1200/1500, use tags DTL para facilitar o acesso aos componentes da diferença.
Conversão
Mudanças de formato e tratamento de String
T_CONV — Conversão de DT para DTL
T_CONVO que faz
Converte o DATE_AND_TIME legado (8 bytes) para o formato DTL moderno ou vice-versa.
Quando usar
Ao fazer a interface de código legado ou blocos de comunicação com a nova lógica otimizada do S7-1500.
Dicas Profissionais
Prefira DTL para todos os novos projetos para evitar a complexidade do BCD (Binary Coded Decimal).
A conversão para DTL permite que você escreva 'MyTag.MONTH' diretamente em seu código.
Tenha cuidado com a precisão de milissegundos, que pode ser truncada em alguns formatos.
DT_TO_STRING — Serializando Tempo
DT_TO_STRO que faz
Converte um valor de data/hora em um formato String legível. STRING_TO_DT faz o inverso.
Quando usar
Envio de carimbos de data/hora para um arquivo CSV em um cartão de memória ou comunicação com uma API web.
Dicas Profissionais
A string de saída segue o formato ISO 8601 (YYYY-MM-DD-HH:MM:SS.ms).
Use STRING_TO_DT para analisar datas recebidas de um banco de dados SQL externo.
Observe que as operações de String são mais intensivas para a CPU; use-as com moderação em loops rápidos.
DATE_AND_TIME vs DTL
Escolhendo a estrutura temporal correta
| Recurso | DATE_AND_TIME (Legado) | DTL (Moderno) |
|---|---|---|
| Tamanho | 8 Bytes | 12 Bytes |
| Codificação | BCD (Complexo de ler) | Inteiros (Diretamente legíveis) |
| Acesso ao Componente | Requer mascaramento de bits | Estrutural (Tag.Month) |
| Intervalo | 1990 a 2089 | 1970 a 2262 |
| Suporte S7-1200/1500 | Apenas compatibilidade | Nativo & Recomendado |
| Precisão | 10 ms | 1 Nanossegundo |
Perguntas Frequentes
Qual é a diferença entre o Tempo do Sistema e o Tempo Local?
O Tempo do Sistema (RD_SYS_T) é sempre UTC, fornecendo uma referência estável. O Tempo Local (RD_LOC_T) se ajusta ao seu fuso horário específico e às regras de Horário de Verão (DST) configuradas nas propriedades da CPU.
Como sincronizar o relógio do PLC com um servidor?
Habilite o NTP (Network Time Protocol) na Configuração de Hardware da CPU. Forneça o IP do seu servidor de tempo e o PLC ajustará automaticamente seu relógio interno.
Por que meu DATE_AND_TIME mostra valores estranhos em Hex?
O DT legado usa codificação BCD. Um valor de 25 em Decimal é armazenado como 16#25 em BCD. Sempre use instruções de conversão ou DTL para ler os valores corretamente.
Posso calcular a diferença entre duas tags DTL diretamente?
No SCL, você pode simplesmente usar o operador '-' entre duas tags DTL. O TIA Portal chamará automaticamente a instrução T_DIFF para você.