IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Com порт в Delphi
сообщение
Сообщение #1


Гость






Подскажите как послать на ком порт символ например. Если можно с примером(подробным smile.gif)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 36

Репутация: -  0  +


Привет !!!!

Сам  бился с этой проблемой...

Накопал в инете нечто...

Немного обработал..
Вроде теперь все просто и пушисто.

Код
unit COMport;



interface

uses
 Windows, Messages, SysUtils, Variants, Classes,
 Graphics, Controls, Forms,Dialogs,StdCtrls;
 VAR MODBUS:array[0..$ffff] of byte;
   MODsize:longint;

function opencom(comport: pchar): boolean;
procedure outport(data: byte);
function inport: byte;
Procedure MOD_ANSWER;
procedure closecom;
procedure DataInBuffer(var InQueue, OutQueue: integer);
var

hport: THandle;
DCB: _DCB;

implementation

uses main,utils;

function opencom(comport: pchar): boolean;
begin
 hport:= CreateFile(comport,GENERIC_READ + GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0);

 GetCommState(hport,dcb);

 dcb.Parity:= NOPARITY;
 dcb.BaudRate:= CBR_57600;
 dcb.XonLim:= 1024;
 dcb.XoffLim:= 1024;
 dcb.wReserved:= 0;
 dcb.ByteSize:= 8;
 dcb.StopBits:= ONESTOPBIT;

 if not SetCommState(hport,dcb) then opencom:= false else opencom:= true;
end;

procedure outport(data: byte);
var
 len: cardinal;
 written: cardinal;
begin
 len:= 1;
 WriteFile(hport,data,len,written,nil);
end;

function inport: byte;
var
 din: byte;
 len: cardinal;
 red: cardinal;
 loop,inp,outp:longint;
 begin
 len:= 1;
// timeoutZ
loop:=0;
repeat
DataInBuffer(inp,outp);
sleep(1);
loop:=loop+1;
until (inp>0) or (loop>100);
if not (inp>0) then begin
//                   showmessage('Timeout !');
     Form1.Timer1.Enabled:=false;
     MessageDlg('Нет связи с ЦК!', mtError,
     [mbAbort], 0);

                    close_program;
                    end;
 ReadFile(hport,din,len,red,nil);
 inport:= din;
end;

procedure closecom;
begin
 CloseHandle(hport);
end;
//////////////////////////////////////
Procedure MOD_ANSWER;
var b:byte;
   i:longint;
Begin
ModSize:=0;

repeat // wait marcer
b:=inport;
until b=$7e;
repeat // wait marcer
b:=inport;
until b<>$7e;
modbus[modsize]:=$7e;
modsize:=modsize+1;
modbus[modsize]:=b;
repeat // wait marcer
b:=inport;
modbus[modsize]:=b;
modsize:=modsize+1;
until b=$7e;
modsize:=modsize-1;
end;
//////////////////////////////////////

procedure DataInBuffer(var InQueue, OutQueue: integer);
var ComStat: TComStat;
   e: dword;
begin
 if ClearCommError(Hport, e, @ComStat) then
 begin
   InQueue := ComStat.cbInQue;
   OutQueue := ComStat.cbOutQue;
 end
 else
 begin
   InQueue := 0;
   OutQueue := 0;
 end;
end;


/////////////////////////////////////////
Procedure Close_Program;
Begin
closecom;
Form1.close;
halt;
End;
////////////////////////////////////////

Procedure Open_program;
var b:boolean;
Begin
b:=opencom('COM1');
if not b then  begin showmessage('Error: COM port not found!');
                            close_program;end;
End;
/////////////////////////////////////////

end.






пример вывода
outport($7e);
Пример ввода
b:=inport;

Надеюсь это занесут в faq..


--------------------
Да пребудет паскаль вовеки!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 9:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name