<button id="3sltb"></button>
  • <span id="3sltb"><optgroup id="3sltb"></optgroup></span>
    <label id="3sltb"><meter id="3sltb"></meter></label>
    <rt id="3sltb"><optgroup id="3sltb"><strike id="3sltb"></strike></optgroup></rt>
    <label id="3sltb"></label>
    <label id="3sltb"><legend id="3sltb"><th id="3sltb"></th></legend></label>

    <label id="3sltb"><meter id="3sltb"></meter></label>

      <ruby id="3sltb"><dl id="3sltb"><listing id="3sltb"></listing></dl></ruby>

        產品列表PRODUCTS LIST

        聯系信息

        • 電話:
          13521418576
        • 傳真:
          010-62979724
        首頁 > 技術與支持 > 串口開發的另一種方式
        串口開發的另一種方式
        點擊次數:5032 更新時間:2009-12-23

          根據以前的使用過的一系列串口操作軟件發現,大多數的串口操作軟件不具備自動的記錄保存功能,記錄文件是在應用程序目錄下 以時間命名的文本文件。現在發布的這個程序還有一些功能沒有實現不過這不影響使用。如果有需要大家可以自行添加代碼。下面主要說明一下程序的核心類CSuperSerialPort。該類主要功能有:

        控制串口收發數據并利用window系統的消息來轉發接收到的數據;
        支持一個CSuperSerialPort對象向多個窗口發送數據;
        支持發送大塊數據;
        支持動態設置收發緩存區大小;
        支持利用外部線程進行文件傳輸;
        支持收發數據統計;
        支持自定義錯誤信息;
        該類還有兩個輔助的結構體 WIN_ARG 和 tagPackage。WIN_ARG 是窗體描述結構體,該結構體包含了窗體指針、自定義消息和位置ID。


        typedef struct WIN_ARG
        {
             UINT  winId;
             CWnd* pWin;
             DWORD msg;
        }WINARG, *pWINARG;

        tagPackage 是數據包描述結構體,該結構體包含了數據長度、數據類別和數據值。CSuperSerialPort利用這個結構體來分解大塊數據然后發送。
        typedef struct tagPackage
        {
             enum emMaxSize
             { emMAX_SIZE = 1024 };
         
             UINT iLen;
             UINT iType;
             BYTE pData[emMAX_SIZE];
        }PACKAGE, * pPACKAGE;

          在串口程序的開發過程中,zui麻煩的問題就是需要事先確定緩存區的大小。如果傳輸時按協議傳輸這個一般沒什么問題,但是如果按一個字節一個字節的進行傳輸,那么在收數據的時候就很麻煩。解決這一問題時我利用了串口中cbInQue這一屬性,同時為了提高程序的性能啟用了一個接收線程,并將收下來的數據都發往的窗體對象然后再進行處理。如:
        pPACKAGE pPack = new PACKAGE;
        DWORD rdLen = pCom->m_comState.cbInQue;
        pPack->iLen   = rdLen;

        為了協同串口的收發,在初始化串口的時候要啟用FILE_FLAG_OVERLAPPED這一屬性,如
        CreateFile(, GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
          當然在接收的線程中還加入了互斥對象和臨界區用于控制線程和數據統計。如果你直接使用CSuperSerialPort類,程序已經替你完成了這些任務。如:
        m_pSSP->Open(m_comName, m_uComRate, m_uComParity, m_uComDataBits, m_fComStopBits);
        m_pSSP->StartReceive(m_pSSP)

        詳細情況可以參照TestSerialPort2Dlg.cpp中的代碼。

          為了解決一個串口實例向多個窗口顯示數據問題,我在CSuperSerialPort類中添加了一個窗體向量表typedef vector vWINLIST;你可以通過Attach和Detach函數來控制窗體數量。如果需要添加其他的功能到CSuperSerialPort類中,有三種方法可以實現:
        直接修改CSuperSerialPort類代碼;
        繼承CSuperSerialPort類;
        調用GetComHandle返回串口句柄;






        <<利用串口“實時”接收短消息的方法


        <<串口服務器的工作方式和應用

        主站蜘蛛池模板: 亚洲熟女少妇一区二区| 亚洲A∨精品一区二区三区| 日本红怡院亚洲红怡院最新 | 日本人护士免费xxxx视频| 亚洲成a人片在线观看播放| 日本h在线精品免费观看| 亚洲av乱码一区二区三区| 国产卡二卡三卡四卡免费网址 | 4虎永免费最新永久免费地址| 久久精品蜜芽亚洲国产AV| 亚洲三级高清免费| 亚洲人成77777在线播放网站不卡| 色se01短视频永久免费| 亚洲精品精华液一区二区| 国产免费观看黄AV片| 一级做a爰性色毛片免费| 亚洲精品乱码久久久久久自慰| 免费人成网站在线观看不卡| 亚洲视频.com| 天天天欲色欲色WWW免费| 国产亚洲精品成人久久网站 | 亚洲欧洲日韩国产综合在线二区| 88xx成人永久免费观看| 亚洲一级黄色大片| 四虎AV永久在线精品免费观看| 怡红院免费全部视频在线视频| 久久精品蜜芽亚洲国产AV| 日韩视频在线免费观看| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲白嫩在线观看| 日韩成全视频观看免费观看高清| 一级视频在线免费观看| 久久久久亚洲AV无码网站| 日日夜夜精品免费视频| 成人性做爰aaa片免费看| 2019亚洲午夜无码天堂| 久久亚洲国产成人影院网站| 四虎永久在线观看免费网站网址| 黄色a三级三级三级免费看| 无码专区—VA亚洲V天堂| 永久免费视频v片www|