炫意html5
最早CSS3和HTML5移动技术网站之一

C# SerialPort 串口 Read 数据不正确,可能溢出 可能丢失 可能更改

1.sPort.Read(byts,0,2048),这个需要考虑ReadBufferSize这个属性的大小吗,比如采用默认值4096,但我上位机处理 (每次读了之后,加了10ms延迟),没有下位机发送快,输入缓冲区满了,下位机还是一直发送,这个时候,下位机能发送得了数据吗,如果能,那是不是我上位机这边就没位置接受了,然后会不会上位机出现丢失数据的可能?
1.2这个Read是异步的吗还是同步的?
1.3 这个Read是填满了 byts,之后,才会继续往下执行对吧,然后是Read读取不及时的数据,才会存入输入缓冲区,还是说下位机发送的数据首先就存入输入缓冲区,而Read是直接去输入缓冲区读的?
2.本来每次2048都是一帧的数据,应该每次开头第0个字节和第1个字节是相同的协议头信息,但是Read读出来,就读的其他的值。并且一开始循环读前几百帧的数据,头信息都是对的,但是读一会儿,头信息就发生错乱了,后面读的帧就跟着错了。错乱开始的位置是随机的。
3.只会在个别电脑上出现,有的电脑又不会出现这种情况。

请园友帮忙分析分析。

回答

串口是有延迟的,延迟时间并不是固定的,你的10ms时间未必能读到数据,延迟的长度取决于下位机处理的速度,你可以延迟100ms甚至500ms来做测试
最好是和下位机开发人员定义好协议,比如信息头如何定义,信息尾部如何定义,这样你通过while循环读取的时候就会知道数据从哪里开始从哪里结束(这样就可以解决延迟的问题了,因为你一致在循环等待)
至于数据缓冲是系统来操作的,你只管读写就好了,串口通信通常数据不会很多,不用担心溢出问题,如果真的很多很多,那你就要考虑你的代码设计了,至于一次读取的大小根据实际情况定义,没有固定个大小,也不必一定要2048的倍数之类的
数据读出来之后还要做校验的,校验成功才行
或者你把代码贴出来,感觉因该是代码的问题

炫意HTML5 » C# SerialPort 串口 Read 数据不正确,可能溢出 可能丢失 可能更改

Java基础教程Android基础教程