Pessoal estou tentando gravar dados por evento no SQL, tenho 18 tabelas onde cada tabela possui 4 válvulas, estas válvulas podem disparar juntas ou alternadas.
Utilizei da seguinte forma;
No Histórico do E3, setei em zero o intervalo entre registros.
Minhas tags de IOTag, todas são Word, padrão do E3, mas utilizo o bit05 para disparar o evento de WriteRecord()
Criei um TAG interno e vinculei a TAG do IOTag.Bit05 ao campo Tag associado.
No script deste TAG interno criei um evento de usuário e na propriedade ou expressão, associei o value deste próprio TAG interno.
Selecionei para que sempre que a propriedade alterar seu valor, disparar o script de gravação do histórico.
O problema é que são 4 válvulas por tabelas e as vezes elas ligam ou desligam juntas, quando isto acontece o histórico registra somente a ação de 1 válvula e o restante permanece sem alterações
Alguém tem sugestão para melhorar isto.
Gravação de dados SQL, por eventos
É bem provavel que esteja dando violação de chave primária no Banco de Dados, considerando que o E3TimeStamp deve ser o campo programado para isso no seu Historico. Voce pode confirmar isso olhando nos logs, se há algum erro desse tipo quando houver uma troca de multiplas valvulas ao mesmo tempo. Já tive esse problema, e resolvi colocando um campo ID com Identity na tabela.
Se vc for nesse sentido, vai ter que alterar a propriedade UserTable do Historico para TRUE. Assim voce pode usar o botao “buscar campos da tabela original” no Historico. O E3 importará os campos da tabela, você pode deletar o campo ID, pois o valor dele será gerenciado pelo proprio banco.
Assim vc nao terá mais violação de chave primaria, pois o ID nunca se repete, mesmo que os eventos da valvulas sejam feitos exatamente no mesmo timestamp.
Voce também pode simplesmente não usar um Historico para isso e dar somente um INSERT INTO diretamente via uma Consulta.