串口编程,数据丢失了??

joivon 2011-10-18 09:42:44
我发现到了
//\n分隔一下
String[] dataStr = serialTxt.Split('\n');

分隔之后把大部分数据是完整的正确的,但是有时候确部完整.
70个中会有1,2个不完整的数据,我又不想抛弃这部分数据.
我在想是不是我读取数据的时候有问题啊.拉掉了一些数据呢?
大家帮我看看.

================

while (comSurf)
{
if (this.spCOM.IsOpen)
{
byte[] readBuffer = new byte[spCOM.ReadBufferSize];
try
{

//读取数据字节
int count = spCOM.Read(readBuffer, 0, readBuffer.Length);

//累加,怕之前数据读取没完整,不完整的数据留着和后面的追加在一起.
SerialIn += System.Text.Encoding.ASCII.GetString(readBuffer, 0, count);

//转移数据
String serialTxt = "";
//读取正确数据到txt中.
serialTxt = SerialIn.Substring(SerialIn.IndexOf("\r\n") + 1, SerialIn.LastIndexOf("\r\n") - SerialIn.IndexOf("\r\n"));
//正确的数据拿走之后有时候会剩下几个字符.这几个字符要留着与后面的对接成完整数据.
SerialIn = SerialIn.Substring(SerialIn.LastIndexOf("\r\n") + 1);
//\n分隔一下
String[] dataStr = serialTxt.Split('\n');
//具体处理数据.
foreach (String foo in dataStr)
{
//做数据处理.
}
//后面的都是关闭括号了.
...全文
49 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
katsukifan 2011-10-18
  • 打赏
  • 举报
回复
你这些代码是写到接收事件中的吗,如果是,把对数据的处理拿出去,放到线程里执行,接收事件中是负责把接收到的数据放到内存中,线程负责逐条处理



另外,数据的传输完整性还和机器有关,要根据实际情况调整串口参数,曾经遇到过好机器正常,慢一点的就接收错乱



数据先缓存在判断完整性,有效性,才做分析。

如果协议是ascii的协议,datareceived事件中可以用ReadTo("\r\n")来读取,或ReadLine()阻塞读取。

110,537

社区成员

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

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

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