sexta-feira, 28 de dezembro de 2018

Conhecendo A Programação LOGIX do JMRI

Existem algumas situações que as ferramentas prontas do JMRI podem não atender a uma necessidade específica da sua maquete, felizmente para isso existe a ferramenta LOGIX do JMRI que é um “programador” em que podemos com base dos elementos que criamos no JMRI (Sensores/Turnouts/Luzes/Detectores de Ocupação, etc) executar ações, que pode ser o acionamento de uma Luz ou a mudança de posição de um AMV.




Estrutura do LOGIX:
Antes de demonstrar alguns exemplos de uso do LOGIX vamos conhecer a sua estrutura de funcionamento:


1. LOGIX TABLE (Tabela Logix) : Na tabela LOGIX vamos criar nossos “programas”, basicamente aqui temos no nome do “programa” ou “Logix Name”.

2.  CONDITIONAL (Condições): Dentre de cada Logix podemos criar diversas Condições. Normamente temos apenas uma CONDITIONAL para cada LOGIX, mas este é um recurso interessante que permite agrupar as “programações” conforme a preferência do usuário. 

3. LOGICAL EXPRESSION (Expressão Lógica):  Dentro de cada CONDITIONAL adicionamos as validações que determinarão a execução da ação. Basicamente são validados valores dos elementos configurados no JMRI (Sensores/ Turnouts/ Luzes/ Detectores de Ocupação, etc).  Dentro de uma CONDITIONAL podemos incluir diversas  LOGICAL EXPRESSION (validações) conforme a nossa necessidade.

4. ACTIONS (Ações): Conforme o resultado da LOGICAL EXPRESSION serão executadas ações configuradas. As ações podem ser: mudança do valor de um sensor, posição de um AMV, acionamento de uma luz, etc. Enfim, podemos alterar os valores dos diversos elementos configurados no JMRI.  Podemos configurar diversas ações para cada CONDITIONAL tanto se o resultado das validações Verdadeiro como Falso.


COMO FUNCIONA O LOGIX
Para quem conhece de programação de computadores já deve ter achado a apresentacao acima bem familiar. O LOGIX funciona como o “IF...THE..ELSE..”, que seria algo como “SE...ENTAO...SENÃO...”. Basicamente os parâmetros cadastrados em “LOGICAL EXPRESSION” são validados e conforme o resultado são executadas as ações cadastradas.

Quando temos a alteração no valor de um dos elementos incluídos nas regras do LOGIX, como por exemplo, a mudança de posição de um AMV, o JMRI executa a validação das regras e executa as ações configuradas conforme o resultado.


Vamos ver um exemplo simples de como criar uma regra LOGIX no JMRI.

Vamos criar uma regra que valide a posição do AMV1 para que a Luz VERDE1 seja ligada quando ele estiver na posição CLOSED e desligada quando o AMV1 estiver em THROWN.
Lógica do Exemplo


1. Primeiro vamos acesse no JMRI acesse o menu Tools => Tables => Logix


2.  Será aberta da tela com a lista dos Logix configurados:

A)  Na parte de baixo da tela clique no botão “Add”
B) Informe o código para o LOGIX que está sendo criado, o padrão é LXNNN onde LX é um padrão para os Logix criados e NNN é um numero do Logix, vamos utilizar “LX01”
C) Informe o nome do Logix que está criando, vamos chamar esse de “EXEMPLO”
D) Clique no botão “Create” para criar o LOGIX;


3. Agora que o LOGIX este criado é aberta a tela para incluirmos a CONDITIONAL. Clique no botão “New Conditional” para criar uma nova.


Na tela que é aberta vamos configurar a LOGICAL EXPRESSION e as ações da CONDITIONAL:


A) User Name: Nome da Conditional;
B) Logical Expression (Expressão Lógica): Aqui vamos incluir as validações dos elementos do JMRI;
C) Actions (Ações): Nesta opção iremos incluir as ações que serão executadas conforme o resultado das validações da Expressão Lógica (Logical Expression);


