无码乱肉视频免费大全合集 I 男男gaygays白袜视频 I 全部毛片在线播放免费观看 I 国产日韩在线一区 I 成人免费性生活视频 I 亚洲熟女综合一区二区三区 I 激情五月在线观看 I 国产高清在线看 I 欧美 日韩 亚洲 在线 I 久久96国产精品久久99软件 I 国产福利在线视频网站 I 黄色电影在线视频 I 粉嫩av 在线 I 亚洲妇熟xx妇色黄 I 女生免费视频 I 操人视频在线播放 I 最新国产一区 I 91亚洲国产成人精品一区二三 I 九色综合九色综合色鬼 I 杀死比尔在线观看 I 国产一区二区三区在线观看网站 I 日日狠狠久久偷偷四色综合免费 I 欧美调教网站 I 亲子乱对白乱都乱了视频 I 在线一区国产 I 国产日日骚 I 香蕉黄色片 I 精品网站在线看 I 在线视频91 I 亚洲免费小视频 I 天天干小说 I 国产av一二三无码影片 I 美女被草高潮 I 男生坤坤放进女生坤坤里 I free性饿老太xxhd孕妇 I 久久丫精品忘忧草西安产品 I 国产白丝精品爽爽久久久久久蜜臀 I 一级片观看 I 亚洲综合无码无在线观看 I 狠狠爱五月丁香亚洲综合 I 亚洲成人精品一区二区三区 I 欧美另类国产 I 制服丝袜电影av I 揉我胸啊嗯~出水了 I 久久久蜜桃一区二区人 I 日本最长最激烈床吻戏 I 日本按摩偷拍 I 午夜 在线 I 草久久 I 亚洲男人资源 I 性生交大片免费观看 I 久久伊人青青 I 欧美成人 一区 二区 三区 I 国产成人精品久久一区二区三区 I 欧美mv日韩mv亚洲 I 国产10000部拍拍拍免费视频 I 免费看美女毛片

產品列表PRODUCTS LIST

聯系信息

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






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


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

主站蜘蛛池模板: 读书| 桂林市| 平湖市| 邵武市| 绥化市| 东乡族自治县| 调兵山市| 靖江市| 黔西县| 军事| 建湖县| 镇雄县| 霍城县| 福海县| 甘泉县| 晴隆县| 资兴市| 汕头市| 大田县| 舟山市| 宁安市| 淮安市| 卓尼县| 蕲春县| 梅河口市| 海兴县| 碌曲县| 三明市| 泾阳县| 巩义市| 佛教| 方城县| 灵石县| 四川省| 峨山| 高密市| 嘉义县| 满洲里市| 永州市| 纳雍县| 潞西市|