Widgets

Boa tarde a todos.

Existe algum tutorial sobre como criar novos widgets para a construção de HMIs?

Fala Rodrigo, ao invés de contribuir vou aumentar a questão. Você está falando dos widgets do HMI Builder certo? Você está rodando o ScadaBR no Windows? Porque eles tinham prometido que iam lançar o HMI builder na versão para linux tb e até agora nada, eu uso linux. No ScadaBR eu criei vários desenhos animados para usar nas representações gráficas, no meu caso que estava criando um processo de mistura de líquidos eu criei tanques, que quando não estão cheios eles ficam mostrando uma imagem de gif com um tanque vazio estático (quando o valor de um ponto é 0), quando eles terminam de ser enchidos eles mostram outra imagem de gif animado do tanque enchendo devagar (quando o valor de um ponto é 1), eu mesmo criei a imagem pelo GIMP, na hora de criar o Gif animado é só escolher que a animação só vai acontecer uma vez, para que não fique enchendo várias vezes o mesmo tanque. Para colocar ele para ser reconhecido pelo ScadaBR é um tanto simples, vá na pasta (no windows C:/Arquivos de programas/ScadaBR…) (no Linux eu não sei rs, depende de cada um)…webapp/ScadaBR/graphics/NOVO DESENHO , sendo “NOVO DESENHO” o que vc criou, coloque os dois desenhos dentro desta pasta e um arquivo de texto chamado “info” pode copiar de outra pasta, aí dentro vai depender do tipo de point que vc tem, se é digital só vão ser duas imagens, uma para ligado e outra para desligado, neste caso o arquivo info.txt fica assim

name=Fan
type=imageSet
#width=61
#height=72
text.x=5
text.y=55

esse eu copiei do Fan (ventilador), dizem que nem é necessário este arquivo, eu tive problemas de inserir uma imagem errada e depois trocá-la e o ScadaBR não atualizar, ele continuou com a antiga.
Agora se o seu problema é com o HMI Builder, aí creio que o procedimento seja diferente e tudo que falei não serviu de nada haIUhaIUI.
Cara, tá estranho, a galera do ScadaBR não responde nada já faz mais de 1 semana, nunca foi assim…
Abraço!

Oi Fabio, obrigado pela resposta.

A princípio eu me referia ao HMI Builder, bom saber que há outra opção. Eu faço testes em um ScadaBR instalado em Windows, mas meu ambiente de produção é em Linux, não me serve algo que funcione apenas em Windows.

Vamos às dúvidas:

  • É possível criar uma HMI no builder do Windows e exportá-la para uma outra instalação do ScadaBR no Linux? Senão, aguardaremos o HMI builder para Linux.

  • Você tem alguma ideia a respeito da criação de widgets no HMI builder?

De acordo com o procedimento descrito por você:

  • As imagens precisam ser em gif, ou podem ser vetorizadas, por exemplo svg? Li em algum lugar para dar preferência às vetorizadas devido à sua escalabilidade sem perda de resolução.

  • Dei uma olhada na pasta que você citou (webapp/ScadaBR/graphics) e compreendi a ideia. Mas você comenta apenas das imagens do tipo “imageset”. Você sabe como funcionam as do tipo “dynamic”? Por exemplo o dial, cuja imagem é estática e sem o ponteiro. Creio que são para variáveis contínuas.

Agradeço mais uma vez a ajuda.

