Estou escrevendo este tópico pois a algum tempo (ANOS!!!) tento usar o SQL para armazenar os dados de produção via ScadaBR, Finalmente hoje 30/01/2021 consegui tudo o que eu queria!
Vamos por partes 1 - Tenho uma linha no SQL que esta a produção de uma maquina, com varias informações de velocidade, temperatura e etc. no Scada tenho todos os dados armazenados em MySQL, porem todos individualmente.
Para ter essa linha utilizei um servidor SQL instalei os drives “Peguei todas as dicas aqui”. e consegui a conexão. Porem só consegui atualizar uma tag de cada vez, não conseguia juntar o estado da maquina em uma unica linha.
Após varias tentativas frustradas de colocar varios dados em um updade, veio a ideia de juntar todos os valores com um script, e deu certo com alguns ajustes.
Fiz um script reunindo todos os dados que precisava no contexto, a saída era o comando SQL completo. Primeira fase pronta, testei o comando exec no lugar de UPDATE e voa-la deu certo!!
Então criei uma procedure no SQL para exceutar o comando que ficou assim.
Create procedure Teste_ScadaBR (@comando nvarchar(1000)) as
execute(@comando)
Bom dia meus amigos, descobri uma maneira mais fácil de resolver o problema citado acima.
Basta criar uma datasource SQL com a seguinte declaração:
SELECT * FROM NOME_DA_TABELA
WHERE id= (select max(id) FROM NOME_DA_TABELA)
Lembrando que na tabela deve ser criado uma coluna id e selecionar para ser incremental.
( Essa declaração feita no data source pelo que entendi é apenas para leitura dos datapoints)
O primeiro data point criado referente a primeira coluna deve conter a seguinte declaração:
INSERT INTO NOME_DA_TABELA (NOME_DA_COLUNA) VALUES (?);
E os seguintes data point referente as demais colunas da tabela deve ser criado com a seguinte declaração:
UPDATE NOME_DA_TABELA p JOIN (SELECT max(p2.id) AS idMax FROM NOME_DA_TABELA p2) AS sub ON p.id = sub.idMax SET p.NOME_DA_COLUNA= ?;
Agora é só criar um SCRIPT que enviará seus dados para os respectivos data points criados (o primeiro dado a ser enviado no script é referente a primeira coluna), e toda vez que for executado irá criar apenas uma linha (de cada vez) na tabela com todos os dados.
Lembrando que pode se executar o SCRIPT através de um tratador de eventos.