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”.
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™
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.
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.
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.
Estabelecemos 4 Requisitos Funcionais para o programa de controle da válvula:
Permitir carregar e executar um roteiro script contendo a sequência de comandos para a válvula em intervalos de tempo definidos
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).
Verificar a sintaxe dos comandos de um script antes da execução.
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.
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).
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.
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
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™
Comando | Açã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
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: