监测项目,16个传感器,采样频率50hz,采用oracle数据库,结构简单:record_time + sensor_data。
offlineHeuristic->learn(state, action, reward)
我使用livecharts wpf控件来读取数据库,显示实时曲线。
要求:20ms显示数据,曲线左移,无显示暂停。
现在有两种方法可以读取数据库:
定期刷新
Create Table real_data(
record_time timestamp(3),
ac_1 Float,
ac_2 Float,
ac_3 Float,
ac_4 Float,
ac_5 Float,
ac_6 Float,
ac_7 Float,
ac_8 Float,
ac_9 Float,
ac_10 Float,
ac_11 Float,
ac_12 Float,
ac_13 Float,
ac_14 Float,
ac_15 Float,
ac_16 Float
)
Tablespace data_test;
是否高频数据显示,通过数据库读取方式是不可行的?只有通过直接读取设备API可行吗?
谢谢!
答案 0 :(得分:2)
您问,如何更快地刷新图表,而不是暂停查询数据库。我不是技术大师,但我知道可能对你有用的“作弊”。而不是在图表上显示当前值,而是显示一秒钟前的值,基本上是缓冲。
所以我的想法是你有一个每500ms读取一次数据的线程,并将读取的数据存储到内存中。然后你有另一个图表更新线程,每20ms从内存中获取一个结果集并绘制它。这将使图表看起来平滑且没有停顿,数据曲线也将是准确的。唯一的缺点是图表没有显示“实时”数据,而是500ms前的数据延迟版本。
这就是我的意思:
0秒 - 传感器开始,图表上没有视觉
0.5秒 - 在DB中设置25个数据,查询DB(选择1~25),图表上没有可视化
1秒 - 在数据库中设置50个数据,查询数据库(选择26~50),在接下来的500毫秒内开始在图表上显示结果1~25。
1.5秒 - 在DB中设置75个数据,查询DB(选择51~75),在接下来的500ms内开始在图表上显示结果26~50。