Gravar banco de dados por evento

Boa noite Pessoal.
Preciso gravar os dados de um historico sempre que uma das tags tiver a variação de valor.
Consegui fazer isso porem fazendo um script de OnValueChaged, porem da maneira que fiz, se houver 10 tag dentro do historico teria que realizar 10 scripts (um para cada tag).
Teria alguma maneira mais simples, tipo, quando qualquer uma das tags de dentro do historico alterar se valor gravar? Ou mesmo gravar o valor apenas da tag que alterou os valores?


Dessa maneira que fiz, so salva quando a tag demo1 muda de valor, quando a tag demo 2 muda de valor não salva, assim teria que fazer varios scripts para cada tag, sendo assim muito complicado!

Bom dia!

Vá no VIEWER e cria um script novo nele, aí no campo “EXPRESSÃO” você coloca: “Dados.Demo1 or Dados.Demo2”

E copia o comando de gravar no histórico para o script. Para gravar apenas o valor da tag que alterou, é mais trabalhoso, você teria de usar Recordset, move last, delete… desse jeito que eu sugeri eu acho mais fácil.

1 Like

A sugestão do Felipe funciona, só que em vez de criar o script no Viewer, é mais indicado criar no servidor. Pode ser na pasta de dados onde estão os tags.

1 Like

No exemplo que coloquei para voces verem tem apenas 2 tags no histórico, porem no histórico do meu software tem bastante tags, teria alguma outra forma de fazer?
Pois assim, eu não posso ficar lendo por scan, que pode ser que em algum momento não pegue a variação da tag e outro problema que ficara carregando meu banco com informações repetidas.

Bruno,

Creio que a solução seja usar o Storage. Veja alguns artigos do KB sobre este módulo do E3.




Vou dar uma olhada, mas nao sei se seria essa a solução.
Mas obrigado, qualquer novidade posto aqui

Olá,

Estou tentando fazer algo parecido.
Porem não gostaria de gravar todas as variaveis, somente a que alterou.
Por exemplo:

Tenho duas operações e gostaria de gravar o tempo de ciclo de cada uma.
Quando finalizar recebo o valor de uma tag dizendo que esta finalizada e gostaria de executar um script para fazer a gravação dos dados dessa operação no banco de dados.

Já criei o script porem não esta funcionando.
Como fiz:
1 - Criei o DB
2 - Criei um historico com uma tabela (TempoCiclo)
3 - Criei uma Consulta no Data Objects e criei um script

“INSERT INTO TempoCiclo (E3TimeStamp, Modelo, Modelo_Quality, TempoCiclo, TempoCiclo_Quality, Operacao, Operacao_Quality)
VALUES (GETDATE(), ‘<%modelo%>’, 192, <%tempoCiclo%>, 192, <%operacao%>, 192)”

4 - Criei um scritp no meu sinal que recebo quando finalizado

Porem não esta funcionando,

Poderiam me auxiliar?

Renan,

Por que você não usa o método WriteRecord do Histórico?

1 Like

Paulo,

Quando usa o WriteRecord ele grava somente os dados que estão no source do historiador certo?
image

Eu tentei fazer de duas formas já.
Essa que testei e que passei para vocês e a outra eu criei variaveis internas e linkei no source do Historico, e quando a variavel atualizava eu atualizava estas variaveis internas com o valor das tag do plc e executava o comando WriteRecord.
Porem da mesma forma não funcionou.

Como você sabe que não está funcionando?

Olá Renan! Tudo bem?

Conseguiu solucionar o problema?