RoboDK论坛
一个非阻塞移动命令仍然阻塞我的代码-打印版本

+- RoboDK论坛(//www.x7093.com/forum
+——论坛:RoboDK (EN) (//www.x7093.com/forum/Forum-RoboDK-EN
+——论坛:RoboDK API (//www.x7093.com/forum/Forum-RoboDK-API
+——线程:一个非阻塞移动命令仍然阻塞我的代码(/ Thread-A-non-blocking-movement-command-is-still-blocking-my-code



一个非阻塞移动命令仍然阻塞我的代码-petsven-06-27-2022

我正在模拟模式下运行代码。我想在不阻塞的情况下移动机械臂,这样我就可以在机械臂移动时获得TCP的位置。我正在使用moveJ命令移动机械臂。为了检查MoveJ命令是否仍然阻塞,我添加了打印时间命令。这是我的代码:
代码:
运动中的运动:
print("Start: " +str(time.time()))
机器人。MoveJ(运动,阻止= False)
print("Stop: " +str(time.time()))

我可以看出代码仍然阻塞,因为在开始和停止打印语句之间有1.3秒的延迟。为什么代码仍然阻塞?它总是在模拟模式下阻塞吗?我需要使用像“asyncio”这样的库来使它不阻塞吗?


回复:一个非阻塞移动命令仍然阻塞我的代码-petsven-07-06-2022

我可以通过使用async.io让它工作:


代码:
Async def non_blocking(循环,执行器):
等待asyncio.wait (
fs = {
getPosition loop.run_in_executor(执行器),
moveRobot loop.run_in_executor(执行器),
},
return_when = asyncio。ALL_COMPLETED



回复:一个非阻塞移动命令仍然阻塞我的代码-Maarten-08-29-2022

我也遇到了同样的问题:

我在一个站点中有两个机器人(R1和R2),我想从API向它们中的任何一个发射非阻塞移动命令。最简单的形式:

代码:
R1. movej (R1_T1,False) #1关节移动第一个机器人R1到目标R1_T1
R1. movej (R1_T2,False) #2关节移动第一个机器人R1到目标R1_T2

R2. movej (R2_T1,False) #3关节移动第二个机器人R2到目标R2_T1
R2. movej (R2_T2,False) #4关节移动第二个机器人R2到目标R2_T2

尽管选项blocking=False,两个连续的移动命令#1和#2到R1有效地引入了阻塞行为,因为命令#2直到命令#1完成才会执行。因此,对R2执行命令#3和#4也会被阻塞,直到命令#1完成。

我想要的行为是R1连续执行它的命令#1和#2,而不阻止R2开始连续执行命令#3和#4,与彼此的繁忙状态无关。

如何实现异步的任何建议。在这种情况下,还是其他方式?

最好的问候,

Maarten