在等待ECU的OBD数据时,我应该多长时间睡眠?

时间:2013-06-05 13:20:42

标签: c# serial-port obd-ii

我正在使用C#为Windows开发OBD2扫描仪应用程序。我希望有人能告诉我等待响应的最佳时间(使用thread.Sleep())从汽车的ecu中读取串口的响应。

我正在使用蓝牙适配器进行开发,波特率为9600.我目前的等待时间设置为100毫秒,但我希望能比这更短。我只是不想遇到我尝试在端口未准备好时读取数据的情况。我希望在平滑的GUI和舒适的误差范围之间取得良好的平衡。

更新:感谢您的想法。处理DataReceived是一个很好的总体思路,但我睡眠线程的原因是我需要每隔一段时间重复轮询一次ECU,以便我可以做更新RPM测量仪等事情。我试图找到一个甜点,我从ECU获得尽可能多的代表,而不是压倒它。如果我只对它进行一次轮询,那么简单地处理一个事件就可以了,但我需要知道民意调查之间可接受的间隔是多少。我肯定会将我的代码更改为事件驱动,但我仍然需要知道民意调查之间的时间有多长。

2 个答案:

答案 0 :(得分:2)

不是使用Thread.Sleep(),而是生成一个不断尝试从流中读取的后台线程可能更合适。完全读取数据后,触发主线程处理的事件。只要你打开了端口,就不会有问题。

答案 1 :(得分:0)

我决定跟随我的汽车内置行程计算机的引导并每1000ms更新一次值,或更准确地说,每秒刷新10个值,一次一个,100ms,200ms,300ms等。< / p>

我还优先考虑更频繁变化的事情,例如即时消耗,RPM和一些专门的传感器。电池电压,温度和燃料水平之类的事情只需要分别每5,10和20秒进行一次真实的轮询,因此有很大的优先次序。