• <fieldset id="qo6s0"><menu id="qo6s0"></menu></fieldset><strike id="qo6s0"><menu id="qo6s0"></menu></strike>
  • <fieldset id="qo6s0"><input id="qo6s0"></input></fieldset>
    <fieldset id="qo6s0"></fieldset>
  • <ul id="qo6s0"><dfn id="qo6s0"></dfn></ul>

    產品列表PRODUCTS LIST

    聯系信息

    • 電話:
      13521418576
    • 傳真:
      010-62979724
    首頁 > 技術與支持 > 串口開發的另一種方式
    串口開發的另一種方式
    點擊次數:4973 更新時間: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返回串口句柄;






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


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

    主站蜘蛛池模板: 国产成人精品一区二三区| 国产成人 亚洲欧洲| 国产成人亚洲综合色影视| 成人午夜视频精品一区| 国产成人精品久久综合| 中文成人无字幕乱码精品区| 成人午夜性影院视频| 国产成人一区二区三区免费视频| 久久精品成人一区二区三区| 欧洲国产成人精品91铁牛tv| 国产成人亚洲毛片| 成人合集大片bd高清在线观看| 国产成人免费高清在线观看| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 69国产成人精品午夜福中文| 成人亚洲网站www在线观看| 亚洲精品午夜国产va久久成人| 成人羞羞视频国产| 亚洲最大成人网色香蕉| 成人午夜18免费看| 欧洲成人午夜精品无码区久久| 国产成人久久久精品二区三区| 成人片黄网站a毛片免费| 亚洲AV无码精品国产成人| 国产成人做受免费视频| 国产成人精品三级在线| 成人性开放大片| 成人欧美一区二区三区的电影| 69成人免费视频无码专区| 亚洲国产成人久久一区www| 亚洲欧美成人在线| 国产成人av大片大片在线播放| 国产成人污污网站在线观看| 国产成人综合亚洲AV第一页| 国产成人精品无码专区| 国产成人免费av片在线观看| 亚洲精品成人片在线播放| 亚洲依依成人精品| 黄色成人在线网站 | 免费国产成人午夜电影| 国产成人av三级在线观看|