Desenvolvimento - Delphi

Controle de dispositivos externos através da porta paralela utilizando Delphi

Em um artigo já publicado no Linha de Código eu mostro como acessar dispositivos externos através da porta paralela utilizando C#. Devido ao grande número de e-mails recebidos solicitando em como fazer o mesmo utilizando outras linguagens de programação, decidi estender o artigo começando pelo Borland® Delphi.

por Eric Cavalcanti



Em um artigo já publicado no Linha de Código eu mostro como acessar dispositivos externos através da porta paralela utilizando C#. Devido ao grande número de e-mails recebidos solicitando em como fazer o mesmo utilizando outras linguagens de programação, decidi estender o artigo começando pelo Borland® Delphi. Recomendo a leitura do artigo Controle de dispositivos externos através da porta paralela utilizando C#, que contém um pouco de teoria sobre a porta paralela, o hardware necessário para testar a aplicação, assim como a DLL que iremos utilizar em nosso programa e onde podemos adquiri-la.

Aplicativo

Nosso software deverá ser um aplicativo win32, isso é uma observação importante pois o Delphi 8 não gera aplicativos win32, apenas aplicativos .NET. Para o Delphi 2005 e 2006 você deve criar uma aplicação do tipo VCL Forms Application – Delphi for Win32. Em nosso artigo estaremos utilizando o Borland® Delphi 7.

Vamos então ao desenvolvimento do nosso software. Inicie o Delphi, crie uma nova aplicação win32 acessando File> New> Application e deixe nosso formulário conforme a figura abaixo.

Salve a unit como Uautomacao.pas e o projeto como automacao.dpr. Agora adicione as seguintes linhas de código na seção implementation:

procedure Escrever(endereco:integer;valor:byte); stdcall; external "inpout32.dll" name "Out32";
function Ler(endereco:integer):byte; stdcall; external "inpout32.dll" name "Inp32";
Embora o nosso projeto utilize apenas o método de escrita (enviar dados para um dispositvo externo), decidi importar também o método de leitura. Podemos perceber que os endereços são do tipo inteiro e o valor escrito/lido do tipo byte. Dessa forma podemos garantir que o valor lido/escrito estará sempre entre 0 e 255.

Como não encontrei no Delphi uma maneira fácil de converter uma string que representa um número binário em um inteiro, utilizei a seguinte função encontrada no endereço http://www.swissdelphicenter.ch/torry/showcode.php?id=442 e que deve ser digitada logo após as duas linhas digitadas acima.

function BinToInt(Value: string): Integer;
var  
   i, iValueSize: Integer;
begin  
   Result := 0;  
	iValueSize := Length(Value);  
	for i := iValueSize downto 1 do    
	   if Value[i] = "1" then 
		   Result := Result + (1 shl (iValueSize - i));
end;

Agora vamos definir o código para o botão Escrever:

procedure TfrmAutomacao.btnEscreverClick(Sender: TObject);
var 
   endereco:integer;    
	dados:byte;
begin  
   endereco := StrToInt("$" + Trim(edtEndereco.Text));  
	dados := BinToInt(Trim(edtDados.Text));  
	Escrever(endereco,dados);  
	ShowMessage("O byte " + Trim(edtDados.Text) + " foi enviado para o endereço " 
           +  Trim(edtEndereco.Text));
end; 
Pronto! Basta copiar a dll (inpout32.dll) para a pasta da aplicação, ou caso deseje, para a pasta de sistema onde o Windows foi instalado (system ou system32 - dependendo da versão do Windows) e com isso nossa aplicação já está pronta para enviar dados para a porta paralela.

Para testar a aplicação você pode construir o hardware apresentado no artigo Controle de dispositivos externos através da porta paralela utilizando C#.

Eric Cavalcanti

Eric Cavalcanti - Engenheiro de Sistemas do C.E.S.A.R (Centro de Estudos e Sistemas Avançados do Recife) atuando atualmente em desenvolvimento de jogos para dispositivos móveis.