C# 串口问题 怎样精确地每隔10ms读取串口中的数据

我想每隔10ms读取一次传感器产生的数据,传感器是通过采集器然后输出为串口形式的。我是这样做的:利用线程每隔10ms发送一次读取命令,然后在DataReceived事件中利用serialPort.read()进行读取,同时利用dateTime.Now.Millisceond为每条读取的记录标记时间戳,最后存储在列表中。但发现列表中每条记录的时间间隔不是10ms,有两条记录时间间隔很大的情况出现,同时也有一条记录包含多条返回数据的情况,
请高手们指点,为什么出现这种情况,我想每隔10ms利用串口接收传感器的数据应该怎么写呢?

2个回答

要排除发送读取命令与接受数据的时间间隔在每次反馈中是否一致,不一致的话出现间隔不是10ms或者很长间隔的情况是存在的。

ypfsmile
ypfsmile 测试过了,出现了0和15两种时间间隔,为什么会出现0的情况呢?那应该怎样做才能精确地每隔10ms接收一次数据呢。
3 年多之前 回复

每隔10ms接收一次数据的目的?是为了写日志还是更新UI?

ypfsmile
ypfsmile 回复BenBenBears: 好的 谢谢
3 年多之前 回复
BenBenBears
BenBenBears 回复ypfsmile: 发送命令不一定要开线程,看SerialPort类有没有不阻塞的Send方法
3 年多之前 回复
ypfsmile
ypfsmile 回复BenBenBears: 十分感谢,那么我在向串口写命令时,应该怎么做呢?是一直循环发送就可以吗?还是也要开一个线程,用sleep吗
3 年多之前 回复
BenBenBears
BenBenBears 回复ypfsmile: 将接收到的数据写入缓存(队列或其他),开一线程每隔10ms读取队列
3 年多之前 回复
ypfsmile
ypfsmile 后续和其他传感器数据集成用的,数据记录在文本里就可以。
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