Você está na página 1de 8

Desenvolvendo bibliotecas no E3.

1) INTRODUÇÃO

O uso de bibliotecas no E3 é altamente recomendável, pois elas representam


um grande ganho de produtividade para a aplicação. Algumas das vantagens da
utilização dos ElipseX são:
 Reutilização de código.
 Minimização de testes durante o desenvolvimento.
 Criação de interface padrão para os objetos desenvolvidos.
 Diminuição do tempo de desenvolvimento de novos projetos.
 Proteção do conteúdo do projeto.

2) QUANDO CRIAR UMA BIBLIOTECA DE OBJETOS

O uso de biblioteca é recomendado na maioria das aplicações. Entretanto,


alguns critérios indicam a necessidade da construção de objetos:
 Repetição no uso: quando um mesmo equipamento ou processo será
utilizado mais de uma vez no mesmo projeto.
 Procedimentos do conhecimento do usuário: frequentemente, um
processo criado por determinada empresa deve ser protegido de cópia ou
alteração. Isso é comum no caso de integradores de serviços ou
fabricantes de máquinas.
 Uso de controladores: um controlador de processo, cujo mapeamento de
memória é fixo, pode ser implementado com todas as funcionalidades
disponíveis. A flexibilidade disponível para a construção e uso dos objetos
no E3 permite que sejam utilizadas posteriormente apenas as variáveis
de interesse, desprezando-se as demais.

3) ESTUDO DE CASO
Para ilustrar o uso de bibliotecas no E3, criaremos o controle de um motor, cujos
dados são:
 Um tag para temperatura de operação.
 Um tag de emergência, para bloqueio do funcionamento do motor.
 Um tag de comando para ligar e desligar o motor.
Tanto o comando quanto o status do motor devem ser mostrados através de
displays e da mudança da cor do corpo. Além disso, os tags a serem utilizados
para o comando do motor devem ser externos à biblioteca.

Criando o Projeto

Primeiramente, crie um aplicativo padrão através do Assistente de


Aplicações do E3. Ao ser perguntado sobre drivers, armazenamento e alarmes,
responda "não" em todos os casos.

Criando um XObject

A seguir, crie uma nova biblioteca de componentes chamada Motores, e insira


um novo XObject chamado LibMotorDados nesta biblioteca. O XObject é um
objeto de dados e não possui interface, ou seja, ele não pode criar uma caixa de
mensagens para algum evento, por exemplo. Para estabelecer a interface com
o usuário, veja a criação do XControl.

Insira um servidor de dados no objeto LibMotorDados, e renomeie-o


como Dados. Dentro dessa pasta, insira um tag do tipo Demo e edite os
seguintes itens:
 Name: TemperaturaMotor
 Type: 0 - Aleatório
 Maximum: 100
 Period: 1000
 Scan: 1000
Esse tag retorna a temperatura de operação do motor.
A seguir, crie as seguintes propriedades, que serão utilizadas para comando e
retorno de status do motor através de um duplo clique sobre o XObject:
 LigaDesliga (Boolean)
 Estado (InternalTag)
 Temperatura (Integer)
 Emergencia (InternalTag)
Estas propriedades serão utilizadas para modificar o comportamento do motor
quando o projeto estiver sendo executado.

No tag TemperaturaMotor, crie uma associação entre a propriedade Value e o


item LibMotorDados.Temperatura.

Sempre que determinado valor interno de um XObject precisar ser


disponibilizado para ser acessado externamente, será necessário criar uma
associação sobre o dado a ser disponibilizado com a propriedade criada para
esse dado. Para isso, a associação deve seguir o
padrão NomeDoXObject.Propriedade.

Depois, configure a seguinte restrição ao funcionamento do motor: a


propriedade LigaDesliga deverá ser utilizada para comandar o ligamento ou
desligamento do motor. Entretanto, o motor só poderá ser ligado se o valor da
propriedade Emergencia for "1". Caso contrário, o motor não poderá ser ligado.

Para implementar essa restrição, clique com o botão direito sobre a


propriedade LigaDesliga e acesse as outras propriedades. No
evento OnPropertyChanged, crie o script mostrado abaixo:
IF LibMotorDados.LigaDesliga = true then
IF LibMotorDados.Emergencia = 1 then
LibMedidores.Estado.Value = 1
End IF
ELSE
LibMedidores.Estado.Value = 0
End IF
Salve o objeto e registre a biblioteca com um clique com o botão direito. Para
ilustrar o uso da biblioteca sem um XControl, vamos trabalhar sobre o projeto
que já foi criado, acessando as propriedades através de botões e scripts. Em
seguida, criaremos um objeto de controle para o motor que estamos
desenvolvendo.

Utilizando o XObject no projeto

Para começar, insira uma pasta chamada Motor1 dentro da pasta Dados criada
na aplicação-padrão. Dentro dessa pasta, crie dois tags internos com o
nome EmergenciaMotor1 e EstadoMotor1.

A seguir, insira um objeto LibMotorDados no projeto. Faça associações entre a


propriedade Emergencia e o tag EmergenciaMotor1 e entre a
propriedade Estado e o tag EstadoMotor1.

Na TelaInicial criada no projeto, insira displays e um botão de comando


conforme a figura abaixo.

Figura 1: Tela de controle do Motor1

Para as propriedades Temperatura e Estado, devem ser usados displays; já


para Emergencia, utilize um setpoint.

O display utilizado para a propriedade Estado deve ser associado à


