Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
// Определения четности (Без)
prty_NONE:integer=0;
// Определения количества Бит данных
databits_8:integer=1;
// Определения количества стоп Бит
stopbit_1:integer=0;
// Вид конвертора RS485 (Автоматический конвертор)
RS485CONV_AUTO:integer=1;
type
TProcOpenPort=function (n,speed,part,bits,stop,vid:DWORD):integer;stdcall;
TProcSetupPort=function (n,speed,part,bits,stop,vid:DWORD):integer;stdcall;
TProcClosePort=function :integer;stdcall;
TProcSetApiMode=function (n:DWORD):integer;stdcall;
TProcReadIEEE32=function (adr,adr_type:DWORD;command:pchar;var value:single;var time:integer;index:integer):integer;stdcall;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
hLibInst:cardinal;
func_avail:boolean;
OpenPort:TProcOpenPort;
SetupPort:TProcSetupPort;
ClosePort:TProcClosePort;
ReadIEEE32:TProcReadIEEE32;
SetApiMode:TProcSetApiMode;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
hLibInst:=LoadLibrary('owen_io.dll');
if(hLibInst<>0)
then
begin
func_avail:=true;
OpenPort:=GetProcAddress(hLibInst,'OpenPort');
if(not Assigned(OpenPort)) then
begin
func_avail:=false;
exit;
end;
ClosePort:=GetProcAddress(hLibInst,'ClosePort');
if(not Assigned(ClosePort)) then
begin
func_avail:=false;
exit;
end;
SetupPort:=GetProcAddress(hLibInst,'SetupPort');
if(not Assigned(SetupPort)) then
begin
func_avail:=false;
exit;
end;
ReadIEEE32:=GetProcAddress(hLibInst,'ReadIEEE32');
if(not Assigned(ReadIEEE32)) then
begin
func_avail:=false;
exit;
end;
SetApiMode:=GetProcAddress(hLibInst,'SetApiMode');
if(not Assigned(SetApiMode)) then
begin
func_avail:=false;
exit;
end;
end
else
func_avail:=false;
end;
// ОТКРЫВАЕМ COM-ПОРТ #1
procedure TForm1.Button1Click(Sender: TObject);
var
op_succ:integer;
begin
if func_avail then
begin
SetApiMode(1);
op_succ:=OpenPort(0,2,0,databits_8,stopbit_1,RS485CONV_AUTO);
if (op_succ<>0) then
Application.MessageBox('Не удалось открыть порт', 'Ошибка!', MB_OK)
else
begin
SetupPort(0,2,0,databits_8,stopbit_1,RS485CONV_AUTO);
end;
end
else
Application.MessageBox('Не удалось открыть порт (функция!)', 'Ошибка!', MB_OK);
end;
// ЗАКРЫВАЕМ COM-ПОРТ #1
procedure TForm1.Button2Click(Sender: TObject);
var
cp_succ:integer;
begin
if func_avail then
begin
cp_succ:=ClosePort();
if (cp_succ<>0) then
Application.MessageBox('Не удалось закрыть порт', 'Ошибка!', MB_OK);
end
else
Application.MessageBox('Не удалось закрыть порт (функция!)', 'Ошибка!', MB_OK);
end;
// ПО ИДЕЕ ЧИАТЕМ С ПЕРВОГО ВХОДА ТРМ251
procedure TForm1.Button3Click(Sender: TObject);
var
iee:integer;
val:single;
tm:integer;
begin
iee:=ReadIEEE32(16,0,'rEAd',val,tm,-1);
Edit1.Text:=FloatToStr(val);
Edit2.Text:=IntToStr(iee);
end;
end.