PDA

Просмотр полной версии : Owen_io.dll и Delphi



Kinzic
16.11.2008, 11:32
Пытаюсь сделать программу для опроса ТРМ151
Столкнулся со следующими проблемами:
функция OpenPort возвращает 0 а порт не остается свободным, пробую ReadIEEE32 возвращает ошибку -2

вот фрагмент кода

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, Buttons, ComCtrls, Menus, StdCtrls;

const
mode:integer=1; // выбираем модель библиотеки овен

type
fSetApimode = function (mode:integer):integer;stdcall;
fOpenPort = function (n,speed,parity,bits,stop,converter: Dword):integer;stdcall;
fClosePort= function :integer;stdcall;
fReadIEEE32= function(adr,adr_type:DWORD;command:PChar;var value:Single;var time:Integer;index:Integer):Integer;
......
var
...
OwenHandle: Thandle;
SetApimode :fSetApimode ;
OpenPort : fOpenPort;
ClosePort: fCloseport;
ReadIEEE32:fReadIEEE32;
...
procedure TForm1.FormCreate(Sender: TObject);
var
n,speed,parity,bits,stop,converter: Dword ;
val: single;
tm: integer;
begin
owenHandle:=loadLibrary('owen_io.dll');
if Owenhandle=0 then
begin
if getlasterror=ERROR_DLL_NOT_FOUND then
showmessage('ошибка открытия DLL');
close;
end;
@setapimode:= getprocaddress(owenHandle, 'SetApiMode');
@OpenPort:=getprocaddress(owenHandle, 'OpenPort');
@ClosePort:=getprocaddress(owenHandle, 'ClosePort');
@ReadIEEE32:=getprocaddress(owenHandle, 'ReadIEEE32');

res:=setapimode(mode) ;
if res<0 then application.messagebox('модель библиотеки не выбрана','Ошибка',MB_OK) ;

n:=0;
speed:=2;
parity:=0;
bits:=1;
stop:=1;
converter:=1;

if not OpenPort(n,speed,parity,bits,stop,converter)=0 then alarm(res,'Порт не открыт');
try
res:=ReadIEEE32(8,0,'rEAd',val,tm,0);
if res<0 then alarm(res,'ошибка чтения');
end;
...

rik20002
24.03.2013, 13:26
у вас в принципе программа порт ни открывает, так как преобразователь АС- 4 заносится в диспетчер устройств под com портом №3, а вы пытаетесь связаться с устройством по несуществующему порту , а если открывать com порт № 3 , программа выдает ERR_INVALID_ARG (-1) аргумент функции неверен
а по вашему номеру порта он выдает
ERR_RESOURCE_BUSY (-4) ресурс уже используется (COM-порт уже используется другим потоком)