win32串口編程_第1頁
已閱讀1頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Win32 串口編程 串口編程作者:韓耀旭下載源代碼在工業(yè)控制中,工控機(jī)(一般都基于 Windows 平臺(tái))經(jīng)常需要與智能儀表通過串口進(jìn)行通信。串口通信方便易行,應(yīng)用廣泛。一般情況下,工控機(jī)和各智能儀表通過 RS485 總線進(jìn)行通信。RS485 的通信方式是半雙工的,只能由作為主節(jié)點(diǎn)的工控 PC 機(jī)依次輪詢網(wǎng)絡(luò)上的各智能控制單元子節(jié)點(diǎn)。每次通信都是由 PC 機(jī)通過串口向智能控制單元發(fā)布命令,智能控制單元在接收到正確的命令后作出應(yīng)答。在

2、Win32 下,可以使用兩種編程方式實(shí)現(xiàn)串口通信,其一是使用 ActiveX 控件,這種方法程序簡單,但欠靈活。其二是調(diào)用Windows 的 API 函數(shù),這種方法可以清楚地掌握串口通信的機(jī)制,并且自由靈活。本文我們只介紹 API 串口通信部分。串口的操作可以有兩種操作方式:同步操作方式和重疊操作方式(又稱為異步操作方式)。同步操作時(shí),API 函數(shù)會(huì)阻塞直到操作完成以后才能返回(在多線程方式中,雖然不會(huì)阻塞主線程,但是仍然會(huì)阻塞監(jiān)聽線程

3、);而重疊操作方式, API 函數(shù)會(huì)立即返回,操作在后臺(tái)進(jìn)行,避免線程的阻塞。無論那種操作方式,一般都通過四個(gè)步驟來完成:(1) 打開串口(2) 配置串口(3) 讀寫串口(4) 關(guān)閉串口(1) 打開串口 Win32 系統(tǒng)把文件的概念進(jìn)行了擴(kuò)展。無論是文件、通信設(shè)備、命名管道、郵件槽、磁盤、還是控制臺(tái),都是用 API 函數(shù)CreateFile 來打開或創(chuàng)建的。該函數(shù)的原型為: HANDLE CreateFile( LPCTSTR lpFi

4、leName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD dwCreationDistribution,DWORD dwFlagsAndAttributes,HANDLE hTemplateFile);? lpFileName:將要打開的串口邏輯名,如“COM1”; ? dwDesiredAccess:指

5、定串口訪問的類型,可以是讀取、寫入或二者并列; ? dwShareMode:指定共享屬性,由于串口不能共享,該參數(shù)必須置為 0; ? lpSecurityAttributes:引用安全性屬性結(jié)構(gòu),缺省值為 NULL; ? dwCreationDistribution:創(chuàng)建標(biāo)志,對串口操作該參數(shù)必須置為 OPEN_EXISTING; ? dwFlagsAndAttributes:屬性描述,用于指定該串口是否進(jìn)行異步操作,該值為 FILE_

6、FLAG_OVERLAPPED,表示使用異步的 I/O;該值為 0,表示同步 I/O 操作; ? hTemplateFile:對串口而言該參數(shù)必須置為 NULL; 同步 I/O 方式打開串口的示例代碼: HANDLE hCom; //全局變量,串口句柄hCom=CreateFile(“COM1“,//COM1 口GENERIC_READ|GENERIC_WRITE, //允許讀和寫0, //獨(dú)占方式NULL,OPEN_EXISTING

7、, //打開而不是創(chuàng)建0, //同步方式NULL);if(hCom==(HANDLE)-1){AfxMessageBox(“打開 COM 失敗!“);#define TWOSTOPBITS 2#define CBR_110 110#define CBR_300 300#define CBR_600 600#define CBR_1200

8、 1200#define CBR_2400 2400#define CBR_4800 4800#define CBR_9600 9600#define CBR_14400 14400#define CBR_19200 19200#define CBR_38400 38400#define CBR_5600

9、0 56000#define CBR_57600 57600#define CBR_115200 115200#define CBR_128000 128000#define CBR_256000 256000GetCommState 函數(shù)可以獲得 COM 口的設(shè)備控制塊,從而獲得相關(guān)參數(shù): BOOL GetCommState(HANDLE h

10、File, //標(biāo)識(shí)通訊端口的句柄LPDCB lpDCB //指向一個(gè)設(shè)備控制塊(DCB 結(jié)構(gòu))的指針);SetCommState 函數(shù)設(shè)置 COM 口的設(shè)備控制塊:BOOL SetCommState(HANDLE hFile, LPDCB lpDCB );除了在 BCD 中的設(shè)置外,程序一般還需要設(shè)置 I/O 緩沖區(qū)的大小和超時(shí)。 Windows 用 I/O 緩沖區(qū)來暫存串口輸入和輸出的數(shù)據(jù)如果通信的速率較高,則應(yīng)該設(shè)置較大的緩沖區(qū)。

11、調(diào)用 SetupComm 函數(shù)可以設(shè)置串行口的輸入和輸出緩沖區(qū)的大小。 BOOL SetupComm(HANDLE hFile, // 通信設(shè)備的句柄 DWORD dwInQueue, // 輸入緩沖區(qū)的大小(字節(jié)數(shù)) DWORD dwOutQueue // 輸出緩沖區(qū)的大?。ㄗ止?jié)數(shù)));在用 ReadFile 和 WriteFile 讀寫串行口時(shí),需要考慮超時(shí)問題。超時(shí)的作用是在指定的時(shí)間內(nèi)沒有讀入或發(fā)送指定數(shù)量的字符,ReadFil

12、e 或 WriteFile 的操作仍然會(huì)結(jié)束。要查詢當(dāng)前的超時(shí)設(shè)置應(yīng)調(diào)用 GetCommTimeouts 函數(shù),該函數(shù)會(huì)填充一個(gè) COMMTIMEOUTS 結(jié)構(gòu)。調(diào)用SetCommTimeouts 可以用某一個(gè) COMMTIMEOUTS 結(jié)構(gòu)的內(nèi)容來設(shè)置超時(shí)。讀寫串口的超時(shí)有兩種:間隔超時(shí)和總超時(shí)。 間隔超時(shí)是指在接收時(shí)兩個(gè)字符之間的最大時(shí)延。 總超時(shí)是指讀寫操作總共花費(fèi)的最大時(shí)間。寫操作只支持總超時(shí),而讀操作兩種超時(shí)均支持。用 COM

13、MTIMEOUTS 結(jié)構(gòu)可以規(guī)定讀寫操作的超時(shí)。COMMTIMEOUTS 結(jié)構(gòu)的定義為: typedef struct _COMMTIMEOUTS { DWORD ReadIntervalTimeout; //讀間隔超時(shí)DWORD ReadTotalTimeoutMultiplier; //讀時(shí)間系數(shù)DWORD ReadTotalTimeoutConstant; //讀時(shí)間常量DWORD WriteTotalTimeoutMulti

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論