Desenvolvendo aplicações orientadas a objetos no Elipse E3 – Parte II.

1) Introdução

A parte I deste artigo apresentou a maneira correta de criar associações para animação dos controles de tela. Na parte II, será discutida a melhor estratégia para o desenvolvimento de uma aplicação para uma planta industrial imaginária.

2) Descrição da planta

A planta deste exemplo consiste em dois tanques, cada um deles com uma válvula para a entrada de líquido e uma bomba para a saída. O tanque será enchido quando a válvula for aberta através de um clique do mouse, e será esvaziado com um clique sobre a bomba de saída. Ao ser aberta, cada válvula ficará verde e apresentará a legenda “Open”. Caso contrário, ela ficará vermelha e apresentará a legenda “Closed”. Já o objeto bomba ficará verde e apresentará a legenda “On” quando aberto, e ficará vermelho e apresentará a legenda “Off” quando fechado. A figura a seguir ilustra o sinótico da planta.


Figura 1: Planta industrial de dois tanques

3) Desenvolvendo a biblioteca de objetos

Ao desenvolver um aplicação no E3, o primeiro passo é determinar quais funcionalidades do processo serão repetidas e também podem ser transformadas em objetos do E3.

Nesta aplicação, vemos claramente os objetos de tela que são repetidos: tanques, bombas, válvulas e tubos. Após a identificação dos objetos, é necessário definir cada uma de suas funcionalidades e propriedades, além do seu desenho.

Também é necessário que a lógica de funcionamento dos tanques seja executada no servidor. Esta lógica está definida no XObject chamado TankLogic.

Vejamos a seguir como cada um destes objetos será construído.


Criando o XObject TankLogic

Inicialmente, criaremos um projeto chamado Plant com uma biblioteca chamada PlantLib. A biblioteca PlantLib contém as definições dos XObjects e XControls. O projeto Plant contém os objetos executados no servidor e as telas do Viewer.

O objeto TankLogic (Figura 2) terá três propriedades para controle do processo de um tanque: ValveOpened, que informa se a válvula de entrada do tanque está aberta ou fechada; Meter, que informa o nível de líquido do tanque; e PumpActivated, que reporta se a bomba de saída do tanque está ligada ou desligada.

DICA: preencha a coluna Texto de Ajuda de cada propriedade adicionada a um ElipseX (Figura 2); este texto será mostrado no AppBrowser, auxiliando futuramente na manutenção da aplicação.

Para os propósitos deste artigo, não discutiremos os detalhes de implementação do objeto; é necessário saber apenas que quando a propriedade ValveOpened for True, o tanque começa a encher até que a propriedade Meter chegue ao limite de 100 unidades. Quando a bomba de saída é ligada  através da propriedade PumpActivated, o tanque é esvaziado. Com a bomba ligada e a válvula aberta, a propriedade Meter continua com valor constante.


Figura 2: Definição do objeto TankLogic

Criando o XControl Tank

O objeto Tank é composto pelo desenho do reservatório e mais dois mostradores da quantidade de líquido, um que mostra uma barra vertical analógica e outro com o valor em toneladas presente no tanque (Figura 3).


Figura 3: Objeto Tank

Para demonstrar a flexibilidade das bibliotecas ElipseX, vamos dividir o objeto Tank em duas partes: uma contendo apenas o desenho do reservatório e a outra contendo o desenho dos mostradores. Com isso, podemos ver que um objeto ElipseX pode ser construído usando outros objetos previamente criados.


Figura 4: Definição da propriedade Value do objeto Gauge

O objeto Gauge contém os mostradores e possui uma propriedade chamada Value (ver Figura 4), que será usada para animar os controles internos do objeto. O desenho do objeto Gauge está na Figura 5.


Figura 5: Associações do objeto Gauge

Observe que os dois objetos que formam o Gauge estão associados à sua propriedade Value. Isto é, quando a propriedade Value do Gauge for modificada, este valor será automaticamente enviado para os dois objetos associados a esta propriedade. Depois disso, veremos o objeto Tank, que é composto de um desenho de um reservatório mais o objeto Gauge (Figura 6).


Figura 6: Definição do XControl Tank

