亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

Delphi中串行通信的實現

2019-11-18 18:55:01
字體:
來源:轉載
供稿:網友
Delphi中串行通信的實現 作者:阮幫秋 發布時間:2001/04/19
 
文章摘要:
  本文就是介紹基于Windows95/NT操作系統用Delphi來實現PC機與下層PLC控制器之間的串口通信方法。
  關鍵詞
 串行通信,Delphi,多線程
%20       
正文: 


Delphi中串行通信的實現


  隨著現代信息技術的發展以及計算機網絡的廣泛使用,計算機通信技術已經日臻成熟,但串行通信作為一種靈活方 便可靠的通信方式,仍不失為有效的通信手段,被廣泛應用于工業控制中。在工業生產實踐中,用PC機對工程實現實時 監控,通常要求PC機能在用戶界面上具有數據采集、數據處理以及控制信號的產生與傳輸等功能。在這種特定的環境下,PC機要與過程控制的實時信號相聯系,就要求能實現對PC機的串行端口直接操作。Borland公司推出的Delphi是一種功能強大的高級編程語言,其具有的可視化面向對象的特性,特別適于在Windows環境下圖形界面和用戶程序的編制。

基于WIN95/NT的串行通信機制

  Windows操作系統的機制禁止應用程序直接訪問計算機硬件,但它為程序員提供了一系列的標準API函數,使得應用程序的編制更加方便并且免除了對有關硬件的調試麻煩。在Windows95/NT中,原來Windows3.X的WM_COMMNOTIFY消息 已被取消,操作系統為每個通信設備開辟了用戶可定義大小的讀/寫緩沖區,數據進出通信口均由操作系統后臺完成,應用程序只需對讀/寫緩沖區操作即可。WIN95/NT中幾個常用的串行通信操作函數如下:

CreatFile打開串行口
CloseHandle關閉串行口
SetupComm設置通信緩沖區的大小
ReadFile讀串口操作
WriteFile寫串口操作
SetCommState設置通信參數
GetCommState獲取默認通信參數
ClearCommError清除串口錯誤并獲取當前狀態

  除上述幾個函數外,還要經常用到一個重要的記錄DCB(設備控制塊)。DCB中記錄有可定義的串行口參數,設置串行口參數時必須先用GetCommState函數將系統默認值填入DCB控制塊,然后才可把用戶想改變的自定義值設定。

  在WIN95/NT中進行串行通信除了解基本的通信操作函數外,還要掌握多線程編程。線程是進程內部執行的路徑,是操作系統分配CPU時間的基本實體。每個進程都由單線程開始完成應用程序的執行。串行通信需要利用多線程技術實 現,其主要的處理邏輯可以表述如下:進程一開始先由主線程做一些必要的初始化工作,然后主線程根據需要在適當時候建立通信監視線程監視通信口,當指定的串行口事件發生時,向主線程發送WM_COMMNOTIFY消息(由于WIN95取消了WM_COMMNOTIFY消息,因此必須自己創建),主線程對其進行處理。若不需要WM_COMMNOTIFY消息,則主線程終止通信監視線程。

  多線程同時執行,將會引起對共享資源的沖突。為避免沖突,就要用同步多線程對共享資源進行訪問。WIN95提供 許多保持線程同步的方法,筆者采用創建事件對象來保持線程同步。通過CraeteEvent()創建事件對象,使用etEvent()或PulseEvent()函數將事件對象設置成信號同步。在應用程序中,利用WaitSingleObject()函數等待同步的觸發,等到指定的事件被其它線程設置為有信號時,才繼續向下執行程序。

Delphi下的具體實現方法

  Delphi的強大功能和支持多線程的面向對象編程技術,使得實現串行通信非常簡單方便。它通過調用外部的API函數來實現,主要步驟如下:首先,利用CreateFile函數打開串行口,以確定本應用程序對此串行口的占有權,并封鎖其它應用程序對此串口的操作;其次,通過GetCommState函數填充設備控制塊DCB,再通過調用SetCommState函數配置串行口的波特率、數據位、校驗位和停止位。然后,創建串行口監視線程監視串行口事件。在此基礎上就可以在相應的串口上操作數據的傳輸;最后,用CloseHandle函數關閉串行口。具體的程序如下,本程序用Delphi3.0編制在Win95 環境下調試通過,已投入實際應用中,供廣大讀者參考。

