Botão de Pulso + melhorias no design do supervisório

img1
Olá pessoal, estou desenvolvendo um projeto onde preciso controlar um inversor de frequência CFW500 da WEG por meio do supervisório ScadaBR. Sou novo na área, mas por enquanto estou tendo resultados excelentes com a plataforma. Entretanto, estou com dúvidas para fazer um botão de pulso. Gostaria de usar o botão de pulso no “JOG HORARIO” e “JOG ANTI-HORARIO”. Por enquanto eles estão funcionando assim:

  • “JOG HORARIO” = aperto, e ele envia um valor 14 para o parâmetro de controle;
  • “JOG ANTI-HORARIO” = aperto, e ele envia um valor 10 para o parâmetro de controle;
    Por enquanto, eles estão funcionando como “botões com retenção”. Queria que o jog só funcionasse quando eu segurasse o botão, se eu soltasse ele não mandaria nenhum valor para o inversor.
    Além disso, o supervisório para testes está ok, mas gostaria de deixa-lo mais bonito na versão final. Vocês tem alguma dica? Gostaria de mais opções para os botões, deixa-los do mesmo tamanho, mudar a cor do fundo, alinhar etc.
    Aguardo a ajuda de vocês! Valeu

Boa tarde Eduardo…procure na lista de componentes da tela de representações gráficas a opção Script para Servidor…lá dentro tem um template pronto de botão de pulso que talvez se adpte a sua necessidade. Valeu!

Boa tarde, eu olhei este botao de pulso que voce disse, mas ainda fiquei com uma duvida.
No meu botao antigo, eu criei um botao script.
Ja nessa opçao “script para servidor” tenho que anexar um datapoint.
É possível eu criar um datapoint por meio do data source meta, que execute o mesmo comando do meu botao script? no caso seria o “dp.writeDataPoint(‘DP_808408’,14)”
Se for possível, como eu faria isso? obrigado

Teria que testar, mas creio que sim. O botão de pulso é só o gatilho do seu script.

Boa tarde, eecarval
Então, depois de muitas tentativas caçando algo similar aqui no forúm e testando muitos scripts, ainda não consegui fazer esse data point escrever no xid que eu quero


Como eu faço para esses datapoints do data source meta conseguir escrever o valor que eu quero no xid desejado? Pelo visto lá não tem a opção de adcionar um objeto no contexto que seja ‘comando para datapoints’ que nem na aba scripts. Você poderia me ajudar?

Tenta usar um datapoint meta.

Então, meu amigo. É que eu recortei o print, mas esse data point é dentro do data source meta. Não sei o que fazer para fazer o data point executar esse script. E também não tô achando material pra me ajudar…

Boa noite!

Uma coisa muito importante a saber: não é possível escrever valores a partir do data point Meta. O comando “writeDataPoint” é exclusivo da página Scripting.

Você pode criar um botão que invoque qualquer script (da página de Scripting) na Representação Gráfica através do componente Botão (script).

Uma coisa importante a dizer é que os scripts só são executados quando chamados por um botão ou outro recurso. Ou seja, o script provavelmente não esteja “enviando continuamente” o valor 14 (ou 10) para o seu inversor. O que acontece, na verdade, é que um botão de pulso não manda apenas um sinal para o inversor, ele sempre manda dois sinais. Exemplo:

Digamos que você possui uma entrada binária conectada a uma botoeira de pulso. Quando você apertar a botoeira ela enviará um sinal 1 (Ligado/Verdadeiro) para um CLP. Assim que você soltar, ela enviará um sinal 0 (Desligado/Falso) para o CLP. Então, se você quer um script que imite um botão de pulso, falta descobrir qual seria o “valor neutro” que você deve passar para o parâmetro JOG (isto é, um valor que não ative nenhum dos dois sentidos - horário ou anti-horário). Você provavelmente encontrará isto no manual do inversor.

Encontrando esse “valor neutro”, você pode fazer um script mais ou menos assim:

// Ativa o sentido horário
dp.writeDataPoint("DP_808408", 14);
// Faz uma pausa de 2000 milissegundos no script
java.lang.Thread.sleep(2000);
// Deixa o JOG "neutro"
dp.writeDataPoint("DP_808408", /*Código do valor neutro aqui*/);

