用C#的SerialPort类写一个串口通讯程序,目的是往设备发送字串。
采用的是Xon/Xoff流控制,我现在打开串口后直接WriteLine,设备接收出错。如果从设备上先下发一些数据,再直接WriteLine则设备能正常接收了。初步判断,这个设备需要握手协议,向它发送数据时,必须等待Xon后再发送。
现在的问题是,在C#的这个SerialPort类中,连定义XonChar的地方都找不着啊有一个老外写的东东能连接这个设备,在参数设置中,有 Xon: \17,还有一个 “等待Xon”的checkbox是打勾
若把这个勾去掉,发送就会失败。不知有没高手能指点一二,万分感激~

解决方案 »

  1.   

    发送数据时,等待几秒再发送试一下, 比如
    SerialPort sp = new SerialPort("COM1", 9600);
    sp.Open();
    while (true)
    {
    sp.Write("xxxx\r");
    Thread.Sleep(5000);sp.Write("xxxx\r");
    Thread.Sleep(5000);
    }
      

  2.   

    WriteLine如象是只能发送文本,你的设备是不是只能接收BYTE型的数据呀!
    要不是将你的文本先转换成BYTE型数据再用Write写到串品呀!
    文本转BYTE[]使用函数System.Text.Encoding.UTF8.GetBytes(参数)
    Byte[]转文本使用函数System.Text.Encoding.UTF8.GetString(参数)具体使用见MSDN
      

  3.   

    谢谢以上各位的回答。
    问题已解决,使用多线程,一个线程负责接收,发送数据到串口时,先阻塞,直到负责接收的线程收到Xon(即0x11),发信号回来,再将数据发送出去。这个设备XonXoff握手协议原来如此完全是猜出来的,累