狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當前位置:系統之家 > 技術開發教程 > 詳細頁面

運用ActiveX控件開發串口通信軟件

運用ActiveX控件開發串口通信軟件

更新時間:2024-04-09 文章作者:未知 信息來源:網絡 閱讀次數:

摘要:本文介紹了在Microsoft Visual C++ 6.0環境下通過對Active X控件的編程來實現串口的通信的一般方法。

  一、 引言

  當我們在Windows操作系統下開發串行通信程序時通常不得不面對許多復雜的API函數,因為在Windows操作系統下不能直接對設備端口進行操作,也不能在系統級(Ring 3級別)使用任何DOS或BIOS中斷,如要對端口進行編程則只能以文件的形式來對端口進行操作,這就使開發人員不得不面對非常煩瑣的API函數編程。本文對此提出了另外一種封裝性很好的使用Microsoft Visual C++ 6.0自帶的"Microsoft Communications Control,version 6.0"Active X控件的編程方法,通過對該控件的正確使用,我們可以比較輕松地編寫出所需的串行通信程序。

  下面,我們將結合一個實際的程序示例來對此方法進行說明。本程序的編程環境是Windows 98和Microsoft Visual C++ 6.0。在本程序示例中對為避免阻塞而對線程的使用以及在使用中遇到的一些問題也做了詳細的介紹。

  二、 程序的設計實現

  在開始進行代碼編程前,首先以在工程中插入組件或控件的方式將Active X控件"Microsoft Communications Control,version 6.0"加入到工程中來,此時將會在工程中添加一個關于此控件的新類。使用該控件的一些方法和屬性時不能象使用類一樣簡單的聲明一個實例對象,而要通ClassWizard為該控件和一個成員變量建立起綁定關系,在此我們將該控件同變量m_Comm相綁定后就可以通過該控件提供的方法來對串口的各種通訊參數進行設置了。為了編程方便起見,也可以在資源視圖中直接對該控件的屬性進行設置,如無特別要求,對下表所列屬性進行設置就基本可以滿足編程要求了。現將常用的屬性列表如下:


屬性 設定值 屬性說明
CommPort 1 串口號,一般從1到4
InBufferSize 30720 接收緩沖區大小,為保持程序的穩定,建議設得值足夠大
InputMode 0-Text 接收數據的類型,0表示文本類型,1表示二進制類型
InputLen 0 從接收緩沖區讀取的字節數,0表示全部讀取
OutBufferSize 512 發送緩沖區大小
Settings 4800,n,8,1 串口的參數設置,依次為波特率、奇偶校驗(n-無校驗,e-偶校驗,o-奇校驗)、數據位數、停止位數
RThreshold 1 設定當接收幾個字符時觸發OnComm事件,0表示不產生事件,
1表示每接收一個字符就產生一個事件
SThreshold 0 設定在觸發OnComm事件前,發送緩沖區內所允許的最少的字符數,
0表示發送數據時不產生事件,1表示當發送緩沖區空時產生OnComm事件


  我們要求能在程序啟動的同時就打開串口以便即時對從串口到達的數據進行接收、處理。一般來說可以將下面的打開端口的代碼寫在OnCreate()、OnInitialUpdate()、InitInstance ()等程序入口函數中:

……
if(!m_Comm.GetPortOpen()) //檢測是否已經打開過端口
m_Comm.SetPortOpen(TRUE); //如沒有打開則將端口打開
……
接下來的工作就是對數據的發送與接收了,這也是本文所要介紹的重點所在。發送數據的代碼原則上是可以寫到一個成員函數中被直接調用的,但這并不是一個良好的編程習慣:我們應當把比較耗時的操作,如文件拷貝、打印、端口傳輸等工作放到一個單獨的線程當中,以避免其在工作時會引起整個進程的阻塞,以提高整個系統對CPU的利用率。例如我們可以在視類中菜單或按鈕的響應函數中用AfxBeginThread(WriteProc,this)函數來開啟一個名為"WriteProc"的線程,由于在線程中還需要使用視類的函數和變量,為了不產生新的視類的實例對象,我們通過該函數的第二個參數將指向當前的視類的指針this作為參數傳遞給線程。在線程中可以用如下兩種方法之中的一種調用視類的成員函數:

((COLECommView*) pParam)->DoSendProc();

  或是:

COLECommView* view=(COLECommView*) pParam;
View->DoSendProc();


  其中從pParam傳來的變量就是指向視類的指針。在線程中通過調用視類中的DoSendProc函數來完成對數據的發送,正是由于該函數是被全局的線程所調用的,我們就不可以使用取編輯框上的數據時通常所用的UpdateData()函數了,取而帶之的是API 函數GetDlgItemText(),取到輸入的數據后通過控件的SetOutput() 方法就把數據從串口發出去了,其中發送數據必須經ColeVariant類將其轉換為通用的VARIANT型變量。實現
主要代碼如下:

……
char a[255];
HWND hwnd=GetSafeHwnd();
::GetDlgItemText(hwnd,IDC_EDIT1,a,255);
int i=0;
CString str;
while(a[i]!='\0')
{
str.Format("%c",a[i]);
m_SendData+=str;
i++;
}
str.Format("%c",10);
m_SendData+=str;
m_Comm.SetOutput(COleVariant(m_SendData));
……

  至于數據的接收,我們可以通過讓MS Comm控件響應其OnComm事件來完成,通過ClassWizard加入其對事件的響應后,通過下面的事件映射,當有字符到達時便會通知 OnComm()函數去處理,從而實現數據的異步接收:

……
BEGIN_EVENTSINK_MAP(COLECommView, CFormView)
//{{AFX_EVENTSINK_MAP(COLECommView)
ON_EVENT(COLECommView, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
……
void COLECommView::OnComm()
{
VARIANT Input;
if(m_Comm.GetCommEvent()==2)//接收緩沖區內有字符
{
Input=m_Comm.GetInput();//讀取緩沖區內的數據
CString msg=Input.bstrVal;
CString str;
str.Format("%c",10);
if(msg.Right(1)==str)
{
m_RecvData+=msg;
m_History.AddString(m_RecvData);
m_RecvData="";
}
else
m_RecvData+=msg;
}
}


  當數據被接收到接收緩沖區后,對于字符可以從VARIANT型結構變量的bstrVal成員變量中獲取,VARIANT數據結構相當復雜,并牽扯到COM(Component Object Model,組件對象模型)中的一些概念,具體詳情請參閱Microsoft Corpration發布的MSDN中的有關論述。

  三、 測試與實驗

  編譯運行程序之前有必要對機器的端口做一番檢查,以確保端口的完好,可以用常見的DOS程序Comdebug來檢查。在確認串口工作正常后,可用串口線將兩臺機器的串口相連,同時在兩臺機子上運行該程序,如果沒有條件也可只用一臺微機,將其串口的2腳和3腳短接,使其處于自發自收狀態。經過數據的傳輸實驗證明該程序是可靠、正確的。

  小結:利用通訊控件可以很容易的編寫出串行通信程序。但相對來說通訊控件在VC中的使用要比在VB、Delphi中復雜的多,要想對串口通訊開發出更多更靈活的使用方法還需要不斷的實踐中摸索。本程序在
Windows 98下,由Microsoft Visual C++ 6.0編譯通過。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
亚洲乱码视频| 欧美在线观看一区二区| www.欧美日韩| 粉嫩av一区二区三区在线播放 | 亚洲欧美另类小说| 欧美国产在线观看| 欧美极品美女视频| 国产精品天天看| 国产精品乱码久久久久久| 亚洲国产激情av| 欧美大度的电影原声| 久久看片网站| 欧美日韩五月天| 91麻豆精品久久久久蜜臀| 欧美一卡二卡三卡| 久久久久9999亚洲精品| 国产女同互慰高潮91漫画| 亚洲欧洲色图综合| 亚洲成人自拍网| 欧美日韩精品福利| 国产一区二区三区黄视频 | 欧美高清在线一区二区| 欧美成人性战久久| 在线播放欧美女士性生活| 8x8x8国产精品| 久久夜色精品国产噜噜av| 久久这里只有精品首页| 国产精品美女www爽爽爽| 一区二区在线看| 奇米精品一区二区三区在线观看一 | 国产欧美日韩不卡| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲一区二区影院| 久久99国内精品| 91网址在线看| 国产精品视频| 91精品国产高清一区二区三区| 日韩一级精品视频在线观看| 国产精品美女久久久久久2018| 一区二区三区日本| 国产精品一区在线| 一区二区三区我不卡| 在线精品国精品国产尤物884a| 精品区一区二区| 亚洲综合一区二区三区| 国产成人免费视频网站 | 色综合婷婷久久| 久久国产福利| 日韩欧美成人一区二区| 亚洲精品高清视频在线观看| 国产一区二区网址| 伊人成人在线视频| 欧美另类变人与禽xxxxx| 国产精品你懂的在线| 日韩va欧美va亚洲va久久| 99久久久免费精品国产一区二区| 一本一本久久a久久精品综合妖精| 欧美日韩日本视频| 亚洲天天做日日做天天谢日日欢| 国产一区二区三区免费观看| 在线观看成人av| 日韩欧美一区二区三区在线| 夜夜嗨av一区二区三区网页| 白白色 亚洲乱淫| 欧美主播一区二区三区| 日韩一区中文字幕| 99视频一区二区三区| 在线一区二区三区四区五区| 国产精品久久午夜| 丁香天五香天堂综合| 91久久精品日日躁夜夜躁欧美| 中文字幕五月欧美| 不卡视频免费播放| 欧美三级电影在线看| 一区二区三区四区激情| 欧美激情在线| 精品久久久久久无| 韩国视频一区二区| 久久精品国产第一区二区三区最新章节 | 精品亚洲国产成人av制服丝袜| 亚洲精选国产| 中文字幕一区三区| 99久久婷婷国产综合精品电影| 欧美日韩五月天| 日韩电影在线一区二区| 99亚洲一区二区| 国产精品家庭影院| 国产一区免费视频| 欧美激情中文不卡| 91蝌蚪porny| 精品国精品自拍自在线| 国产精品综合二区| 欧美日韩二区三区| 精品一区二区精品| 在线观看亚洲a| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品免费在线| 一区二区三区四区国产精品| 亚洲性图久久| 亚洲人被黑人高潮完整版| 激情五月***国产精品| 国产日产精品一区| 欧美日韩亚洲免费| 国产精品视频免费| 一区在线观看| 亚洲精品大片www| 午夜亚洲视频| 国产精品一区二区在线观看| 欧美人牲a欧美精品| 日韩国产在线一| 色中色一区二区| 蜜桃久久久久久久| 欧美精品一级二级三级| 国产成人av资源| 日韩欧美在线一区二区三区| 国产91富婆露脸刺激对白| 日韩欧美国产一区二区三区| 国产麻豆精品视频| 26uuu色噜噜精品一区| 91啪亚洲精品| 亚洲人吸女人奶水| 免费亚洲一区| 国内偷窥港台综合视频在线播放| 日韩一区二区在线看| 91免费小视频| 一区二区三区.www| 色婷婷一区二区| 国产成人自拍网| 欧美日韩久久久| 成人黄色a**站在线观看| 国产日产欧美一区| 国产亚洲精品久久久久婷婷瑜伽| 日韩综合小视频| 欧美成人精品高清在线播放| 欧美精品尤物在线| 亚洲成人www| 日韩欧美专区在线| 黄色亚洲大片免费在线观看| 五月天精品一区二区三区| 91精品婷婷国产综合久久竹菊| 91欧美激情一区二区三区成人| 亚洲一线二线三线视频| 91麻豆精品国产91久久久使用方法| 你懂的国产精品| 日韩国产欧美在线观看| 久久这里只精品最新地址| 香蕉久久久久久久av网站| 国产成人午夜精品影院观看视频| 中文乱码免费一区二区| 在线精品观看国产| 欧美特黄a级高清免费大片a级| 亚洲国产一区二区三区| 亚洲精品一线二线三线| 免费永久网站黄欧美| 91亚洲精品久久久蜜桃网站| 亚洲国产中文字幕| 日韩一区二区三区免费看| 亚洲成人直播| 国产成人在线看| 亚洲成av人影院| 亚洲国产成人一区二区三区| 欧美日韩国产天堂| 国产精品视频免费观看| 97久久精品人人澡人人爽| 日日骚欧美日韩| 国产精品高潮呻吟| 精品日韩欧美在线| 色婷婷亚洲综合| 99国产精品久久久久老师| 国产在线视频一区二区| 亚洲一卡二卡三卡四卡无卡久久| 26uuu色噜噜精品一区二区| 色婷婷久久99综合精品jk白丝| 狠狠入ady亚洲精品经典电影| 国产一区二区三区四区五区美女 | 亚洲激情二区| 99久久精品国产导航| 国产一区免费电影| 秋霞国产午夜精品免费视频| 亚洲丝袜精品丝袜在线| 国产亚洲成av人在线观看导航| 欧美日韩精品久久久| 色综合久久久久久久久久久| 亚洲福利电影| 欧美特黄一区| 91麻豆免费观看| yourporn久久国产精品| 国产福利91精品一区二区三区| 麻豆精品视频在线观看免费| 亚洲一区二区成人在线观看| 亚洲人成7777| 亚洲图片欧美激情| 中文字幕一区二区三区av| 国产清纯美女被跳蛋高潮一区二区久久w| 欧美理论片在线| 欧美高清性hdvideosex| 欧美日韩视频在线观看一区二区三区 | 国产农村妇女毛片精品久久麻豆| 欧美xxxxxxxx| 欧美精品一区二区三区久久久|