串口控件MSCOMM通讯疑问VC 点击:1087 | 回复:3



r_山

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 4回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2004年7月02日
发表于:2005-06-02 14:28:00
楼主
小弟用MSCOMM写一个串口通讯程序,实现2台电脑之间的串口通讯,字符串分别在笔记本(PCMCIA串口卡)与PC相互发送,但结果很不一样:PC到笔记本的字符串在大于30个字符时都能一次性将数据发送到笔记本上而且接收正确;笔记本的字符串发送到PC时,PC接收时显示数据被分割成最长8个字节的字符串按顺序连续接收。监控MSCOMM的事件,发现字符串被分割时,接收端发生comEvCD(Change in Carrier Detect line)事件,每接收一个字符发生3次comEvCD,每收到被分割的一帧字符串时,发生1次comEvReceive。而PC发送到笔记本的字符串则是全部发送完毕之后MSCOMM事件1次comEvReceive。现在请问的是两边的程序是同一个,为什么在相互发送的时候结果不一样?



r_山

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 4回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2004年7月02日
发表于:2005-06-02 15:18:00
1楼
求助串口通讯高手:为什么会有comEvCD的事件发生呢?

r_山

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 4回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2004年7月02日
发表于:2005-06-02 15:31:00
2楼
另外,这个也不是线长短的问题,我换了不同长度的线,结果还是一样。 初始化的时候的代码: m_comm.SetCOmmPort(1); m_comm.SetInBufferSize(1024); m_comm.SetOutBuferSize(512); m_comm.SetInputMode(1); m_comm.SetSettings(_T("9600,N,8,1")); m_comm.SetHandshaking(1); m_comm.SetRthreshold(1); m_comm.SetSThreshold(1); m_comm.SetRTSEnable(TRUE); m_comm.SetDTREnable(TRUE); m_comm.SetPortOpen(TRUE); 接收: short event = m_comm.GetCommEvent(); switch(event) { case 2: { BYTE rxd; m_strReceive.Empty(); COleariant vrd; COldSafeArray array; vrd.Atach(m_comm.GetInput()); array = vrd; long len = array.GetOneDimSize(); for (long i=0; i < len && i < 1024; i++) { array.GetElement(&i, &rxd); m_strReceive +=CString(rxd); } m_listboxReceive.InsertString(0, m_srReceive); m_listboxReceive.SetSel(0, FALSE); } break; } } 发送: COleVariant varOutput; CByteArray OutBuf; for (int i =0; i < m_strSend.GetLength(); i++) { OutBuf.Add(m_strSend[i]); } varOutput = OutBuf; while (0 == m_comm.GetPortOpen()) { m_comm.SetPortOpen(TRUE); } m_comm.SetOutput(varOutput);

new手

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 231回
  • 年度积分:0
  • 历史总积分:288
  • 注册:2004年12月27日
发表于:2005-06-02 15:55:00
3楼

热门招聘
相关主题

官方公众号

智造工程师