我打算编写一个程序,绘制连接到计算机的传感器的数据。传感器值将作为时间的函数绘制(y轴上的传感器值,x轴上的时间)。我希望能够实时地为情节添加新值。用C ++做什么最好?
编辑:顺便说一句,该程序将在Linux机器上运行
答案 0 :(得分:3)
您是否特别关注C ++方面?通过将gnuplot放入读取/绘图/刷新循环或LiveGraph没有问题,我已经完成了10Hz左右的速率数据而不会出汗。
答案 1 :(得分:1)
编写一个可以按照您喜欢的方式绘制std::deque
的函数,然后将.push_back()
值从传感器传递到队列(如果可用),并从队列中.pop_front()
值对于好的策划而言,它变得太长了。
绘图功能的确切性质取决于您的平台,需求,美学意识等。
答案 2 :(得分:1)
您可以使用ring buffers。在这样的缓冲区中,您具有读取位置和写入位置。这样一个线程就可以写入缓冲区和其他读取并绘制图形。为了提高效率,通常最终会编写自己的框架。
此类缓冲区的大小可以使用例如:传感器的数据传输速度(40KHz?),一个探头的大小以及您希望用于绘图目的的时间跨度来估算。
这还取决于您是否要存储未压缩的数据,存储渲染图 - 所有这些都用于进一步的离线分析。在非RTOS环境中,“实时”取决于处理速度:检索/存储/处理和绘制数据的速度。通常它几乎是实时效率。
答案 3 :(得分:1)
您可能需要查看RRDtool,看看它是否符合您的要求。
RRDtool是一个用于时间序列数据的高性能数据记录和绘图系统。
答案 4 :(得分:0)
对于通过RS232连接了渗透率传感器的设备,我做了类似的事情。
顺便说一下,我认为有很多图书馆,只需搜索它们:
答案 5 :(得分:0)
我假设您将在RTOS上部署此应用程序。但是,数据速率和实时要求是什么!因此,如上所述,简单的解决方案可能绰绰有余。但是,如果你有严格的实时约束,一切都会发生巨大的变化。具有数据管道的多线程设计可以解决您的实时问题。