Pois é, eu também estou na mesma que vc, preciso mesmo é do Linux, como até agora o HMI Builder não saiu para linux eu dei mais atenção as Representações Gráficas do ScadaBR mesmo, aliás eu até tentei usar um pouco HMI Builder, mas travava toda hora, não sei se vc teve esse mesmo problema.

  • Exportar HMI Builder, eu vi alguma coisa parecida de perguntas sobre isso aqui no Fórum, acabei de procurar mas não achei, bom, mas de qualquer forma creio que se for possível só dá para exportar de windows para windows, parece que ainda não saiu o HMI builder para linux, talvez agora na versão 0.9 que vai sair esse mês o pessoal já coloque;

  • Não tenho idéia de nada sobre o HMI Builder, mexi mto pouco nele, para falar a verdade não sei nem o que colocar lá na URL para o HMI Builder ler os pontos do ScadaBR, isso naquela época, talvez hj eu consiga, o que tem que colocar lá?

  • Pelo que vi e usei as imagens podem ser nesses formatos, .png .gif .jpg mas talvez existam mais formatos que ele suporte, não sei sobre as imagens .svg se ele aceita, o que sei é que esse tipo de imagem como já disse não perde resolução qdo aumenta, pelo que também li por aqui isso ia ser algo pro futuro, por enquanto não tem como aumentar o tamanho da imagem (com algumas excessões, na versão 0.86 já dá pra criar botões e gráficos que podem ser do tamanho que quiser, talvez tenha mais alguma coisa que esqueci), as imagens que eu criei já fiz no tamanho certo e o que não encaixou eu refiz até acertar o tamanho, mas ainda é muito trabalhoso o processo, como todo sistema SCADA tem imagens que podem ser dimensionadas de acordo com a necessidade, então eu tenho certeza que a galera já está trabalhando para isso acontecer, se já na versão 0.9 provavelmente ainda não, mas é só palpite meu pelo como as coisas estão andando, apesar de que tudo tá muito rápido por aqui;

  • As imagens do tipo “dynamic” são um mistério, porque o dial não tem ponteiro realmente, com certeza tem mais alguma implementação em java para colocar um ponteiro sempre no meio do Dial e ele deve ser programado para girar algo em torno de 210º até -30º (tendo como 0º o ponteiro às 3 da tarde) sabendo que ele vai girar esses 240º aí é só a programação pegar o valor máximo e dele subtrair o mínimo (esses valores são setados na hora de inserir o dial na representação gráfica), e dividir 240º por esse valor, aí dá pra saber quantos graus o ponteiro tem que girar por variação do valor do data_point, ou seja, parece que é impossível criar alguma imagem usando esse padrão “dynamic”, parece que o “Dial”, o “SmallDial”, o “Horizontal level” e o “Vertical level” são os únicos gráficos que usam esse padrão, na verdade são só 2 tipos diferentes, porque os dials são iguais só mudam de tamanho, e os levels tb. Bom esse é o problema, a solução é que nem tudo que é variável analógica usa o padrão “dynamic” como exemplo “GreenThermo” que usa o padrão mais comum do “imageset”, entra na pasta dele para ver, são 10 imagens, começando do Thermometer0.jpg que é um termômetro vazio, ou com uma temperatura baixa até o Thermomether9.jpg que é um termômetro cheio ou com uma temperatura alta, o que deve funcionar com o mesmo princípio do dial como escrevi acima quando vc indica os valores inicial e final, só que deve ser mais fácil de implementar algo parecido. Eu por enquanto só usei entradas e saídas digitais mais ainda vou precisar das analógicas ou variáveis contínuas como vc disse, por enquanto ainda não precisei bater cabeça por aí mas vou precisar tb.

Bom, é isso, precisando pode escreve aí, e assim que funciona um ajuda o outro aqui, Abraço!

Oi pessoal,

desculpem mas às vezes o projeto pega fogo :slight_smile: e algumas perguntas passam batido, mas já estamos nos organizando, com mais tempo diário para responder o fórum.

aliás obrigado novamente ao fabiodurao que continua “firme e forte” ajudando com testes do scadabr e sempre presente no fórum.

bom, vou dar um status bem breve sobre os dois builders principais.

  1. Representações gráficas do scadabr - essa funcionalidade originalmente foi herdada do mango e há poucos meses nos aprofundamos no desenvolvimento de componentes, foi quando lançamos o “link”, “botão” e “painel de alarmes” entre outros. como tem surgido dúvidas com alguma frequencia, vamos colocar uma documentação para desenvolvedores, porém já adianto que por enquanto esse material só vai servir para quem quiser estudar um pouco de java web (javascript, jsp e outros frameworks).

para quem já conhece um pouco e não pretende esperar pela nova documentação, o fórum do próprio mango pode ser um lugar para conseguir mais informações “a curto prazo”.

aqui tem a dica de como fazer as imagens dynamic :
http://mango.serotoninsoftware.com/forum/posts/list/661.page#3178
o segredo está no arquivo view.js

  1. Builder HMI Flex - chegou a ser testado, e basicamente “roda” no Linux, porém com o Air dá um problema de encontrar os arquivos XML da aplicação, algo relacionado a permissões de arquivos e também caminho de diretório. Portanto acaba não sendo tãão trivial assim de fazer funcionar, e então estamos (de novo) revendo essa funcionalidade para tornar mais prático, a partir da versão 0,9 que está bem próxima.

Sobre o desenvolvimento, não temos documentação formal, mas lá vão minhas palavras de otimismo. Eu pessoalmente não sou desenvolvedor Flex, mas consegui em um fim-de-semana criar meu próprio widget. Depois de fazer o primeiro fica bem fácil. Claro que ainda é uma tarefa de desenvolvedor, se vc não é programador vai ter bem mais dificuldades. De uma maneira bem geral é o seguinte:

  • baixar o source do HMI aqui no portal
  • ler o TXT com instruções, e baixar o SDK open do flex
  • testar a compilação do jeito como está para entender o processo e ver se está tudo OK
  • procurar a pasta onde tem as implementações .mxml dos widgets e estudar o padrão seguido. eu estudei o “text” que era bem simples e percebi que os passos são: 1) herdar do “AbstractWidget”; 2) implementar os métodos de ler e salvar no XML; 3) implementar a janela de edição do widget; e 4) adicionar o widget na lista do dropdown (em adicionar widget).

Bom eu sei que as informações estão bem por cima, mas é para servir só como uma ajuda ‘temporária’ para os desenvolvedores com espírito de aventura. :slight_smile: Em algumas semanas devemos contar com documentação mais detalhada.

Sobre ‘ter que ser um programador’ para fazer os widgets, nem sempre é o caso. A maior parte dos widgets pode ser improvisada a partir dos componentes já existentes.

Por favor estudem também o caso dos “server-side scripts” que pode ajudar bastante, e vamos continuar compartilhando dicas e truques nessa área.


Por último, sobre a criação de componentes padronizados como bombas, tanques, válvulas e assim por diante: estou bastante interessado em reunir imagens desenvolvidas pela comunidade e incluí-las nas próximas versões!!! para algumas dicas de como construir imagens estáticas reutilizáveis para composição de widgets, visitem http://sites.google.com/a/mcasistemas.com.br/m2mwidgets/ e troquem idéia conosco. O projeto dos widgets está bem iniciante e não tem muitos componentes ainda, mas o mais importante neste momento é lançar a idéia e agregar as contribuições da comunidade.

grante abraço!

Olá Fabio e Victor, valeu novamente a ajuda.

Fabio, olhei todas as pastas dentro de “graphics” e entendi o que você colocou.

Organizando as dúvidas:

  1. Builder HMI Flex vs Representações gráficas do ScadaBR.
    Quais as vantagens do Flex em relação às representações nativas?
    Se entendi corretamente, nenhuma das 2 soluções apresenta um criador de widgets. No caso do Flex, novos widgets devem ser criados a partir de funções em xml, usando-se os existentes como exemplo. No caso das representações nativas, para widgets do tipo “imageset” basta criar as várias figuras representando os estados, enquanto que para os do tipo “dynamic” é necessário programação em Java. Correto?
    As imagens para os widgets nativos podem ser em svg? Ou devem ser apenas em jpg, gif ou png?

  2. Banco de widgets
    Victor, eu já tinha entrado em “http://sites.google.com/a/mcasistemas.com.br/m2mwidgets/”. Parece que está bem no começo ainda. Este site também é mantido pelos desenvolvedores do ScadaBR? Ou há a intenção de criar um banco de widgets “oficial”?
    Não sou programador, mas dependendo da dificuldade pretendo tentar criar alguns widgets e acho muito interessante que a comunidade mantenha um banco único.
    Em alguns dias tentarei criar meus primeiros widgets. Fabio, na medida do possível vamos manter essa discussão aberta para trocarmos mais experiências. Quando rolar posto minhas tentativas aqui.

