【发布时间】:2017-12-07 19:41:42
【问题描述】:
我有一个通过 USB 控制设备的 GUI。 我设置它的方式基本上是两个按钮,前进和后退,当按下按钮时,该功能会传输到电机,当松开按钮时,会触发一次关闭信号。
def on_release():
print('Off')
self.off()
def on_click():
print('forward')
self.forward()
button = QPushButton('Cut', self)
button.move(100,70)
button.pressed.connect(on_click)
button.released.connect(on_release)
def on_click():
print('back')
self.back()
button = QPushButton('back', self)
button.move(200,70)
button.pressed.connect(on_click)
button.released.connect(on_release)
我最近遇到了一个有趣的故障模式,如果在释放按钮的那一刻 USB 连接暂停(在我的情况下,我使用 GDB 并遇到断点,释放按钮,然后释放断点),永远不会发送终止信号,并且电机将永远继续前进或后退。 (可以通过单击后退或前进之一并释放或完全终止USB来终止它)
我已经有保护措施(线程心跳信号)在 USB 连接被切断的情况下关闭电机,但我想让这个失败更安全一点,以防一个特定的 USB 关闭传输失败了。
有没有办法让我检查是否没有按下按钮,以便我可以使用它来触发关闭信号?
【问题讨论】:
-
检查 [stackoverflow.com/questions/19508450/… 或者使用带有 trinamic 2120+ 步进驱动器的 arduino。信号下降 == 板上的电机停止模式、过载等。 [watterott.com/de/SilentStepStick]
-
您可以定义按钮在按下时通过 USB 或步进驱动器给出的步骤。例如,button1 = 每个按下事件 100 步。按钮 2 = 10 步,按钮 3 = 1 步...在后一种情况下,这意味着您需要连续按下它才能继续进行。如果释放... 1 个额外的步骤完成,然后停止信号自动传输(在步进驱动程序或您的 pyscript 中)。
-
另一个非常有用的链接是 [zapmaker.org/projects/grbl-controller-3-0/],他们展示了如何为控制 3d 打印机的 arduino 板制作 qt gui。这里 [zapmaker.org/wp-content/uploads/2012/12/mac.png] 显示向左或向右移动的 1 步长。
标签: python-3.x pyqt5