日期:2014-05-19  浏览次数:20988 次

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

------解决方案--------------------
是读取的时候数据都错误,还是部分正确部分错误?
如果,如果是部分错误的话,我决定你的线路是否稳定?
如果都错误的话,你确定一下你的通讯协议,是否正确.
有串口监听程序,你可以试试.
------解决方案--------------------
波特率是否有问题

------解决方案--------------------
确定下位机的程序没问题吗?
------解决方案--------------------
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位
希望对你有帮助