Olá,
Estou começando a aprender o desenvolvimento no Elipse E3, e estou com algumas dúvidas no momento.
Tenho aqui duas imagens, a primeira é um LED apagado e a segunda é o mesmo LED, só que aceso, como visto abaixo:
Consigo deixar o fundo da imagem transparente dentro do Elipse E3 normalmente.
Criei um XControl chamado LED_Vermelho com intenção de receber um valor binário de um TAG, então dentro do XControl criei uma propriedade chamada TAG do tipo Boolean e fiz o seguinte Script na imagem:
Aqui está funcionando conforme descrito, posso colocar este XControl em uma tela e associar qualquer TAG boolean à propriedade TAG do XControl inserido na tela.
Agora, a primeira dúvida é: este método de fazer funciona, mas está eficiente? Ou existe alguma forma mais eficaz de fazer?
Segunda dúvida, gostaria de adaptar este XControl para receber uma propriedade chamada “Piscar”, onde se eu coloca 0, não pisca, e se eu coloco 1, fica piscando caso a propriedade TAG for igual a 1, como se um alarme estivesse ativo por exemplo.
Como ainda sou novo no Elipse, não consegui uma forma de conseguir fazer, a primeira coisa que pensei em fazer foi criar um evento no LED novamente com a “Condição de Ocorrência” configurada para “Sempre que a expressão for verdadeira” e selecionar “Repetir o evento” a cada 500 ms, para aproveitar este tempo para fazer o LED piscar, trocando o estado da imagem sempre que entrar neste evento pela condição.
Porém, eu já fiz alguns testes aqui e eu não consigo entender o motivo, mas a condição nunca se torna verdadeira, quando eu seto a TAG para 1, o script não entra neste evento de jeito nenhum, e eu não consigo entender o motivo disto, a condição ali seria: LED_Vermelho.TAG = 1, igual a condição que eu usei no exemplo descrito acima em que o LED não pisca, apenas acende, com a exceção que o método de ocorrência é diferente e que a expressão agora compara se a TAG é igual a 1. Mas eu não sei o que ocorre para este evento nunca ser executado, mesmo quando forço a TAG para 1 ao rodar o programa. Se alguém puder tirar esta dúvida, agradeço muito.
Tendo esta dificuldade acima, ali na expressão (imagem acima mesmo), coloquei: second(time) <> 0
Com esta expressão, o evento ficou ocorrente sempre, fiz este teste por imaginar que o segundo real sempre está variando e sempre será diferente de zero (até que chegue até zero). E com isto talvez desse para fazer algo, já que o script estaria sempre rodando a cada 500 ms, porém, outra dúvida que eu tenho é que se eu fizesse por este caminho, daria algum problema no programa? Imagino que desta forma não seja otimizado.
Na verdade, outra dúvida que eu tenho é justamente sobre isto, se é possível deixar um script rodando sempre, sem parar? Sei que é possível porque fiz com este método de ficar comparando os segundos sempre, mas quero saber se há alguma forma certa de fazer isto, caso haja, por favor, gostaria de saber como e se pode causar problema ao rodar a aplicação, como lentidão ou algo do tipo. Eu pergunto isto, pois estou acostumado a programar IHMs e lá havia a opção de deixar uma macro (script) rodando sempre e se repetindo sempre de acordo com o tempo definido em ms.
Pensando nisto, pensei um usar a “Tag Timer” do próprio Elipse, a fim de tentar trocar a imagem do LED pagado e aceso sempre que o timer estourasse, mas ao inserir, parece que não era o que eu imaginava, me deu a impressão de que é algo programado por calendário ou algo assim. Gostaria de algum comentário sobre isto se possível. Então, inseri um “Tag contador”, este sim tinha configurações com o que eu imaginava, porém, no "comportamento’ dele, na área “preset” e “increment”, não consegui uma forma de configurar para ms (milissegundos), então outra dúvida é se é possível usar o tag contador com ms.
É isto, existem muitas dúvidas neste post, ficaria muito grato se pudessem responder todas ou a maioria delas e orientações para os métodos mais otimizados e indicados possíveis, seria muito esclarecedor. Desde já, agradeço a ajuda de todos.