/*************************************************
函数名称      SendCmd
简要描述      发送串口命令数据
*************************************************/
void CradarDlg::SendCmd()
{ if(m_nSendTimes < 3)
{    
CString SendString = ""; //memory the frame
BYTE m_bySendFrame2[7]={0xF1,0x1F,0x00,0x01,0xAA,0xDE,0xFF};


bCmdState = FALSE;       //禁止其他命令的发送!!        for (int i = 0; i < 7; i++)

SendString += ( char ) m_bySendFrame[i];  //format the frame
} m_Port.WriteToPort((LPCTSTR)SendString);
        m_nTimer2s = SetTimer ( 2, 2000, 0 );// 启动1秒定时
m_nSendTimes ++ ;
}
else//发送三次都失败


       bCmdState = TRUE;    // 允许其他命令发送

m_nSendTimes= 0;     //发送次数清零
KillTimer(2); 
}
}如上函数, 把m_bySendFrame2[7]={0xF1,0x1F,0x00,0x01,0xAA,0xDE,0xFF}作为RS232控制指令发送到
串口,到0x00就无法发送,实际上是F1 1F ,而不是F1 F  00 01  AA  DE FF    
为什么?如何改?串口VCstring

解决方案 »

  1.   

    你得按二进制发送,不能按字符发送,字符的结束符就是\0,把0X00当成结束符了,你直接发送m_bySendFrame2,串口设置成二进制格式,不要设置字符型发送,好象是DCB里有一个fBinary字段就是设二进制还是字符发送
      

  2.   

    好像是不能用CSTRING啊,cstring类型遇到0会自动结束
      

  3.   

    m_Port.WriteToPort((LPCTSTR)SendString);为什么要用字符串发送了,可能WriteToPort发送时遇到\0就结束发送。按字节发送吧,看m_Port有没有用字节发送到串口的方法...
      

  4.   

    如果你要把\0后面的也发出去, 应该改一下这个接口WriteToPort的参数传指针和长度
      

  5.   

    我用serialport.cpp and serialport.h,看了源程序,
    m_Port.WriteToPort((LPCTSTR)SendString);
    改为
    m_Port.WriteToPort((LPCTSTR)SendString,7);
    即可