Manobras

Esta funcionalidade tem por objetivo, a definição de manobras, isto é, de conjuntos sequenciais de telecomandos que, normalmente, são utilizados na operação de sistemas elétricos. Foi implementada uma janela na qual se pode definir uma nova manobra, alterar uma já definida, excluir manobras e mostrar uma manobra já cadastrada. Finalmente a janela também permite o envio de uma solicitação de execução de uma manobra já existente.

 

Informação geral

Pré‐Requisitos

Importação do componente ‘Maneuver’

  1. Com o projeto aberto, vá em ‘Run’ -> ‘Extensions’ -> ‘Components’;

    1. Verifique se o diretório dos componentes está correto;

    2. Clique no botão ‘Refresh’;

  2. Selecione o componente ‘Maneuver’;

    1. Clique no botão ‘Add Component...’

    2. Selecione a opção ‘Add and merge to project’, e clique em ‘Ok’;

  3. Aguarde a importação;

  4. Vá em ‘Run’ -> ‘Build’;

    1. Selecione todas as opções disponível para o build;

    2. Clique em ‘Build...’;

Utilização de Nível(Assets) em Tags

Todas as Tags que forem utilizados nas funcionalidades de Manobras devem, obrigatoriamente, ter um nível (Asset) associado a elas. Para maiores informações sobre cadastro de Levels, favor referenciar "Criando Níveis (Assets)".

Modo de implementação

A funcionalidade é implementada através de uma tela (Display) do tipo Popup com o nome @Display.ZLAS_CmdManeuver.
Todo o controle e visualização é feito através de um template de nome ZLAT_Operation. É instanciado um objeto único @ZLA_Operation com este tipo.
Para a escolha de Tags para as Manobras foi criada uma janela @Display. ZLAW_ChooseTag, do tipo Dialog.
O controle nesta janela é feito através de um template de nome ZLAT_ChooseTag instanciado como @Tag.ZLA_Operation.ChooseTag.
Todo o código de Scripts está definido na forma de CodeBehind nos dois displays acima mencionados.
Todos estes objetos foram incluídos no componente ‘Maneuver’.
Os dados das manobras são gravados em uma tabela de nome Manobras, residente na base de dados que tem o mesmo nome do projeto e extensão .db3 (SQlLite), e está alocada no subdiretório de projetos. A conexão tem o nome ProjectInternal. A janela utiliza a Table ZLAT_Maneuver, e a query ZLAQ_QueryManeuver.

Utilização da Janela de Manobras

Chamada da Janela

A chamada da janela de Manobras pode ser feita através do código abaixo, e tem como resultado a apresentação da janela vazia.

@Display.ZLAS_CmdManeuver.Open()

Alternativamente pode-se fazer a chamada seguinte, o que causa a visualização da janela de manobra e o preenchimento com os dados da manobra, se existente, de nome "NOMEMANOBRA";

@Display.ZLAS_CmdManeuver.NewPopup("manobra = 'NOMEMANOBRA'")

Também se pode solicitar a visualização, e execução direta da manobra em seguida usando:

@Display.ZLAS_CmdManeuver.NewPopup("manobra = 'RESETCHAVES'; action='execute'")

Apresentação da Tela de Manobras

A Janela de Manobras é apresentada na figura abaixo, mostrando uma Manobra já existente:
Na parte superior esquerda há uma Caixa com a lista de todas as manobras cadastradas neste projeto. O nome que aparece na caixa é o nome da manobra atualmente sendo mostrada na grade de dados, existente na parte principal da janela.
Neste modo de utilização de apenas "Mostrar" os dados de manobras, todos os campos da grade com os dados são do tipo somente leitura. Não podem ser alterados.

Clicando-se na Caixa é mostrada a lista com as manobras. Se for escolhido um item da lista, clicando-se com o mouse, esta manobra terá seus dados mostrados no lugar dos dados da anterior:

Veja que foi escolhida outra Manobra e a seguir veja os dados desta outra sendo mostrados:

Na grade de manobras, cada linha corresponde a um comando a ser executado, quando a manobra é executada. Nas colunas, para cada linha, existem dados que definem como deve ser feito o comando. Estes dados são descritos a seguir:

  • Ordem – É o número de ordem sequencial dos comandos. A grade é classificada por esta coluna. Se for alterado este número as linhas se invertem para manter a ordem sequencial crescente de cima para baixo. Os números devem ser mantidos sequenciais.

  • Equipamento – É o nome do Tag do ponto de sinalização do estado aberto / fechado do equipamento sendo comandado. Será utilizado para verificar o sucesso de uma operação de comando (veja abaixo como escolher este Tag).

  • Comando – É o nome do Tag do ponto de comando, isto é, de ação de execução de um comando. Este será o Tag que será modificado para gerar o envio de um comando pelo protocolo/canal em que estiver cadastrado.

  • Ação – Mostra o texto cadastrado no Tag para ser mostrado como sendo o atributo ValueAsString do ponto em tempo real (no caso de Tags de comandos que são utilizados em qualquer estado como com a mesma ação, o parâmetro enumerator deve ter ambos os textos iguais).

  • Se falhar - Esta coluna contém uma lista com as palavras Seguir e Cancelar. No momento de cadastrar a manobra, deve ser especificado que ação o aplicativo deve tomar em caso de um comando enviado não ter sucesso. Isto é, se após certo tempo não chegar a sinalização esperada. Cancelar deve ser utilizada se o usuário deseja cancelar a manobra em caso de falha no comando daquela linha. Seguir indicará que apesar da falha do comando da mesma linha, o aplicativo deve seguir enviando os comandos das linhas seguintes.

  • Retardo – Serve para definir um retardo, em segundos, antes da execução da linha em que é especificado. No caso desta última figura não está sendo usado retardo algum, pois está zero. Na primeira figura, na primeira linha está definido que somente após 10 segundos do início da execução da manobra deve ser enviado o comando da primeira linha. O comando da segunda linha somente deve ser enviado 10 s depois da sinalização com sucesso do comando da primeira linha.

  • Mensagem – Neste campo pode-se definir uma mensagem de texto que será adicionada atrás da mensagem de "sumário de operação" enviada pela janela informando que foi enviado um comando por esta Manobra.

Menu de Comandos

Na parte superior direita da janela de Manobras há botões para a execução de tarefas de cadastramento e execução de manobras. Os itens seguintes descrevem as operações executadas na utilização de cada botão.

Nova

O botão serve para entrar no Modo de Inclusão de uma nova manobra.
Ao ser pressionado, os dados da manobra atualmente sendo mostrada são apagados da grade;

  • O nome da manobra na caixa com a lista desaparece;

  • Aparece uma nova caixa de texto para o preenchimento do nome da nova manobra

  • Aparecem, botões para incluir linhas ( + ) e para excluir linhas ( - );

  • Aparece o botão Salvar para ser utilizado ao final da entrada dos dados da manobra.

  • Na grade aparece uma primeira linha de manobra, vazia, mas já com o número de ordem 1.

A figura a seguir mostra a grade no início do Modo de Inclusão.


Para entrar os dados da janela e de cada comando deve-se:

  • Na caixa de texto deve-se entrar com o nome da manobra sendo criada. No exemplo, RESETCHAVES

  • Fazer um duplo clique com botão esquerdo do mouse na linha vazia, na coluna Equipamento: Será mostrada a Janelas de Escolha de Tags, com Tags que são do tipo de sinalização de estados de equipamentos.

  • Escolhe-se o Tag que se pretende usar clicando sobre a sua linha, e a seguir pressionando o botão Ok na parte inferior da janela.

 

  • O texto com o nome do Tag será transferido para a linha antes vazia:

  • Repetir para a coluna Comando, clicando na célula vazia, e escolhendo na Janela de Escolha de Tags o Tag do comando que se deseja utilizar. Ao fechar a janela de escolha o Tag de comando é transferido e a ação definida como parâmetro enumerador do Tag é também transferida para a célula ação.

  • A seguir escolha a operação para a coluna "Se falhar", e defina um retardo em segundos se necessário

  • Se desejar digite o texto de uma mensagem a ser incluída junto ao registro da geração da operação de comando, que é feita pela própria janela, com a identificação do Tag de comando e da Manobra.

  • Se precisar definir mais um comando, após a conclusão da primeira linha, pressione o botão , para que seja criada uma segunda linha vazia.

  • Preencha os dados do novo comando como feito na primeira linha e continue incluindo linhas e preenchendo-as até completar os passos da manobra.

  • Ao final pressione o botão Salvar, para encerrar o Modo de inclusão e gravar definitivamente a manobra. Será mostrada a Manobra e desaparecem os botões utilizados na edição. Todos os campos da Grade voltam a ficar somente leitura não podendo mais ser alterados.

  • Como mostrado na figura seguinte.

Editar

O botão serve para entrar no Modo de Edição de uma manobra já existente.
Neste modo pode-se alterar quaisquer campos de qualquer dos passos da manobra, incluindo a criação de novos comandos ou exclusão de comandos existentes.
Ao ser pressionado o botão Editar, os dados da manobra atualmente sendo mostrada continuam na grade:

  • O nome da manobra permanece na caixa com a lista, na parte superior esquerda;

  • Aparecem, botões para incluir linhas ( + ) e para excluir linhas ( - );

  • Aparece o botão Salvar para ser utilizado ao final das alterações de dados da manobra.

  • Todos os campos da grade se tornam editáveis.

  • Para alterar conteúdos basta clicar na célula e muda-los.

  • Nos campos de Equipamento e Comando, se se desejar alteração deve-se clicar para o aparecimento da Janela de Escolha de Tags, e escolher Tags.

A figura a seguir mostra a grade no início do Modo de Edição:
.

  • As ações de alteração serão idênticas ao já descrito no modo de inclusão.

  • Pode-se também adicionar novas linhas com o botão , e após preenche-las;

  • Pode-se excluir linhas existentes selecionando a linha e pressionando o botão ;

  • Ao final para o salvamento das alterações na base de dados deve-se pressionar o botão Salvar.

  • Será mostrada a Manobra e desaparecem os botões utilizados na edição. Todos os campos da Grade voltam a ficar somente leitura não podendo mais ser alterados.

Excluir

O botão serve para entrar no Modo de Exclusão de uma manobra já existente.
Deve-se utilizar este botão para a exclusão completa de uma manobra já existente. Primeiro deve-se escolher a manobra na Caixa Lista, na parte superior esquerda da janela.
Uma vez sendo mostrada a manobra na grade pode-se solicitar sua exclusão, pressionando este botão Excluir.

  • Aparece então uma mensagem, pedindo confirmação da exclusão.

  • Pressionando-se o botão Sim, a manobra será excluída, e os dados mostrados da manobra serão apagados.

  • Pressionando-se o botão Não, será cancelada a exclusão.

Executar

O botão serve para entrar no Modo de Execução de uma manobra já existente. Deve-se utilizar este botão para disparar a Execução de uma manobra existente.
Primeiro deve-se escolher a manobra na Caixa Lista, na parte superior esquerda da janela. A manobra a ser executada é a que aparece na grade.

  • Ao pressionar o botão Executar a execução da manobra é iniciada, a partir da primeira linha.

  • Inicialmente é respeitado o Retardo, em segundos, definido na linha;

  • Em seguida é verificado se há algum bloqueio para este comando. Se houver bloqueio o comando não será executado e o definido em Se Falhar será realizado: Seguir ou Cancelar a Manobra;

  • Se o comando pode ser executado, é feita a alteração no estado do tag definido na coluna Comando da mesma linha, e a cor de fundo da linha é alterada para amarelo claro.

  • A janela aguarda a sinalização decorrente do comando. Se vier corretamente, a cor de fundo da linha é alterada para verde claro.

  • Se a sinalização não vier dentro de um tempo de Timeout (por default 20s), a cor de fundo é passada para vermelho, para indicar falha. Um log de operação será enviado para eventos com o ocorrido.

  • Se houver falha de comando, o definido em Se Falhar será realizado: Seguir ou Cancelar;

  • A execução passa para a segunda linha, sendo repetidos os passos acima citados.

  • E a execução continua até a última linha.

