关于SerialPort类的读取问题

linxiamaomao 2012-01-04 01:46:32

//////////////以上是COM类
protected int BytesToRead = 0;
protected int ReadStart = 0;
protected char[] ReadBuffer = new char[500];

public void Open
{
SerialPort COMPort = new SerialPort()
COMPort.PortName = "COM3"
COMPort.BaudRate = 19200
COMPort.DataBits = 7
COMPort.Parity = "偶"
COMPort.StopBits = one
if (!COMPort.IsOpen)
{
COMPort.Open();
COMPort.RtsEnable = true;
"连接成功"
}
else
{
"连接失败"
}
COMPort.DataReceived += new SerialDataReceivedEventHandler(COMPort_DataReceived);
}
protected virtual void COMPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{

SendCommand();
//RetryCount = 0;
ReadBuffer = new char[500];
}
public void SendCommand()
{
COMPort.Write(LastCommad.GetCommand(), 0, LastCommad.GetCommand().Length);
}
//////////////PLC类
PLC类 :COM类
protected override void COMPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
ByteToRead = COMPort.BytesToRead;
COMPort.Read(ReadBuffer, ReadStart, BytesToRead);
ReadStart = ReadStart + BytesToRead;
}


请各位大师不要纠结参数的问题,
现在我可以写入值,但是ReadBuffer一起取不到值,一直报错ArgumentException 有大师能帮我解决下吗?在线等!谢谢
...全文
91 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiacheng1984 2012-01-04
  • 打赏
  • 举报
回复
如果读取没有成功的话,BytesToRead自然会一直累加。或者可用DiscardInBuffer();
xiacheng1984 2012-01-04
  • 打赏
  • 举报
回复
ReadBuffer数组的大小可能不足以容纳待读取的内容,读取前先判断BytesToRead的大小
linxiamaomao 2012-01-04
  • 打赏
  • 举报
回复
COMPort.BytesToRead 这个字节在读第二次的时候 为什么会继续累加上去呢?

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