Beleza, Celso. Agradeço a ajuda, mas infelizmente ainda não é a solução pro meu problema, ja que o “jog” é um botão na ihm que roda o motor em uma outra frequencia programada so enquanto o operador segura. Como se fosse um botao sem retenção, um interruptor campainha.
Mas é muito bom saber desse timer que você enviou. Vou guardar para projetos futuros. Valeu

Pesquisei na internet para entender como funciona o JOG e acho que agora compreendi melhor o que você deseja fazer. Você quer “simular” o comportamento do botão JOG no ScadaBR, fazendo que haja um botão na tela gráfica que ative o JOG apenas enquanto o usuário estiver com o botão do mouse apertado sobre o botão. Além disso, você quer que a frequência de rotação seja diferente dependendo do sentido de rotação do motor (horário ou anti-horário).

Então, vamos lá. Não é algo bem documentado, mas na Representação Gráfica do ScadaBR você pode executar qualquer script da página de Scripting através da função Javascript mango.view.executeScript("SC_XXXXXX") (na qual “SC_XXXXXX” corresponde ao XID do seu script).

Sabendo disso, você pode criar um componente HTML que invoque dois scripts diferentes: um que ative o JOG (quando o botão for pressionado) e outro que desative o JOG (quando o botão for solto). Primeiramente, crie os scripts para ativar e desativar o JOG:

Ativar JOG

// Substitua "DP_000000" pelo XID do data point que controla a frequência 
// do JOG, e 10 pela frequência desejada:
dp.writeDataPoint("DP_000000", 10);

// Substitua "DP_111111" pelo XID do data point que habilita a função JOG
// (se não for binário, troque o 1 pelo valor que ativa o parâmetro)
dp.writeDataPoint("DP_111111", 1);

Desativar JOG

// Substitua "DP_111111" pelo XID do data point que habilita a função JOG
// (se não for binário, troque o 0 pelo valor que desativa o parâmetro)
dp.writeDataPoint("DP_111111", 0);

Criados os scripts, crie um componente HTML com um botão. Precisaremos usar os eventos onmousedown (botão do mouse pressionado) e onmouseup (botão do mouse solto) para invocar nossa função mango.view.executeScript() nos momentos adequados (mais informações sobre eventos DOM podem ser encontradas aqui e aqui).

Botão HTML

<button onmousedown="mango.view.executeScript('SC_111111');" onmouseup="mango.view.executeScript('SC_000000');">
Clique em mim!
</button>

Substitua ‘SC_111111’ pelo XID correspondente ao script que ativa o JOG e substitua ‘SC_000000’ pelo XID correspondente ao script que desativa o JOG.

Espero ter ajudado, abraços!

PS.: Há sempre um pequeno delay entre pressionar/soltar o botão na Representação Gráfica e o sinal para ativar/desativar o JOG ser enviado ao seu inversor, algo entre 0,5s e 2s. Ainda sim, esta é a solução que mais se aproxima da experiência de usar um botão físico para ativar o JOG.

Quanto à melhoria de aparência das Representações Gráficas: o ScadaBR atualmente não disponibiliza algum recurso nativo que permita fazer isso sem recorrer a programação. Então, eu recomendo que você procure conteúdos relacionados a HTML e, principalmente, CSS para conseguir estilizar os elementos da maneira que mais lhe agrade.

Vou deixar uma playlist de um curso básico de HTML+CSS aqui:

Boa tarde, eecarval e Celso. O que vocês indicaram funcionou. Fiz um “botão de pulso” pelo botão HTML, criei dois scripts para ativar e desativar o jog. Além disso, acrescentei mais algumas condições com if para o jog não funcionar enquanto o gira/para estiver funcionando. Ai, adicionei a condição do onmouseup e onmousedown com os dois scripts criados anteriormente, e funcionou direitinho! Motor só liga quando seguro o botão do mouse, simulando real a função jog do inversor de frequência CFW500 WEG. Obrigado por me ajudarem :slight_smile:

1 curtida