Page 1 of 1

Operação Aritmética com TAG tipo DATA/HORA

Posted: Wed Mar 09, 2016 9:22 pm
by Daltro
Prezados,

Escrevi o seguinte script que é executado a cada 1 segundo:


Hora = Tags.Get("kernel.Tags.Local.TagLocalGroup_001.TagLocal_007")
Horah = DateTime()
Hora.Value = Horah - Hora.Value
Hora:WriteValue()


Obs: A TagLocal_007 é do tipo Data/Hora / Volatil /

No objeto Display que está associada a TagLocal_007 o Formato é HH:mm:ss

Quase funcionou direito... mas o que acontece é que : No 1º segundo o display mostra 00:00:01 no 2º segundo o display mostra o horário atual - 2 segundos... no 3º segundo o display mostra 00:00:02 no 4º segundo o display mostra o horário atual - 3 segundos.... e assim sucessivamente.

Pode ser até um erro na lógica do meu script, mas não acho onde...

Re: Operação Aritmética com TAG tipo DATA/HORA

Posted: Thu Mar 10, 2016 1:58 pm
by wesley.oliveira
Olá, Daltro.
Pelo que eu consegui analisar da sua programação, o que pode estar gerando essa ocorrência é o seguinte:
Inicialmente, quando o script é executado pela primeira vez, sua tag da variável Hora tem o valor inicial de 00:00:00, e sua variável Horah tem o valor da data/hora local do sistema.

Hora = 00:00:00
Horah = 09:38:01 (exemplo de hora local).

Quando o script é executado e realiza a operação de subtrair a variável Hora da variável Horah, e o resultado é guardado na variável Hora, a variável Hora passa a ter o valor da "hora local", e é esse valor que é apresentado no objeto display.

Hora = 09:38:01 - 00:00:00
Hora = 09:38:01

Quando o script é executado pela segunda vez, 1 segundo depois, a variável Hora agora possui o valor de 09:38:01, e a variável Horah o valor da hora local do sistema.
Realizando a operação de subtração, e o resultado sendo guardado na variável Hora, a variável Hora passa a ter o valor 00:00:01, e apresenta esse valor no objeto display.

Hora = 09:38:01
Horah = 09:38:02

Hora = 09:38:02 - 09:38:01
Hora = 00:00:01

Conforme o script vai sendo executado pelo Timer, ocorre esse efeito que você mencionou.
Espero ter conseguido ser claro com minha explicação.
Caso ainda tenha duvidas, é só reportá-las.
Saudações, Wesley.

Re: Operação Aritmética com TAG tipo DATA/HORA

Posted: Thu Mar 10, 2016 7:01 pm
by Daltro
Valeu Wesley,

Não teve jeito... tive que utilizar mais uma Tag Local para que meu script pudesse funcionar... mas o cronômetro está lá, funcionando que só !

Apenas para desencargo de consciência :

Em um script , as variáveis somente estão "na memória" durante a execução...
No meu caso que disparo o script de 1 em 1 segundo, não há como recuperar o valor de uma variável da execução anterior ??? (local, global ou outro tipo de variável ?)
O único recurso seria mesmo alocar este valor num Tag Local ?

SDS,

Re: Operação Aritmética com TAG tipo DATA/HORA

Posted: Fri Mar 11, 2016 2:50 pm
by daniel_bable
Bom dia, Daltro,

Infelizmente não.
Pois quando o script termina, seria como tivesse terminado um programa que você fez, ele se encerra. Então é necessário armazenar o valor em algum lugar, no caso, uma Tag.

Mas quando você chama um Script por Scripts.Run, as variáveis globais do script que chama e do que foi chamado se mantém de um para outro até o script que chamou terminar.

Att,
Daniel Kantor