检测串口程序_第1页
检测串口程序_第2页
检测串口程序_第3页
检测串口程序_第4页
检测串口程序_第5页
免费预览已结束,剩余3页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、d About menu item to system menu6/ IDM_ABOUTBOX must be in the system command range.8ASSERT(IDM_ABOUTBOX & OxFFFO) = IDM_ABOUTBOX);9ASSERT(ID卜LABOUTBOX AppendMenu(MF_SEPARATOR);21pSysMenu-AppendMenu(MF_STRINGJIDM_ABOUTBOX, strAboutMenu);22232425/Set the icon for this dialogThe framework does thi

3、s automatically26/when the applications main window is not a dialog27Setlcon(m_hlcon TRUE);/ Set big icon28Setlcon(m_hlcon,FALSE);/ Set small icon29w30/TOGO: Add extra initialization hereW32 AddCom();/向绍r忝加串口设备m_CombolPortSetCurSel(O);34/.35AddCom 函数如下左义:void Ctbox_debug_viewDlg:AddCom(void)uicounte

4、r = portseGetSize();/如果个数大于0if(uicounter 0)545556EnumerateSerialPorts 函数如下:57void Ctbox_debug_viewDlg:EnumerateSerialPorts(CUIntArray& ports, CUIntArray& portse, CUIntArray&portsu)5859晴除串口数组内容60portsRemoveAll();61portseRemoveAll();62portsuRemoveAll();63因为至多有255个串口 所以依次检査各串口是否存在3637383940

5、41EnumerateSerialPortsCportsportseportsu); unsignedshort uicounter;unsigned short uisetcom;CString str;4243获取可用串口个数4445464748/初始化串口列表框495051for(int i=0; iuicounter; i+)5253uisetcom = portseElementAt(i);str.Format(_T(COM%d ”)uisetcom);m_CombolPortAddString(str);w64/如果能打开某一串口,或打开串口不成功.但返回的是ERROR_ACCES

6、S_DENIED错误信息.65都认为串口存在,只不过后者表明串口已经被占用66否则串口不存在67for (int i=l; iSetWindowText (_T(“打开”);106ShouInfo(_T(H关闭串 口成功! ”);107m_OpenStatus =false;108return;109110UpdateData(TRUE);111mOpenStatus =true;112当前端口号113int curPort =portse.ElementAt(m_CombolPort.GetCurSel();114mmscomm. put_CommPort(curPort); /端口115m

7、_mscomm. put_InBufferSize(1024);/接收缓冲区116m_mscomm.put_OutBufferSize(1024);/发送缓冲区119117m_mscomm. put_InputLen(0);/*,zi BU接收区数据长度为0.表示全部渎取118m_mscommput_InputMode(1.);/以-进制方弋谟数抑:119m_mscomm. put_RThreshold( 1); / /冲区有1个及1个以上字符时,将引发接收数押;的OnComm爭件123124125120/波特率121DWORD baudrate;122switch(m_CombolBaudr

8、ate.GetCurSel()123124case 0:125baudrate=115200;126break;127case 1:128baudrate=9600;129break;130default:131ASSERT(FALSE);132break;133134CString setting;w135setting. Format (_T(”d,8J1M)baudrate);136m_mscomm.put_Settings(setting/_T(M115200n8?lM)/);/波特率,无校验,8个 数据位,1个停止1位143137m_mscommput_PortOpen (TRUE)

9、; /打开串口138GetDlgltem (IDC_BT_OPEN) - SetWindowText(_T(M关闭“);139ShoMlnfo(_T(u打开串 口成功! ”);147140 3串口热拔插时检测串口这里主要利用 Cwnd 的 ON_WM_DEVICECHANGE 消息来处理。ON_WM_DEVICECHANGE 消息在 VS2010 中好像只能通过手动来添加,反正我没找到可 以通过对话的形式来添加的,后续有知道的兄台麻烦告知我一下。因此,首先得手动添加 ON_WM_DEVICECHANGE 消息:第一步:在消息映射 BEGIN_MESSAGE_MAP(Ctbox_debug_vi

10、ewDlg, CDialogEx)中添力 II:141 ON_WM_DEVICECHANGE()第二步:在头文件类的立义中添加函数声明:142 afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData);第三步:实现函数143 BOOL Ctbox_debug_viewDlg:OnDeviceChange(UINT nEventTypeDWORD dwData)144 145/DEV_BROADCAST_DEVICEINTERFACE* dbd = (DEV_BROADCAST_DEVICEINTERFACE*)dwData;146sw

11、itch (nEventType)147148caseDBTDEVICEREMOVECOMPLETE:/移除设备149caseDBT_DEVICEARRIVAL:/添加设备W150RefreshCom();/刷新组合框的内容151break;160161default:162break;163164164return TRUE;166167 RefreshCom 函数如下:16S void Ctbox_debug_viewDlg:RefreshCom(void)169 170int count =m_CombolPort.GetCount();171171for(int i=0;icount;

12、i+)172173m_CombolPort.DeleteString(count -1 -i);174175AddCom();176m_CombolPort.SetCurSel(0);177 第四步:在 cpp 文件中包含头文件178 #include 这是因为 DEV_BROADCAST_DEVICEINTERFACE,DBT_DEVICEREMOVECOMPLETE, DBT_DEVICEARRIVAL 这几个东东在头文件 Dbt.h 中泄义的,这样才能编译通过。而 AddCom 函数已经在之前讲到过,回过头去看看。这里的思想是通过检测到设备的插入和拔出时刷新组合框的内容,是通过重新测试串口的方 式来实现的。列:需要注总的是,当插入和拔出设备时,系统会检测

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论