Um abraço,

Rodrigo Martinho.

Tentei criar um widget com as informações do Fabio.

Criei uma pasta dentro da pasta “graphics”, coloquei duas imagens nela (tanto jpg quanto em png, ou seja, duas cópias de cada imagem) e copiei o arquivo info de outra pasta, mas as imagens não estão aparecendo na lista quando edito ou crio uma representação gráfica.

Tentei também copiar uma imagem nova para uma das pastas já existentes e também não funcionou.

Os arquivos novos estão com as mesmas permissões de todos os outros arquivos.

Deveria ser só isso mesmo? Ou deixei passar algum passo?

Ola rodrigomartinho,

A essa altura imagino que vc já tenha reiniciado o tomcat, correto?

Se ainda não aparecer na lista, experimente parar o tomcat, excluir a pasta ‘Catalina’ em /ScadaBR/work/ e reinicie o tomcat. Essa pasta ‘Catalina’ é o cache do tomcat.

Caso ainda não funcione, vc pode tentar excluir o arquivo info.txt, ele é opcional neste caso. Fazendo assim, o nome que irá aparecer na lista será o nome da pasta de onde estão as figuras que vc adicionou.

Abraço

1 curtida

Valeu Eduardo, faltava realmente reiniciar o Tomcat.

Testei uma imagem svg e não funcionou. Png e jpg funcionaram. Interessante que ele acusa a existência da imagem svg na pasta (quando abro o menu para inserir a imagem na representação gráfica ele diz quantas imagens estão disponíveis), mas não a exibe.

Testei também a mudança de tamanho da imagem e da posição do texto pelo info.txt e funcionou.

Pelo jeito vale a pena manter imagens de diversos tamanhos prontas para uso em situações diferentes.

Pois é, tinha esquecido de te falar pra reiniciar o tomcat, mas essa aí de apagar a pasta Catalina eu não sabia, bom saber, quem sabe um bug que eu tive lá por inserir uma imagem errada antes da certa não conserte depois de fazer isso.
Rodrigo, confesso que estou um pouco enciumado, estou faz uma semana e meia esperando resposta pro meu post de um problema que é urgente pra mim e o seu post foi respondido rapidinho sendo que o meu passou desapercebido, então pra protestar eu vou postar aqui o link do meu post http://www.scadabr.org.br/?q=node/116 por favor, equipe do ScadaBR me ajudem, Rodrigo, se você souber como eu resolvo meu problema de SQL responde lá, pra não bagunçar esse assunto aqui.

1 curtida

É Fabio, creio que isso aconteceu porque meu problema parece ser bem mais simples que o seu! :slight_smile:

Infelizmente não posso te ajudar, estou começando a usar o ScadaBR agora.

Ainda quanto aos widgets, fiz várias pesquisas de sites com imagens gratuitas que poderiam ser usadas para criar novos, e o que me pareceu o melhor é o do wiki commons, que tem muita coisa, apesar de eu não ter achado o que mais precisava, que é uma imagem legal de bomba de água.

