解决方案 »

  1.   

    MSComm控件 
    设置为  二进制 收发
      

  2.   


    void CMscommDlg::OnOnCommMscomm() 
    {
    // TODO: Add your control notification handler code here
    VARIANT variant_inp;  COleSafeArray safearray_inp;  UpdateData(); long len,k; 
    byte rxdata[512]; //设置BYTE数组
    CString strtemp; 
    if(m_com.GetCommEvent()==2) //值为2表示接收缓冲区内有字符

    variant_inp=m_com.GetInput(); //读缓冲区消息
    safearray_inp=variant_inp; ///变量转换
    len=safearray_inp.GetOneDimSize(); //得到有效的数据长度
    for(k=0;k<len;k++) 
    safearray_inp.GetElement(&k,rxdata+k); 
    for(k=0;k<len;k++) //将数组转换为CString型变量

    char bt=*(char*)(rxdata+k); //字符型
    strtemp.Format(TEXT("%c"),bt); //将字符送入临时变量strtemp存放
    strtemp.Format(_T("%c"),bt); 
    m_rec+=strtemp; //加入接收编辑框对应字符串


    if (!((m_rec.Right(1) == '\n')|| (m_rec.Right(1) == '\r')))
    {
    CString temp=(TEXT("\r\n")); //显示完成后要自动换行
    m_rec+=temp; 
    }
    UpdateData(FALSE); //更新编辑框内容}代码如上,是copy网上的代码的,我也调试过,每当遇到GetInput()那里就出错...
      

  3.   

    BOOL CMainFrame::OpenComm()
    {
    if(!m_MSComm.GetPortOpen())
    {
    //注意,须在打开串口之前设置串口属性
    m_MSComm.SetCommPort(1);//选择com2
    m_MSComm.SetInputMode(1); //以二进制方式输入数据
    m_MSComm.SetInBufferSize(1024); //输入缓冲区大小
    m_MSComm.SetOutBufferSize(1024); //输出缓冲区大小
    m_MSComm.SetSettings("9600,n,8,1"); //串口属性设置COM_PAR_SETTINGS
    m_MSComm.SetRThreshold(5); //设置什么时候引发OnComm
    m_MSComm.SetInputLen(0); //设置当前接收区数据长度为0
    m_MSComm.SetPortOpen(TRUE);//打开串口
    m_MSComm.GetInput(); //先预读缓冲区以清除残留数据
    }
    else
    {
    AfxMessageBox("串口已被占用!请选择其它串口!");
    }
    return 0;
    }
    ///////////////////////
      if(m_MSComm.GetCommEvent() == 2)
      {
      variant_inp = m_MSComm.GetInput();//读缓冲区
      safearray_inp = variant_inp;
      len = safearray_inp.GetOneDimSize();
      for(k=0;k<len;k++)
      safearray_inp.GetElement(&k,rxdata+k);
      for(k=0;k<len;k++)
      {
      BYTE bt = *(char*)(rxdata+k);
      strtemp.Format("%c",bt);
      strDisp+=strtemp;
      }
      }
      

  4.   

    我是在打开串口前已经设置了属性,并且串口可以正常打开,而且用虚拟串口可以和其他的串口助手通信,唯独在和电机进行通讯时无法接收到电机发来的信息···,跟踪后发现GetInput函数中报错了意外错误···不懂是怎么回事...
      

  5.   

    m_MSComm.SetRThreshold(5); //设置什么时候引发OnComm 不能为 0, 起码1.
      

  6.   

    额,不懂了,后来用CSerial类就可以了···也方便点,支持异步操作···
    还是感谢schlafenhamster 的热心解答,我会试一下你说的方法的,试过后再说