Como zerar um metadapoint

Oi:

Queria saber como posso zerar um metadatapoint que faz uma uma contagem de eventos a partir da escrita num datapoint binário com o valor “1”.

O sript é o seguinte:
return p118.past(HOUR).data.get(0).starts, sendo p118 o nome da variável lida para realizar a contagem. Esa variável pertence a um metadatapoint e este a sua vez a um datapoint.

Bom, qualquer ajuda, eu agradeço

até,

Olá, olha não entendi muito bem a sua dúvida mas tentar ajudar…
Talvez detalhando melhor, posso ajudar mais…
Não entendi porque usou o pas(HOUR), será que o que vc quer é saber quantas vezes o datapoint mudou de estado de 0 para 1 em 1hora?

Não lhe dei ainda com a função “past”, parece que o Rodrigo Martinho já conseguiu algo com ela…
Bom talvez algo do tipo possa funcionar

T=60 // Define uma variável T=60 para fazer o laço for
SOMA=0 //Define variável SOMA=0

for (int i = 0; i = 60; i++) { // Cria laço for contando de i de 0 até 60, acho q soma 1 por iteração

T= T - i; // Subtrai 1 de 60 a cada iteração, ou pode mudar o “for” tornando decrescente, mas como não dominio java…

return p118.past(MINUTE, T).data.get(0).starts // não sei se a estrutura é exatamente essa mas se no caso vc faz leituras a cada minuto, então vc pode pegar o valor minuto a minuto, e assim por diante dependendo da frequência da leitura, pode ser SECOND, menor que isso não sei como fica…

SOMA=SOMA+return // Aqui é onde entra a mágica, o duro é que também não sei exatamente como chamar o valor que capturou atrás, se sua variável for binária, no final ele vai somar toda vez que o resultado for igual a 1 e quando 0 tb mas não vai mudar nada, aí vc vai ter o número de vezes que mudou de 0 pra 1.

}

PS.: // é comentário em java

Depois de feito isso tudo aí é só criar o point link, mas parece que isso vc já fez né, a experiência mostra que muitas vezes nem é preciso usar o point link, o próprio meta data point já dá pra ser usado quando a idéia é para usar em uma variável virtual.

Agora zerar? não sei muito bem qual é o problema, mas desse jeito não dá? talvez nessa linha q te passei dê certo, ou então talvez vc precise criar outro metadata_point para zerar esse, nem tudo tem uma soluação simples ainda…

Sei que talvez não seja exatamente isso que procura, mas pode ser que tenha dado alguma sugestão,

Abraço!

Oii, muto obrigada por sua resposta.

Eu queria fazer um contador de eventos (peças fabricadas) que vai aumentando em 1 cada vez que é atualizado o metapoint de “peças fabricadas”. Só que quando reinicializo o sistema que estou monitorando, incluindo o CLP, o valor do metapoint q tem PAST no script, não é zerado, ou seja, continua com o mesmo valor q estava antes. Por exemplo, se são fabricadas 5 peças, após reinicialização, continua mostrando o valor 5 nesse metapoint, quando eu quero que mostre “0”, porq ali vai começar uma nova receita.

Quanto a função PAST, achei um exemplo parecido no fórum do Mango, e por tanto eu implementei para que funcionasse como contador.

Para zerar o metapoint intentei usar um poinlink, só que ele zera datapoint, não merapoint! Agora usar outro metapoit para zerar não deu certo, pode ser que tenha implementado mal o script para zerar!!

Vou tentar fazer como vc sugere. Se vc souber alguma outra coisa, eu agradeço,

Até mais!

Olá, que isso, denada, é o famoso QuiProCó, uma mão lava a outra e as duas lavam a cara hauhAIUH
Entendi um pouco melhor o que está fazendo, olha, eu vejo 2 soluções:

1ª Essa é a mais fácil e que eu tenho mais certeza que vai funcionar.
Se vc já estiver usando a versão 0.8.6 do ScadaBR vai ver uma seção chamada Scripting, que é diferente dos Scripts do Meta Data Points, lá vc pode criar um script que escreve em vários Data Points, só que ele só é executado quando for clicado num botão, e este precisa ser criado na tela do supervisório:

  • Vá na seção scripting;
  • Crie um novo script;
  • Dê um nome;
  • Marque a opção “Comandos para Datapoints” e coloque o nome “dp” na caixa “Var”, pode ser usado outro nome, só pra exemplificar estou mantendo o dp.
  • No script escreva a linha abaixo porém substitua o DP_392414 pelo XID do Meta Data Point que vc quer zerar.

dp.writeDataPoint(‘DP_392414’,0);

(**) Pronto, acho que deve funcionar, senão funcionar, uma solução dentro dessa 1ª, seria criar um Data Point Virtual, e naquele seu Meta Data Point, começar a acumular o valor nesse Data Point Virtual aí depois vc teria que repetir o procedimento acima utilizando o XID do Data Point Virtual.

O ruim deste procedimento, é que sempre que trocar de receita, vc vai ter que ir na tela do supervisório de dar um clique no Botão que vc vai adicionar na tela (se não souber como fazer essa parte do botão, escreve aí, é sussa)!

2ª Essa segunda opção ainda é meio arcaica, porém pode agilizar o processo para que não seja necessário resetar o valor na tela do supervisório. A idéia agora é usar um botão pulsante físico em algum painel, assim, qdo o operador trocar a receita, ele só vai ter que apertar o botão, pra zerar, pra isso funcionar, vc não precisa mudar mta coisa, só criar um novo Meta Data Point que tenha um “if” no começo, + ou - igual em baixo:

  • Use uma entrada do CLP pra pegar o valor do botão de reset;
  • Crie um data point pra ele;
  • Crie um novo Meta Data point e dê um nome;
  • No contexto do Script adicione o data point do botão de reset;
  • Em Var dê um apelido do tipo Botao_reset;
  • E cole o texto abaixo lá;
  • Por fim no point link relacione este meta data point com o meta data point contador.

if ((Botao_reset.value) == true)
return true
return false

Se não funcionar eu acho que a solução de (**) deve resolver aqui tb.
A vantagem do Meta Data point sobre o Scripting é que ele fica atualizando sozinho e funciona sem precisar mandar. A vantagem do Scripting sobre o Meta Data Point é que ele pode escrever em varios Data Points e ainda habilitar e desabilitar Data Point e Data Sources, porém, precisa ser mandado por um botão de script.

É isso, para mais ajuda, mande mais detalhes da programação.

Abraço

Já existe alguma possibilidade de zerar um meta data point dentro do script do mesmo, não havendo necessidade de usar botão de script ou físico conforme soluções 1 e 2 fornecidas pelo Fabio?

Tenho esta situação:

if(p1010.value==60) //p1010 é um meta point virtual atualizado a cada segundo)
{
return p1009.value + 1 //p1009 é o meta data point deste script - contagem de minutos)

//Aqui gostaria de zerar o metadatapoint quando atingir um determinado vador em minutos
}
return p1009.value.

 

Murilo,

Vou dar mais duas opções:

3 - Tratador de eventos - Quanto o peta atingir o valor desejado (detector de evento - Valor) o tratador de evento zera o data point;

4 - Atraso de execução - O meta data source tem um atraso de execução configurável (Atualizar evento), você pode utilizar só um meta, retornando seu valor + 1 a cada n segundos/minutos; Dentro do script, uma verificação se o valor é 60 e retorna 0.

Veja se uma dessas te atende.

 

Att.