线程评级:
Python数字输入等待方法被打破
# 1
在我的代码中,我使用命令“robot. waitdi(1,1)”来暂停程序,直到机器人在数字输入1上接收到一个高信号,但无论输入值是什么,当程序运行时,机器人实际上从不等待。我试图运行程序的机器人是一个UR10,根据手册,它的数字输入“on区域”为11V-30V。我已经确认,数字输入1正在使用数字万用表接收0V,甚至尝试运行与所有数字输入完全断开任何可能的电压源的命令,但程序仍然跳过这条指令。最奇怪的是,当我在RoboDK图形界面中使用“设置或等待I/O指令”按钮复制我的Python程序时,输入等待方法完全按照预期工作。意识到这一点后,我从我创建的UI程序和Python程序中生成了一个UR脚本,它们是相同的,所以我只能假设这种行为是由于某种软件错误造成的。我附上了我的Python代码以及从我的程序的UI和Python版本生成的UR脚本。任何帮助得到这种方法的工作将非常感谢,因为这对我的项目是必不可少的。


附加文件
. txt IOwaitMalfunctionPythonCode.txt(大小:526字节/下载:460)
. txt IOwaitURscriptPython.txt(大小:922字节/下载:437)
. txt IOwaitURscriptUIversion.txt(大小:728字节/下载:402)
我不确定我是否理解这个问题。

如果你打算移动真正的机器人,并使用机器人的输入/输出,我建议你确保你没有选中这个设置:
工具-选项-运动管理I/O与RoboDK连接到一个机器人
(默认不勾选)

如果前面的解决方案不起作用,那么提供RDK文件将会有所帮助。

你也可以运行这段代码作为测试:

代码:
RDK = Robolink()
robot = RDK.Item('UR10')
robot. connect() #确保你连接到机器人
RDK.setRunMode(RUNMODE_RUN_ROBOT) #触发真实机器人上的机器人命令
robot.MoveJ (point3)
robot.waitDI(1,1) #等待真正的输入1被设置为True/On
robot.MoveJ (point4)


这里有一个更详细的例子:
//www.x7093.com/doc/en/PythonAPI/exam...rogramming
# 3
艾伯特你好,

我们今天尝试使用waitDI方法,在我们的情况下,它并不像预期的那样工作。

我们可以看到控制器的输入是关闭的。当它关闭时,因为我们正在等待它为on(1),这个函数至少应该等待定义的ms。然而,它不会等待任何事情。

编辑:如果我们可以让它返回它是否收到信号或超时,那也会很可爱。
编辑2:它似乎只有在RoboDK接收到信号时才能作为程序工作。Timeout被丢弃。
# 4
+1在这个…
如果这个函数在接收到信号的情况下返回一个1/0值就太好了,这样我们就可以用输入来做If语句,而不是只是等待…
# 5
我不认为超时是在使用机器人驱动时实现的。如果没有实现,则应该永久等待。这可能高度依赖于机器人控制器。我们把它作为改进请求记下来。

为了确保你在等待正确的输入,你应该取消选中以下选项:
  • 工具-选项-运动管理I/O与RoboDK连接到一个机器人
最新的UR机器人在工具上有一些输入和输出。这些是你要检查的输入吗?
如果是这样,您应该将它们定位为输入/输出11,用于输入/输出1,12 ->2,等等。
# 6
(04-02-2019, 04:35 pm)艾伯特写道:我不确定我是否理解这个问题。

如果你打算移动真正的机器人,并使用机器人的输入/输出,我建议你确保你没有选中这个设置:
工具-选项-运动管理I/O与RoboDK连接到一个机器人
(默认不勾选)

如果前面的解决方案不起作用,那么提供RDK文件将会有所帮助。

你也可以运行这段代码作为测试:

代码:
RDK = Robolink()
robot = RDK.Item('UR10')
robot. connect() #确保你连接到机器人
RDK.setRunMode(RUNMODE_RUN_ROBOT) #触发真实机器人上的机器人命令
robot.MoveJ (point3)
robot.waitDI(1,1) #等待真正的输入1被设置为True/On
robot.MoveJ (point4)


这里有一个更详细的例子:
//www.x7093.com/doc/en/PythonAPI/exam...rogramming

在使waitDI()方法正常工作方面有任何进展吗?我尝试运行Albert提供的示例代码,确保“连接到机器人时使用RoboDK管理I/O”选项未勾选,但waitDI()方法仍然不会导致机器人等待任何时间。我没有检查工具输入,并尝试在UR10上运行所有8个常规数字输入的方法,每次都有相同的结果。按照要求,我附上了我的工作站文件,还包括我正在运行的测试方法的代码。任何帮助解决这个问题将非常感激。

测试代码:
引用:RDK = robolink.Robolink()
robot = RDK.Item('UR10')
point1 = RDK。项目(“目标5”)
point2 = RDK。项目(“目标6”)
robot. connect() #确保你连接到机器人
RDK.setRunMode(robolink.RUNMODE_RUN_ROBOT) #触发真实机器人上的机器人命令
robot.MoveJ (point1)
robot.waitDI(5,0) #这将等待真正的输入1被设置为True/On
robot.MoveJ(卷帘窗)
# 7
请记住,工具输入/输出映射到输入/输出11及以上。

看一下生成的UR脚本代码,我看到程序看起来是正确的。这段代码将等待数字输入1为True/On/1。
代码:
get_standard_digital_in(1) != True):
同步()
结束




浏览此线程的用户:
1客人(年代)