Biblioteca de Símbolos
Usando as ferramentas de desenvolvimento gráfico pode-se criar novos símbolos para utilizar em projetos próprios. Pode-se organizar para uso próprio uma biblioteca de símbolos que serão reusados em diversa telas nos projetos da empresa. A biblioteca básica nativa já vem com um conjunto de símbolos tais como Chaves, Tanques, Medidores e Bombas, Botões, Gauges, Sliders e outros.
Organizando a Biblioteca de símbolos
Novos objetos podem ser agrupamentos de objetos existentes com todas as dinâmicas associadas.
Abaixo, a título de exemplo, é mostrado o objeto Fan representando uma eólica. Este objeto é desagrupado e após reagrupado adicionando-se ao existente um tacômetro e um valor indicando a velocidade em RPM. Observar que na dinâmica da hélice, está selecionado rodá-la quando um valor for maior que 1 (ligado).
Os símbolos são objetos complexos criados usando as ferramentas de edição de telas do Action.NET. Assim, por exemplo, um objeto disjuntor deve ser uma figura com todas as propriedades e métodos associados a um disjuntor em uma tela de um unifilar.
Cada símbolo deve ter um nome que o identifica, uma categoria que o agrupa entre seus semelhantes e uma descrição que auxilia no seu uso por técnicos que deverão configurar as telas do SCADA.
No caso de uma empresa integradora que trabalhe com diversas concessionárias de energia, uma possibilidade de organização é agrupar todos os objetos (disjuntores, seccionadores, medidas analógicas, etc.) associados à cultura da concessionária a uma categoria, como o exemplo CEB_SIMBOLOS (Concessionária de distribuição de Brasília).
Um objeto disjuntor terá, por exemplo, as seguintes dinâmicas:
Quando o mouse passa sobre ele, ele aumentará de tamanho;
Ele será um quadrado com quatro cores distintas em função de estar: Bloqueado (0), Aberto (1), Fechado (2) e Indefinido (3);
Um duplo clique sobre ele deverá abrir uma janela de comando que permitirá ligá- lo, desligá-lo, impedi-lo ou desativá-lo.
Criando um Símbolo (Disjuntor)
Por exemplo para criar um símbolo para o objeto Disjuntor:
Sobre a aplicação Default, é criado um objeto retângulo, no formato de um disjuntor. Um duplo clique sobre este objeto abre a janela de dinâmicas para configuração.
Selecionamos a dinâmica
Action e atribuímos as seguintes ações:
Tag.AN_AnalogInt_SELECTED.Link = #DISJ:(tag.AN_DEFAULT_AnalogInt).GetName()
A primeira ação será jogar o link (reference) da variável associada ao Label #DISJ na variável à esquerda: AN_AnalogInt_SELECTED. Na construção do símbolo usamos uma variável Dummy (AN_DEFAULT_AnalogInt ) que durante o projeto das telas deverá ser substituída pala variável que descreve o estado do disjuntor.
Display.AN_Command.Open(): A segunda ação será chamar a janela AN_Command que deverá ter como parâmetro de entrada a variável globalTag.AN_AnalogInt_SELECTED , já que na primeira linha da dinâmica ponteiro desta variável aponta para a variável dummy que representa o estado do disjuntor.
Abaixo é apresentada a dinâmica ação completa:
A segunda dinâmica será a FillColor e usaremos o valor da variável associada (tag.AN_DEFAULT_AnalogInt).Value para atribuir as cores (0) Branco, (1) Verde, (2) Vermelho e (3) Amarelo.
A última dinâmica associada a este objeto retângulo será Shine que fará que o objeto aumente em 20% (1,2) quando o mouse passar sobre ele.
Outra ação implementada será colocar um "X" sobre o objeto caso não exista comunicação com o campo. Para isso, cria-se uma figura "X" ( Duas retas
agrupadas) e define-se que ele será invisível quando a qualidade tag for diferente de 192 (qualidade ok).
Finalmente, coloca-se um objeto sobre o outro, agrupa-se, e cria-se o símbolo disjuntor.
Janela de Comando do Disjuntor
A janela de comando do disjuntor é apresentada abaixo. Ela manipula a variável global:
AN_AnalogInt_SELECTED e possui os cabeçalhos localizáveis:
Tag: apresenta o nome da variável associada ao disjuntor:
Tag.AN_AnalogInt_SELECTED.GetName()
Estado: apresenta o estado na variável associada ao disjuntor:
Tag.AN_AnalogInt_SELECTED.ValueAsString
Comando: Indica se o comando está ou não impedido (no caso apenas a check- box)
Sinalização: também check-box de estados;
Além destes parâmetros de "labels" existem três botões, onde a cada botão está associada uma dinâmica:
Desligar: Tag.AN_AnalogInt_SELECTED.Value = 1
Ligar: Tag.AN_AnalogInt_SELECTED.Value = 1
Sair: Ação CloseDisplay.
Criando um Unifilar com os Símbolos Disjuntores
Na figura a seguir, foi criado um unifilar com uma barra e seis símbolos DISJ. Para cada símbolo, como pode ser observado na figura, substituiu-se a variável Tag.AN.DEFAULT.AnalogInt por uma variável associada a um disjuntor.
O comando ligar / desligar muda o valor do Tag (1=desligar / 2=Ligar) e sua figura associada.
Da mesma forma como se criou este objeto disjuntor, pode-se criar todos os objetos associados à cultura do cliente.
Operações Usuais na Criação de novos Símbolos
É comum ao se gerar novos itens na biblioteca de Símbolos (Symbols):
Associar Labels a variáveis do tipo dummy:
#LAB1:(Tag.AN_AnalogInt_Selected)
Usar Tags tipo reference para apontar para as variáveis dummy como em:
[Tag.AN_AnalogInt_Selected.Link =#LAB1:(Tag.AN.Default.AnalogInt).GetName()]
Fazer todas as operações com a variável reference, após fazer seu apontamento
Para criar uma variável dummy que assumirá o papel de uma variável de uma rotina associada a um símbolo, por exemplo: Disjuntor, crie uma variável dummy do mesmo tipo da variável que contém o estado do disjuntor e crie uma variável do tipo reference.
Por exemplo, se temos um disjuntor que é um AnalogInt, criamos uma variável dummy do mesmo tipo como, por exemplo, Tag.AN.Default.AnalogInt e criamos uma variável global do tipo reference como, por exemplo, tag.AN_AnalogInt_Selected.
Depois de apontar a variável tipo Reference para o disjuntor: [Tag.AN_AnalogInt_Selected.Link
=#LAB1:(Tag. AN.Default.AnalogInt).GetName()], os seguintes atributos poderão ser usados:
Estado do disjuntor: (Tag.AN_AnalogInt_Selected).value (0=bloqueado, 1=aberto, 2=fechado, 3=Indefinido);
Qualidade da leitura do estado do disjuntor: (Tag.AN_AnalogInt_Selected).quality
Descrição do disjuntor: (Tag.AN_AnalogInt_Selected).description
Disjuntor Inibido (alarme desabilitado): (Tag.AN_AnalogInt_Selected).AlarmDisable = 1
Disjuntor Simulado: (Tag.AN_AnalogInt_Selected).locked = 1
Disjuntor alterou o valor: (Tag.AN_AnalogInt_Selected).changed
Estado do disjuntor em texto: (Tag.AN_AnalogInt_Selected).ValueAsString – Neste caso deve existir um dicionário associado;
String com Tag do disjuntor: (Tag.AN_AnalogInt_Selected).GetName()
Nesta página: