<nobr id="zkazv"></nobr>

      午夜精品一区二区三区成人,中文字幕av一区二区,亚洲AVAV天堂AV在线网阿V,肥臀浪妇太爽了快点再快点,国产网友愉拍精品视频手机,国产精品无码a∨麻豆,久久中文字幕一区二区,a级国产乱理伦片在线观看al
      首頁(yè) 新聞 工控搜 論壇 廠(chǎng)商論壇 產(chǎn)品 方案 廠(chǎng)商 人才 文摘 下載 展覽
      中華工控網(wǎng)首頁(yè)
        P L C | 變頻器與傳動(dòng) | 傳感器 | 現(xiàn)場(chǎng)檢測(cè)儀表 | 工控軟件 | 人機(jī)界面 | 運(yùn)動(dòng)控制
        D C S | 工業(yè)以太網(wǎng) | 現(xiàn)場(chǎng)總線(xiàn) | 顯示調(diào)節(jié)儀表 | 數(shù)據(jù)采集 | 數(shù)傳測(cè)控 | 工業(yè)安全
        電 源 | 嵌入式系統(tǒng) | PC based | 機(jī)柜箱體殼體 | 低壓電器 | 機(jī)器視覺(jué)
      基于VC++6.0的串口通信開(kāi)發(fā)方法
      北京世紀(jì)長(zhǎng)秋科技有限公司
      收藏本文     查看收藏
      1 引言
      在當(dāng)今的工業(yè)控制領(lǐng)域,串口通信是計(jì)算機(jī)與其他設(shè)備進(jìn)行數(shù)據(jù)通信時(shí)經(jīng)常使用的方法,具有實(shí)現(xiàn)簡(jiǎn)單、使用靈活、數(shù)據(jù)傳輸可靠等幾個(gè)優(yōu)點(diǎn),特別是在實(shí)時(shí)監(jiān)控系統(tǒng)中得到廣泛應(yīng)用,在我們使用的計(jì)算機(jī)上使用的串口一般是RS232,使用RS232接口只能進(jìn)行一對(duì)一的通信,然而在工業(yè)控制領(lǐng)域往往是一臺(tái)工控機(jī)和多臺(tái)智能設(shè)備進(jìn)行通信,并且要求傳輸距離遠(yuǎn),因?yàn)檫@些需求,在工控領(lǐng)域一般使用RS485。
      在Win32下,可以使用兩種編程方式實(shí)現(xiàn)串口通信,其一是使用MScomm控件,這種方法程序簡(jiǎn)單,但欠靈活。其二是調(diào)用Windows的API函數(shù),這種方法可以清楚地掌握串口通信的機(jī)制,并且自由靈活。使用控件的方法在本質(zhì)上也是使用API進(jìn)行串口通信,控件只不過(guò)是對(duì)API的一個(gè)封裝處理,本文只介紹使用API進(jìn)行串口通信編程的方法。
      2 串口通信的一般步驟
      2.1 打開(kāi)串口
      在32位Windows中,串口和其他通信設(shè)備(如磁盤(pán)等)都被作為文件進(jìn)行處理,在使用前必須先將其打開(kāi),為保證串口通信數(shù)據(jù)傳輸?shù)目煽啃裕谝话阋苑枪蚕砟J酱蜷_(kāi),也就是在被串口打開(kāi)后,其他程序不能在去打開(kāi)此設(shè)備。
      2.2 配置串口
      在使用串口進(jìn)行數(shù)據(jù)通信前必須對(duì)其進(jìn)行正確的配置,串口需要配置的主要參數(shù)有波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)、收發(fā)數(shù)據(jù)緩沖區(qū)大小。除此之外還要對(duì)串口進(jìn)行超時(shí)設(shè)置,以防止在串口通信時(shí)數(shù)據(jù)傳輸突然中斷而導(dǎo)致讀寫(xiě)操作進(jìn)入無(wú)限期等待的狀態(tài),設(shè)置了超時(shí),如果在指定時(shí)間內(nèi)沒(méi)有完成所進(jìn)行的操作,則此操作被自動(dòng)放棄。
      2.3 讀寫(xiě)串口
      在串口被打開(kāi)并設(shè)置好后,就可以使用串口進(jìn)行讀寫(xiě)數(shù)據(jù)了,讀寫(xiě)數(shù)據(jù)可以采用同步、異步及事件驅(qū)動(dòng)等多種方式。
      2.4 關(guān)閉串口
      在使用完串口后應(yīng)該將其關(guān)閉,如果沒(méi)有關(guān)閉,該串口會(huì)處于打開(kāi)狀態(tài),其他的應(yīng)用程序便無(wú)法打開(kāi)使用該串口。
      3 利用API函數(shù)實(shí)現(xiàn)串口通信
      3.1 打開(kāi)串口
      Win32系統(tǒng)把文件的概念進(jìn)行了擴(kuò)展。無(wú)論是文件、通信設(shè)備、命名管道、郵件槽、磁盤(pán)、還是控制臺(tái),都是用API函數(shù)CreateFile來(lái)打開(kāi)或創(chuàng)建的。該函數(shù)的原型為: 
      HANDLE CreateFile(LPCTSTR lpFileName,
                        DWORD dwDesiredAccess,
                        DWORD dwShareMode,
                        LPSECURITY_ATTRIBUTES lpSecurityAttributes,
                        DWORD dwCreationDistribution,
      DWORD dwFlagsAndAttributes,
      HANDLE hTemplateFile);
      各個(gè)參數(shù)說(shuō)明如下:
      lpFileName:將要打開(kāi)的串口邏輯名,如“COM1”; 
      dwDesiredAccess:指定串口訪(fǎng)問(wèn)的類(lèi)型,可以是讀取、寫(xiě)入或二者并列;
      dwShareMode:指定共享屬性,由于串口不能共享,該參數(shù)必須置為0;
      lpSecurityAttributes:引用安全性屬性結(jié)構(gòu),缺省值為NULL;
      dwCreationDistribution:創(chuàng)建標(biāo)志,對(duì)串口操作該參數(shù)必須置為OPEN_EXISTING;
      dwFlagsAndAttributes:屬性描述,用于指定該串口是否進(jìn)行異步操作,該值為FILE_FLAG_OVERLAPPED,表示使用異步的I/O;該值為0,表示同步I/O操作;
      hTemplateFile:對(duì)串口而言該參數(shù)必須置為NULL;
      3.2 配置串口
      在打開(kāi)通訊設(shè)備句柄后,常常需要對(duì)串口進(jìn)行一些初始化配置工作。這需要通過(guò)一個(gè)DCB結(jié)構(gòu)來(lái)進(jìn)行。DCB結(jié)構(gòu)包含了諸如波特率、數(shù)據(jù)位數(shù)、奇偶校驗(yàn)和停止位數(shù)等信息。在查詢(xún)或配置串口的屬性時(shí),都要用DCB結(jié)構(gòu)來(lái)作為緩沖區(qū)。在打開(kāi)串口后,可以調(diào)用GetCommState函數(shù)來(lái)獲取串口的默認(rèn)配置,該函數(shù)獲取一個(gè)DCB結(jié)構(gòu)體,只要在該結(jié)構(gòu)內(nèi)對(duì)應(yīng)該先修改DCB結(jié)構(gòu),然后再調(diào)用SetCommState函數(shù)以修改后的DCB結(jié)構(gòu)設(shè)置串口。DCB主要有以下幾個(gè)重要的成員:
      BYTE ByteSize; // 通信字節(jié)位數(shù)
      BYTE Parity;   //指定奇偶校驗(yàn)方法。此成員可以有下列值:
      //EVENPARITY 偶校驗(yàn)     NOPARITY 無(wú)校驗(yàn)
      //MARKPARITY 標(biāo)記校驗(yàn)   ODDPARITY 奇校驗(yàn)
      BYTE StopBits;  //指定停止位的位數(shù)。此成員可以有下列值:
      //ONESTOPBIT   1位停止位   
      //TWOSTOPBITS  2位停止位
      //ONE5STOPBITS 1.5位停止位
      除了使用BCD設(shè)置串口的一些基本參數(shù)外,一般還需要設(shè)置串口收發(fā)數(shù)據(jù)緩沖區(qū)的大小和超時(shí),超時(shí)的作用是在指定的時(shí)間內(nèi)沒(méi)有讀入或發(fā)送指定數(shù)量的字符,讀寫(xiě)操作仍然會(huì)結(jié)束。Windows用I/O緩沖區(qū)來(lái)暫存串口輸入和輸出的數(shù)據(jù),如果通信的速率較高,則應(yīng)該設(shè)置較大的緩沖區(qū)。我們可以使用API函數(shù)SetupComm設(shè)置串口的輸入和輸出緩沖區(qū)的大小,其原型如下:
      BOOL SetupComm(
          HANDLE hFile,          // 串口句柄 
          DWORD dwInQueue,      // 輸入緩沖區(qū)的大小(字節(jié)數(shù)) 
          DWORD dwOutQueue );   // 輸出緩沖區(qū)的大小(字節(jié)數(shù))
      關(guān)于讀寫(xiě)串口的超時(shí)設(shè)置,windows給我們提供一個(gè)專(zhuān)門(mén)的結(jié)構(gòu)體COMMTIMEOUTS,其定義如下:
      typedef struct _COMMTIMEOUTS {
           DWORD ReadIntervalTimeout;         //讀間隔超時(shí)
          DWORD ReadTotalTimeoutMultiplier;   //讀時(shí)間系數(shù)
          DWORD ReadTotalTimeoutConstant;    //讀時(shí)間常量
          DWORD WriteTotalTimeoutMultiplier;   //寫(xiě)時(shí)間系數(shù)
          DWORD WriteTotalTimeoutConstant;    //寫(xiě)時(shí)間常量
      } COMMTIMEOUTS,*LPCOMMTIMEOUTS;
      COMMTIMEOUTS結(jié)構(gòu)的成員都以毫秒為單位。總超時(shí)的計(jì)算公式是:
      總超時(shí)=時(shí)間系數(shù)×要求讀/寫(xiě)的字符數(shù)+時(shí)間常量
      例如,要讀入10個(gè)字符,那么讀操作的總超時(shí)的計(jì)算公式為:
      讀總超時(shí)=ReadTotalTimeoutMultiplier×10+ReadTotalTimeoutConstant
      通過(guò)該結(jié)構(gòu)體windowsAPI為我們提供兩個(gè)函數(shù):GetCommTimeouts和SetCommTimeouts,前者獲取當(dāng)前的超時(shí)設(shè)置,后者使用修改后的COMMTIMEOUTS設(shè)置超時(shí),與設(shè)置串口闡述類(lèi)似。
      在讀寫(xiě)串口之前,還要用PurgeComm(…)函數(shù)清空緩沖區(qū),該函數(shù)原型: 
      BOOL PurgeComm( 
          HANDLE hFile,      //串口句柄
          DWORD dwFlags );   //需要完成的操作
      參數(shù)dwFlags指定要完成的操作,可以是下列值的組合: 
      PURGE_TXABORT  中斷所有寫(xiě)操作并立即返回,即使寫(xiě)操作還沒(méi)有完成。
      PURGE_RXABORT  中斷所有讀操作并立即返回,即使讀操作還沒(méi)有完成。
      PURGE_TXCLEAR  清除輸出緩沖區(qū)
      PURGE_RXCLEAR  清除輸入緩沖區(qū)
      3.3 讀寫(xiě)串口
      讀寫(xiě)串口使用ReadFile和WriteFile兩個(gè)函數(shù),其原型如下:
      BOOL ReadFile(
          HANDLE hFile,                     //串口的句柄
          LPVOID lpBuffer,                  //保存讀入數(shù)據(jù)的指針
      DWORD nNumberOfBytesToRead,     //要讀入的數(shù)據(jù)的字節(jié)數(shù)
      LPDWORD lpNumberOfBytesRead,   //實(shí)際讀入的字節(jié)數(shù)
          LPOVERLAPPED lpOverlapped );    //OVERLAPPED,同步為NULL
      BOOL WriteFile(
        HANDLE hFile,                    //串口的句柄
        LPCVOID lpBuffer,                 //要寫(xiě)入數(shù)據(jù)的地址
        DWORD nNumberOfBytesToWrite,    //要寫(xiě)入數(shù)據(jù)的字節(jié)數(shù)
        LPDWORD lpNumberOfBytesWritten,  //實(shí)際寫(xiě)入的字節(jié)數(shù)
        LPOVERLAPPED lpOverlapped);      //OVERLAPPED,同步為NULL 
      在進(jìn)行同步操作時(shí),讀寫(xiě)函數(shù)要等到執(zhí)行完才返回,而在異步操作時(shí)函數(shù)立即返回,但不保證讀寫(xiě)操作完成,這時(shí)候就需要使用OVERLAPPED結(jié)構(gòu)進(jìn)行異步控制,該結(jié)構(gòu)體有一個(gè)重要的成員hEvent,該成員是windows事件對(duì)象的句柄在控制線(xiàn)程同步及異步操作時(shí)常用到,如果是異步操作,我們可以使用CreateEvent(…)創(chuàng)建事件對(duì)象并將返回值賦給hEvent,然后使用WaitForSingleObject或GetOverlappedResult等待讀寫(xiě)操作完成,進(jìn)而達(dá)到控制異步操作的目的。
      3.4 關(guān)閉串口
      在不使用串口的時(shí)候應(yīng)該將其關(guān)閉,以釋放windows的資源供其他程序使用,關(guān)閉串口只需調(diào)用CloseHandle(hComm/*串口句柄*/)即可。
      4 串行通信在世紀(jì)星組態(tài)軟件中的應(yīng)用
      作為通用的組態(tài)軟件,世紀(jì)星要與其他PLC、智能儀表等設(shè)備進(jìn)行通信,串行通信是主要的方式之一,基于前面所述使用API進(jìn)行串行通信開(kāi)發(fā)的優(yōu)點(diǎn),并考慮程序開(kāi)發(fā)的便捷和可重用等,在世紀(jì)星中,我們將串行通信API進(jìn)行封裝,以類(lèi)的方式對(duì)串口進(jìn)行操作,其中打開(kāi)串口及配置串口參數(shù)的操作我們通過(guò)可視化窗口進(jìn)行設(shè)定,然后在封裝類(lèi)中實(shí)現(xiàn),相關(guān)的操作處理讀寫(xiě)數(shù)據(jù)外基本都已實(shí)現(xiàn),因?yàn)椴煌脑O(shè)備有不同的協(xié)議,因而讀寫(xiě)串口的操作在驅(qū)動(dòng)程序中完成,這樣我們的開(kāi)發(fā)人員就不必關(guān)注太多其他的相關(guān)操作,只需根據(jù)實(shí)際設(shè)備重寫(xiě)讀寫(xiě)串口的成員函數(shù)即可。
      5 結(jié)論
          Windows是當(dāng)前應(yīng)用程序開(kāi)發(fā)的主流平臺(tái),VC++6.0是該平臺(tái)強(qiáng)大的開(kāi)發(fā)工具,使用windowsAPI開(kāi)發(fā)串口通信的程序可使我們更加清晰的了解串口通信的機(jī)制,并且開(kāi)發(fā)人員可以根據(jù)需要使用API進(jìn)行靈活的程序設(shè)計(jì),在SCADA中串行通信是必不可少的技術(shù),所以掌握串行通信的開(kāi)發(fā)方法具有現(xiàn)實(shí)意義。
       

      狀 態(tài): 離線(xiàn)

      公司簡(jiǎn)介
      產(chǎn)品目錄

      公司名稱(chēng): 北京世紀(jì)長(zhǎng)秋科技有限公司
      聯(lián) 系 人: 徐向農(nóng)
      電  話(huà): 010-84645656
      傳  真: 010-84646515
      地  址: 北京市朝陽(yáng)區(qū)惠新東街8號(hào)設(shè)計(jì)大廈14層
      郵  編: 100029
      主  頁(yè):
       
      該廠(chǎng)商相關(guān)技術(shù)文摘:
      世紀(jì)星油庫(kù)進(jìn)出油量監(jiān)測(cè)方案
      《世紀(jì)星組態(tài)軟件》的獨(dú)特功能
      世紀(jì)星:罐區(qū)安全 全面監(jiān)控
      世紀(jì)星實(shí)現(xiàn)彈簧按鈕功能升級(jí)
      世紀(jì)星控件DBComm:小塊兒有大“智慧”——DBComm.OCX控件 實(shí)現(xiàn)PID控制
      世紀(jì)星組態(tài)軟件完美的時(shí)間轉(zhuǎn)換函數(shù):DateTimeConvert
      世紀(jì)星組態(tài)軟件強(qiáng)大的數(shù)據(jù)庫(kù)查詢(xún)函數(shù)
      建立完美通信:世紀(jì)星與西門(mén)子S7-200以太網(wǎng)
      怎樣通過(guò)OPC Client與世紀(jì)星交互
      世紀(jì)星與硬件設(shè)備的連接秘笈
      世紀(jì)星組態(tài)軟件新技術(shù):短息報(bào)警功能
      世紀(jì)星組態(tài)軟件的數(shù)據(jù)存儲(chǔ)策略
      更多文摘...
      立即發(fā)送詢(xún)問(wèn)信息在線(xiàn)聯(lián)系該技術(shù)文摘廠(chǎng)商:
      用戶(hù)名: 密碼: 免費(fèi)注冊(cè)為中華工控網(wǎng)會(huì)員
      請(qǐng)留下您的有效聯(lián)系方式,以方便我們及時(shí)與您聯(lián)絡(luò)

      關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 本站動(dòng)態(tài) | 友情鏈接 | 法律聲明 | 不良信息舉報(bào)
      工控網(wǎng)客服熱線(xiàn):0755-86369299
      版權(quán)所有 中華工控網(wǎng) Copyright©2022 Gkong.com, All Rights Reserved

      主站蜘蛛池模板: 亚洲区成人综合一区二区| 国产国语一级毛片| 国产久9视频这里只有精品| 日韩国产成人精品视频| 午夜福利国产区在线观看| 亚洲天堂男人天堂女人天堂| 亚洲无人区码一二三四区| 国产精品高清一区二区三区| 国内精品久久久久影院蜜芽| 深夜宅男福利免费在线观看| 人妻系列无码专区免费| 精品日韩色国产在线观看| 久久综合久中文字幕青草| 性色av无码久久一区二区三区| 在线免费播放亚洲自拍网| 真实国产老熟女无套内射| 性欧美牲交在线视频| 四虎国产精品永久地址99| 亚欧洲乱码视频在线观看| 国产AV无码专区亚洲AV潘金链 | 国产成年码av片在线观看 | 午夜福利国产区在线观看| 亚洲春色在线视频| 亚洲精品天堂在线观看| 国产高清一区二区不卡| 无码AV无码天堂资源网影音先锋| 亚洲av高清一区二区三| 做暖暖视频在线看片免费 | 扒开双腿猛进入喷水高潮叫声| 三上悠亚精品一区二区久久| 国产一区二区不卡在线视频| 奇米777四色成人影视| 色悠悠国产精品免费在线| 男人狂桶女人出白浆免费视频| 东京热无码国产精品| 无码福利写真片视频在线播放| 亚洲国产精品久久电影欧美| av午夜福利亚洲精品福利| 精品国产精品午夜福利| 九色综合久99久久精品| 色猫咪av在线网址|