19. Controle Automatizado de uma Válvula Multiposição VALCO™.

Nesta seção vou mostrar o uso da linguagem Tcl/Tk para a automação de uma Válvula Multiposição da empresa VALCO™. Um equipamento muito versátil para a Automação em Laboratório.

Este trabalho teve como objetivo inicial automatizar a coleta de frações de água eluída de uma coluna preenchida com carvão ativo, como parte de um estudo do uso de carvão ativo para o tratamento de água.

Mas pode também ser usado para automatizar a coleta de frações de qualquer sistema cromatográfico ou, quando associado a uma bomba peristáltica, para coleta de frações em biorreatores.

É um exemplo bem ilustrativo do uso de Software Livre para a automação em um Laboratório de Águas.

Nota

Gostaria de esclarecer que esta válvula foi usada porque era o equipamento disponível no momento, no nosso laboratório. Ou seja, não estou fazendo propaganda ou recomendando o uso desta marca/modelo!

Existem também outros recursos para comutar fluxos de líquidos, dentre eles podemos citar a Válvula de Seleção de Fluxo da empresa BIOCHEM-Valve

19.1. Conhecendo a Válvula Multiposição Cheminert da VALCO™.

A empresa VALCO produz vários modelos de válvula multiposição para diversas aplicações.

Neste trabalho utilizamos uma válvula Cheminert de baixa pressão com 10 posições e tubo de Teflon™ de 1/8".

Essa válvula é controlada por um Módulo de Controle (atuador) que funciona como uma interface bidirecional entre um computador e a válvula.

Figura 128. Válvula multiposição com a interface de controle e o conector serial para comunicação com o PC.

Válvula multiposição com a interface de controle e o conector serial para comunicação com o PC.


A interface de controle recebe instruções ASCII pela porta serial RS232 de um computador e converte as instruções de alto nível em comandos no código BCD para o motor de passo que controla a válvula.

Dica

Mas felizmente não precisamos entender toda essa eletrônica! :^)

Basta conhecer a lista de comandos e mensagens ASCII que vamos usar para controlar a válvula através da nossa interface em Tcl/Tk.

O manual da Interface de Controle, com a lista dos comandos ASCII, está disponível para download no site do fabricante ou no nosso site.

Providenciamos a montagem desses componentes em uma estrutura de alumínio para uso na bancada do laboratório.

Figura 129. Montagem da válvula (com tubos de Teflon™), interface de controle, fonte de alimentação e controlador manual em um único módulo.

Montagem da válvula (com tubos de Teflon™), interface de controle, fonte de alimentação e controlador manual em um único módulo.


19.2. Desenvolvimento do Programa de Controle

Estabelecemos 4 Requisitos Funcionais para o programa de controle da válvula:

  1. Permitir carregar e executar um roteiro script contendo a sequência de comandos para a válvula em intervalos de tempo definidos

  2. Registrar os eventos do início ao término da execução de um script permitindo a criação de um arquivo de registro (log).

  3. Verificar a sintaxe dos comandos de um script antes da execução.

  4. Configurar o número da porta serial na qual está conectada a válvula e testar a comunicação antes da execução de um script.

19.2.1. Interface Gráfica

Com base nos requisitos funcionais elaboramos um projeto de interface gráfica com uma única tela.

Na figura seguinte mostramos o projeto de interface gráfica com a descrição dos principais elementos gráficos (Widgets).

Figura 130. Projeto da interface gráfica para o programa de controle da válvula multiposiçao.

Projeto da interface gráfica para o programa de controle da válvula multiposiçao.


Para criar essa interface usamos 3 frames principais (1, 2 e 3) e dividimos o frame 2 em dois frames filho (2a e 2b). O labelframe 2a foi chamado de PROGRAMA e serve para exibir o script a ser executado e o labelframe REGISTRO exibe os eventos (log), conforme mostra a figura seguinte.

Figura 131. Principais frames da interface gráfica.

Principais frames da interface gráfica.


Durante o desenvolvimento resolvemos incluir no labelframe PROGRAMA os botões Abrir e Gravar para permitir a exibição e edição simultânea do script sem precisar de um editor externo.

Na listagem abaixo, mostramos uma parte do programa referente à criação da interface gráfica:

set mensagem1 "Amostragem Automatizada em Colunas de Carvão (VMULT)"

set mensagem2 "Estado Atual:"

#Criação dos frames .f1, .f2 e .f3 que vão organizar os elementos da interface

set frame_topo [frame .f1]

set frame_int [frame .f2]

set frame_botoes [frame .f3]

set frame_int_esq [labelframe $frame_int.esq -font $fonte_media -text "PROGRAMA"]

#Frame intermediário do lado esquerdo para os botões "Abrir" e "Gravar"
set frame_int_esq_bot [frame $frame_int_esq.bot ]


set frame_int_dir [labelframe $frame_int.dir -font $fonte_media -text "REGISTRO"]

#Frame intermediário do lado direito para os botões "Abrir" e "Gravar"
set frame_int_dir_bot [frame $frame_int_dir.bot ]


#Label com o nome do programa 

set nome_programa [label $frame_topo.msg -font $fonte_grande \
    -text "$mensagem1"]

#Label com informações atualizadas sobre o andamento do script.

set status_programa [label $frame_topo.status -font $fonte_grande \
    -textvariable mensagem2]

#Botões "Abrir" e "Gravar" do labelframe PROGRAMA, da esquerda, para permitir
#abrir e gravar um programa.