程序:
unit comdemou;
interface
uses
  Windows, Messages, SysUtils, 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.MsgcommProcess(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.

作者會員名:ruan_bangqiu

 

上一篇:DELPHI中的靜態虛擬及動態方法函數的區別。

下一篇:Delphi程序執行時實時生成報表

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品男人爽免费视频1| 91国内揄拍国内精品对白| 亚洲美腿欧美激情另类| 国产精品v片在线观看不卡| 亚洲小视频在线观看| 亚洲综合视频1区| 中文字幕视频一区二区在线有码| 日韩高清免费观看| 国模精品视频一区二区| 国产精品成人观看视频国产奇米| 久久伊人精品一区二区三区| 97视频免费在线观看| 欧美猛少妇色xxxxx| 欧美一级淫片播放口| 性色av一区二区三区免费| 97超碰国产精品女人人人爽| 国产精品电影网站| 亚洲aaaaaa| 久久国产精品久久精品| 97在线观看免费高清| 欧美高清视频一区二区| 久久电影一区二区| 国产日韩欧美在线观看| 国产丝袜一区视频在线观看| 亚洲欧美日韩精品久久亚洲区| 亚洲天堂av电影| 57pao国产精品一区| 久久久久久久久久久久av| 成人中文字幕在线观看| 国产成人精品在线播放| 成人观看高清在线观看免费| www国产精品视频| 日韩免费av片在线观看| 91精品国产91久久久久久吃药| 日韩免费观看网站| 日韩精品久久久久久久玫瑰园| 国产一区二区久久精品| 91精品国产乱码久久久久久久久| 福利视频一区二区| 插插插亚洲综合网| 国产成人在线精品| 国产精品香蕉av| 欧美成人免费全部| 91沈先生作品| 国产精品999999| 欧美激情一级二级| 国产亚洲视频在线| 亚洲日本中文字幕免费在线不卡| 久久精品国产欧美亚洲人人爽| 久久久免费高清电视剧观看| 亚洲区中文字幕| 日韩av在线免播放器| 久久免费视频网| 日韩精品视频中文在线观看| 91av视频导航| 韩国欧美亚洲国产| 欧美床上激情在线观看| 久久这里有精品视频| 欧美午夜女人视频在线| 4438全国成人免费| 欧美一区亚洲一区| 亚洲的天堂在线中文字幕| 亚洲午夜性刺激影院| 久久精品美女视频网站| 中文字幕av日韩| 国产成人精品最新| 国产午夜精品免费一区二区三区| 欧美xxxx18性欧美| 伊人成人开心激情综合网| 欧洲亚洲在线视频| 日韩视频永久免费观看| 色yeye香蕉凹凸一区二区av| 91久久国产综合久久91精品网站| 最近2019中文字幕大全第二页| 一区二区亚洲精品国产| 日本亚洲欧美三级| 欧美日韩在线第一页| 狠狠躁18三区二区一区| 国产精品久久久久久av福利| 神马久久桃色视频| 国内自拍欧美激情| 精品视频在线播放色网色视频| 精品动漫一区二区三区| 国产97在线亚洲| 欧美激情视频网址| 亚洲二区在线播放视频| 成人亚洲欧美一区二区三区| 清纯唯美亚洲激情| 国产精品久久久久久久久男| 国产精品视频久久| 国内精品国产三级国产在线专| 在线观看国产欧美| 欧美激情一区二区久久久| 亚洲图中文字幕| 日本国产精品视频| 欧美日韩性视频在线| 成人欧美一区二区三区黑人| 97视频在线观看免费| 国产精品一区二区三区久久| 国产丝袜一区二区三区免费视频| 欧美—级高清免费播放| 日韩av男人的天堂| 久久天天躁夜夜躁狠狠躁2022| 最近2019好看的中文字幕免费| 日韩av影视在线| 欧美精品第一页在线播放| 欧美亚洲日本黄色| 一区二区三区国产在线观看| 成人www视频在线观看| 激情亚洲一区二区三区四区| 91久久久亚洲精品| 亚洲电影免费观看高清完整版| 91在线视频九色| 欧美xxxx18性欧美| 日韩高清欧美高清| 精品毛片网大全| 日韩免费av在线| 亚洲国产成人久久综合| 国产精品白丝av嫩草影院| 色婷婷综合久久久久中文字幕1| 久久视频在线视频| 亚洲视频专区在线| 国产精品丝袜白浆摸在线| 91最新在线免费观看| 精品视频一区在线视频| 日本精品久久久久影院| 中文字幕亚洲情99在线| 国产免费亚洲高清| 亚洲精品久久久久久下一站| 欧美在线视频在线播放完整版免费观看| 91九色综合久久| 欧美丝袜美女中出在线| 国产伦精品一区二区三区精品视频| 最好看的2019年中文视频| 亚洲美女性生活视频| 不卡av日日日| 国产精品久久久久久久久久ktv| 中文字幕欧美国内| 欧美日韩电影在线观看| 欧美影院成年免费版| 91在线观看免费网站| 91在线国产电影| 2018国产精品视频| 97视频在线观看免费高清完整版在线观看| 欧美日韩不卡合集视频| 欧美午夜激情视频| 国外视频精品毛片| 免费91在线视频| 国产一区二区三区在线观看网站| 欧美午夜性色大片在线观看| 欧美黑人又粗大| 国产一区二区三区在线观看视频| 国产精品精品视频一区二区三区| 国产精品久久av| 国产精品美乳在线观看| 国产精品久久久久7777婷婷| 2019亚洲日韩新视频| 国产91在线高潮白浆在线观看| 国产精品国产亚洲伊人久久| 91久久久久久| 欧美xxxx14xxxxx性爽| 中文字幕久久亚洲| 国产欧美精品一区二区三区-老狼| 日韩精品久久久久久久玫瑰园|