为了账号安全,请及时绑定邮箱和手机立即绑定

为什么当我绘制超过 2 个值时 Timer 会损坏我的数据?

为什么当我绘制超过 2 个值时 Timer 会损坏我的数据?

慕妹3242003 2022-01-05 13:30:23
我使用 Timer 同时进行绘图和存储。当我绘制 2 个值时,不会丢失来自串行端口的数据(每分钟 60 行,我的设备 = 1Hz)。但是当我尝试绘制超过 2 个值时,它会破坏数据(每分钟约 40 行)。1.我应该尝试thread还是queue代替wx.Timer?2.为什么会wx.Timer损坏我的数据?或者有什么问题?3.我应该使用串口功能吗?里面wx.Timer??我哪里做错了,什么?我需要你的帮助。任何帮助,将不胜感激。
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

我认为您不需要使用线程或队列而不是 wx.Timers。但是,我也认为您实际上只需要 1 个wx.Timer来检查并从串行端口(或其他数据源)获取数据。我建议wx.Timer事件的处理程序(如果您期望数据为 1Hz,则可能以 ~2Hz 运行)应该执行以下操作:

  1. 检查新数据。如果没有新数据,立即返回,等待下一个wx.Timer事件。

  2. 如果有新数据,请立即根据该数据进行解析和计算,并将其附加到该事件处理程序中的数据数组中。刚落,所有的存储和删除后临时数据,并有你self.x1self.y1等了最新数据,事件处理程序结束时。del XXX代码中的所有内容——尤其是因为一个事件处理程序删除了在另一个地方创建的数据——看起来它们可能是一个问题。

  3. 然后更新绘图。如果您认为绘图会很慢,您可以使用第二个计时器事件来查看 的长度是否self.x1已更改并重新绘制绘图。但是,我相信您不需要使用第二个计时器,只需更新数据事件处理程序中的图表即可。

有关如何完成此操作的示例,请参阅https://github.com/newville/wxmplot/blob/master/examples/stripchart.py 仅使用一个wx.Timer获取新数据并更新绘图的方法。请注意,它使用wxmplot.PlotPanel.update_line()哪个更新现有图比wxmplot.PlotPanel.plot()为每个新数据集重做要快得多。

next_data()示例中的函数比从串行端口读取数据所需的操作更简单、更具确定性。但是你已经在做那部分,你在做的事情看起来不会太难或太慢。


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信