da Criação de ActiveX para SCADA (Parte 1)
Autor: Pablo Drumond | Publicado: 2011-12-06T19:30:00-02:00


1.&nbsp;ActiveX, que [coisa] é essa?

ActiveX é um modelo para construção de componentes padronizado pela Microsoft.&nbsp; Esse padrão define como a interface (interação e comunicação) entre controle e container (sistema que hospeda o componente) deve ser realizada.


2.&nbsp;Não entendi [coisa] nenhuma, qual é o objetivo?

Uma vez que os principais sistemas de supervisão (InTouch, WinCC, FactoryTalk, iFix) desempenham o papel de container, a reutilização é o primeiro objetivo para construção de ActiveX, ou seja, o esforço de criação é realizado uma única vez e o componente pode ser reaproveitado nos demais sistemas SCADA.


3.&nbsp;Ferramenta (VB6 versus .NET)
Esse&nbsp;post é direcionado para criação de componentes ActiveX em Visual Basic 6. Algumas pessoas questionarão a velhice do VB6. Para estas a minha resposta: o VB6 ainda resolve muitos problemas na automação, mais especificamente, nos sistemas de supervisão. No caso .NET o mesmo desenvolvimento é, definitivamente, mais complexo, uma vez que deve ser construída uma DLL COM em vez de um OCX (pode ser tema de outro post).

4.&nbsp;Desenvolvimento
Para acompanhar esse post será necessário uma máquina virtual com o Visual Basic 6 Service Pack 6 instalado, dessas que muitos, porém nem todos, já providenciaram junto ao revendedor não autorizado Microsoft. 
A ideia será criar um controle que realize as operações de uma válvula On/Off. Na prática, esse componente deverá ser utilizado apenas para fins didáticos.

4.1.&nbsp;Criação do Projeto
Seria muito enfadonha a elucidação tela-a-tela para a construção de um ActiveX e não retornaria resultados expressivos, dessa forma, visando maximizar a produção de posts, o método sucinto de explicação já amplamente praticado pelos profissionais de meu convívio será utilizado. Da mesma maneira, as rotineiras expressões “como exibe a figura abaixo”, “como mostra a figura abaixo”, “como apresentado na figura abaixo” serão evitadas.


Passo 1: Na interface “New Project” selecione “ActiveX Control”.




Passo 2: Renomear o projeto para IHMControls.



Passo 3: Renomear o controle para “IHMFlowValve”.


Passo 4: Adicionar e renomear um controle Shape;


Passo 5: Redimensionar o formulário para o tamanho exato do componente. 



Passo 6: Adicionar o código que redimensiona, automaticamente, o shape de acordo com o tamanho do formulário configurado pelo usuário final. E, importante, não se deixe confundir pelas longas frases deste post, o lado Saramago será largamente utilizado.



4.2.&nbsp; Propriedades
As propriedades CorAberta e CorFechada deverão ser criadas para permitir a ferramenta SCADA definir as cores associadas aos estados da válvula sem a necessidade de modificação do código-fonte do ActiveX.&nbsp; 
Para realização dessa etapa, adicionar a lógica abaixo. Repare a dupla de procedimentos (Get e Let) para cada propriedade. Get é responsável por fornecer ao container (SCADA) o valor armazenado da propriedade, enquanto Let é responsável por receber do container (SCADA) o valor desejado para a mesma propriedade.


4.3.  Métodos
Análogo às características (propriedades) da válvula, existem as ações (métodos) realizadas pelo componente. Para implementação dos métodos Abrir e Fechar, adicionar a lógica abaixo. Repare que o escopo desses métodos precisará ser público, uma vez que deverão ser chamados pelo sistema de supervisão. Para verificação do estado da válvula duas propriedades somente leitura (não possuem Let) serão adicionadas. 


4.4.&nbsp; Eventos
Para finalizar a comunicação do componente com o container, deverá ser adicionado o evento OnChange, lançado sempre que a válvula modificar seu estado. Essa é a maneira que o controle divulga ao sistema de supervisão um acontecimento relevante em seu interior. Repare que a implementação dos métodos Abrir e Fechar deverá ser modificada.


Para concluir o desenvolvimento do controle, adicionar o estado inicial da válvula no método nativo Initialize.



4.5.&nbsp; Compilação
Para compilar o projeto e obter o arquivo OCX, proceder com a operação Make disponível no menu File.



4.6.&nbsp; Registro
Para registrar o componente, siga os seguintes passos:
1.&nbsp;Copiar o arquivo com extensão OCX gerado no item anterior para a pasta C:\IHM\Componentes;
2.&nbsp;Criar um arquivo com extensão BAT, com o conteúdo: 
regsvr32 C:\IHM\Componentes\IHMControls.ocx /s
pause
3.&nbsp;Copiar a pasta e executar o arquivo de lote em todas as estações de operação e engenharia que usarão o controle produzido.



5.&nbsp;ActiveX no Wonderware InTouch
Para usar o controle no Wonderware InTouch, proceda de acordo com as figuras e passos abaixo:
Passo 1: Adicionar o ActiveX no InTouch local, repare que essa configuração deve ser realizada por estação de engenharia, não para cada projeto InTouch, ou seja, se outra aplicação InTouch for criada na mesma máquina, esse controle já estará disponível.


Passo 2: Selecionar e instalar o item IHMControls.IHMFlowValve;



Passo 3: Adicionar uma instância do controle na Window, através do clique no ícone destacado.


Passo 4: Calma, o controle estará preto porque o valor das propriedades CorAberta e CorFechada é 0, entretanto, esse conteúdo poderá ser modificado associando uma tag através da interface que o InTouch disponibiliza, ou atribuindo um literal através de um script.
Tópico especial sobre cores: para configurar o número das cores converter os três bytes (R, G e B; sendo R o byte menos significativo e B o byte mais significativo) para decimal.



Passo 5: Para tratar a mudança de estado da válvula, um script do InTouch poderá ser associado ao evento OnChange do controle, criado previamente.



Passo 6: Através da interface de implementação de scripts do InTouch é possível visualizar todas as propriedades e métodos dos componentes, até mesmo as somente leitura.



Passo 7: Para testar a chamada dos métodos, adicionar dois botões Abrir e Fechar nativos do InTouch e acrescentar o código abaixo.



6.&nbsp;ActiveX no Siemens WinCC
Para usar o controle no Siemens WinCC, proceda de acordo com as figuras e passos abaixo:

Passo 1: Acessar a interface para adição de componentes através do frame Object Palette.





Passo 2: Selecionar e adicionar o controle IHMControls.IHMFlowVale à paleta de objetos.




Passo 3: Modificar o valor das propriedades através da interface disponibilizadas pelo WinCC.


Passo 4: Será possível, também, associar um script (VBS, C) ao evento de modificação de estado da válvula. Quanta simplicidade, se imaginarmos alemães programando!



Passo 5: Para testar a chamada dos métodos, adicionar dois botões Abrir e Fechar nativos do WinCC e acrescentar o código abaixo.