Balança Urano

Delphi

11/09/2008

Olá Pessoal, sou novo por aqui no fórum e também sou novo com programação Delphi e estou com o seguinte problema:

Estou tentando capturar o peso de uma balança urano UDC-CO mas não obtenho retorno correto da balança, tenho um exemplo disponibizado pela Urano no manual de comunicação da dll LePeso em C

#include <iostream.h>
include <conio.h>
typedef char *(*LEPESO)();
typedef int (*ABREPORTASERIAL)(char *);
typedef int (*FECHAPORTASERIAL)(void);
typedef void (*ALTERAMODELOBALANCA)(int);
typedef void (*ALTERAMODOOPERACAO)(int);
int main(int argc, char* argv[])
{
HINSTANCE hinstLib;
LEPESO ProcLePeso;
ABREPORTASERIAL ProcAbrePortaSerial;
FECHAPORTASERIAL ProcFechaPortaSerial;
ALTERAMODELOBALANCA ProcAlteraModeloBalanca;
ALTERAMODOOPERACAO ProcAlteraModoOperacao;
hinstLib = LoadLibrary(´LePeso.dll´);
if(hinstLib != NULL) {
ProcLePeso = (LEPESO)GetProcAddress(hinstLib, ´_LePeso´);
ProcAbrePortaSerial = (ABREPORTASERIAL)GetProcAddress(hinstLib, ´_AbrePortaSerial´);
ProcFechaPortaSerial = (FECHAPORTASERIAL)GetProcAddress(hinstLib,
´_FechaPortaSerial´);
ProcAlteraModeloBalanca = (ALTERAMODELOBALANCA)GetProcAddress(hinstLib,
´_AlteraModeloBalanca´);
ProcAlteraModoOperacao = (ALTERAMODOOPERACAO)GetProcAddress(hinstLib,
´_AlteraModoOperacao´);
(ProcAlteraModeloBalanca)(1);
(ProcAlteraModoOperacao)(1);
(ProcAbrePortaSerial)(´COM1´);
while(!kbhit()) cout << (ProcLePeso)();
(ProcFechaPortaSerial)();
}
FreeLibrary(hinstLib);
return 0;
}

estou usando da seguinte maneira

Declaração da dll
function LePeso():String;stdcall;external ´LePeso.dll´ name ´_LePeso´;

o meu grande problema é com o comando lepeso, onde faço da seguinte maneira

PesoUrano:=LePeso();

onde Peso Urano é uma String, mas não obtenho nenhum retorno se alguém já programou balanças Urano por favor me ajude.


Steles

Steles

Curtidas 0

Respostas

Steles

Steles

11/09/2008

Obs: Não entendo muito C por isso postei o código feito em C, se alguem enteder e puder clarear minha idéias.


GOSTEI 0
Steles

Steles

11/09/2008

Pessoal problema já resolvido.


GOSTEI 0
Mcarriconde

Mcarriconde

11/09/2008

To tendo o mesmo problema que vc.
Tem como vc passar como resolveu?

Grato


GOSTEI 0
Steles

Steles

11/09/2008

mcarriconde, fiz da seguinte maneira

antes de abrir a porta da balança é necessário passar o modelo e o modo de operação da balança, estes dois comandos estão no manual da dll

ModeloBalancaUrano(StrToInt(ModeloUrano))
ModoOperacaoUrano(StrToInt(ModoUrano));

ModeloUrano e ModoUrano são strings, caso não possua o manual me avise que te envio por e-mail

e para capturar o peso usei da seguinte maneira

PesoUrano:=LePeso();

onde PesoUrano é uma string tb

o grande detalhe é a declaração das funções, declare da seguinte maneira

function AbrePortaUrano(Porta:String):Integer;stdcall;external ´LePeso.dll´ name ´_AbrePortaSerial´;
function FechaPortaUrano:Integer;stdcall;external ´LePeso.dll´ name ´_FechaPortaSerial´;
function LePeso():PChar;stdcall;external ´LePeso.dll´ name ´_LePeso´;
function ModeloBalancaUrano(Modelo: Integer):Integer;stdcall;external ´LePeso.dll´ name ´_AlteraModeloBalanca´;
function ModoOperacaoUrano(Modo: Integer):Integer;stdcall;external ´LePeso.dll´ name ´_AlteraModoOperacao´;

o comando LePeso deve ser declarado do tipo PChar para que funcione corretamente

espero ter ajudado, qualquer dúvida fique a vontade pra perguntar


GOSTEI 0
POSTAR