注册 登录
编程论坛 VC++/MFC

求助VC6 MSComm控件串口通信问题。。

zsq408 发布于 2011-11-10 11:01, 1379 次点击
vc MSComm控件串口通信时,通过调试接收缓存区是有数据的,但用GetInput()无法获取接收数据?
如果这段代码没问题的话,一般可能是哪里出问题了?

接收数据代码如下:
void CJsDlg::OnOnCommMscomm1()  
{
// TODO: Add your control notification handler code here
  VARIANT m_input1;
  COleSafeArray m_input2;   
  long length,i;   
  BYTE data[1024];   
  CString strJS,str;   
  int nn=m_MSComm2.GetCommEvent();   
  str.Format("%d",nn);   
  AfxMessageBox(str);   
  if(m_MSComm2.GetCommEvent()==2)//接收缓冲区内有字符   
  {  
  m_input1=m_MSComm2.GetInput();//读取缓冲区内的数据  
m_input2=m_input1;//将VARIANT型变量转换为ColeSafeArray型变量   
length=m_input2.GetOneDimSize();//确定数据长度   
  for(i=0;i<length;i++)   
  m_input2.GetElement(&i,data+i);//将数据转换为BYTE型数组   
  for(i=0;i<length;i++)//将数组转换为Cstring型变量   
  {   
  BYTE a=* (char *)(data+i);   
  strJS.Format("%c",a);   
  m_strJS+=strJS;      
  }   
  UpdateData(FALSE);//更新编辑框内容
  }   
}

[ 本帖最后由 zsq408 于 2011-11-10 11:32 编辑 ]
4 回复
#2
红色警戒2011-11-12 19:42
只有缓冲区满才会触发这个事件OnOnCommMscomm1,看看SetRThreshold()设置的缓冲区多大。

[ 本帖最后由 红色警戒 于 2011-11-12 19:52 编辑 ]
#3
zsq4082011-11-14 12:46
以下是引用红色警戒在2011-11-12 19:42:42的发言:

只有缓冲区满才会触发这个事件OnOnCommMscomm1,看看SetRThreshold()设置的缓冲区多大。
初始化时m_MSComm2.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
所以不是这个问题,同样的工程自己的机子接收不到数据,但用别人的机子运行就可以接收导数据,为什么?
#4
红色警戒2011-11-14 15:02
回复 3楼 zsq408
用串口调试大师试试看,是不是你机器的串口有为题?
#5
CycloneSir2011-11-14 15:54
应该要通过协议传输吧,需要定义一个Protol协议程序,才能与下位机握手言和
1