Script usando histórico de datapoint

Olá pessoal.

Estou começando a estudar os scripts no ScadaBR. Compreendi como os meta datapoints funcionam, mas preciso saber como fazer para usar o histórico de um datapoint na hora de criar um script para gerar valores para um meta datapoint.

Meu exemplo específico é o seguinte: estou monitorando um hidrômetro (medidor de consumo de água). Os dados captados são referentes ao consumo total acumulado (leitura do hidrômetro), mas preciso apresentar dados do consumo acumulado em um período pré-determinado, por exemplo minuto a minuto (o que representaria a vazão passada pelo hidrômetro). Para isso eu crio um meta datapoint, onde eu preciso subtrair da leitura mais recente a leitura de 1 minuto atrás, ou a leitura imediatamente anterior. Como seria possível fazer isso?

Outra coisa, não sou familiarizado com javascript, vocês teriam alguma indicação de tutorial ou documentação?

Obrigado,

Rodrigo Martinho.

Fala Rodrigo, mais uma vez aqui, cara parece que nossos projetos estão andando no mesmo rítmo, rs, estava olhando coisas parecidas esses dias, vi no site da CERTI, algo sobre isso ainda não gastei tempo lendo porque ainda me faltam algumas coisas para chegar nesse estágio, mas essa semana vou ver e podemos compartilhar mais, entra no link abaixo,
https://sites.google.com/a/certi.org.br/certi_scadabr/home/minicursos/scadabr-integradores
parece que o item 4 fala algo relacionado ao que vc e eu queremos fazer, talvez não exatamente mas dá pra ter um idéia.
Mais específico que isso eu deixo para a equipe, também não conheço javascript, seria bom um lugar para termos idéia de como escrever os scripts, né!

Abraço
Fábio

Oi Fábio, valeu muito o link, não conhecia o CERTI, e tem várias coisas lá que interessam.

O problema específico que estava enfrentando consegui resolver hoje. É através do uso de meta datasources e da função ago(), como também citado no link. Por exemplo, se a variável definida é a “p1”, você pode chamar p1.ago(MINUTE,1), e ele retornará o valor de 1 minuto atrás do datapoint.

O único problema que encontrei é quando o período usado na função ago() é múltiplo do período de atualização do datasource. Quando isso acontece, às vezes ele pega o dado correto e às vezes ele pega o dado imediatamente anterior ao correto. Não sei porque isso ocorre. Por exemplo, se o tempo de atualização do datasource é 1 seg, se eu chamar p1.ago(SECOND,60), às vezes ele retorna corretamente o sexagésimo valor passado, mas as vezes ele retorna o sexagésimo primeiro. E a variação é periódica (2 vezes o dado correto, 1 vez o errado, 2 vezes o correto, e assim por diante). Ao menos foi o que ocorreu nos poucos testes que fiz.

Provavelmente você já sabe, mas achei isso procurando no fórum do Mango, onde eles citaram o help “in context” do software. Pelo pouco que vi o help do ScadaBR é igual ao do mango, vale a pena lê-lo. Inclusive neste link que você passou constam coisas tiradas do help. Até então eu tinha usado muito pouco este help, mas pareceu a melhor fonte de pesquisas iniciais.

Abraço!