Tentei criar um widget dinâmico conforme explicado na página do forum do Mango indicada (http://mango.serotoninsoftware.com/forum/posts/list/661.page#3178).

Criei uma pasta “Reservatorio” dentro de “graphics”, coloquei lá os arquivos “Reservatorio.png” e “info.txt”, editei o arquivo “view.js”, repliquei a definição de HorizontalLevel, apenas mudando o nome das funções, trocando “HorizontalLevel” por “Reservatorio”.

Mas ao criar uma visualização usando a imagem “Reservatorio”, o ScadaBR acusa: “mango.view.graphic.Reservatorio is undefined”

Mas essa função está lá no view.js.

Desta vez não esqueci de reiniciar o Tomcat.

Alguma sugestão?

Apaguei o “Reservatório” e, como teste, dupliquei o “Dial”, criando o “Dial2”.

Funcionou e parou de acusar o erro, não sei porque. Mas quando edito a função “Dial2” no view.js as mudanças não aparecem na visualização do ScadaBR, parece que são simplesmente ignoradas, mesmo reiniciando o Tomcat e até mesmo o computador.

resposta rápida ao “banco de widgets”

o m2mwidgets é contribuição da MCA sistemas que participa no desenvolvimento do ScadaBR.
eu (Victor) estou tentando cuidar pessoalmente agora no começo, com 3 objetivos

  1. ter os primeiros widgets para “chamar” atenção dos usuários :slight_smile:
  2. incorporar contribuições de todos na biblioteca
  3. tornar os widgets “oficiais” já incorporando nas versões do próprio ScadaBR.

por enquanto está bem informal mesmo, quem quiser pode encaminhar qualquer sugestão/figuras/etc para m2mwidgets@gmail.com

obrigado

Rodrigo, como tinha citado no começo, depois que inseri uma figura, eu vi que estava errada, aí tentei consertar e colocar a certa e ele não aceitou, parece que é o mesmo erro seu, tente apagar a pasta Catalina como dito acima, creio que deva funcionar, eu ainda não testei mas vou ver se dá certo no meu caso pq até hj está errado, abraço!

Oi Fabio, valeu a ajuda mais uma vez.

Apenas uma correção, a pasta a que você se referiu fica em “tomcat6/work/Catalina”, não em “ScadaBR/work/Catalina”.

Parei o Tomcat, apaguei a pasta Catalina, apaguei o widget que eu tinha criado (tanto a pasta em graphics quanto a função em view.js), reiniciei o Tomcat e loguei no ScadaBR.

Desloguei do ScadaBR, parei de novo o Tomcat, apaguei a pasta Catalina, recriei o widget, reiniciei o Tomcat, loguei no ScadaBR e o widget estava na lista. Mas ao selecioná-lo e gravar a representação gráfica, o mesmo erro voltou a aparecer: mango.view.graphic.SmallDial2 is undefined. Mas verifiquei de novo e a função está lá no view.js…

Mais uma vez após alguns dias o erro parou de ser acusado e o widget funcionou, inclusive com a mudança da cor do ponteiro, que tinha sido a única mudança que eu tinha feito na função.

Mas não tenho a menor ideia de porque o erro ocorre por algum tempo e depois para.

também cai no problema de criar uma nova pasta com um imageset e depois querer trocar as imagens. Não há nenhuma maneira de isso ser feito?

vamos fazer alguns testes mais detalhados com as imagens pra achar o que é pessoal, por enquanto só pra tirar a pulga de trás da orelha, tem certeza que não ficou no cache do navegador??? dá aquela limpada caprichada, control+f5, sai e volta… porque pelo visto já foi feito de tudo?

também deixa a gente olhar com mais detalhe nos logs e fontes se não estamos fazendo nenhum cache de imagens.

abraço

Valeu ScadaBR, era só isso que faltava, limpar o cache do navegador!

Fiz testes novos e funcionou, ao menos no Mozilla, sem precisar parar o Tomcat e sem precisar apagar a pasta Catalina. Apenas desloguei do ScadaBR, substitui as imagens, apaguei o cache do navegador e ao logar novamente no ScadaBR as imagens novas já estavam lá.

Olha aí Fabio a solução!

Outra dúvida: para que serve o arquivo derby.log que aparece em vários lugares diferentes?

Abraço.

PS: tá ficando estreito esse negócio :- )