Показано с 1 по 2 из 2

Тема: Owen_io.dll и Delphi

  1. #1

    По умолчанию Owen_io.dll и Delphi

    Пытаюсь сделать программу для опроса ТРМ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_typeWORD;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;
    ...

  2. #2

    По умолчанию

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

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •