Com порт в Delphi |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Com порт в Delphi |
Kola |
Сообщение
#1
|
Гость |
Подскажите как послать на ком порт символ например. Если можно с примером(подробным )
|
mvg |
Сообщение
#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.. -------------------- Да пребудет паскаль вовеки!
|
Текстовая версия | 29.04.2024 9:18 |