用MSComm控件操作USB虚拟串口的问题

freemanhans 2007-08-17 03:47:46
各位,我先说一下我的东西:

用PIC18F4550 MCU采集数据,通过USB总线把数据传给PC。用的是Microchip提供的CDC firmware。在PC上用MFC基于对话框的方法作了一个显示程序,其中用MSComm控件对串口操作。

这个程序是之前做好的,用在PC的物理串口操作上没有一点问题。

MFC程序:
void CDataDlg::Onstart() //显示程序启动函数,打开并设置串口
{
…… //一些初始设置
m_ctrlComm.SetCommPort(port);//这里可以找到USB虚拟的串口COM4
if(!m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);
m_ctrlComm.SetSettings("19200,n,8,1");
m_ctrlComm.SetInputMode(1);
m_ctrlComm.SetRThreshold(14); //一组数据长度为14个字节
m_ctrlComm.SetInputLen(0);
m_ctrlComm.GetInput();
m_ctrlComm.SetRTSEnable(TRUE);
Outbuffer='0'; //向MCU发送命令,启动串口传输。
m_ctrlComm.SetOutput(COleVariant(Outbuffer));
}

void CDataDlg::OnComm()
{
COleVariant variant_inp;
COleSafeArray safearray_inp;
LONG len=0;
LONG k=0;
double sampletime;
int Data[64]={0};
int TempSerial;
++Data_Serial_NO;
if(m_ctrlComm.GetInBufferCount()>=14)
{
variant_inp.Attach(m_ctrlComm.GetInput());
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize(); //Get valid data length
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,Data+k);
…… //Data中的数据接收
}

…… //其他数据处理

// 数据处理完成,发送下一次数据采集命令
Outbuffer='0';
m_ctrlComm.SetOutput(COleVariant(Outbuffer));
}

问题和现象:
能够找到虚拟的串口,打开、关闭都很正常,我试了如下三种通信方式
1、用以上的机制:程序开始之后通信很快就会停止。这个时候我如果再手动发送一次命令,就会再进行通信,过不了多久又会停止,每次通信的间隔没有什么规律。就是说通信一会儿之后又会停。如果在每次停止之后手动发命令,就能一直那样一跳一跳地工作下去。
2、上层定时发送采集命令:这个时候程序通信一会儿就会死掉。
3、底层不断发送:情况最夸张,整个程序一开始会死掉,而且感觉连对话框上面的一些控件显示都有问题。

我在国外的论坛上看到一个说到这种现象的帖子,不知道各位有没有人见过,还请赐教。 谢谢!
...全文
933 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
feilinhe 2008-09-16
  • 打赏
  • 举报
回复
首先我认为Data数组太小,改成大点的我通常用Data[2048],还有就是
不要上来就用"if(m_ctrlComm.GetInBufferCount()> =14) "
而是先用"if(m_ctrlComm.GetCommEvent()==2)//串口中有数据(即发生了串口中断事件)"
判断一下再处理串口中的数据,你可以通过len来判断串口中接受数据的长度是否大于14,
以上是我提的意见,不一定能解决你的问题
yfzhu 2008-09-13
  • 打赏
  • 举报
回复
如何解决的?
freemanhans 2007-08-17
  • 打赏
  • 举报
回复
现在是要求用USB接口,也是为了节省时间所以用以前的PC程序,要不就直接读USB了。
zaodt 2007-08-17
  • 打赏
  • 举报
回复
尽量用标准串行口。
书名:《Visual C#.NET串口通信及测应用典型实例》(电子工业出版社.李江全.邓红涛.刘巧.李伟) PDF格式扫描版,全书分为8章,共369页。2012年5月出版。 全书压缩打包成3部分,这是第3部分 内容简介 本书从工程应用的角度出发,通过8个典型应用实例,包括PC与PC、PC与单片机、PC与PLC、PC与远程I/O模块、PC与智能仪器、PC与无线数传模块、Pc与USB数据采集模块等组成的测系统,利用SerialPort件和MSComm件编写C#.NET串口通信程序,并对计算机测系统中的4类典型应用((模拟量输入(AI)、模拟量输出(AO)、数字量输入(DI)和数字量输出(DO)的程序设计方法进行了详细的讲解。 目 录 第1章 PC与PC串口通信 1.1 串口通信概述 1.1.1 串口通信的基本概念 1.1.2 RS-232C接口标准 1.1.3 RS-422/485接口标准 1.1.4 串口通信线路连接 1.1.5 PC中的串行端口 1.1.6 虚拟串口的使用 1.2 VC++.NET串行通信件与API函数 1.2.1 MSComm件的使用 1.2.2 SerialPort件的使用 1.2.3 串行通信API函数 1.3 PC与PC串口通信实例 1.3.1 两台PC串口通信 1.3.2 一台PC双串口互通信 第2章 PC与单片机串口通信 2.1 典型单片机开发板简介 2.1.1 单片机测系统的组成 2.1.2 单片机开发板B的功能 2.1.3 单片机开发板B的主要电路 2.2 PC与单片机串口通信实例 2.2.1 PC与单个单片机串口通信 2.2.2 PC与多个单片机串口通信 2.3 PC与单片机串口通信测应用实例 2.3.1 模拟量输入 2.3.2 模拟量输出 2.3.3 开关量输入 2.3.4 开关量输出 第3章 PC与西门子PLC串口通信 3.1 西门子PLC模拟量扩展模块与通信协议 3.1.1 西门子PLC模拟量输入模块 3.1.2 西门子PLC PPI通信协议 3.2 PC与西门子PLC串口通信测应用实例 3.2.1 模拟量输入 3.2.2 模拟量输出 3.2.3 开关量输入 3.2.4 开关量输出 第4章 PC与三菱PLC串口通信 4.1 三菱PLC特殊功能模块与通信协议 4.1.1 FX2N系列PLC的特殊功能模块 4.1.2 三菱PLC编程口通信协议 4.2 PC与三菱PLC串口通信测应用实例 4.2.1 模拟量输入 4.2.2 模拟量输出 4.2.3 开关量输入 4.2.4 开关量输出 第5章 PC与分布式I/O模块串口通信 5.1 典型分布式I/O模块简介 5.1.1 集散制系统的结构与特点 5.1.2 ADAM4000远程数据采集制系统 5.1.3 ADAM4000系列模块简介 5.1.4 ADAM4000系列模块的软件安装 5.2 PC与分布式I/O模块串口通信测应用实例 5.2.1 模拟量输入 5.2.2 模拟量输出 5.2.3 数字量输入 5.2.4 数字量输出 第6章 PC与智能仪器串口通信 6.1 典型智能仪器简介 6.1.1 智能仪器的结构与特点 6.1.2 XMT-3000A型智能仪器的通信协议 6.2 PC与智能仪器串口通信测应用实例 6.2.1 PC与单台智能仪器温度测 6.2.2 PC与多台智能仪器温度测 第7章 PC与无线数据传输模块串口通信 7.1 典型无线数传模块简介 7.1.1 无线数传技术概述 7.1.2 DTD46X系列无线数传模块 7.2 PC与无线数传模块串口通信测应用实例 7.2.1 设计任务 7.2.2 线路连接 7.2.3 利用C51语言实现基于DS18B20的单片机温度测 7.2.4 利用汇编语言实现基于DS18B20的单片机温度测 7.2.5 利用VC++.NET实现PC与无线数传模块温度测 第8章 USB串行总线模块测应用 8.1 USB总线在数据采集系统中的应用 8.1.1 USB总线及其数据采集系统的特点 8.1.2 采用USB传输的数据采集系统 8.1.3 典型USB数据采集模块及应用 8.1.4 VC++.NET数据采集与制的方式 8.2 PC与USB数据采集模块测应用实例 8.2.1 模拟量输入 8.2.2 模拟量输出 8.2.3 数字量输入 8.2.4 数字量输出 参考文献
书名:《Visual C#.NET串口通信及测应用典型实例》(电子工业出版社.李江全.邓红涛.刘巧.李伟) PDF格式扫描版,全书分为8章,共369页。2012年5月出版。 全书压缩打包成3部分,这是第1部分 内容简介 本书从工程应用的角度出发,通过8个典型应用实例,包括PC与PC、PC与单片机、PC与PLC、PC与远程I/O模块、PC与智能仪器、PC与无线数传模块、Pc与USB数据采集模块等组成的测系统,利用SerialPort件和MSComm件编写C#.NET串口通信程序,并对计算机测系统中的4类典型应用((模拟量输入(AI)、模拟量输出(AO)、数字量输入(DI)和数字量输出(DO)的程序设计方法进行了详细的讲解。 目 录 第1章 PC与PC串口通信 1.1 串口通信概述 1.1.1 串口通信的基本概念 1.1.2 RS-232C接口标准 1.1.3 RS-422/485接口标准 1.1.4 串口通信线路连接 1.1.5 PC中的串行端口 1.1.6 虚拟串口的使用 1.2 VC++.NET串行通信件与API函数 1.2.1 MSComm件的使用 1.2.2 SerialPort件的使用 1.2.3 串行通信API函数 1.3 PC与PC串口通信实例 1.3.1 两台PC串口通信 1.3.2 一台PC双串口互通信 第2章 PC与单片机串口通信 2.1 典型单片机开发板简介 2.1.1 单片机测系统的组成 2.1.2 单片机开发板B的功能 2.1.3 单片机开发板B的主要电路 2.2 PC与单片机串口通信实例 2.2.1 PC与单个单片机串口通信 2.2.2 PC与多个单片机串口通信 2.3 PC与单片机串口通信测应用实例 2.3.1 模拟量输入 2.3.2 模拟量输出 2.3.3 开关量输入 2.3.4 开关量输出 第3章 PC与西门子PLC串口通信 3.1 西门子PLC模拟量扩展模块与通信协议 3.1.1 西门子PLC模拟量输入模块 3.1.2 西门子PLC PPI通信协议 3.2 PC与西门子PLC串口通信测应用实例 3.2.1 模拟量输入 3.2.2 模拟量输出 3.2.3 开关量输入 3.2.4 开关量输出 第4章 PC与三菱PLC串口通信 4.1 三菱PLC特殊功能模块与通信协议 4.1.1 FX2N系列PLC的特殊功能模块 4.1.2 三菱PLC编程口通信协议 4.2 PC与三菱PLC串口通信测应用实例 4.2.1 模拟量输入 4.2.2 模拟量输出 4.2.3 开关量输入 4.2.4 开关量输出 第5章 PC与分布式I/O模块串口通信 5.1 典型分布式I/O模块简介 5.1.1 集散制系统的结构与特点 5.1.2 ADAM4000远程数据采集制系统 5.1.3 ADAM4000系列模块简介 5.1.4 ADAM4000系列模块的软件安装 5.2 PC与分布式I/O模块串口通信测应用实例 5.2.1 模拟量输入 5.2.2 模拟量输出 5.2.3 数字量输入 5.2.4 数字量输出 第6章 PC与智能仪器串口通信 6.1 典型智能仪器简介 6.1.1 智能仪器的结构与特点 6.1.2 XMT-3000A型智能仪器的通信协议 6.2 PC与智能仪器串口通信测应用实例 6.2.1 PC与单台智能仪器温度测 6.2.2 PC与多台智能仪器温度测 第7章 PC与无线数据传输模块串口通信 7.1 典型无线数传模块简介 7.1.1 无线数传技术概述 7.1.2 DTD46X系列无线数传模块 7.2 PC与无线数传模块串口通信测应用实例 7.2.1 设计任务 7.2.2 线路连接 7.2.3 利用C51语言实现基于DS18B20的单片机温度测 7.2.4 利用汇编语言实现基于DS18B20的单片机温度测 7.2.5 利用VC++.NET实现PC与无线数传模块温度测 第8章 USB串行总线模块测应用 8.1 USB总线在数据采集系统中的应用 8.1.1 USB总线及其数据采集系统的特点 8.1.2 采用USB传输的数据采集系统 8.1.3 典型USB数据采集模块及应用 8.1.4 VC++.NET数据采集与制的方式 8.2 PC与USB数据采集模块测应用实例 8.2.1 模拟量输入 8.2.2 模拟量输出 8.2.3 数字量输入 8.2.4 数字量输出 参考文献
书名:《Visual C#.NET串口通信及测应用典型实例》(电子工业出版社.李江全.邓红涛.刘巧.李伟) PDF格式扫描版,全书分为8章,共369页。2012年5月出版。 全书压缩打包成3部分,这是第2部分 内容简介 本书从工程应用的角度出发,通过8个典型应用实例,包括PC与PC、PC与单片机、PC与PLC、PC与远程I/O模块、PC与智能仪器、PC与无线数传模块、Pc与USB数据采集模块等组成的测系统,利用SerialPort件和MSComm件编写C#.NET串口通信程序,并对计算机测系统中的4类典型应用((模拟量输入(AI)、模拟量输出(AO)、数字量输入(DI)和数字量输出(DO)的程序设计方法进行了详细的讲解。 目 录 第1章 PC与PC串口通信 1.1 串口通信概述 1.1.1 串口通信的基本概念 1.1.2 RS-232C接口标准 1.1.3 RS-422/485接口标准 1.1.4 串口通信线路连接 1.1.5 PC中的串行端口 1.1.6 虚拟串口的使用 1.2 VC++.NET串行通信件与API函数 1.2.1 MSComm件的使用 1.2.2 SerialPort件的使用 1.2.3 串行通信API函数 1.3 PC与PC串口通信实例 1.3.1 两台PC串口通信 1.3.2 一台PC双串口互通信 第2章 PC与单片机串口通信 2.1 典型单片机开发板简介 2.1.1 单片机测系统的组成 2.1.2 单片机开发板B的功能 2.1.3 单片机开发板B的主要电路 2.2 PC与单片机串口通信实例 2.2.1 PC与单个单片机串口通信 2.2.2 PC与多个单片机串口通信 2.3 PC与单片机串口通信测应用实例 2.3.1 模拟量输入 2.3.2 模拟量输出 2.3.3 开关量输入 2.3.4 开关量输出 第3章 PC与西门子PLC串口通信 3.1 西门子PLC模拟量扩展模块与通信协议 3.1.1 西门子PLC模拟量输入模块 3.1.2 西门子PLC PPI通信协议 3.2 PC与西门子PLC串口通信测应用实例 3.2.1 模拟量输入 3.2.2 模拟量输出 3.2.3 开关量输入 3.2.4 开关量输出 第4章 PC与三菱PLC串口通信 4.1 三菱PLC特殊功能模块与通信协议 4.1.1 FX2N系列PLC的特殊功能模块 4.1.2 三菱PLC编程口通信协议 4.2 PC与三菱PLC串口通信测应用实例 4.2.1 模拟量输入 4.2.2 模拟量输出 4.2.3 开关量输入 4.2.4 开关量输出 第5章 PC与分布式I/O模块串口通信 5.1 典型分布式I/O模块简介 5.1.1 集散制系统的结构与特点 5.1.2 ADAM4000远程数据采集制系统 5.1.3 ADAM4000系列模块简介 5.1.4 ADAM4000系列模块的软件安装 5.2 PC与分布式I/O模块串口通信测应用实例 5.2.1 模拟量输入 5.2.2 模拟量输出 5.2.3 数字量输入 5.2.4 数字量输出 第6章 PC与智能仪器串口通信 6.1 典型智能仪器简介 6.1.1 智能仪器的结构与特点 6.1.2 XMT-3000A型智能仪器的通信协议 6.2 PC与智能仪器串口通信测应用实例 6.2.1 PC与单台智能仪器温度测 6.2.2 PC与多台智能仪器温度测 第7章 PC与无线数据传输模块串口通信 7.1 典型无线数传模块简介 7.1.1 无线数传技术概述 7.1.2 DTD46X系列无线数传模块 7.2 PC与无线数传模块串口通信测应用实例 7.2.1 设计任务 7.2.2 线路连接 7.2.3 利用C51语言实现基于DS18B20的单片机温度测 7.2.4 利用汇编语言实现基于DS18B20的单片机温度测 7.2.5 利用VC++.NET实现PC与无线数传模块温度测 第8章 USB串行总线模块测应用 8.1 USB总线在数据采集系统中的应用 8.1.1 USB总线及其数据采集系统的特点 8.1.2 采用USB传输的数据采集系统 8.1.3 典型USB数据采集模块及应用 8.1.4 VC++.NET数据采集与制的方式 8.2 PC与USB数据采集模块测应用实例 8.2.1 模拟量输入 8.2.2 模拟量输出 8.2.3 数字量输入 8.2.4 数字量输出 参考文献

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