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

首頁 > 編程 > Delphi > 正文

Delphi中串行通信的實(shí)現(xiàn)

2019-11-18 18:55:01
字體:
供稿:網(wǎng)友
Delphi中串行通信的實(shí)現(xiàn) 作者:阮幫秋 發(fā)布時(shí)間:2001/04/19
 
文章摘要:
  本文就是介紹基于Windows95/NT操作系統(tǒng)用Delphi來實(shí)現(xiàn)PC機(jī)與下層PLC控制器之間的串口通信方法。
  關(guān)鍵詞
 串行通信,Delphi,多線程
%20       
正文: 


Delphi中串行通信的實(shí)現(xiàn)


  隨著現(xiàn)代信息技術(shù)的發(fā)展以及計(jì)算機(jī)網(wǎng)絡(luò)的廣泛使用,計(jì)算機(jī)通信技術(shù)已經(jīng)日臻成熟,但串行通信作為一種靈活方 便可靠的通信方式,仍不失為有效的通信手段,被廣泛應(yīng)用于工業(yè)控制中。在工業(yè)生產(chǎn)實(shí)踐中,用PC機(jī)對(duì)工程實(shí)現(xiàn)實(shí)時(shí) 監(jiān)控,通常要求PC機(jī)能在用戶界面上具有數(shù)據(jù)采集、數(shù)據(jù)處理以及控制信號(hào)的產(chǎn)生與傳輸?shù)裙δ?。在這種特定的環(huán)境下,PC機(jī)要與過程控制的實(shí)時(shí)信號(hào)相聯(lián)系,就要求能實(shí)現(xiàn)對(duì)PC機(jī)的串行端口直接操作。Borland公司推出的Delphi是一種功能強(qiáng)大的高級(jí)編程語言,其具有的可視化面向?qū)ο蟮奶匦?,特別適于在Windows環(huán)境下圖形界面和用戶程序的編制。

基于WIN95/NT的串行通信機(jī)制

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

CreatFile打開串行口
CloseHandle關(guān)閉串行口
SetupComm設(shè)置通信緩沖區(qū)的大小
ReadFile讀串口操作
WriteFile寫串口操作
SetCommState設(shè)置通信參數(shù)
GetCommState獲取默認(rèn)通信參數(shù)
ClearCommError清除串口錯(cuò)誤并獲取當(dāng)前狀態(tài)

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

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

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

Delphi下的具體實(shí)現(xiàn)方法

  Delphi的強(qiáng)大功能和支持多線程的面向?qū)ο缶幊碳夹g(shù),使得實(shí)現(xiàn)串行通信非常簡(jiǎn)單方便。它通過調(diào)用外部的API函數(shù)來實(shí)現(xiàn),主要步驟如下:首先,利用CreateFile函數(shù)打開串行口,以確定本應(yīng)用程序?qū)Υ舜锌诘恼加袡?quán),并封鎖其它應(yīng)用程序?qū)Υ舜诘牟僮?;其次,通過GetCommState函數(shù)填充設(shè)備控制塊DCB,再通過調(diào)用SetCommState函數(shù)配置串行口的波特率、數(shù)據(jù)位、校驗(yàn)位和停止位。然后,創(chuàng)建串行口監(jiān)視線程監(jiān)視串行口事件。在此基礎(chǔ)上就可以在相應(yīng)的串口上操作數(shù)據(jù)的傳輸;最后,用CloseHandle函數(shù)關(guān)閉串行口。具體的程序如下,本程序用Delphi3.0編制在Win95 環(huán)境下調(diào)試通過,已投入實(shí)際應(yīng)用中,供廣大讀者參考。

程序:
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; //線程執(zhí)行過程
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); //同步事件復(fù)位;
    PostMessage(Form1.Handle,WM_COMMNOTIFY,0,0);//發(fā)送消息;
    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); //設(shè)置輸入,輸出緩沖區(qū)皆為4096字節(jié)
    getcommstate(hcom,lpdcb); //獲取串行口當(dāng)前默認(rèn)設(shè)置
    lpdcb.baudrate:=2400;
    lpdcb.StopBits:=1;
    lpdcb.ByteSize:=8;
    lpdcb.Parity:=EvenParity; //偶校驗(yàn)
    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);
  //處理接收數(shù)據(jù)
  SetEvent(Post_Event); //同步事件置位
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
comminitialize;
post_event:=CreateEvent(nil,true,true,nil); //創(chuàng)建同步事件;
Tcomm.Create(False); //創(chuàng)建串行口監(jiān)視線程;
end;

end.

作者會(huì)員名:ruan_bangqiu

 

上一篇:DELPHI中的靜態(tài)虛擬及動(dòng)態(tài)方法函數(shù)的區(qū)別。

下一篇:Delphi程序執(zhí)行時(shí)實(shí)時(shí)生成報(bào)表

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

乱中年女人伦av一区二区| 92福利视频午夜1000合集在线观看| 国产乱人伦精品一区二区三区| 黄色小视频免费看| 91久久极品少妇xxxxⅹ软件| 色噜噜色狠狠狠狠狠综合色一| 国产精品视频首页| jizz在线免费播放| 在线观看成人免费视频| 亚洲第一福利网站| 日韩国产精品久久| 中文字幕一区二区精品区| 99精品视频在线免费观看| 国产精品18毛片一区二区| 特级黄色录像片| 日韩片在线观看| 亚洲a在线观看| 四虎精品成人免费网站| 波多野结衣 久久| 最新地址在线观看| 国产成人无码一区二区在线播放| 国产卡二和卡三的视频| 亚洲地区一二三色| 最新国产一区二区| 中文字幕在线看高清电影| 五月天av在线| 亚洲影音先锋| 日韩欧美精品网站| 亚洲精品视频久久久| 亚洲电影二区| 国产特级黄色录像| 国产精品国内免费一区二区三区| av在线下载| 欧美精品午夜| 在线播放成人av| 国产三级做爰高清在线| 亚洲精品国产精品自产a区红杏吧| 91在线网站视频| 免费看的黄色网| 福利影院在线看| 成人免费毛片视频| 成人h视频在线| 久久精品色图| 国产日韩精品综合网站| 污污的网站18| 91高潮在线观看| 亚洲自拍偷拍欧美| 秋霞电影一区二区| 欧美高清你懂得| 久草综合在线视频| 天天操夜夜操夜夜操| 亚洲激情视频一区| 成人91免费视频| 麻豆传媒视频在线观看免费| 色婷婷免费视频| 欧美韩日一区二区| 在线观看国产v片| 欧美日韩国产精选| 日韩精品在线观看网站| 欧美视频第三页| www.亚洲黄色| 亚洲黄色精品视频| 在线一区二区三区视频| 欧美α欧美αv大片| 亚洲精品国偷拍自产在线观看蜜桃| 人人香蕉久久| 水蜜桃在线视频| 国产普通话bbwbbwbbw| 亚洲国产欧美在线人成| 午夜av一区二区三区| 色视频精品视频在线观看| 亚洲欧美中文日韩在线v日本| 国产精品久久久久久久久久久久久久久| 国产精品极品美女在线观看免费| 成人激情四射网| 中文在线三区| 国产最新视频在线观看| 久久久久国产精品一区二区| 日本三级中文字幕| xxxx日韩| 久久国产精品影视| 嗯~啊~轻一点视频日本在线观看| 久久国产精品一区| 日韩在线欧美在线国产在线| 亚洲午夜未删减在线观看| 久久一区二区三区超碰国产精品| av av片在线看| 亚洲欧美小说色综合小说一区| 人人妻人人澡人人爽欧美一区| www.玖玖玖| 先锋影音在av资源看片| 福利小视频网站| 综合久久一区二区三区| 国产精品久久久久久久久免费樱桃| 亚洲第一页中文字幕| 亚洲一区第一页| 高清在线视频日韩欧美| 国产日韩欧美在线观看| 91九色成人| 亚洲免费观看在线| 在线欧美三区| 18+视频在线观看| www.99热| 免费男女羞羞的视频网站在线观看| 欧美88av| jizz性欧美23| 亚洲视屏一区| 亚洲精品鲁一鲁一区二区三区| 亚洲免费成人在线| 网红女主播少妇精品视频| 后入内射欧美99二区视频| 男人的j进女人的j一区| av成人在线看| 国产美女福利在线| 国内久久精品| 性直播体位视频在线观看| 午夜两性免费视频| 免费电影一区二区三区| 国产夫妻自拍一区| 三级国产在线观看| 欧美精品入口蜜桃| 亚洲+小说+欧美+激情+另类| 91国产精品电影| 久久久久久综合| 亚洲av毛片在线观看| 日本动漫理论片在线观看网站| 国产三区在线成人av| 欧美三级电影在线观看| 亚洲免费av电影| 久久久久国产一区二区| 99久久亚洲精品日本无码| 欧美日免费三级在线| www.国产精品.com| bl动漫在线观看| 美日韩一级片在线观看| 影音先锋久久资源网| 91免费版看片| 久久在精品线影院精品国产| 国产视频自拍一区| 中文字幕黄色网址| 久久蜜桃av一区精品变态类天堂| 亚洲男人天堂九九视频| 在线影院自拍| 国外成人福利视频| 今天免费高清在线观看国语| 国产又粗又爽| 欧美日韩国产美女| 青青草原在线亚洲| 欧美日韩精品一区二区三区四区| 一个人免费观看日本www视频| 亚洲欧美精品在线| 亚洲大胆精品| 大陆一级毛片免费观看| 91色琪琪电影亚洲精品久久| 免费成人在线看| 久久午夜羞羞影院免费观看| 超碰在线免费公开| 99视频在线观看免费| 成人在线一区| 国产亚洲精品久久| 美脚丝袜脚交一区二区| 亚洲欧美校园春色| 成人做爰高清视频网站| 日本一道在线观看| 女人色在线免费视频| 一个人免费观看在线视频www| 亚洲精品中文在线观看| 欧美在线三级电影| 精品视频在线免费观看| 中文字幕资源网在线观看| 水蜜桃精品av一区二区| www.se五月| 992tv快乐视频| yes4444视频在线观看| 亚洲成人蜜桃| 国产高清在线精品一区二区三区| 欧美日韩综合一区| 日韩福利电影在线| 色婷婷成人综合| 国产精品一区二区三区四区在线观看| 国产成人精品久久一区二区小说| 无码少妇一区二区| 人人超碰91尤物精品国产| 亚洲盗摄视频| 91成人在线免费观看| 国产夫妻性爱视频| 偷窥韩漫第三季| 免费成人你懂的| yiren22亚洲综合| 外国成人毛片| 免费黄网在线看| av在线播放成人| 精品国产一级毛片| 欧美精品中文字幕一区| 手机毛片在线观看| 国产精品久久久久久久久动漫| 国产一区二区三区四区老人| 久久国产精品系列| 亚洲自拍欧美色图| 三级网站在线看| 日韩极品在线观看| 欧美国产综合| 五十路在线观看| 又黄又爽的视频在线观看| h在线观看视频免费网站| 国产日韩欧美在线一区| 老太做爰xxxx| 国产欧美精品在线| 欧美精品激情在线观看| 最近高清中文在线字幕在线观看1| 欧美一区二区三区四区五区六区| 麻豆国产精品一区二区三区| 欧美日韩中出| a在线视频v视频| wwww国产精品欧美| 国产青春久久久国产毛片| 中文字幕在线观看欧美| 免费h片在线观看| 国产成人h网站| 国产欧美视频一区二区| 欧美午夜视频| 亚洲免费视频成人| 精品少妇一区二区三区视频免付费| 欧美激情偷拍自拍| www.亚洲天堂.com| 国产欧美自拍视频| 国产日韩在线一区二区三区| 日韩中文字幕观看| 奇米精品一区二区三区| 免费看男男www网站入口在线| 成人免费电影网址| 精品樱空桃一区二区三区| 在线人成动漫视频在线观看| 欧美激情欧美激情在线五月| 亚洲精品v亚洲精品v日韩精品| 亚洲av无码一区二区三区网址| 一区二区三区四区国产| 4hu四虎永久在线影院成人| 少妇一晚三次一区二区三区| 秋霞电影网一区二区| 国产女同性恋一区二区| 国产麻豆精品theporn| 久久精品亚洲94久久精品| 992tv在线观看| 亚洲国产精品va在线看黑人动漫| 亲爱的老师6电影韩剧| 日韩欧美亚洲一二三区| 国产精品护士白丝一区av| 国产精品视频在| 成人xxx免费视频播放| 黑人巨大狂躁日本妞在线观看| 日本新janpanese乱熟| 中文久久电影小说| 亚洲精品综合久久| 国内精久久久久久久久久人| 国产精品视频网| 国产欧美久久久久| 色av男人的天堂免费在线| a级精品国产片在线观看| 婷婷六月天丁香| 中文字幕亚洲综合久久五月天色无吗''| 秋霞成人影院| 成人免费看的视频| 色综合视频一区二区三区日韩| 亚洲xxx在线观看| 美女撒尿一区二区三区| 精品国产乱码久久久久久1区2区| 国产福利视频一区二区三区| 91日韩在线播放| 91九色丨porny丨极品女神| mm131午夜| www.久久视频| 亚洲精品国精品久久99热| 久久久久久国产精品mv| 日本强好片久久久久久aaa| 日韩一区二区在线免费观看| 久久久免费高清电视剧观看| 可以在线看的av| 57pao国产成永久免费视频| 国产二级片在线观看| 欧美一区二区三区婷婷| 国产亚洲一本大道中文在线| 波多野结衣家庭教师在线| 欧美日韩免费网站| 性欧美video另类hd尤物| 中文字幕国产专区| 日本久久一区二区三区| 2020亚洲男人天堂| 污污污www精品国产网站| 69xxxx视频| 中文字幕一区二区三区在线视频| 亚洲综合不卡| 香蕉久久久久久久| 蜜桃传媒一区二区亚洲| 国产精品亚洲欧美日韩一区在线| 情趣网站在线观看| 亚洲国产欧美视频| 99久久婷婷国产综合精品青牛牛| 欧美福利在线观看| 97精品久久久| 亚洲影视资源| 欧美在线观看网站| 亚洲国产精品嫩草影院久久| 国产精品国产精品88| 在线精品自拍| 久草免费在线观看视频| 国产精品久久久久久久久久| 在线观看免费视频高清游戏推荐| 色黄久久久久久| 国产女主播在线播放| 欧美特黄aaa| 欧美久久99| 免费国产一区二区| 国产天堂视频在线观看| 精品粉嫩超白一线天av| 精品一区电影国产| 亚洲国产中文字幕久久网| 91精品国产高清一区二区三区| kk眼镜猥琐国模调教系列一区二区| 精品国产1区2区3区| 影音先锋国产资源站| 国产精品欧美久久久久一区二区| 日本一区二区不卡视频| 香蕉av一区| 7777精品伊人久久久大香线蕉超级流畅| 精品福利在线导航| 久久久午夜精品福利内容| 亚洲精品乱码久久|