4. Vamos chamar essa Conditionalde “REGRA EXEMPLO”, preencha no campo "User Name:" o nome da Conditional:



Agora vamos incluir a Expressão Logica que valida a posição do AMV1 como CLOSED:

5. Clique no botão ”Add State Variable”


6. Na tela que é aberto temos um caixa de opções (A) com os tipos de elementos do JMRI (Sensores, Turnouts, Lights e etc). Vamos selecionar a opção que nos interessa é que o Turnout (B);


7.  Quando selecionamos o tipo do elemento, a tela “Pick Lists” (A) é apresentada com a relação dos elementos do JMRI aquele tipo (B). Localize o elemento que quer validar o valor, que neste exemplo é o AMV1  (C);



8. Clique uma vez na linha do elemento desejado para selecionar(A), em seguida segure sobre essa linha o botão da esquerda do mouse e arreste para o campo “System/User Name” (B) da tela “Edit Variable”.


9. Para concluir selecione qual o valor retornará Verdadeiro para a elemento selecionado, no caso vamos selecionar “Closed” e clicar no botão “Update” para incluir a regra;


Temos a regra criada, na tela temos a informação da regra (A) e qual o seu resultado atual (B).


Agora vamos incluir as ações para ligar a luz VERDE1 quando o AMV1 estiver em Closed e desligar quando ele estiver em Thorwn. 

Primeiro vamos incluir uma ação para ligar a luz VERDE1 quando o resultado da regra for Verdadeiro (True).

10. Clique no botão “Add Action” 


11. Na tela que é aberto temos um caixa de opções com os tipos de elementos do JMRI (Sensores, Turnouts, Lights e etc). Vamos selecionar a opção Turnout (Lembrando que as Saídas para Controle das Luzes de Sinalização são configuradas como um AMV no JMRI, veja mais informações no artigo Criando um CCO no Panel Pro do JMRI - Parte 2)

12. Clique uma vez na linha do elemento desejado para selecionar (A), em seguida segure sobre essa linha o botão da esquerda do mouse e arreste para o campo “System/User Name” (B) da tela “Edit Action”.


13. Agora selecionamos na opção “Action Type” qual a ação que queremos para a luz VERDE1, vamos escolher “Set Turnout” para modificar o valor da luz VERDE1.


14. Na opção “Turnout Position” vamos escolher “Thrown” que seria “Ligado”

15. Na opção “Change Option” vamos escolher se essa ação será executada quando a expressão for Verdadeira ou Falsa, no caso vamos escolher “On Change To True” (Verdadeira). Para finalizar clique no botão “Updade” para incluir a ação.


Agora você tem uma ação configurada que liga a luz VERDE1 quando o AMV1 estiver na posição "Closed". Mas quando essa luz será desligada?


Para que a luz VERDE1 seja desligada, vamos incluir uma segunda ação para desligar a luz VERDE1 quando o resultado da expressão for Falso (False).


16. Clique no botão “Add Action” e selecione novamente a luz VERDE1 (Idem Passos 11 e 12) e selecione a opção “Set Turnout” em “Action Type” (Idem passo 13). Na opção “Turnout Position” vamos agora selecionar a opção “Closed” (A) e na opção Na opção “Change Option” vamos escolher “On Change To False” (B).

Para finalizar clique no botão “Updade” para incluir a ação.


Agora a luz VERDE1 será ligada quando o AMV1 estiver na posição “Closed” e desligado quando estiver em “Thrown”.
Painel JMRI com a luz VERDE1 sendo alterada conforme o valor do AMV1



Este foi um exemplo simples do LOGIX, podemos criar regras complexas mas a estrutura será basicamente a apresentada aqui, espero que esse artigo ajuda aos interessados darem os primeiros passos na programação LOGIX do JMRI.