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

我使用 Timer 同时进行绘图和存储。当我绘制 2 个值时,不会丢失来自串行端口的数据(每分钟 60 行,我的设备 = 1Hz)。但是当我尝试绘制超过 2 个值时,它会破坏数据(每分钟约 40 行)。

1.我应该尝试thread还是queue代替wx.Timer

2.为什么会wx.Timer损坏我的数据?或者有什么问题?

3.我应该使用串口功能吗?里面wx.Timer??

我哪里做错了,什么?我需要你的帮助。任何帮助,将不胜感激。


慕妹3242003
浏览 106回答 1
1回答

RISEBY

我认为您不需要使用线程或队列而不是 wx.Timers。但是,我也认为您实际上只需要 1 个wx.Timer来检查并从串行端口(或其他数据源)获取数据。我建议wx.Timer事件的处理程序(如果您期望数据为 1Hz,则可能以 ~2Hz 运行)应该执行以下操作:检查新数据。如果没有新数据,立即返回,等待下一个wx.Timer事件。如果有新数据,请立即根据该数据进行解析和计算,并将其附加到该事件处理程序中的数据数组中。刚落,所有的存储和删除后临时数据,并有你self.x1,self.y1等了最新数据,事件处理程序结束时。del XXX代码中的所有内容——尤其是因为一个事件处理程序删除了在另一个地方创建的数据——看起来它们可能是一个问题。然后更新绘图。如果您认为绘图会很慢,您可以使用第二个计时器事件来查看 的长度是否self.x1已更改并重新绘制绘图。但是,我相信您不需要使用第二个计时器,只需更新数据事件处理程序中的图表即可。有关如何完成此操作的示例,请参阅https://github.com/newville/wxmplot/blob/master/examples/stripchart.py 仅使用一个wx.Timer获取新数据并更新绘图的方法。请注意,它使用wxmplot.PlotPanel.update_line()哪个更新现有图比wxmplot.PlotPanel.plot()为每个新数据集重做要快得多。该next_data()示例中的函数比从串行端口读取数据所需的操作更简单、更具确定性。但是你已经在做那部分,你在做的事情看起来不会太难或太慢。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python