expressão LibMotorDados1.Estado.Value (essa expressão ficará em
vermelho quando mostrada na aba de conexões). Já o botão de
comando LigaDesliga deve ter um script do tipo Inverter Valor que aponte para
a propriedade LigaDesliga, e cujos valores sejam False e True.
Os dois displays inferiores que indicam se o script está funcionando são
auxiliares. Para isso, o primeiro display deverá apontar para a
expressão Dados.LibMotorDados1.LigaDesliga, e o segundo para a
expressão Dados.Motor1.EstadoMotor1.Value. Estes displays não existem no
objeto de controle definitivo.

Para verificar a funcionalidade do objeto LibMotorDados, execute o projeto,


modifique a variável Emergencia entre 0 e 1, e tente ligar ou desligar o motor.

Criando um XControl

Como interface para o motor que está sendo desenvolvido, será utilizado um
item da aba biblioteca Symbol Factory, que está na pasta Motors. A figura a
ser utilizada é a 3DISAMotor1, que é a primeira figura da biblioteca. Isso permite
que o exemplo aqui descrito seja desenvolvido mesmo com o E3Studio no modo
Demo.

Figura 2: XControl LibMotor

Para implementar associações e ações, crie o esqueleto do objeto. Para definir


a propriedade Motor desse XControl como sendo do tipo LibMotorDados, digite
o nome completo do tipo, ou clique o botão direito para navegar entre os tipos
disponíveis. Essa definição de tipo é importante, pois será necessário utilizar
todas as propriedades definidas para o objeto LibMotorDados, como por
exemplo, a propriedade Emergencia.

Para o motor 3DISAMotor1, a propriedade OverrideFillMode deve ser ajustada


como 2 - SolidFill, e a cor de preenchimento ser verde, cujos valores são 87,
255, 87.

O valor do display deve ser associado à


expressão LibMotor.motor.Temperatura, onde:
 LibMotor: nome do XControl.
 Motor: propriedade que indica qual a fonte dos dados a serem mostrados.
 Temperatura: característica da propriedade Motor, que é um dado do
tipo LibMotorDados.
Qualquer associação ou script a ser criado em um XControl deve seguir o padrão
mostrado acima.

O script do botão Liga/Desliga deve ser o seguinte:


IF LibMotor.motor.Emergencia = 1 then
LibMotor.motor.LigaDesliga = NOT LibMotor.motor.LigaDesliga
IF LibMotor.motor.LigaDesliga = true then
LibMotor.motor.Estado.Value = 1
Else
LibMotor.motor.Estado.Value = 0
LibMotor.motor.LigaDesliga = false
End IF
Else
MsgBox "Motor não pode ser acionado!! Verifique se existem defeitos!!"
End IF

A figura 3DISAMotor1 deve ter associada a sua


propriedade OverrideFillColor através de uma conexão por tabela, a
expressão LibMotor.motor.Emergencia*2+LibMotor.motor.Estado.Value,
que deverá ter as seguintes faixas de valores:
 Valor mínimo e máximo = 2 (cor verde)
 Valor mínimo e máximo = 3 (cor vermelha)
 Valor mínimo = 0 e máximo = 1 (cor amarela, piscando com azul)
Esses são os possíveis resultados da expressão associada à
propriedade OverrideFillColor. Então, salve a biblioteca e registre-a. Para
visualizar o uso do XControl desenvolvido, vá até o projeto criado anteriormente
e, na TelaInicial, insira um objeto LibMotor. Na sua propriedade Motor, associe
o XObject LibMotorDados1. Execute o projeto e verifique o resultado. Perceba
que o setpoint para a variável Emergencia deve ser mantido, visto que o tag não
está dentro dos objetos desenvolvidos.

4) CONSIDERAÇÕES FINAIS

O uso de tags dos tipos interno e demo auxiliam no entendimento do mecanismo


para construção dos objetos. Entretanto, é possível usar qualquer tipo de tag
(por exemplo, um tag PLC ou um tag OPC) para este mesmo propósito.

Existem duas maneiras de adquirir ou controlar tags de equipamentos com os


XObjects: colocar o driver de comunicação e todos os tags internamente ao
objeto, ou criar os tags externamente e associar cada um deles a uma
propriedade do XObject. O que vai definir a escolha entre essas possibilidades
é a quantidade de IODrivers disponíveis e o tipo de uso que se fará do objeto.

Por exemplo, para aquisição de dados de um controlador de temperatura, pode-


se usar o IODriver internamente ao XObject, pois todos os tags são relacionados
ao próprio controlador. Já para disjuntores de uma subestação, é preferível criar
os tags externamente e então criar links para os tags no XObject, pois
normalmente os dados de uma remota (CLP para área elétrica) são agrupados
em uma mesma saída (rede Ethernet ou porta serial, por exemplo) e devem ser
tratados separadamente. A mesma lógica se aplica para fórmulas ou históricos,
que deverão ser mantidos em bancos de dados.
Como visto nesse exemplo, um XObject pode servir como propriedade de um
outro XObject ou mesmo de um XControl.

É importante evitar que uma biblioteca utilize recursos da aplicação, para que
não seja necessário alterar a biblioteca quando for utilizar em outro projeto. Por
exemplo, se a biblioteca utilizar um histórico, pode-se passar o banco de dados
como parâmetro, ou seja, o histórico pode ser salvo em qualquer banco de
dados, desde que esse seja usado como parâmetro na biblioteca.

Outros exemplos de bibliotecas estão disponíveis no projeto Demo que


acompanha a instalação completa do Elipse E3.