⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 com.pas

📁 用DELPHI编写
💻 PAS
字号:
unit com;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

  const
     Wm_commNotify=Wm_User+12;
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
  procedure comminitialize;
  procedure MsgcommProcess(Var Message:Tmessage);
  Message Wm_commnotify;
    { Private declarations }
  public
    { Public declarations }
  end;
  //线程声明
  Tcomm=class(TThread)
  protected
   procedure Execute;override;
   end;

var
  Form1: TForm1;
  hcom,Post_Event:Thandle;
  lpol:Poverlapped;

implementation

{$R *.dfm}


procedure Tcomm.Execute;//线程招待过程
var
dwEvtMask:Dword;
Wait:Boolean;
begin
fillchar(lpol,sizeof(toverlapped),0);
while true do begin
    dwEvtMask:=0;
    Wait:=WaitCommEvent(hcom,dwevtmask,lpol); //等待串行口事件
if wait then begin
  waitforsingleobject(post_event,infinite);//等待同步事件置位
  resetevent(post_event);//同步事件复位
  postmessage(Form1.Handle,WM_COMMNOTIFY,0,0);//发送消息
  end;
 end;
end;

procedure Tform1.comminitialize;//串口初始化
var
lpdcb:Tdcb;
begin
hcom:=createfile('com2',generic_read or generic_write,0,nil,open_existing,file_attribute_normal or file_flag_overlapped,0);//打开串口
   if hcom=invalid_handle_value then
   else
     setupcomm(hcom,4096,4096);//设置输入。输出缓冲区为4096字节
     getcommstate(hcom,lpdcb);//获取串口当前默认设置
     lpdcb.BaudRate :=2400;
     lpdcb.StopBits :=1;
     lpdcb.ByteSize :=8;
     lpdcb.Parity :=EvenParity;//偶校验
     setcommstate(hcom,lpdcb);
     setcommMask(hcom,ev_rxchar);//指定串口事件为接收到字符
end;


procedure Tform1.Msgcomm ;
process(var Message:Tmessage);
var
clear:boolean;
coms:Tcomstat;
cbNum,ReadNumber,lpErrors:integer;
read_Buffer:array[1..100]of char;
begin
clear:=clearcommerror(hcom,lpErrors,@coms);
if clear then begin
   cbNum:=coms.cbInQue;
   readfile(hcom,read_Buffer,cbNum,readNumber,lpol);//处理接收数据
   setEvent(post_Event);//同步事件置位
   end;
 end;  

procedure TForm1.FormCreate(Sender: TObject);
begin
comminitialize;
post_event:=createEvent(nil,true,true,nil);//创建同步事件
Tcomm.create(false);//创建串行口监视线程


end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -