999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Del phi串口通信程序設計與實現

2012-08-08 12:48:30傅宏偉
電腦與電信 2012年8期
關鍵詞:設置

傅宏偉

(安徽先河消防科技工程有限公司,安徽 合肥 230000)

1.Delphi中實現串口通信的方法

利用Delphi實現串口通信的常用的方法有3種:一是利用控件,如MSComm控件和Spcomm控件;二是使用API函數;三是調用其它串口通信程序。使用API方法的優點是比較適合于編寫較為復雜的低層次通信程序,但缺點是編寫串口通信程序較為復雜,需要掌握大量通信知識。相比較而言,利用Spcomm控件則相對較簡單,Spcomm是Small-Pig Team開發的一個第三方Delphi串口控件,Spcomm控件并不是DELPHI 7.0自帶的控件,需要自己到相關網站下載并安裝到相關目錄下,該控件具有豐富的與串口通信密切相關的屬性及事件,提供了對串口的各種操作,編程簡單、通用性強、可移植性好,而且還支持多線程,在Delphi軟件開發中已經成為一個被廣泛應用的串口通信開發控件。

1.1 使用Windows API函數

Windows環境下的串口編程與DOS環境下的串口編程有很大的不同。Windows環境下的串口編程的最大特征之一就是設備無關性,它通過設備驅動程序將Windows應用程序與不同的外界設備隔離。Windows封裝了Windows的通信機制,這種方式稱為通信API,Windows程序員可以利用Windows通信API進行編程,不用直接對硬件操作。

WIN 32通信API基本上是一個串行端口API,不是很適合局域網(LAN)通信。它把串口操作(以及并口等)與文件操作統一起來,使用類似的操作來實現。

用Windows API函數實現串口通信的主要事件有:

(1)打開和關閉串口:分別是用CreatFile函數和Close Handle函數實現。

(2)串口配置和屬性設置:使用GetCommState()函數獲取串口當前配置,使用SetCommState()從新分配串口資源的各個參數。在配置串口屬性時,應該先了解串口設備的屬性。通過GetCommProperties()函數獲得串口的屬性。

(3)讀/寫串口:使用ReadFile()和WriteFile函數來實現。

(4)編寫相應的OnClick事件的相關代碼。

1.2 使用MSComm控件

MSComm控件通過串行端口傳輸和接收數據,為應用程序提供串行通訊功能。MSComm控件在串口編程時非常方便,程序員不必去花時間去了解較為復雜的API函數,而且在VC、VB、Delphi等語言中均可使用。

(1)MSComm控件兩種處理通訊的方式

MSComm控件提供下列兩種處理通訊的方式:事件驅動方式和查詢方式。

(2)MSComm控件的常用屬性

CommPort:設置并返回通訊端口號;

Settings:以字符串的形式設置并返回波特率、奇偶校驗、數據位、停止位;

PortOpen:設置并返回通訊端口的狀態。也可以打開和關閉端口;

Input:從接收緩沖區返回和刪除字符;

Output:向傳輸緩沖區寫一個字符串;

EOFEnable:確定在輸入過程中MSComm控件是否尋找文件結尾(EOF)字符。如果找到EOF字符,將停止輸入并激活OnComm事件,此時CommEvent屬性設置為comEvEOF。

MSComm控件的事件只有一個,就是OnComm事件。

(3)使用MSComm控件實現串口通信的基本流程:

1)添加MSComm控件

2)初始化并打開串口

3)捕捉串口事件

4)串口讀寫

5)關閉串口

1.3 使用Spcomm控件

Spcomm控件并不是Delphi 7.0自帶的控件,需要自己到相關網站下載并安裝到相關目錄下。利用Spcomm控件就可以實現串口通信,因為該控件具有豐富的與串口通信密切相關的屬性及事件,提供了對串口的各種操作,而且還支持多線程,能實現一般的串口通信需要。

Spcomm的安裝:

(1)選擇下拉菜單Component中的Install Component選項,在Unit file name處填寫Spcomm控件所在的路徑,其它各項可用默認值,點擊OK按鈕。

(2)安裝后,在System控件面板中將出現一個紅色控件Com。

Spcomm的屬性、方法和事件:

(1)屬性

CommName:表示Com1、Com2等串口的名字;

BaudRate:根據實際需要設定的波特率,在串口打開后也可更改此值,實際波特率隨之更改;

ParityCheck:表示是否需要奇偶校驗;

ByteSize:根據實際情況設定的字節長度;

Parity:奇偶校驗位;

StopBits:停止位;

SendDataEmpty:這是一個布爾型屬性,為true時表示發送緩存為空,或者發送隊列里沒有信息;為false時表示發送緩存不為空,或者發送隊列里有信息。

(2)方法

StartComm方法用于打開串口,當打開失敗時通常會報錯。錯誤主要有7種:串口已經打開;打開串口錯誤;文件句柄不是通信句柄;不能夠安裝通信緩存;不能產生事件;不能產生讀進程;不能產生寫進程。

StopComm方法用于關閉串口,沒有返回值。

WriteCommData(pDataToWrite:PChar;dwSizeofDataToWrite:Word)方法是個帶有布爾型返回值的函數,用于將一個字符串發送到寫進程,發送成功返回true,發送失敗返回false。執行此函數將立即得到返回值,發送操作隨后執行。該函數有兩個參數,其中pDataToWrite是要發送的字符串,dwSizeofDataToWrite是發送字符串的長度。

(3)事件

ata:procedure(Sender:TObject;Buffer:Pointer;BufferLength:Word)of object當有數據輸入緩存時將觸發該事件,在這里可以對從串口收到的數據進行處理。Buffer中是收到的數據,BufferLength是收到的數據長度。

OnReceiveError:procedure(Sender:TObject;EventMask:DWORD)當接收數據出現錯誤時將觸發該事件。

在使用Spcomm控件的時候,首先要添加一個Com控件,之后設定Com1屬性,再設置Com控件的發送和接受的觸發事件,最后編寫源代碼并進行調試。

(4)Spcomm串口通信的實現

Spcomm串行通信控件具有多線程的特性,接收和發送數據分別在兩個線程內完成,接收線程負責收到數據時觸發OnReceiveData事件;用WriteCommData()函數將待發送的數據寫入輸出緩沖器,發送線程在后臺完成數據發送工作。在接收和發送數據前需要初始化串口,用StartComm方法打開串口,退出程序時用StopComm方法關閉串口。

1.4 調用其它串口通信程序

除了使用Windows API函數、MSCOMM控件、Spcomm控件實現串口通信,還可以使用CommPortDrv控件、SerialPort控件等。除了通用的串口通信控件,還有一些專用的串行通信控件用于處理特定的設備模塊,例如TGPS控件就是專門處理GPS接受機串行通信輸出的NMEA-0183格式的數據,分析得到定位信息等。這些通信控件一般都極大地簡化了對底層的設置,提供了許多強大的功能,可以加快程序的開發過程。

2.系統設計與實現

2.1 發送窗口功能實現

圖1 發送窗口界面

代碼實現:

保存數據功能代碼如下:

2.2 實時數據發送功能實現

圖2 實現實時數據發送界面

設計的關鍵是使用Spcomm控件和Timer控件實現。

(1)初始化

需要選擇本次通信使用的串口,設置波特率、校驗方式、數據位、停止位等屬性,打開該串口。示例代碼如下:

這與具體實現的PC機有關,在設置軟件Com口屬性前應該先查看好該機器的Com屬性,使得二者能匹配,這樣能避免在用模擬軟件實現實時數據發送時出現錯誤。

(2)發送測試數據

實現模擬的實時數據采集,首先要調試串口,測試信號可以隨意選擇某特定字符串,通過發送測試信號實現,當PC發出這樣一些測試數據后,通過接收事件能收到特定的某字符串,則表示測試成功,串口發送數據可以正常進行。否則需重新發送測試信號。

以下為向計算機發送一個測試數據:

代碼如下:

(3)發送數據

(4)關閉串口

(5)定時器設計

2.3 Spcomm串口通信的關鍵技術問題

首先,Spcomm是通過 ReadIntervalTimeout屬性的設置,來確定所接收到的數據是否屬于同一幀數據,其默認值是100ms,也就是說,只要任何兩個字節到達的時間間隔小于100ms,都被認為是屬于同一幀數據,在與單片機協同工作時,要特別注意這個問題。

另外,Spcomm的默認屬性設置是支持軟件流控制的,用于流控制的字符是13H(XoffChar)和11H(XonChar),當以二進制方式發送數據時,必須要禁用Spcomm對于軟件流控制的支持,否則,在數據幀中出現的13H,11H會被Spcomm作為控制字符而加以忽略。

3.結束語

實踐證明,利用Spcomm串行通信控件在Delphi7.0中開發串口通信程序,具有靈活、方便、高效的特點。

[1]李軍.Delphi 7項目開發實踐[M].北京:中國鐵道出版社,2003.

[2]趙蘭濤蘇彥華.Delphi串口通信技術與工程實踐[M].北京:人民郵電出版社,2004.

[3]張宏林.Delphi 7程序設計與開發技術大全[M].北京:人民郵電出版社,2004.

[4]劉宗鍵.Delphi7程序設計入門[M].天津:天津電子出版社,2003.

[5]劉斌,李文革.Delphi 7高級教程[M].北京:清華大學出版社,2004.

[6]彭明明,程文剛.Delphi實用編程100例[M].北京:中國鐵道出版社,2004.

[7]楊長春.Delphi程序設計教程[M].北京:清華大學出版社,2005.

[8]康祥順.Delphi案例開發集錦[M].北京:電子工業出版社,2005.

[9]劉山,趙輝.Delphi系統開發實例精粹[M].北京:人民郵電出版社,2005.

猜你喜歡
設置
中隊崗位該如何設置
少先隊活動(2021年4期)2021-07-23 01:46:22
船舶防火結構及設置的缺陷與整改
水上消防(2020年5期)2020-12-14 07:16:18
中外醫學專業與??圃O置對比分析及啟示
特殊場景下列控等級轉換的設置方案
7招教你手動設置參數
動車段(所)股道有效長設置研究
我國中小學將設置人工智能相關課程
玩具世界(2017年9期)2017-11-24 05:17:29
吃紙的妖怪
本刊欄目設置說明
中俄臨床醫學專業課程設置的比較與思考
主站蜘蛛池模板: 亚洲国产天堂久久九九九| 国产精品亚欧美一区二区三区| 欧美午夜理伦三级在线观看| 亚洲视屏在线观看| 大香伊人久久| 成人国产一区二区三区| 国产精品永久久久久| 国产成人a在线观看视频| 日本草草视频在线观看| 美女毛片在线| 91娇喘视频| 亚洲av无码牛牛影视在线二区| 毛片最新网址| 97超爽成人免费视频在线播放| 成人午夜亚洲影视在线观看| 夜夜爽免费视频| 国产99在线| 国产农村1级毛片| 强乱中文字幕在线播放不卡| 国产大片黄在线观看| 最新国产网站| 小13箩利洗澡无码视频免费网站| 午夜电影在线观看国产1区| 亚洲男人天堂久久| 中文字幕在线播放不卡| 91成人在线免费观看| 97久久人人超碰国产精品| 无码aaa视频| 日韩精品视频久久| 国产精品一老牛影视频| 波多野结衣一区二区三区88| 永久在线播放| 国产福利大秀91| 亚洲制服丝袜第一页| 久久综合色播五月男人的天堂| 国产一级α片| 亚洲av中文无码乱人伦在线r| 99热这里只有免费国产精品 | 国产精品久久久久鬼色| 国产91特黄特色A级毛片| 亚洲欧洲综合| 日韩人妻少妇一区二区| 欧美激情福利| 亚洲综合激情另类专区| 色噜噜狠狠狠综合曰曰曰| 成人午夜天| 亚洲美女视频一区| 欧美色视频网站| 国产精品成人免费综合| 国产日韩丝袜一二三区| 久久精品女人天堂aaa| a亚洲视频| 午夜日韩久久影院| 99精品欧美一区| 国产人成在线观看| 综合亚洲网| 91视频99| 国产在线观看精品| lhav亚洲精品| 成人福利在线看| 麻豆精品在线| 婷婷激情五月网| 91人妻日韩人妻无码专区精品| 日本不卡在线视频| 欧美成人精品在线| 欧美色视频在线| 欧美成人精品高清在线下载| 亚洲一级无毛片无码在线免费视频| 亚洲福利视频网址| 欧美一级在线| 亚洲狼网站狼狼鲁亚洲下载| 天天操精品| 亚洲va精品中文字幕| 一区二区在线视频免费观看| 国产精品亚洲欧美日韩久久| 亚洲第一中文字幕| 国产91丝袜在线播放动漫| 免费在线观看av| 日本久久久久久免费网络| 精品国产一区二区三区在线观看 | 免费国产好深啊好涨好硬视频| 青青草国产免费国产|