Descrição:
Comunicando com remota via driver IEC, o valor do timestamp dos eventos está sendo registrado com a data/hora do computador e não com o valor de data/hora que a remota está enviando. Como proceder nesta situação?
Solução:
Como a remota não está fazendo sincronismo de data/hora, o flag de timestamp está chegando para o driver como inválido (iv=1). Isto faz com que o driver ignore o timestamp enviado e use o timestamp do micro.
Analisando um trecho do log gerado pelo driver IEC da Elipse temos:
21/03/2007 15:07:46.426 (05D0) << 016: [3: ,RESPOND ,ACD, ] [M_SP_TB_1=30,cnt=1,cot=3,addr=3] ADDR=102 SIQ(spi=ON,bl=0,sb=0,nt=0,iv=0) CP56Time2a(0 21/03/2007 14:08:04.202, iv=1, su=0)
21/03/2007 15:07:46.426 (012C) [DRIVER] App_WriteToCache 30:102 = (216; 15:07:46.428) 1
Quebrando o log para melhor entendimento, a função ASDU M_SP_TB_1 é composta de duas partes: o valor e o timestamp. Cada uma destas duas partes contém informações sobre a confiabilidade do dado, sendo que: se iv=0, o dado é confiável; se iv=1, não é. Desta forma, na mensagem abaixo verificamos que o valor é confiável, porém o timestamp não.
[M_SP_TB_1=30,cnt=1,cot=3,addr=3] ADDR=102 SIQ(spi=ON,bl=0,sb=0,nt=0,iv=0)
CP56Time2a(0 21/03/2007 14:08:04.202, iv=1, su=0)
Com isto, o próprio driver adiciona um valor de estampa de tempo, e escreve uma qualidade diferente no tag (no caso 216) para indicar isto.