Em minha aplicação tenho alguns objetos tipo Plot e gráficos de relatórios os quais são gerados a partir de consultas a dados historiados em BD, a ideia é colocar um botão próximo a esses objetos que permita a exportação dos dados mostrados, para um arquivo csv, como fazer isso?
Para os relatórios a função já existe teoricamente, mas não funciona para os dados em forma de gráfico e eu não tenho tabelas.
Poderiam nos dar um exemplo de como implementar isso?
Grato,
Vagner
Exportação de dados historiados
-
- Posts: 5
- Joined: Mon Nov 17, 2014 4:33 pm
- heber.augusto
- Posts: 15
- Joined: Tue Jan 22, 2013 10:50 am
- Location: Av. Dr. Armando de Sales Oliveira, 445, Taquaral - Campinas - SP - Brasil
- Contact:
Re: Exportação de dados historiados
Bom dia Vagner, estamos montando um exemplo e enviaremos a resposta ainda hoje.
Obrigado
Obrigado
Heber Augusto Scachetti
Gerente de Desenv. de Software
HI Tecnologia - Indústria e Comércio Ltda
Campinas - SP
Fone: +55 (19) 2139-1700
Fax: +55 (19) 2139-1710
Email: heber.augusto@hitecnologia.com.br
Web-site: http://www.hitecnologia.com.br
Gerente de Desenv. de Software
HI Tecnologia - Indústria e Comércio Ltda
Campinas - SP
Fone: +55 (19) 2139-1700
Fax: +55 (19) 2139-1710
Email: heber.augusto@hitecnologia.com.br
Web-site: http://www.hitecnologia.com.br
-
- Posts: 6
- Joined: Thu Feb 25, 2016 1:01 pm
Re: Exportação de dados historiados
Olá Vagner, desculpa a demora.
Fiz aqui um exemplo de aplicação onde se é plotado uma curva em função de uma consulta no banco e também o salvamento dessa mesma consulta - que é a que está gerando o plot, em um formato csv.
A dinâmica é bastante simples, um botão faz a consulta no banco, armazena esses valores resgatados em uma tabela lua e depois utiliza dessa tabela para gerar o plot. Outro botão realiza a mesma consulta (que vale lembrar, está limitado pelos tags de data de início e fim na tela), também converte esses valores em uma tabela lua e depois formata essa tabela lua para o formato .csv, que nada mais é do que pegar cada ele elemento da tabela lua e separá-los por um ";".
No entanto, o que está fazendo essa conversão para o .csv é um módulo Lua, criado aqui na HI, que nada mais é do que um trecho de código Lua - que fica armazenado como um arquivo .Lua sempre numa pasta chamada lua que está localizada dentro da pasta do projeto (C:\Users\Public\Documents\HI_tecnologia\HIscada_Pro\1.4\SCADA_1\Kernel\Projects\Exemplo_Arquivo_CSV\publ), e que funciona como uma função externa que você pode chamar a qualquer momento dentro de qualquer script. No arquivo de exemplo que estou te passando você pode acessar esses módulos lua e abri-los como bloco de notas para visualizar o código, não vou entrar em detalhes aqui de como o código está exatamente fazendo a conversão, mas qualquer dúvida você pode me perguntar.
O módulo que faz a conversão se chama "ConvTabCsv.lua", e ele funciona como uma função que recebe dois tipos de parâmetros primeiro o caminho do local onde será armazenado o arquivo.csv e segundo a tabela lua com os valores que serão convertidos, o processo funciona de seguinte forma:
Na variável ret será retornado alguns valores relativos a erros que podem ser tratados se quiser.
Então basta você converter a consulta em uma tabela lua e enviar essa tabela junto com o endereço do local onde será salvo o arquivo. Importante notar que no caso do botão que plota o gráfico a conversão da consulta para uma tabela lua está sendo feito "à mão", outra forma de fazer é utilizando um módulo criado para isso. Então, no caso do script que gera o arquivo csv, a conversão da consulta para a tabela lua está sendo feito com o módulo "CursorTab.lua", que funciona de maneira similar ao outro módulo, só mudando os parâmetros:
Os parâmetros necessários são: o cursor retornado da consulta "local cursor,error = retOpenDB:Execute(CmdSQL)", e o nome das colunas retornadas na consulta ao banco.
Outro detalhe é sobre a função "flag_selected":
Essa função ela abre um diretório para o usuário escolher e retorna como valor uma string com o endereço do diretório escolhido. E é esse resultado que está sendo enviado para o módulo que faz a conversão para o arquivo csv. Para mais informações http://doc.hitecnologia.com.br/hiscada_ ... iledialog1. Caso você não queira dar essa opção para o usuário basta fixar o endereço do local onde sempre será salvo o arquivo gerado.
Espero ter conseguido ser claro, qualquer coisa estou a disposição.
OBS: Para testar o exemplo que estou enviando, que já tem alguns dados armazenados no banco User.db, utilize as seguinte datas de início e fim: 01/03/2016 00:00:00 e 02/03/2016 09:50:00.
Fiz aqui um exemplo de aplicação onde se é plotado uma curva em função de uma consulta no banco e também o salvamento dessa mesma consulta - que é a que está gerando o plot, em um formato csv.
A dinâmica é bastante simples, um botão faz a consulta no banco, armazena esses valores resgatados em uma tabela lua e depois utiliza dessa tabela para gerar o plot. Outro botão realiza a mesma consulta (que vale lembrar, está limitado pelos tags de data de início e fim na tela), também converte esses valores em uma tabela lua e depois formata essa tabela lua para o formato .csv, que nada mais é do que pegar cada ele elemento da tabela lua e separá-los por um ";".
No entanto, o que está fazendo essa conversão para o .csv é um módulo Lua, criado aqui na HI, que nada mais é do que um trecho de código Lua - que fica armazenado como um arquivo .Lua sempre numa pasta chamada lua que está localizada dentro da pasta do projeto (C:\Users\Public\Documents\HI_tecnologia\HIscada_Pro\1.4\SCADA_1\Kernel\Projects\Exemplo_Arquivo_CSV\publ), e que funciona como uma função externa que você pode chamar a qualquer momento dentro de qualquer script. No arquivo de exemplo que estou te passando você pode acessar esses módulos lua e abri-los como bloco de notas para visualizar o código, não vou entrar em detalhes aqui de como o código está exatamente fazendo a conversão, mas qualquer dúvida você pode me perguntar.
O módulo que faz a conversão se chama "ConvTabCsv.lua", e ele funciona como uma função que recebe dois tipos de parâmetros primeiro o caminho do local onde será armazenado o arquivo.csv e segundo a tabela lua com os valores que serão convertidos, o processo funciona de seguinte forma:
Code: Select all
-- Primeiro você de declara o módulo, lembrando de usar o mesmo nome do arquivo Lua
AdicionaModuloConvTabCsv = require "ConvTabCsv"
-- Depois você pode chamar a função junto com os parâmetros
local ret = ConvTabCsv("Endereço do local do arquivo","tabela lua para converter")
Então basta você converter a consulta em uma tabela lua e enviar essa tabela junto com o endereço do local onde será salvo o arquivo. Importante notar que no caso do botão que plota o gráfico a conversão da consulta para uma tabela lua está sendo feito "à mão", outra forma de fazer é utilizando um módulo criado para isso. Então, no caso do script que gera o arquivo csv, a conversão da consulta para a tabela lua está sendo feito com o módulo "CursorTab.lua", que funciona de maneira similar ao outro módulo, só mudando os parâmetros:
Code: Select all
-- Primeiro você declara o módulo
AdicionaModuloConvTabCsv = require "CursorTab"
-- Depois você chama a função com seus parâmetros
tabela_dados_arquivo_csv = CursorTab("cursor retornada da consulta", "titulo das colunas separado por vírgula")
Outro detalhe é sobre a função "flag_selected":
Code: Select all
local flag_selected, file1 = FileDialog(
2, -- opcao para SALVAR um arquivo
"Selecione arquivos para exportar", -- Titulo da janela de solicitação do arquivo
"csv", -- Extensão padrão para os arquivos
UnidadeSalvaRelatorio, -- Diretorio inicial para seleção dos arquivos
NomeArquivo .. ".csv", -- Nome Inicial para o arquivo
filtro, -- Especificação dos filtros dos arquivos
1); -- Seleção do filtro 2 como filtro inicial
Espero ter conseguido ser claro, qualquer coisa estou a disposição.
OBS: Para testar o exemplo que estou enviando, que já tem alguns dados armazenados no banco User.db, utilize as seguinte datas de início e fim: 01/03/2016 00:00:00 e 02/03/2016 09:50:00.
- Attachments
-
- Exemplo_Arquivo_CSV.H7G
- (593.08 KiB) Downloaded 464 times