检测串口程序(7页).doc

上传人:1595****071 文档编号:36385649 上传时间:2022-08-26 格式:DOC 页数:7 大小:47KB
返回 下载 相关 举报
检测串口程序(7页).doc_第1页
第1页 / 共7页
检测串口程序(7页).doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《检测串口程序(7页).doc》由会员分享,可在线阅读,更多相关《检测串口程序(7页).doc(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、-当我们在用VS进行串口编程时,在打开串口前,经常想知道当前PC上存在多少个串口,哪些串口可用?哪些串口已经打开了,最好是在一个Combo Box中列表系统当前所有可用的串口以供选择,然而如何获取系统当前可用的串口有哪些呢? 这里介绍的方法也是最简单也是最笨的一种方法,即一个一个去试,试完了就知道了。至于还有没有其它更好的方法,暂不在本文所讨论的范围之内。一个在对话框的OnInitDialog函数内做如下操作:1 初始化时检测串口cpp 1 BOOL Ctbox_debug_viewDlg:OnInitDialog() 2 3 CDialogEx:OnInitDialog(); 4 5 / A

2、dd About. menu item to system menu. 6 7 / IDM_ABOUTBOX must be in the system command range. 8 ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); 9 ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); 21 pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 22 23 24 25 / Set the icon for this dialog. The

3、framework does this automatically 26 / when the applications main window is not a dialog 27 SetIcon(m_hIcon, TRUE); / Set big icon 28 SetIcon(m_hIcon, FALSE); / Set small icon 29 30 / TODO: Add extra initialization here 31 32 AddCom();/向组合框中添加串口设备 33 m_CombolPort.SetCurSel(0); 34 /. 35 AddCom函数如下定义:

4、cpp 36 void Ctbox_debug_viewDlg:AddCom(void) 37 38 EnumerateSerialPorts(ports,portse,portsu); 39 unsigned short uicounter; 40 unsigned short uisetcom; 41 CString str; 42 43 /获取可用串口个数 44 uicounter = portse.GetSize(); 45 /如果个数大于0 46 if(uicounter 0) 47 48 /初始化串口列表框 49 for(int i=0; iuicounter; i+) 50 51

5、 uisetcom = portse.ElementAt(i); 52 str.Format(_T(COM%d ),uisetcom); 53 m_CombolPort.AddString(str); 54 55 56 EnumerateSerialPorts函数如下:cpp 57 void Ctbox_debug_viewDlg:EnumerateSerialPorts(CUIntArray& ports, CUIntArray& portse, CUIntArray& portsu) 58 59 /清除串口数组内容 60 ports.RemoveAll(); 61 portse.Remov

6、eAll(); 62 portsu.RemoveAll(); 63 /因为至多有255个串口,所以依次检查各串口是否存在 64 /如果能打开某一串口,或打开串口不成功,但返回的是 ERROR_ACCESS_DENIED错误信息, 65 /都认为串口存在,只不过后者表明串口已经被占用 66 /否则串口不存在 67 for (int i=1; iSetWindowText(_T(打开); 108 ShowInfo(_T(关闭串口成功!); 109 m_OpenStatus =false; 110 return; 111 112 UpdateData(TRUE); 113 m_OpenStatus

7、=true; 114 /当前端口号 115 int curPort =portse.ElementAt(m_CombolPort.GetCurSel(); 116 m_mscomm.put_CommPort(curPort);/端口号 117 m_mscomm.put_InBufferSize(1024);/接收缓冲区 118 m_mscomm.put_OutBufferSize(1024);/发送缓冲区 119 120 m_mscomm.put_InputLen(0);/设置当前接收区数据长度为0,表示全部读取 121 m_mscomm.put_InputMode(1);/以二进制方式读写数

8、据 122 m_mscomm.put_RThreshold(1);/接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件 123 124 125 126 /波特率 127 DWORD baudrate; 128 switch(m_CombolBaudrate.GetCurSel() 129 130 case 0: 131 baudrate =115200; 132 break; 133 case 1: 134 baudrate =9600; 135 break; 136 default: 137 ASSERT(FALSE); 138 break; 139 140 CString

9、setting; 141 setting.Format(_T(%d,n,8,1),baudrate); 142 m_mscomm.put_Settings(setting/*_T(115200,n,8,1)*/);/波特率,无校验,8个数据位,1个停止1位 143 144 m_mscomm.put_PortOpen(TRUE);/打开串口 145 GetDlgItem(IDC_BT_OPEN)-SetWindowText(_T(关闭); 146 ShowInfo(_T(打开串口成功!); 147 148 3 串口热拔插时检测串口这里主要利用Cwnd的ON_WM_DEVICECHANGE消息来处

10、理。ON_WM_DEVICECHANGE消息在VS2010中好像只能通过手动来添加,反正我没找到可以通过对话的形式来添加的,后续有知道的兄台麻烦告知我一下。因此,首先得手动添加ON_WM_DEVICECHANGE消息:第一步:在消息映射BEGIN_MESSAGE_MAP(Ctbox_debug_viewDlg, CDialogEx)中添加:cpp 149 ON_WM_DEVICECHANGE() 第二步:在头文件类的定义中添加函数声明:cpp 150 afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData); 第三步:实现函数cpp

11、151 BOOL Ctbox_debug_viewDlg:OnDeviceChange(UINT nEventType,DWORD dwData) 152 153 /DEV_BROADCAST_DEVICEINTERFACE* dbd = (DEV_BROADCAST_DEVICEINTERFACE*) dwData; 154 switch (nEventType) 155 156 case DBT_DEVICEREMOVECOMPLETE:/移除设备 157 case DBT_DEVICEARRIVAL:/添加设备 158 RefreshCom();/刷新组合框的内容 159 break;

12、160 161 default: 162 break; 163 164 165 return TRUE; 166 167 RefreshCom函数如下:cpp 168 void Ctbox_debug_viewDlg:RefreshCom(void) 169 170 int count =m_CombolPort.GetCount(); 171 172 for(int i=0;icount;i+) 173 174 m_CombolPort.DeleteString(count -1 -i); 175 176 AddCom(); 177 m_CombolPort.SetCurSel(0); 17

13、8 第四步:在.cpp文件中包含头文件cpp 179 #include 这是因为DEV_BROADCAST_DEVICEINTERFACE,DBT_DEVICEREMOVECOMPLETE,DBT_DEVICEARRIVAL这几个东东在头文件Dbt.h中定义的,这样才能编译通过。 而AddCom函数已经在之前讲到过,回过头去看看。这里的思想是通过检测到设备的插入和拔出时刷新组合框的内容,是通过重新测试串口的方式来实现的。另:需要注意的是,当插入和拔出设备时,系统会检测到两次设备改变事件,因此会两次调用OnDeviceChange函数,第一次调用时传入的函数nEventType的值固定为0x07,第二次调用时nEventType才是上述代码switch中所定义的事件,这与网上所说的需要注册是相悖的,不知道为什么网上有些文章会说一定需要注册什么的才能检测到设备改变的事件,反正我这里不需要,我用的是VS2010. 完!-第 7 页-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com