《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > 基于VC++6.0的串口通信開發方法
基于VC++6.0的串口通信開發方法
摘要: 在32位windows中,串口和其他通信設備(如磁盤等)都被作為文件進行處理,在使用前必須先將其打開,為保證串口通信數據傳輸的可靠性,串口一般以非共享模式打開,也就是在被串口打開后,其他程序不能在去打開此設備。
Abstract:
Key words :

1.引言

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

  在win32下,可以使用兩種編程方式實現串口通信,其一是使用mscomm控件,這種方法程序簡單,但欠靈活。其二是調用windows的api函數,這種方法可以清楚地掌握串口通信的機制,并且自由靈活。使用控件的方法在本質上也是使用api進行串口通信,控件只不過是對api的一個封裝處理,本文只介紹使用api進行串口通信編程的方法。
 
2 串口通信的一般步驟

  2.1 打開串口
  在32位windows中,串口和其他通信設備(如磁盤等)都被作為文件進行處理,在使用前必須先將其打開,為保證串口通信數據傳輸的可靠性,串口一般以非共享模式打開,也就是在被串口打開后,其他程序不能在去打開此設備。
  2.2 配置串口
  在使用串口進行數據通信前必須對其進行正確的配置,串口需要配置的主要參數有波特率、數據位、停止位、奇偶校驗、收發數據緩沖區大小。除此之外還要對串口進行超時設置,以防止在串口通信時數據傳輸突然中斷而導致讀寫操作進入無限期等待的狀態,設置了超時,如果在指定時間內沒有完成所進行的操作,則此操作被自動放棄。
  2.3 讀寫串口
  在串口被打開并設置好后,就可以使用串口進行讀寫數據了,讀寫數據可以采用同步、異步及事件驅動等多種方式。
  2.4 關閉串口
  在使用完串口后應該將其關閉,如果沒有關閉,該串口會處于打開狀態,其他的應用程序便無法打開使用該串口。
 
3 利用api函數實現串口通信

  3.1 打開串口
  win32系統把文件的概念進行了擴展。無論是文件、通信設備、命名管道、郵件槽、磁盤、還是控制臺,都是用api函數createfile來打開或創建的。該函數的原型為:
  handle createfile( lpctstr lpfilename,
                    dword dwdesiredaccess,
                    dword dwsharemode,
                    lpsecurity_attributes lpsecurityattributes,
                    dword dwcreationdistribution,
  dword dwflagsandattributes,
  handle htemplatefile);
  各個參數說明如下:
  lpfilename:將要打開的串口邏輯名,如“com1”;
  dwdesiredaccess:指定串口訪問的類型,可以是讀取、寫入或二者并列;
  dwsharemode:指定共享屬性,由于串口不能共享,該參數必須置為0;
  lpsecurityattributes:引用安全性屬性結構,缺省值為null;
  dwcreationdistribution:創建標志,對串口操作該參數必須置為open_existing;
  dwflagsandattributes:屬性描述,用于指定該串口是否進行異步操作,該值為       file_flag_overlapped,表示使用異步的i/o;該值為0,表示同步i/o操作;
  htemplatefile:對串口而言該參數必須置為null;

  3.2 配置串口
  在打開通訊設備句柄后,常常需要對串口進行一些初始化配置工作。這需要通過一個dcb結構來進行。dcb結構包含了諸如波特率、數據位數、奇偶校驗和停止位數等信息。在查詢或配置串口的屬性時,都要用dcb結構來作為緩沖區。在打開串口后,可以調用getcommstate函數來獲取串口的默認配置,該函數獲取一個dcb結構體,只要在該結構內對應該先修改dcb結構,然后再調用setcommstate函數以修改后的dcb結構設置串口。dcb主要有以下幾個重要的成員:
  byte bytesize; // 通信字節位數byte parity;   //指定奇偶校驗方法。此成員可以有下列值://evenparity 偶校驗     noparity 無校驗//markparity 標記校驗   oddparity 奇校驗byte stopbits; //指定停止位的位數。此成員可以有下列值://onestopbit   1位停止位   //twostopbits  2位停止位//one5stopbits 1.5位停止位
  除了使用bcd設置串口的一些基本參數外,一般還需要設置串口收發數據緩沖區的大小和超時,超時的作用是在指定的時間內沒有讀入或發送指定數量的字符,讀寫操作仍然會結束。windows用i/o緩沖區來暫存串口輸入和輸出的數據,如果通信的速率較高,則應該設置較大的緩沖區。我們可以使用api函數setupcomm設置串口的輸入和輸出緩沖區的大小,其原型如下:bool setupcomm(    handle hfile,          // 串口句柄     dword dwinqueue,      // 輸入緩沖區的大?。ㄗ止潝担?nbsp;    dword dwoutqueue );   // 輸出緩沖區的大?。ㄗ止潝担?br /> 關于讀寫串口的超時設置,windows給我們提供一個專門的結構體commtimeouts,其定義如下:typedef struct _commtimeouts {        dword readintervaltimeout;         //讀間隔超時    dword readtotaltimeoutmultiplier;  //讀時間系數    dword readtotaltimeoutconstant;    //讀時間常量    dword writetotaltimeoutmultiplier;  // 寫時間系數    dword writetotaltimeoutconstant;   //寫時間常量} commtimeouts,*lpcommtimeouts;

  commtimeouts結構的成員都以毫秒為單位??偝瑫r的計算公式是:
  總超時=時間系數×要求讀/寫的字符數+時間常量
  例如,要讀入10個字符,那么讀操作的總超時的計算公式為:
  讀總超時=readtotaltimeoutmultiplier×10+readtotaltimeoutconstant
  通過該結構體windowsapi為我們提供兩個函數:getcommtimeouts和setcommtimeouts,前者獲取當前的超時設置,后者使用修改后的commtimeouts設置超時,與設置串口闡述類似。
  在讀寫串口之前,還要用purgecomm(…)函數清空緩沖區,該函數原型:
  bool purgecomm(
      handle hfile,     //串口句柄
      dword dwflags );   // 需要完成的操作
  參數dwflags指定要完成的操作,可以是下列值的組合:
  purge_txabort  中斷所有寫操作并立即返回,即使寫操作還沒有完成。
  purge_rxabort  中斷所有讀操作并立即返回,即使讀操作還沒有完成。
  purge_txclear  清除輸出緩沖區
  purge_rxclear  清除輸入緩沖區

  3.3 讀寫串口
  讀寫串口使用readfile和writefile兩個函數,其原型如下:bool readfile(    handle hfile,                     //串口的句柄    lpvoid lpbuffer,                  // 保存讀入數據的指針,       dword nnumberofbytestoread,     // 要讀入的數據的字節數lpdword lpnumberofbytesread,   //  實際讀入的字節數    lpoverlapped lpoverlapped );    // overlapped,同步為null    
  bool writefile(
    handle hfile,                    //串口的句柄
    lpcvoid lpbuffer,                 // 要寫入數據的地址
    dword nnumberofbytestowrite,     // 要寫入數據的字節數
    lpdword lpnumberofbyteswritten,  //實際寫入的字節數
    lpoverlapped lpoverlapped);      // overlapped,同步為null 在進行同步操作時,讀寫函數  要等到執行完才返回,而在異步操作時函數立即返回,但不保證讀寫操作完成,這時候就需要使用overlapped結構進行異步控制,該結構體有一個重要的成員hevent,該成員是windows事件對象的句柄在控制線程同步及異步操作時常用到,如果是異步操作,我們可以使用createevent(…)創建事件對象并將返回值賦給hevent,然后使用waitforsingleobject或getoverlappedresult等待讀寫操作完成,進而達到控制異步操作的目的。

3.4   關閉串口

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

4.串行通信在世紀星組態軟件中的應用

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

 5 結論

  windows是當前應用程序開發的主流平臺,vc++6.0是該平臺強大的開發工具,使用windowsapi開發串口通信的程序可是使我們更加清晰的了解串口通信的機制,并且開發人員可以根據需要使用api進行靈活的程序設計,在scada中串行通信是必不可少的技術,所以掌握串行通信的開發方法具有現實意義。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美一级专区免费大片| 欧美日韩成人综合天天影院| 国产精品99久久久久久久女警| 日韩亚洲欧美一区| 免费在线一区二区| 欧美一级精品大片| 欧美一区2区视频在线观看| 久久激情视频免费观看| 亚洲精品一区二区三区在线观看| 久久精品国产免费看久久精品| 亚洲激情欧美| 欧美金8天国| 午夜综合激情| 亚洲电影视频在线| 久久久久网址| 国产亚洲一区二区精品| 99re6热在线精品视频播放速度| 一区二区三欧美| 国产精品久久久久aaaa| 欧美综合第一页| 韩国欧美国产1区| av不卡在线看| 亚洲手机成人高清视频| 午夜国产不卡在线观看视频| 国产伦精品一区二区三区高清版| 国产精品综合av一区二区国产馆| 欧美丰满少妇xxxbbb| 国产精品女主播在线观看| 新狼窝色av性久久久久久| 国内精品国语自产拍在线观看| 国产精品美女午夜av| 一本色道久久综合亚洲91| 亚洲欧洲日产国产综合网| 裸体素人女欧美日韩| 欧美日韩亚洲一区| 欧美精品一区在线播放| 久久久美女艺术照精彩视频福利播放| 蜜桃久久av一区| 一区二区激情小说| 午夜天堂精品久久久久| 午夜精品国产| 亚洲一区二区三区午夜| 久久在线视频在线| 亚洲在线黄色| 亚洲自拍偷拍网址| 欧美在线播放| 午夜欧美精品| 欧美一站二站| 亚洲动漫精品| 欧美成人精品影院| 亚洲国产精品久久久久婷婷老年| 亚洲一区二区黄色| 欧美日韩一视频区二区| 91久久久精品| 国产一区二区三区的电影| 国产精品日韩在线观看| 欧美精品导航| 欧美国产日韩xxxxx| 美女诱惑黄网站一区| 99精品黄色片免费大全| 极品av少妇一区二区| 欧美视频在线一区二区三区| 欧美激情va永久在线播放| 欧美岛国激情| 亚洲手机成人高清视频| 国产亚洲精品美女| 一本色道久久综合亚洲精品婷婷| 一区二区三区在线视频播放| 精品成人在线| 9色porny自拍视频一区二区| 国产精品wwwwww| 亚洲无亚洲人成网站77777| 久久久99国产精品免费| 欧美日韩综合精品| 欧美久久一级| 亚洲一区视频| 亚洲欧美怡红院| 狠狠入ady亚洲精品| 亚洲一区二区在线播放| 久久www成人_看片免费不卡| 欧美精品三级日韩久久| 欧美日韩中文字幕日韩欧美| 国产精品久久久久久久久久免费看| 欧美一区二区三区久久精品茉莉花| 亚洲桃色在线一区| 国产日本亚洲高清| 中文亚洲免费| 国产精品卡一卡二卡三| 亚洲韩国精品一区| 亚洲国产高清在线观看视频| 久久这里有精品视频| 99精品国产热久久91蜜凸| 国产综合久久久久久鬼色| 欧美日韩和欧美的一区二区| 久久夜色精品亚洲噜噜国产mv| 亚洲黄色视屏| 欧美在线视频观看免费网站| 久久久久天天天天| 亚洲小说欧美另类婷婷| 欧美亚洲视频| 国产欧美日韩视频一区二区三区| 国模精品娜娜一二三区| 欧美视频日韩视频在线观看| 美女成人午夜| 国产区日韩欧美| 亚洲欧美视频在线观看| 久久精品国产免费看久久精品| 久久这里有精品视频| 亚洲你懂的在线视频| 99re8这里有精品热视频免费| 欧美人与性动交a欧美精品| 韩日成人av| 欧美激情视频一区二区三区在线播放| 欧美成人免费在线观看| 欧美日韩亚洲一区二区三区| 欧美精品久久天天躁| 麻豆91精品| 玖玖在线精品| 免费av成人在线| 国产精品美女久久久久久久| 欧美色精品天天在线观看视频| 美日韩精品免费观看视频| 99视频精品免费观看| 欧美三级视频在线播放| 一级日韩一区在线观看| 国产精品日韩欧美综合| 国产日韩欧美精品在线| 国产性天天综合网| 一本综合精品| 免费短视频成人日韩| 一区二区亚洲欧洲国产日韩| 国产精品久久久久久亚洲调教| 久久一区二区三区四区五区| 欧美精品三级在线观看| 欧美日韩精品一本二本三本| 久久久久久久一区二区| 亚洲综合好骚| 亚洲精品一区二| 国产欧美视频在线观看| 国产精品乱码一区二三区小蝌蚪| 国产精品高潮呻吟| 亚洲欧美在线另类| 国产精品天天看| 亚洲国产岛国毛片在线| 亚洲欧美日本国产专区一区| 欧美中在线观看| 亚洲国产一区二区三区a毛片| 久久精品水蜜桃av综合天堂| 亚洲免费电影在线| 亚洲靠逼com| 欧美日韩视频| 久久精品国产一区二区电影| 久久久久久91香蕉国产| 久久精品免费观看| 欧美精品久久一区| 国产精品久久二区二区| 一区二区亚洲精品国产| 国产麻豆一精品一av一免费| 久久精品国产亚洲高清剧情介绍| 亚洲视频精品在线| 欧美亚洲一区在线| 欧美福利在线观看| 国产一区二区三区四区在线观看| 一区二区三区欧美在线| 国产精品久久久久7777婷婷| 激情偷拍久久| 欧美大片国产精品| 亚洲电影在线看| 久久夜色精品国产噜噜av| 欧美在线免费观看视频| 性伦欧美刺激片在线观看| 午夜一区二区三区在线观看| 亚洲欧美中文字幕| 亚洲网站在线看| 精品粉嫩aⅴ一区二区三区四区| 激情欧美一区二区三区| 一区二区三区精品| 性色av一区二区三区| 激情综合亚洲| 亚洲字幕在线观看| 国产欧美在线播放| 欧美性感一类影片在线播放| 国产综合色产| 亚洲一区二区在线免费观看视频| 欧美视频中文在线看| 国产精品国产亚洲精品看不卡15| 久久精彩免费视频| 欧美日韩mp4| 欧美在线观看一区二区三区| 亚洲自啪免费| 久久视频一区| 激情综合网址| 午夜精品久久久久久久99热浪潮| 欧美怡红院视频| 亚洲综合视频在线| 久久综合五月天婷婷伊人| 国产综合色精品一区二区三区| 欧美日韩午夜激情| 国产精品实拍| 国产精品视频成人| 国产精品成人一区二区网站软件| 国产日韩欧美在线播放| 亚洲电影欧美电影有声小说| 久久一区欧美| 亚洲高清视频一区| 国产欧美综合一区二区三区| 久久天天躁夜夜躁狠狠躁2022| 亚洲激精日韩激精欧美精品| 久久精品99国产精品| 欧美日韩在线电影| 亚洲欧美一区二区原创| 国内精品久久久| 亚洲国产精品电影| 欧美日韩国产一区二区三区地区| 欧美一级淫片aaaaaaa视频| 国产一区亚洲| 欧美日韩中文字幕在线| 麻豆成人91精品二区三区| 蜜臀久久久99精品久久久久久| 欧美成人精精品一区二区频| 国产精品免费看片| 日韩视频第一页| 亚洲一区免费视频| 久久五月婷婷丁香社区| 国产手机视频一区二区| 欧美国产精品劲爆| 久久久久在线观看| 伊人夜夜躁av伊人久久| 国产精品久久久久一区| 国产亚洲欧美激情| 韩国av一区二区三区在线观看| 午夜免费久久久久| 亚洲一区二区毛片| 亚洲精品裸体| 久久久久91| 国产亚洲激情| 久久久www免费人成黑人精品| 欧美性大战xxxxx久久久| 国产精品裸体一区二区三区| 久久字幕精品一区| 欧美精品免费播放| 国产老女人精品毛片久久| 国产视频一区免费看| 亚洲精品国产欧美| 亚洲网站在线播放| 在线观看日韩av电影| 激情综合在线| 亚洲精品一区在线观看| 亚洲在线成人精品| 久久综合色婷婷| 亚洲国产高清自拍| 国产精品一区三区| 亚洲欧美在线x视频| 亚洲在线国产日韩欧美| 国产精品一区免费在线观看| 欧美成人xxx| 黄色成人91| 精品成人在线视频| 性欧美8khd高清极品| 久久精品人人爽| 国产老女人精品毛片久久| 精品成人一区二区三区四区| 亚洲一区二区三区色| 欧美日韩福利在线观看| 久久在线精品| 欧美精品亚洲| 亚洲一区二区三区在线视频| 久久久www成人免费精品| 欧美日韩国产在线观看| 亚洲欧美韩国| 欧美性大战久久久久| 欧美精品一区二| 一区二区三区视频在线看| 亚洲一区二区三区色| 国产精品久久久久久久久久三级| 欧美另类女人| 亚洲国产高清高潮精品美女| 欧美日韩亚洲综合| 久久激情五月婷婷| 国产精品mm| 欧美一区二区大片| 国产精品一区二区在线| 激情视频一区| 亚洲一区激情| 亚洲综合成人婷婷小说| 亚洲在线免费观看| 欧美主播一区二区三区| 午夜精品久久久久久久男人的天堂| 久久精品国产亚洲a| 国产精品不卡在线| 亚洲国内高清视频| 日韩视频免费在线| 欧美精品一区二区三区四区| 美女网站在线免费欧美精品| 欧美aⅴ一区二区三区视频| 国产精品女同互慰在线看| 欧美日韩的一区二区| 国产日韩精品视频一区二区三区| 在线观看91久久久久久| 国产精品国产三级国产普通话蜜臀| 欧美色大人视频| 在线观看国产欧美| 亚洲性图久久| 欧美日韩亚洲综合在线| 欧美精品国产精品日韩精品| 国产精品推荐精品| 久久国产日本精品| 欧美日韩中文字幕日韩欧美| 亚洲国产日韩一区二区| 欧美自拍丝袜亚洲| 亚洲七七久久综合桃花剧情介绍| 欧美午夜精品理论片a级按摩| 小处雏高清一区二区三区| 亚洲精品一区二区三区婷婷月| 欧美另类人妖| 亚洲视频欧洲视频| 国产精品激情偷乱一区二区∴| 国语自产精品视频在线看抢先版结局| 夜夜嗨av色一区二区不卡| 国产一区二区三区久久悠悠色av| 宅男精品视频| 99国产精品99久久久久久| 欧美激情成人在线视频| 日韩午夜视频在线观看| 在线观看中文字幕亚洲| 麻豆久久久9性大片| 久久香蕉国产线看观看av| 亚洲永久免费|