Agora é preciso pensar nas propriedades deste objeto. Para isto, existem duas possibilidades: a primeira é adicionar uma propriedade do tipo Integer e associá-la à propriedade Value do objeto Gauge1. A segunda é criar uma propriedade do tipo TankLogic e associar a propriedade Value do objeto Gauge1 à propriedade Meter do TankLogic. Neste exemplo, demonstraremos como efetuar a segunda opção (Figura 7).


Figura 7: Propriedade TankLogic do objeto Tank

Agora basta associar a propriedade Value do objeto Gauge1 à propriedade Meter do TankLogic do objeto Tank (Figura 8). Esta é a maneira com que o objeto Gauge1 irá acessar as propriedades do objeto externo associado à propriedade TankLogic, que é um objeto do tipo TankLogic.


Figura 8: Associações do objeto Tank

Criando o XControl Valve

O objeto Valve é composto por um desenho de uma válvula que fica vermelha quando fechada e verde quando aberta. Ao clicar no objeto, ele inverte o estado atual da propriedade ValveOpened do objeto TankLogic associado, fazendo com que a válvula seja então aberta ou fechada.

O primeiro passo para a construção deste objeto é a criação de uma propriedade chamada TankLogic do tipo TankLogic, fazendo com que este objeto possa ser associado a um objeto TankLogic do servidor.


Figura 9: Propriedade TankLogic do objeto Valve

Após, temos o desenho do objeto Valve e suas associações (Figura 10), onde podemos observar que tanto o objeto Texto1 quanto a Figura1 foram associados à propriedade ValveOpened do TankLogic da Valve.


Figura 10: Associações do objeto Valve

Agora precisamos de um script que faça com que a propriedade ValveOpened do TankLogic seja invertida ao clicar na válvula. Isto é feito através de um script no evento Click() do objeto Figura1 (como visto na Figura 11).


Figura 11: Script no evento Click do objeto Figura1 do objeto Valve

Criando o XControl Pump

O objeto Pump é bastante semelhante ao objeto Valve, mas com duas diferenças: seu desenho é uma bomba, e ele inverte a propriedade PumpActivated do objeto TankLogic (Figura 12).


Figura 12: Associações do objeto Pump

4) Construindo a aplicação

Uma vez pronta a biblioteca, é necessário utilizar os objetos criados e inseri-los em um projeto. Para isto, basta criar os objetos no projeto Plant conforme desejado. Como a aplicação tem dois tanques, precisamos de dois simuladores do processo de tanques, portanto é necessário também criar dois objetos TankLogic na pasta Dados do servidor (Figura 13).


Figura 13: Objetos TankLogic instanciados no servidor

Estes dois objetos, TankLogic1 e TankLogic2, serão depois associados aos objetos de tela, que farão a interface com o usuário para a abertura/fechamento da válvula e ligamento/desligamento da bomba.

Na TelaInicial, incluiremos os objetos de tela criados na biblioteca, como os tanques, bombas e válvulas, além dos tubos (Figura 14). Cada objeto destes será associado a seu respectivo TankLogic.


Figura 14: Inserindo o objeto Tank na tela

Na última etapa do desenvolvimento deste aplicativo, associe os objetos de tela aos seus respectivos objetos TankLogic (Figura 15).


Figura 15: Associando o objeto Tank1 ao Dados.TankLogic1

Vemos assim como é fácil criar e manter aplicações que utilizam os recursos das bibliotecas do E3. Uma vez criada a biblioteca, basta então criar os objetos e associá-los, o que torna o trabalho mais simples.

Note que a biblioteca contém apenas as definições, e não os objetos em si, sendo necessário inseri-los no projeto e configurar suas propriedades para que funcionem do modo desejado.

5) Conclusão

Vimos nesta aplicação como é simples e rápida a criação de objetos funcionais com o uso das bibliotecas do E3. Com elas, não é mais preciso criar a aplicação toda desde início, pois é possível reaproveitar objetos que tenham sido criados em outras aplicações.

 

Artigos Relacionados


Este artigo foi útil? Was this post helpful?
Yes0
No0

Comentários em “Desenvolvendo aplicações orientadas a objetos no Elipse E3 – Parte II.

  1. Jéssica, o objeto Gauge é um XControl, e a propriedade Value deve ser criada na aba Propriedades (Conforme Figura 4: Definição da propriedade Value do objeto Gauge).

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *