GPIB no Delphi (placa da National)

Olá humano!

Demora em escrever à parte (ainda estou no final da graduação, peguem leve comigo! rs), vou colocar um pequeno passo, porém pode ser de grande valia para mais alguém, em sobre a comunicação GPIB em Delphi (ou Kylix, ou Lazarus).

Bom para quem não conhece o GPIB (General Purpose Interface Bus), ou ainda HP-IB ou IEEE-488, foi desenvolvido pela Hewlett-Packard (HP) na década de 60, por isso já foi conhecido (naquela época) por HPIB (Hewlett-Packard Instrument Bus), para a interface com seus instrumentos de medição. Alguns anos depois, a HP licenciou este protocolo que foi bastante usado por outros fabricantes de equipamentos de teste e medição. Posteriormente, em 1975, o IEEE (Institute of Electrical and Electronics Engineers) padronizou este barramento.

Cabo GPIB
Figura 01: Cabo GPIB

Bom, após esta breve historia do barramento, podemos dizer que este é usado em muitos equipamentos de bancada que lidamos em nossas vidas. Mas, uma vez que normalmente é uma opção cara, dificilmente o utilizamos. Porém, tanto nos equipamentos mais antigos, que hoje são acessíveis a muitos hobbystas, quanto em alguns equipamentos novos, onde este barramento não é uma opção (invariavelmente esta a disposição no equipamento) e a placa de interface com o computador pode ser encontrada em websites de venda de itens usados (Ebay, MercadoLivre, etc…), esta interface pode se tornar uma boa opção para automatizarmos algumas tarefas da nossa bancada.

Cabe um adendo aqui de que hoje este barramento esta em desuso, sendo que a preferência atual é pelo padrão ethernet ou LXI, que podem ficar para um próximo post, quem sabe. 😉

Agora indo direto ao ponto, o fato é que alguns dos meus equipamentos possuem o barramento GPIB, e ultimamente comprei uma placa para meu computador, que adiciona uma porta GPIB e dois cabos para utilizar em conjunto.

Então uma vez que instalei e configurei a placa no meu computador (uma placa da National Instruments), e conectei esta a minha fonte de bancada (E3649A) tentei trocar algumas informações com a fonte. Usando o software instalado com os drivers da placa (NI MAX), consegui encontrar o equipamento, verificar os dados (modelo, versão de firmware, etc…). Porém a National não fornece mais a biblioteca para trabalhar com este hardware em Delphi. Uma vez que estou acostumado a utilizar a linguagem pascal (podemos usar o Lazarus, uma ‘versão’ free do Delphi), decidi que tentaria encontrar uma forma de fazer um programa em Delphi comunicar com o hardware da National.

Depois de muito pesquisar e não encontrar uma solução na internet (não digo que não exista, mas pelo menos não encontrei mesmo com um bom tempo dedicado a esta pesquisa), estava procurando por documentação no website da National sobre a DLL usada para realizar a comunicação. E após certo tempo tentando ‘traduzir’ os arquivos necessários para usar a DLL em vão, encontrei (meio ao acaso) um application note da National sobre como utilizar a DLL em Delphi 2, de um driver mais antigo (vejam bem, Delphi 2!!), da epoca em que a National ainda fornecia suporte ao Delphi.

Este exemplo da National, mais antigo, fazia uso de uma DLL diferente da que os novos documentos fazem menção. Como fiz o download do programa pronto (em Delphi 2) e consegui abri-lo sem maiores problemas no Delphi 6, resolvi rodar e ver o que aconteceria. O que aconteceu foi que tudo funcionou perfeitamente.

Diante disso, fiz um pequeno programa para verificar se eu conseguiria utilizar outros comandos e tudo funcionou perfeitamente. Com isso resolvi colocar este programa (juntamente com a unit que este utiliza, a dpib32.pas e dpib32.dcu, para download aqui, à quem possa interessar ou precisar).

O programa que coloquei aqui (figura 02), é extremamente simples, possui um campo que mostra ao usuário o histórico da comunicação, um botão que realiza uma pesquisa para detectar quais e quantos equipamentos estão conectados ao barramento, um botão que envia o comando *IDN? que pede para o equipamento se identificar (este comando é enviado no endereço indicado no respectivo campo), e um botão que envia um comando e lê uma resposta do equipamento (equipamento no endereço especificado, e comando digitado pelo usuário).

Tela do programa
Figura 02: Tela do programa

Abaixo coloquei uma imagem (figura 03) do teste que realizei aqui em casa, estando conectados ao barramento meu multímetro e minha fonte de bancada (34401 e E3649A). Neste exemplo a fonte esta no endereço 5 e o multímetro no 22. Ambos respondem sem apresentar erro aos comandos do software.

Exemplo de funcionamento
Figura 03: Exemplo de funcionamento

Bom, é isso. No código fonte do software, está toda a informação (assim como arquivos) necessária para realizar esta programação. Pretendo fazer um software para comunicação com GPIB com mais funcionalidades, e se der certo irei coloca-lo aqui também a disposição de todos!

Deixo também um pedido para quem saiba de programação, para me auxiliar na tradução da nova dll para Delphi. Se alguém se interessar em doar um pouco do tempo e conhecimento para atualizarmos esta API de maneira que possa trabalhar com as novas dll da National (ni4882.dll por exemplo), eu ficaria muito grato.

Bom, ia me esquecendo, a placa que utilizei como já disse é da National Instruments, e o modelo informado é: PCI-GPIB

Até a próxima!

Deixe uma resposta