精品乱码一区内射人妻无码-亚洲中文AⅤ中文字幕在线-免费不卡国产福利在线观看-国产综合无码一区二区色蜜蜜

          您現(xiàn)在的位置:智能制造網>技術中心>基于VC++6.0的串口通信開發(fā)方法

          直播推薦

          更多>

          企業(yè)動態(tài)

          更多>

          推薦展會

          更多>

          基于VC++6.0的串口通信開發(fā)方法

          2009年12月04日 13:41:07人氣:1045來源:北京世紀長秋科技有限公司

          1 引言

          在當今的工業(yè)控制領域,串口通信是計算機與其他設備進行數(shù)據(jù)通信時經常使用的方法,具有實現(xiàn)簡單、使用靈活、數(shù)據(jù)傳輸可靠等幾個優(yōu)點,特別是在實時監(jiān)控系統(tǒng)中得到廣泛應用,在我們使用的計算機上使用的串口一般是RS232,使用RS232接口只能進行一對一的通信,然而在工業(yè)控制領域往往是一臺工控機和多臺智能設備進行通信,并且要求傳輸距離遠,因為這些需求,在工控領域一般使用RS485

          Win32下,可以使用兩種編程方式實現(xiàn)串口通信,其一是使用MScomm控件,這種方法程序簡單,但欠靈活。其二是調用WindowsAPI函數(shù),這種方法可以清楚地掌握串口通信的機制,并且自由靈活。使用控件的方法在本質上也是使用API進行串口通信,控件只不過是對API的一個封裝處理,本文只介紹使用API進行串口通信編程的方法。

          2 串口通信的一般步驟

          2.1 打開串口

          32Windows中,串口和其他通信設備(如磁盤等)都被作為文件進行處理,在使用前必須先將其打開,為保證串口通信數(shù)據(jù)傳輸?shù)目煽啃?,串口一般以非共享模式打開,也就是在被串口打開后,其他程序不能在去打開此設備。

          2.2 配置串口

          在使用串口進行數(shù)據(jù)通信前必須對其進行正確的配置,串口需要配置的主要參數(shù)有波特率、數(shù)據(jù)位、停止位、奇偶校驗、收發(fā)數(shù)據(jù)緩沖區(qū)大小。除此之外還要對串口進行超時設置,以防止在串口通信時數(shù)據(jù)傳輸突然中斷而導致讀寫操作進入無限期等待的狀態(tài),設置了超時,如果在時間內沒有完成所進行的操作,則此操作被自動放棄。

          2.3 讀寫串口

          在串口被打開并設置好后,就可以使用串口進行讀寫數(shù)據(jù)了,讀寫數(shù)據(jù)可以采用同步、異步及事件驅動等多種方式。

          2.4 關閉串口

          在使用完串口后應該將其關閉,如果沒有關閉,該串口會處于打開狀態(tài),其他的應用程序便無法打開使用該串口。

          3 利用API函數(shù)實現(xiàn)串口通信

          3.1 打開串口

          Win32系統(tǒng)把文件的概念進行了擴展。無論是文件、通信設備、命名管道、郵件槽、磁盤、還是控制臺,都是用API函數(shù)CreateFile來打開或創(chuàng)建的。該函數(shù)的原型為:

          HANDLE CreateFile(LPCTSTR lpFileName,

                            DWORD dwDesiredAccess,

                            DWORD dwShareMode,

                            LPSECURITY_ATTRIBUTES lpSecurityAttributes,

                            DWORD dwCreationDistribution,

          DWORD dwFlagsAndAttributes,

          HANDLE hTemplateFile);

          各個參數(shù)說明如下:

          lpFileName:將要打開的串口邏輯名,如“COM1;

          dwDesiredAccess:串口訪問的類型,可以是讀取、寫入或二者并列;

          dwShareMode:共享屬性,由于串口不能共享,該參數(shù)必須置為0;

          lpSecurityAttributes:引用安全性屬性結構,缺省值為NULL

          dwCreationDistribution:創(chuàng)建標志,對串口操作該參數(shù)必須置為OPEN_EXISTING

          dwFlagsAndAttributes:屬性描述,用于該串口是否進行異步操作,該值為FILE_FLAG_OVERLAPPED,表示使用異步的I/O;該值為0,表示同步I/O操作;

          hTemplateFile:對串口而言該參數(shù)必須置為NULL;

          3.2 配置串口

          在打開通訊設備句柄后,常常需要對串口進行一些初始化配置工作。這需要通過一個DCB結構來進行。DCB結構包含了諸如波特率、數(shù)據(jù)位數(shù)、奇偶校驗和停止位數(shù)等信息。在查詢或配置串口的屬性時,都要用DCB結構來作為緩沖區(qū)。在打開串口后,可以調用GetCommState函數(shù)來獲取串口的默認配置,該函數(shù)獲取一個DCB結構體,只要在該結構內對應該先修改DCB結構,然后再調用SetCommState函數(shù)以修改后的DCB結構設置串口。DCB主要有以下幾個重要的成員:

          BYTE ByteSize; // 通信字節(jié)位數(shù)

          BYTE Parity;   //奇偶校驗方法。此成員可以有下列值:

          //EVENPARITY 偶校驗     NOPARITY 無校驗

          //MARKPARITY 標記校驗   ODDPARITY 奇校驗

          BYTE StopBits;  //停止位的位數(shù)。此成員可以有下列值:

          //ONESTOPBIT   1位停止位  

          //TWOSTOPBITS  2位停止位

          //ONE5STOPBITS 1.5位停止位

          除了使用BCD設置串口的一些基本參數(shù)外,一般還需要設置串口收發(fā)數(shù)據(jù)緩沖區(qū)的大小和超時,超時的作用是在的時間內沒有讀入或發(fā)送數(shù)量的字符,讀寫操作仍然會結束。WindowsI/O緩沖區(qū)來暫存串口輸入和輸出的數(shù)據(jù),如果通信的速率較高,則應該設置較大的緩沖區(qū)。我們可以使用API函數(shù)SetupComm設置串口的輸入和輸出緩沖區(qū)的大小,其原型如下:

          BOOL SetupComm(

              HANDLE hFile,          // 串口句柄

              DWORD dwInQueue,      // 輸入緩沖區(qū)的大小(字節(jié)數(shù))

              DWORD dwOutQueue );   // 輸出緩沖區(qū)的大?。ㄗ止?jié)數(shù))

          關于讀寫串口的超時設置,windows給我們提供一個專門的結構體COMMTIMEOUTS,其定義如下:

          typedef struct _COMMTIMEOUTS {

               DWORD ReadIntervalTimeout;         //讀間隔超時

              DWORD ReadTotalTimeoutMultiplier;   //讀時間系數(shù)

              DWORD ReadTotalTimeoutConstant;    //讀時間常量

              DWORD WriteTotalTimeoutMultiplier;   //寫時間系數(shù)

              DWORD WriteTotalTimeoutConstant;    //寫時間常量

          } COMMTIMEOUTS,*LPCOMMTIMEOUTS;

          COMMTIMEOUTS結構的成員都以毫秒為單位??偝瑫r的計算公式是:

          總超時=時間系數(shù)×要求讀/寫的字符數(shù)+時間常量

          例如,要讀入10個字符,那么讀操作的總超時的計算公式為:

          讀總超時=ReadTotalTimeoutMultiplier×10ReadTotalTimeoutConstant

          通過該結構體windowsAPI為我們提供兩個函數(shù):GetCommTimeoutsSetCommTimeouts,前者獲取當前的超時設置,后者使用修改后的COMMTIMEOUTS設置超時,與設置串口闡述類似。

          在讀寫串口之前,還要用PurgeComm(函數(shù)清空緩沖區(qū),該函數(shù)原型:

          BOOL PurgeComm(

              HANDLE hFile,      //串口句柄

              DWORD dwFlags );   //需要完成的操作

          參數(shù)dwFlags要完成的操作,可以是下列值的組合:

          PURGE_TXABORT  中斷所有寫操作并立即返回,即使寫操作還沒有完成。

          PURGE_RXABORT  中斷所有讀操作并立即返回,即使讀操作還沒有完成。

          PURGE_TXCLEAR  清除輸出緩沖區(qū)

          PURGE_RXCLEAR  清除輸入緩沖區(qū)

          3.3 讀寫串口

          讀寫串口使用ReadFileWriteFile兩個函數(shù),其原型如下:

          BOOL ReadFile(

              HANDLE hFile,                     //串口的句柄

              LPVOID lpBuffer,                  //保存讀入數(shù)據(jù)的指針

          DWORD nNumberOfBytesToRead,     //要讀入的數(shù)據(jù)的字節(jié)數(shù)

          LPDWORD lpNumberOfBytesRead,   //實際讀入的字節(jié)數(shù)

              LPOVERLAPPED lpOverlapped );    //OVERLAPPED,同步為NULL

          BOOL WriteFile(

            HANDLE hFile,                    //串口的句柄

            LPCVOID lpBuffer,                 //要寫入數(shù)據(jù)的地址

            DWORD nNumberOfBytesToWrite,    //要寫入數(shù)據(jù)的字節(jié)數(shù)

            LPDWORD lpNumberOfBytesWritten,  //實際寫入的字節(jié)數(shù)

            LPOVERLAPPED lpOverlapped);      //OVERLAPPED,同步為NULL

          在進行同步操作時,讀寫函數(shù)要等到執(zhí)行完才返回,而在異步操作時函數(shù)立即返回,但不保證讀寫操作完成,這時候就需要使用OVERLAPPED結構進行異步控制,該結構體有一個重要的成員hEvent,該成員是windows事件對象的句柄在控制線程同步及異步操作時常用到,如果是異步操作,我們可以使用CreateEvent(…)創(chuàng)建事件對象并將返回值賦給hEvent,然后使用WaitForSingleObjectGetOverlappedResult等待讀寫操作完成,進而達到控制異步操作的目的。

          3.4 關閉串口

          在不使用串口的時候應該將其關閉,以釋放windows的資源供其他程序使用,關閉串口只需調用CloseHandlehComm/*串口句柄*/)即可。

          4 串行通信在世紀星組態(tài)軟件中的應用

          作為通用的組態(tài)軟件,世紀星要與其他PLC、智能儀表等設備進行通信,串行通信是主要的方式之一,基于前面所述使用API進行串行通信開發(fā)的優(yōu)點,并考慮程序開發(fā)的便捷和可重用等,在世紀星中,我們將串行通信API進行封裝,以類的方式對串口進行操作,其中打開串口及配置串口參數(shù)的操作我們通過可視化窗口進行設定,然后在封裝類中實現(xiàn),相關的操作處理讀寫數(shù)據(jù)外基本都已實現(xiàn),因為不同的設備有不同的協(xié)議,因而讀寫串口的操作在驅動程序中完成,這樣我們的開發(fā)人員就不必關注太多其他的相關操作,只需根據(jù)實際設備重寫讀寫串口的成員函數(shù)即可。

          5 結論

            Windows是當前應用程序開發(fā)的主流平臺,VC++6.0是該平臺強大的開發(fā)工具,使用windowsAPI開發(fā)串口通信的程序可使我們更加清晰的了解串口通信的機制,并且開發(fā)人員可以根據(jù)需要使用API進行靈活的程序設計,在SCADA中串行通信是*的技術,所以掌握串行通信的開發(fā)方法具有現(xiàn)實意義。

          全年征稿/資訊合作 聯(lián)系郵箱:1271141964@qq.com

          免責聲明

          • 凡本網注明"來源:智能制造網"的所有作品,版權均屬于智能制造網,轉載請必須注明智能制造網,http://www.tzhjjxc.com。違反者本網將追究相關法律責任。
          • 企業(yè)發(fā)布的公司新聞、技術文章、資料下載等內容,如涉及侵權、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔責任,本網有權刪除內容并追溯責任。
          • 本網轉載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品來源,并自負版權等法律責任。
          • 如涉及作品內容、版權等問題,請在作品發(fā)表之日起一周內與本網聯(lián)系,否則視為放棄相關權利。

          <
          更多 >

          工控網機器人儀器儀表物聯(lián)網3D打印工業(yè)軟件金屬加工機械包裝機械印刷機械農業(yè)機械食品加工設備制藥設備倉儲物流環(huán)保設備造紙機械工程機械紡織機械化工設備電子加工設備水泥設備海洋水利裝備礦冶設備新能源設備服裝機械印染機械制鞋機械玻璃機械陶瓷設備橡塑設備船舶設備電子元器件電氣設備


          我要投稿
          • 投稿請發(fā)送郵件至:(郵件標題請備注“投稿”)1271141964.qq.com
          • 聯(lián)系電話0571-89719789
          工業(yè)4.0時代智能制造領域“互聯(lián)網+”服務平臺
          智能制造網APP

          功能豐富 實時交流

          智能制造網小程序

          訂閱獲取更多服務

          微信公眾號

          關注我們

          抖音

          智能制造網

          抖音號:gkzhan

          打開抖音 搜索頁掃一掃

          視頻號

          智能制造網

          公眾號:智能制造網

          打開微信掃碼關注視頻號

          快手

          智能制造網

          快手ID:gkzhan2006

          打開快手 掃一掃關注
          意見反饋
          關閉
          企業(yè)未開通此功能
          詳詢客服 : 0571-87858618