set abrir_programa [button $frame_int_esq_bot.abrir_prog \
    -font $fonte_media -text "Abrir  " ]

set gravar_programa [button $frame_int_esq_bot.gravar_prog \
    -font $fonte_media -text "Gravar" ]

set ajuda_programa [button $frame_int_esq_bot.ajuda_prog \
    -font $fonte_media -bg #3baed9 -text "Ajuda" -command ajuda]

#Botões "Abrir" e "Gravar" do labelframe REGISTRO, da direita, para permitir
#abrir e gravar um registro (log).

set abrir_registro [button $frame_int_dir_bot.abrir_reg \
    -font $fonte_media -text "Abrir  "]

set gravar_registro [button $frame_int_dir_bot.gravar_reg \
    -font $fonte_media -text "Gravar"]


#Texto para exibição do programa a ser executado

set frame_texto_esq [frame $frame_int_esq.f]

set texto_programa [text $frame_texto_esq.texto -font $fonte_pequena \
    -height 10 -width 35 -spacing1 10 -yscrollcommand "$frame_texto_esq.rol set"]

set rolagem_texto_programa [scrollbar $frame_texto_esq.rol \
    -command "$texto_programa yview"]

$abrir_programa configure -command [list abrir_arquivo $texto_programa]
$gravar_programa configure -command [list gravar_arquivo $texto_programa]

#Texto para exibição do registro dos eventos (log)

set frame_texto_dir [frame $frame_int_dir.f]

set texto_registro [text $frame_texto_dir.texto -font $fonte_pequena \
    -height 10 -width 35 -spacing1 10 -yscrollcommand "$frame_texto_dir.rol set"]

set rolagem_texto_registro [scrollbar $frame_texto_dir.rol \
    -command "$texto_registro yview"]

$abrir_registro configure -command [list abrir_arquivo $texto_registro]
$gravar_registro configure -command [list gravar_arquivo $texto_registro]

#Botões para controle do programa

set botao_sair [button $frame_botoes.sair -font $fonte_media -bg #3baed9 -text "   Sair   " \
    -command exit]

set botao_parar [button $frame_botoes.parar -font $fonte_media -text "  Parar  " \
    -command [list parar $texto_registro]]

set botao_configurar [button $frame_botoes.configurar -font $fonte_media -text "Conexão" \
    -command configurar]

set botao_verificar [button $frame_botoes.verificar -font $fonte_media -text "Verificar" \
    -command [list verificar_programa $texto_programa $texto_registro]]

set botao_executar [button $frame_botoes.executar -font $fonte_media -text " Executar "]

$botao_executar configure -command " \
[list desabilitar_botoes $botao_configurar $botao_verificar $botao_executar]; \
[list executar_programa $texto_programa $texto_registro]; \
[list habilitar_botoes $botao_configurar $botao_verificar $botao_executar];"

pack $nome_programa

pack $status_programa

pack $ajuda_programa $abrir_programa $gravar_programa -side right -padx 10 -pady 10

pack $texto_programa $rolagem_texto_programa -side left -expand yes -fill y

pack $frame_texto_esq -side bottom

pack $abrir_registro $gravar_registro -side right -padx 10 -pady 10

pack $texto_registro $rolagem_texto_registro -side left -expand yes -fill y

pack $frame_texto_dir -side bottom

pack $frame_int_esq_bot -side top

pack $frame_int_dir_bot -side top

pack $frame_int_esq $frame_int_dir -side left -expand yes

pack $botao_sair $botao_parar $botao_configurar $botao_verificar $botao_executar -side left -expand yes

pack $frame_topo -side top

pack $frame_int -expand yes -fill x

pack $frame_botoes -side bottom -expand yes -fill x

Figura 132. Interface gráfica final do programa vmult.tcl

Interface gráfica final do programa vmult.tcl


19.2.2. Comunicação Serial

Na página 7 do manual da interface (ou controlador) da válvula multiportas você encontra uma lista completa com todos os comandos para comunicação co com a válvula.

Na tabela seguinte selecionei apenas os comandos principais que utilizamos:

Tabela 7. Lista dos principais comandos seriais (ASCII) para o controle da Válvula Multiposição Valco

ComandoAção
NP<enter>Retorna o número de posições para o qual o atuador está configurado
NPnn<enter>Define o número de posições (nn) da válvula
CWnn<enter>A válvula gira no sentido horário até a posição nn
CCnn<enter>A válvula gira no sentido anti-horário até a posição nn
GOnn<enter>Válvula gira até a posição nn, seguindo o caminho mais curto
CP<enter>Retorna a posição atual da válvula

Dentre todos os comandos disponíveis usamos apenas dois: GOnn<enter> e CP<enter>

Segundo o manual do equipamento a porta serial deve ser configurada com os seguintes parâmetros de comunicação serial:

  • 9600 baud (padrão)

  • sem paridade (no parity)

  • 8 bits de dado

  • 1 bit de parada

19.2.3. Programa VMULT para o controle automatizado de uma Válvula Multiposição VALCO™.

O programa completo está disponível no link: vmult.tcl.

O pacote Starpack (para Linux) do programa de controle VMULT foi criado seguindo, como exemplo, o procedimento descrito na seção Procedimento para criação de um executável Starpack para Linux e está disponível no link: VMULT

Espero que este material possa ser útil.

Sugestões, dúvidas e críticas podem ser encaminhadas para:

Figura 133. Email para contato:

Email para contato: