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

Post Reply
Daltro
Posts: 27
Joined: Sun Feb 14, 2016 7:44 pm

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

Post 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...
wesley.oliveira
Posts: 21
Joined: Thu Feb 25, 2016 5:31 pm

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

Post 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.
Daltro
Posts: 27
Joined: Sun Feb 14, 2016 7:44 pm

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

Post 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,
User avatar
daniel_bable
Moderadores
Posts: 47
Joined: Wed Jun 19, 2013 1:06 am

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

Post 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
Daniel Bable Franco
Analista em Automação

HI Tecnologia - Indústria e Comércio Ltda
Campinas - SP
Fone: +55 (19) 2139-1700
Email: daniel.franco@hitecnologia.com.br
Web-site: http://www.hitecnologia.com.br
Post Reply