Critérios para verificações de sinalizações e bloqueios

Verificação de Sinalização

O critério utilizado é verificar se as duas primeiras letras do ‘ValueAsString’ da Tag de comando, após alterada pela ação de comando, é igual as duas primeiras letras do ‘ValueAsString’ da Tag de sinalização.
Portanto ao se configurar a base de dados deve-se levar em consideração este critério para a utilização da Janela de Manobras default.
Exemplo:

  • Seja o Tag de sinalização: Chave_8.STA.POS definida com os estados 0=Aberta; 1 = Fechada

  • Seja o Tag de comando: Chave_8.CMD.CMA com os estados 0=Abrir; 1=Abrir;

Após enviado o comando "Abrir", pela alteração do Tag de comando, a sinalização estará correta quando o Tag Chabe_8.STA.POS tiver seu estado com ‘ValueAsString’ = Aberta;
Somente as duas primeiras letras são testadas.

Verificação de Bloqueios

Para que seja feita a verificação de bloqueios de Inter travamento, deve-se configurar na Tag @Tag.ZLA_Operation.Maneuver.tagForCmdBlocking, em seu atributo StartValue o texto da parte final do nome da Tag que contém, a informação de bloqueio.
Para a verificação de bloqueio será procurada uma Tag, com a mesma parte inicial do nome, isto é, do mesmo template em que está a Tag de sinalização, e com a parte final igual ao definido nesta configuração. Será considerado bloqueio se o ‘Value’ desta Tag for 1;

Mensagens de Eventos de Execução

Como resultado da funcionalidade de Janela de Manobras são enviadas mensagens de operação para a lista de eventos.

Na figura a seguir todos os comandos foram sinalizados corretamente.
No caso de verificação de que um determinado Comando está bloqueado para execução, por exemplo por um impedimento, é enviada mensagem com os dizeres:
COMANDO NÂO EXECUTADO - BLOQUEIO
Caso haja falha de sinalização a mensagem enviada incluirá:
CANCELADA - Falhou Sinalização de comando (em caso de Se Falhar é Cancelar)
CONTINUA - Falhou Sinalização de comando (em caso de Se Falhar é Seguir)

Configurações

As seguintes configurações devem ser feitas para o correto funcionamento da janela de manobras.

Time‐out de Sinalização de Comando

Tempo máximo em segundos de espera por uma sinalização, após enviado um comando. Se a sinalização correta não chegar o comando é considerado com falha. Por default 20s.
Configurar em
@Tag.ZLA_Operation.Maneuver.timeout.StartValue

Tag para Verificação de bloqueios

Deve ser configurado o texto da parte final do nome da Tag de bloqueio (Inter travamento ou impedimento) na Tag:
@Tag.ZLA_Operation.Maneuver.tagForCmdBlocking.StartValue
Para a verificação de bloqueio será procurada uma Tag, com a mesma parte inicial do nome que a Tag de sinalização, e com a parte final igual ao definido nesta configuração.

Definições de finais de nomes para Janela de Escolha de Tags

Para que a Janela de Escolha de Tags não fique muito cheia quando é aberta e com Tags de pontos que não são do tipo procurado, o chamador passa a informação se deve mostrar Tags de comando ou Tags de sinalização.
Conforme este parâmetro a lista mostrada janela será carregada com Tags cuja parte final do nome seja igual a uma das descritas nos Tags de configuração a seguir mostrados.

Finais para Tags de Comandos

Devem ser configurados até 6 partes finais de Tags de comando, separados por ponto e virgulas ( ; ) na Tag:
@Tag.ZLA_Operation.ChooseTag.txtSuffixCmdNames.StartValues
Exemplo:
CMA;CMF;_L;_D

Finais para Tags de Sinalização

Devem ser configurados até 6 partes finais de Tags de sinalização, separados por ponto e virgulas ( ; ) na Tag:
@Tag.ZLA_Operation.ChooseTag.txtSuffixEquipNames.StartValues
Exemplo:
POS;R79