![《機(jī)器人程序設(shè)計-仿人機(jī)器人競技娛樂運(yùn)動設(shè)計》課件第5章_第1頁](http://file4.renrendoc.com/view11/M02/20/34/wKhkGWd15LeAYTEkAANtH6llizs261.jpg)
![《機(jī)器人程序設(shè)計-仿人機(jī)器人競技娛樂運(yùn)動設(shè)計》課件第5章_第2頁](http://file4.renrendoc.com/view11/M02/20/34/wKhkGWd15LeAYTEkAANtH6llizs2612.jpg)
![《機(jī)器人程序設(shè)計-仿人機(jī)器人競技娛樂運(yùn)動設(shè)計》課件第5章_第3頁](http://file4.renrendoc.com/view11/M02/20/34/wKhkGWd15LeAYTEkAANtH6llizs2613.jpg)
![《機(jī)器人程序設(shè)計-仿人機(jī)器人競技娛樂運(yùn)動設(shè)計》課件第5章_第4頁](http://file4.renrendoc.com/view11/M02/20/34/wKhkGWd15LeAYTEkAANtH6llizs2614.jpg)
![《機(jī)器人程序設(shè)計-仿人機(jī)器人競技娛樂運(yùn)動設(shè)計》課件第5章_第5頁](http://file4.renrendoc.com/view11/M02/20/34/wKhkGWd15LeAYTEkAANtH6llizs2615.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第5章機(jī)器人控制串口編程5.1引言5.2打開串口5.3配置串口5.4讀寫串口5.5關(guān)閉串口
5.1引言
在Win32下,可以使用兩種編程方式實(shí)現(xiàn)串口通信:其一是使用ActiveX控件,這種方法程序簡單,但不夠靈活;其二是調(diào)用Windows的API函數(shù),這種方法可以清楚地掌握串口通信的機(jī)制,并且自由靈活。本章只介紹API串口通信部分。
串口的操作可以有兩種操作方式:同步操作方式和重疊操作方式(又稱為異步操作方式)。同步操作時,API函數(shù)會阻塞直到操作完成以后才能返回(在多線程方式中,雖然不會阻塞主線程,但是仍然會阻塞監(jiān)聽線程);而重疊操作時,API函數(shù)會立即返回,操作在后臺進(jìn)行,能避免線程的阻塞。無論哪種操作方式,一般都通過以下四個步驟來完成:
(1)打開串口。
(2)配置串口。
(3)讀寫串口。
(4)關(guān)閉串口。
5.2打開串口
Win32系統(tǒng)把文件的概念進(jìn)行了擴(kuò)展。無論是文件、通信設(shè)備、命名管道、郵件槽、磁盤還是控制臺,都是用API函數(shù)CreateFile來打開或創(chuàng)建的。該函數(shù)的原型為:其中:
lpFileName:將要打開的串口邏輯名,如“COM1”。
dwDesiredAccess:指定串口訪問的類型,可以是讀取、寫入或二者并列。
dwShareMode:指定共享屬性,由于串口不能共享,該參數(shù)必須置為0。
lpSecurityAttributes:引用安全性屬性結(jié)構(gòu),缺省值為NULL。
dwCreationDistribution:創(chuàng)建標(biāo)志,對串口操作,該參數(shù)必須置為OPEN_EXISTING。
dwFlagsAndAttributes:屬性描述,用于指定該串口是否進(jìn)行異步操作,該值為FILE_FLAG_OVERLAPPED,表示使用異步的I/O;該值為0,表示同步I/O操作。
hTemplateFile:對串口而言該參數(shù)必須置為NULL。
同步I/O方式打開串口的示例代碼:
5.3配置串口
1.設(shè)置串口參數(shù)
設(shè)置串口參數(shù)需要通過一個DCB結(jié)構(gòu)來進(jìn)行。DCB結(jié)構(gòu)包含了諸如波特率、數(shù)據(jù)位數(shù)、奇偶校驗(yàn)和停止位數(shù)等信息。在查詢或配置串口的屬性時,都要用DCB結(jié)構(gòu)來作為緩沖區(qū)。
一般用CreateFile打開串口后,可以調(diào)用GetCommState函數(shù)來獲取串口的初始配置。要修改串口的配置,應(yīng)該先修改DCB結(jié)構(gòu),然后再調(diào)用SetCommState函數(shù)設(shè)置串口。
DCB結(jié)構(gòu)包含了串口的各項參數(shù)設(shè)置,該結(jié)構(gòu)原型如下:
2.申請串口通信緩沖區(qū)
除了在DCB中進(jìn)行的設(shè)置外,程序一般還需要設(shè)置I/O緩沖區(qū)的大小和超時。Windows用I/O緩沖區(qū)來暫存串口輸入和輸出的數(shù)據(jù)。如果通信的速率較高,則應(yīng)該設(shè)置較大的緩沖區(qū)。調(diào)用SetupComm函數(shù)可以設(shè)置串行口的輸入和輸出緩沖區(qū)的大小。
3.串口通信超時設(shè)置
在用ReadFile和WriteFile讀寫串行口時,需要考慮超時問題。超時的作用是在指定的時間內(nèi)沒有讀入或發(fā)送指定數(shù)量的字符時,ReadFile或WriteFile的操作仍然會結(jié)束。
要查詢當(dāng)前的超時設(shè)置應(yīng)調(diào)用GetCommTimeouts函數(shù),該函數(shù)會填充一個COMMTIMEOUTS結(jié)構(gòu)。調(diào)用SetCommTimeouts可以用某一個COMMTIMEOUTS結(jié)構(gòu)的內(nèi)容來設(shè)置超時。
讀寫串口的超時有兩種:間隔超時和總超時。間隔超時是指在接收時兩個字符之間的最大時延??偝瑫r是指讀寫操作總共花費(fèi)的最大時間。寫操作只支持總超時,而讀操作兩種超時均支持。用COMMTIMEOUTS結(jié)構(gòu)可以規(guī)定讀寫操作的超時。
COMMTIMEOUTS結(jié)構(gòu)的成員都以毫秒為單位??偝瑫r的計算公式是:
總超時=時間系數(shù)×要求讀/寫的字符數(shù)+時間常量
可以看出,間隔超時和總超時的設(shè)置是不相關(guān)的,這可以方便通信程序靈活地設(shè)置各種超時。
如果所有寫超時參數(shù)均為0,那么就不使用寫超時。如果ReadIntervalTimeout為0,那么就不使用讀間隔超時。如果ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant都為0,則不使用讀總超時。如果讀間隔超時被設(shè)置成MAXDWORD并且讀時間系數(shù)和讀時間常量都為0,那么在讀一次輸入緩沖區(qū)的內(nèi)容后讀操作就立即返回,不管是否讀入了要求的字符。
4.清空串口通信緩沖區(qū)
在讀寫串口之前,還要用PurgeComm()函數(shù)清空緩沖區(qū),該函數(shù)原型如下:
5.4讀寫串口
使用ReadFile和WriteFile讀寫串口,下面是兩個函數(shù)的聲明:在用ReadFile和WriteFile讀寫串口時,既可以同步執(zhí)行,也可以重疊執(zhí)行。在同步執(zhí)行時,函數(shù)直到操作完成后才返回。這意味著同步執(zhí)行時線程會被阻塞,從而導(dǎo)致效率下降。在重疊執(zhí)行時,即使操作還未完成,這兩個函數(shù)也會立即返回,費(fèi)時的I/O操作在后臺進(jìn)行。
ReadFile和WriteFile函數(shù)是同步還是異步由CreateFile函數(shù)決定,如果在調(diào)用CreateFile創(chuàng)建句柄時指定了FILE_FLAG_OVERLAPPED標(biāo)志,那么調(diào)用ReadFile和WriteFile對該句柄進(jìn)行的操作就應(yīng)該是重疊的;如果未指定重疊標(biāo)志,則讀寫操作應(yīng)該是同步的。ReadFile和WriteFile函數(shù)的同步或者異步應(yīng)該和CreateFile函數(shù)相一致。
ReadFile函數(shù)只要在串口輸入緩沖區(qū)中讀入指定數(shù)量的字符,就算完成操作。而WriteFile函數(shù)不但要把指定數(shù)量的字符拷入到輸出緩沖區(qū),而且要等這些字符從串行口送出去后才算完成操作。
如果操作成功,這兩個函數(shù)都返回TRUE。需要注意的是,當(dāng)ReadFile和WriteFile返回FALSE時,不一定就是操作失敗,這時線程應(yīng)該調(diào)用GetLastError函數(shù)分析返回的結(jié)果。例如,在重疊操作時如果操作還未完成函數(shù)就返回,那么函數(shù)會返回FALSE,同時GetLastError函數(shù)返回ERROR_IO_PENDING,這說明重疊操作還未完成。在使用ReadFile和WriteFile重疊操作時,線程需要創(chuàng)建OVERLAPPED結(jié)構(gòu)以供這兩個函數(shù)使用。線程通過OVERLAPPED結(jié)構(gòu)獲得當(dāng)前的操作狀態(tài),該結(jié)構(gòu)最重要的成員是hEvent。hEvent是讀寫事件,當(dāng)串口使用異步通信時,函數(shù)返回時操作可能還沒有完成,程序可以通過檢查該事件得知是否讀寫完畢。當(dāng)調(diào)用ReadFile和Wr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中介鋪面出售合同范本
- 2025年度進(jìn)口建筑材料采購合同
- 2025年度公司合同管理培訓(xùn)與咨詢服務(wù)合同
- 公廁改造施工合同范本
- 倆人合伙協(xié)議合同范例
- 關(guān)于編制太陽能光伏發(fā)電項目可行性研究報告
- 上海金山貨車租賃合同范例
- 關(guān)于圍巾合同范本
- 醫(yī)務(wù)人員合同范例
- 2025年度職業(yè)教育中心實(shí)訓(xùn)設(shè)備更新合同
- 二零二五年度電梯安裝工程監(jiān)理合同4篇
- 2025年中國儲備棉管理有限公司招聘筆試參考題庫含答案解析
- 2025年華能新能源股份有限公司招聘筆試參考題庫含答案解析
- 初中教學(xué)常規(guī)培訓(xùn)
- 2024-2030年中國兒童室內(nèi)游樂園產(chǎn)業(yè)競爭格局展望及投資策略分析報告
- 《建筑平面圖的繪制》課件
- 2025造價咨詢工作計劃范本
- 醫(yī)院審計科科長述職報告
- 《檔案管理課件》課件
- 2024年度中國共產(chǎn)主義共青團(tuán)團(tuán)課課件版
- 2025年中考物理終極押題猜想(新疆卷)(全解全析)
評論
0/150
提交評論