MSComm控件串口事件形式OnComm函数接收数据老是出错?

用的是一般教科书上的源代码:
void CMSCommTestDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE型数组
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收数据事件
{
variant_inp=m_ctrlComm.GetInput(); //读接收缓冲区
safearray_inp=variant_inp; //VARIANT型转换为ColeSafeArray型
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
//strtemp.Format("%02x ",bt); //将字符的十六进制码存入strtemp
m_strEditRXData+=strtemp; //加入接收编辑框对应字符串变量中
}
}
UpdateData(FALSE); //更新编辑框内容,即在接收显示框中显示接收数据
}
目的是读取锁相放大器里面的数据,接收的数据老是到最后一位就出错

类似

Visual C++_Turbo C串口通信编程实践

里的代码追问

不同的书里面的代码其实都差不多,错误的原因是什么呢?我用的usb转串口

追答

usb转串口
情况复杂

说不清

可能的话,还是用 带串口的 电脑

追问

哦,我试试,怎么联系你,我不是做这个的,一个项目要用所以现学现做,大侠能否留个联系方式,qq号什么的,希望能多请教一点

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-08
你好!!
你说的报错,是程序出现错误,还是数据接收的错误?追问

程序错误,我点一下确定,程序就直接关闭了

追答

你的程序只有一段,你还是先注释掉一部分代码,采用逐渐加入代码的方式调试;
最后看看是那几句代码有问题

MFC中MSComm控件的oncomm在发送数据和接收数据的时候都不触发
m_ctrlComm.SetRThreshold(1);\/\/参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据n的OComm事件 这一句是不是没有设置?

...一直无法触发MSCOMM控件的oncomm事件,不知道是什么原因
这应该是由于动态库或者是OCX文件没有注册好,或者遭到了破坏,这个控件要加载MSCOMCTL.OCX,检查一下这个文件

为什么用串口的例子程序接受采集的数据出现丢失现象
MSComm.RThreshold = 0 '关闭OnComm事件接收 lblStatus.Caption = "接收"av = MSComm.Input '读取一个接收字节 dataframe(1) = av(0) '转换为字节

麻烦VB高手帮我看看我这个mscomm控件的程序哪里出错了,为什么Private S...
MSComm1.PortOpen = True '打开串口 End Sub ‘设置了 MSComm1.RThreshold = 5 ,下面的事件才发送!Private Sub MSComm1_OnComm() '当收到串口返回值时触发这个事件 Text2.Text = "hello!" '为了检测oncomm是否运行!Dim InString As String MSComm1.InputLen = 0 ' 读取所有可用数据。...

关于VB中MSComm控件的OnComm事件的困惑?
MSComm,它提供了一个 事件OnComm,该事件可以截取串口的任何消息,转入事件处理程序。OnComm事件是唯 一的,OnComm可以捕获通信时发生的串口事件和错误信息,当有串口事件或错误发生时,VB会立刻触发一个OnComm事件,程序就会自动转入 OnComm事件处理程序中。CommEvent属性是OnComm事件的指示器,该属性在设计时不...

我用MScomm控件读取串口的数据,无法触发MSComm1_OnComm事件?
昨天用vb作项目遇到同一问题,后来在发送过程尾部加 doevents 函数解决。oncomm事件在系统执行其他过程时虽然被触发,但代码不会运行,直到其他过程运行结束,所以其他过程发送查询指令后,应当马上挂起,将控制权交给系统,以使oncomm运行代码,否则其他过程结束,oncomm事件也结束了,不知道c有没有doevents,...

vb6.0中.串口通信OnComm事件总是触发不了.我测试了 发送没问题,接收也 ...
当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。

麻烦VB高手帮我看看我这个mscomm控件的程序哪里出错了,为什么Private S...
‘设置了 MSComm1.RThreshold = 5 ,下面的事件才发送!Private Sub MSComm1_OnComm() '当收到串口返回值时触发这个事件 Text2.Text = "hello!" '为了检测oncomm是否运行! Dim InString As String MSComm1.InputLen = 0 ' 读取所有可用数据。 MSComm1.InputMode = 0 If MSComm1.InBufferCount Then ' 检查...

VB MSComm串口通信 丢失数据
说明与下位机通信中断或下位机掉电,VB应在界面提示故障警告并记录日志。下位机也可以这么做,如果连续多少秒没有接到来自上位机的指令,联线故障LED红灯应亮起,提示当先是离线状态。当出现这种情况时,维护人员应参与进来,根据两个警报提示来判断掉电、死机、断线等情况并予以排除。

在串口通信中,上位机要接受4字节的数据,我这样编写,提示数据类型不对...
Private Sub MSComm1_OnComm()Dim ReceiveData As Single Dim temp As Variant Dim ReceiveDataBuffer_h, ReceiveDataBuffer_l As Single If MSComm1.CommEvent = comEvReceive Then i = i + 1 temp = AscB(MSComm1.Input)Call ufvn_cls '清前一屏的坐标点 Call ufvn_reset '重绘坐标线 ...

相似回答