我打算编写一个程序,绘制连接到计算机的传感器的数据。传感器值将被绘制为时间的函数(传感器值在y轴上,时间在x轴上)。我希望能够实时向剧情添加新的值。用C++做什么最好?实时绘图/数据记录
编辑:顺便说一下,该方案将在Linux机器
我打算编写一个程序,绘制连接到计算机的传感器的数据。传感器值将被绘制为时间的函数(传感器值在y轴上,时间在x轴上)。我希望能够实时向剧情添加新的值。用C++做什么最好?实时绘图/数据记录
编辑:顺便说一下,该方案将在Linux机器
上运行写,可以在你喜欢的方式从传感器.push_back()
值绘制std::deque
,然后继续向队列,因为他们来的函数可用的和.pop_front()
值来自队列,如果它变得太长以至于很好的绘图。
您的绘图功能的确切性质取决于你的平台上,需要,审美意识等
看起来很有希望。我会看看它。谢谢! – Paul 2010-02-03 12:45:46
你不能遍历一个'std :: queue',所以你可能想直接使用'std :: deque';你仍然可以通过deque来push_back和pop_front。 – 2010-02-03 13:57:44
这是一个很好的观点,我会更新我的答案。 – 2010-02-03 22:59:25
您可以使用ring buffers。在这样的缓冲区中你已经读取了位置和写入位置。这样一个线程可以写入缓冲区和其他读取并绘制图形。为了提高效率,您通常最终会编写自己的框架。
这种缓冲区的大小可以使用例如:传感器的数据传输速度(40KHz?),一个探头的大小和您想要保留用于绘图目的的时间跨度来估算。
这也取决于您是否想要存储未压缩的数据,存储渲染图 - 所有这些都用于进一步的离线分析。在非RTOS环境中,您的“实时”取决于处理速度:您可以多快地检索/存储/处理和绘制数据。通常它接近实时效率。
我假设你将在RTOS上部署这个应用程序。但是,数据传输率和实时要求是什么?因此,如上所述,一个简单的解决方案可能绰绰有余。但是,如果你有严格的实时限制,一切都会发生巨大的变化。使用数据管道的多线程设计可以解决您的实时问题。
您是否特别关注C++方面?通过将gnuplot放入读取/绘图/刷新循环或使用LiveGraph而没有任何问题,我已经完成了10Hz左右的速率数据,而不会出汗。
您可能想查看RRDtool以查看它是否符合您的要求。
RRDtool是一个用于时间序列数据的高性能数据记录和绘图系统。
保罗,这不是一个真正的问题,它更多的是一个建议的请求,即使那么它是模糊的。我猜你正在寻找一个图表库,允许你动态地将数据添加到图表中。我建议从该句中选择关键字并前往Google。 – Lazarus 2010-02-03 12:35:02
您是否需要准确的时间或相对时间是否足够?从操作系统获取相对时间可能比绝对时间快。 – 2010-02-03 18:17:07