Fala Rodrigo, fera mesmo esse trem dos scripts, agora que já mexi no que eu queria estou apto a participar deste post, fiz todo o meu ensaio de motor ficar automatizado com um único Script, é lógico que ele não ficou nenhum um pouco pequeno, deu umas 3 páginas, mas fiz vários testes no começo até entender como é que ele lê os datapoints, como que escreve - aquele trem de usar dp.writeDataPoint(DP_2132131,valor) é muito cabuloso e diferente do que fazíamos antes com os scripts de metadata source, mas até que levei bem depois de entender isso, fiquei meio intrigado com algumas coisas.

  1. Eu usei algumas variáveis para fazer contas com A, B, sem declarar elas, não é preciso fazer declaração de variáveis em javascript? ou será que ele entende de cara como uma variável em um padrão, sei lá, domínio dos reais e eu só preciso declarar se quiser algo fora do padrão?!

  2. Eu não precisei usar o tal do ago() ou past(), ainda não, mas usei alguns argumentos matemáticos mais específicos como Math.sqrt(número/variável) pra raíz quadrada, e o Math.pow(x,y) pra fazer o x elevado a y, bem interessante, gostei do javascript, bem fácil e prático comparado à Assembly haIUahIUHih …
    Rodrigo, vc tentou usar um tempo quebrado, tipo se sua leitura for a cada 1 minuto, mandar ele ler à 59 segundos atrás pra não ter erro, talvez funcione vc criar uma variável “time” que sempre some 60 segundos aos 59 para cada leitura, tipo, time=59+60*x onde esse x pode ser o minutos atrás, sei lá, alguma gambiarra (gambiarra não, improvisação técnica, rs) parecida, e aí vc chama o ago(SECOND,time) com o a variável, acho que dá pra fazer, mas fala aí se já tiver conseguido outra solução.

3)Eu não sei se coloco aqui ou num post que criei sobre bugs, mas acho que tem um erro simples e ao mesmo grave para a diversidade de uso do ScadaBR, que é a questão de links para outras telas.
Se vou usar o ScadaBR apenas com senha(fazendo login) os links funcionam perfeitamente, se vou usar ele apenas por public_view os links tb funcionam perfeitamente se configurado certo, agora no meu caso que tenho usuários sem permissão de escrita, que só vão acessar por public_view e usuários que se logan, o trem não funciona, porque o link tem que ser específico pra public_view ou pra tela com senha, mas decidi postar aqui, porque imagino que a solução esteja em javascript, como eu não faço idéia do código vou só soltar a idéia, será que não dá pra criar um script assim:

Pronto, aí na tela em vês de usar link, usaríamos o “botão de script” para chamar a tela o que fica até mais bonito do que aquele nome sublinhado, eu sei que tem mais um problema aí em cima, que é se estou em localhost ou em outra ip, aí não sei daria pra tb descartar tudo do começo até o “:8080…” porque localhost e um ip 192.168.1.252 tem número de caracteres diferentes.

Bom é isso,
Abraço

 

Necessita-se ler um 'Id' específico de um registro. Vou explicar melhor, pensando no ponteiro do banco de dados, gostaria de posicionar no décimo (10º) registro da variável ler ou sobrescrever. 

Site que contem informação, porém só trata de estatistica e valores no tempo:

https://sites.google.com/a/certi.org.br/certi_scadabr/home/minicursos/scadabr-integradores

Outro documento que encontrei e que trata sobre buscas por ponteiro, ou Id de registro, porém, pelos testes que realizei, no formato do 'x.ago(HOUR,3)' não funcionou.

http://www.inf.unioeste.br/~marcio/psc/JavaAula4JDBC.pdf

Via script no meta data source é possível, ou só via código java do próprio Mango?

Caso se consiga pelo Script do meta, tens alguma referência de exemplo?

Grato,

 

Necessita-se ler um 'Id' específico de um registro. Vou explicar melhor, pensando no ponteiro do banco de dados, gostaria de posicionar no décimo (10º) registro da variável ler ou sobrescrever. 

Site que contem informação, porém só trata de estatistica e valores no tempo:

https://sites.google.com/a/certi.org.br/certi_scadabr/home/minicursos/scadabr-integradores

Outro documento que encontrei e que trata sobre buscas por ponteiro, ou Id de registro, porém, pelos testes que realizei, no formato do 'x.ago(HOUR,3)' não funcionou.

http://www.inf.unioeste.br/~marcio/psc/JavaAula4JDBC.pdf

Via script no meta data source é possível, ou só via código java do próprio Mango?

Caso se consiga pelo Script do meta, tens alguma referência de exemplo?

Grato,