RT,返回的字节数据正确有几项,错误都显示为63,不知道是什么原因?
我是写完串口数据之后,延时了大于一秒再去读返回数据的!
请高手指点一二!谢谢,在线等!

解决方案 »

  1.   

    我用串口监视程序检测了一下,结果如下:
    串口调试工具
    COM1【CREATE:1476】
    COM1【DEVICE_CONTROL:SET_BAUD_RATE】80 25 00 00 
    COM1【DEVICE_CONTROL:SET_LINE_CONTROL】00 03 08 
    COM1【DEVICE_CONTROL:SET_CHARS】00 00 00 00 11 13 
    COM1【DEVICE_CONTROL:SET_HANDFLOW】00 00 00 00 00 00 00 00 00 04 00 00 00 04 00 00 
    COM1【DEVICE_CONTROL:SET_QUEUE_SIZE】00 20 00 00 00 10 00 00 
    COM1【DEVICE_CONTROL:SET_TIMEOUTS】FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    COM1【DEVICE_CONTROL:SET_WAIT_MASK】39 01 00 00 
    COM1【DEVICE_CONTROL:PURGE】05 00 00 00 
    COM1【WRITE:0】FF 00 03 08 65 04 73 
    COM1【READ:0】04 00 03 08 65 00 74 
    COM1【CLOSE:4】自己写的程序:
    COM1【CREATE:2852】
    COM1【DEVICE_CONTROL:SET_BAUD_RATE】80 25 00 00 
    COM1【DEVICE_CONTROL:SET_LINE_CONTROL】00 03 08 
    COM1【DEVICE_CONTROL:SET_CHARS】1A 3F 3F 1A 11 13 
    COM1【DEVICE_CONTROL:SET_HANDFLOW】00 00 00 00 04 00 00 00 00 04 00 00 00 04 00 00 
    COM1【DEVICE_CONTROL:SET_BAUD_RATE】80 25 00 00 
    COM1【DEVICE_CONTROL:SET_LINE_CONTROL】00 03 08 
    COM1【DEVICE_CONTROL:SET_CHARS】1A 3F 3F 1A 11 13 
    COM1【DEVICE_CONTROL:SET_HANDFLOW】00 00 00 00 04 00 00 00 00 04 00 00 00 04 00 00 
    COM1【DEVICE_CONTROL:SET_TIMEOUTS】FF FF FF FF FF FF FF FF FE FF FF FF 00 00 00 00 00 00 00 00 
    COM1【DEVICE_CONTROL:SET_WAIT_MASK】FB 01 00 00 
    COM1【DEVICE_CONTROL:SET_QUEUE_SIZE】00 10 00 00 00 08 00 00 
    COM1【WRITE:0】FF 00 03 08 65 04 73 
    COM1【READ:0】04 3F 03 3F 65 3F 74 
    COM1【DEVICE_CONTROL:SET_WAIT_MASK】00 00 00 00 
    COM1【DEVICE_CONTROL:PURGE】0A 00 00 00 05 00 00 00 
    COM1【CLOSE:2852】二者对比很明显是后者读取的数据有问题!有哪位好心的大侠帮我看看是什么原因呀?
      

  2.   

    DEVICE_CONTROL:SET_CHARS ,两个程序的结果不一样,我怀疑是缓冲区大小,字节长度等问题,
    用的是什么方法?代码如何?我用的如下:
     private void myPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                // 多线程
                if (threadCallHandler == null)
                {
                    threadCallHandler = new SerialDataReceivedEventHandler(myPort_DataReceived);
                }            if (this.InvokeRequired)
                {
                    this.Invoke(threadCallHandler, new object[] { sender, e });
                    return;
                }            // 俘获异常
                try
                {
                    string data = (sender as SerialPort).ReadExisting();
                    txtReceive.Text = txtReceive.Text + data;                txtReceive.SelectionStart = txtReceive.TextLength;
                    txtReceive.ScrollToCaret();
                }
                catch (Exception ex)
                {
                    myPort.Close();
                    MessageBox.Show(ex.Message);
                }
            }最好先查看数据位,校验位,停止位等等初始化的设置是否和另外一个程序一致
                myPort.PortName = Convert.ToString(cboPort.SelectedItem); // 串口
                myPort.BaudRate = Convert.ToInt16(cboRate.Text);  // 波特率
                myPort.DataBits = 8;  // 数据位
                myPort.Parity = Parity.None; ; // 校验位 无校验
                myPort.StopBits = StopBits.One; ;// 停止位1位
    希望对你有帮助