07-06-2022,下午06:55
你好。我正试图研究如何将GUI放在一个程序上使用这个//m.sinclairbody.com/doc/en/PythonAPI/exam...amming-gui。我正在焊接模拟上测试它,但它不起作用。我很感激你的帮助,这样我就能更好地理解如何在RoboDK上使用python API。
当我运行程序时,我得到这个,我不明白它:
这是我正在尝试的Robo2022世界杯8强赛时间DK的离线编程GUI示例:
当我运行程序时,我得到这个,我不明白它:
代码:
PS C:\Users\Andrew L. Nguyen> & C:/RoboDK/Python37/python.exe " C:/ Users/Andrew L. Nguyen/AppData/Local/Temp/Prog2_4.py"
提供的项目无效:提供的项目标识符无效或不存在。kinter回调中的异常
回溯(最近一次调用):
文件"C:\RoboDK\Python37\lib\tkinter\__init__.py",第1705行,在__call__ .py中
返回self.func (* args)
文件“c:/Users/Andrew L. Nguyen/AppData/Local/Temp/Prog2_4.py”,第143行,在ExecuteChoice
调用()
文件“c:/Users/Andrew L. Nguyen/AppData/Local/Temp/Prog2_4.py”,第51行,在RunProgram中
poseref = target.Pose()
文件“C:\RoboDK\Python\ RoboDK\ robolink.py”,行4307,在Pose
self.link._check_status ()
文件"C:\RoboDK\Python\ RoboDK\ robolink.py",第764行,在_check_status
提高异常(self.LAST_STATUS_MESSAGE)
例外:Invalid item提供:提供的项目标识符无效或不存在。
这是我正在尝试的Robo2022世界杯8强赛时间DK的离线编程GUI示例:
代码:
这个例子展示了RoboDK和Python GUI tkinter如何显示图形用户界面来根据某些参数自定义程序生成
这个例子是焊接六边形的改进
关于RoboDK API的更多信息:
# //m.sinclairbody.com/doc/en/RoboDK-API.html
从robodk。robolink导入* # API与RoboDK通信
从robodk。Robomath导入* # robodk机器人工具箱
#设置默认参数
PROGRAM_NAME = "DoWeld" #程序名称
APPROACH = 300 #接近距离
RADIUS = 200 #多边形的半径
SPEED_WELD = 50#焊接路径速度,单位为mn/s
SPEED_MOVE = 200 #接近/收回运动的速度(mm/s)
SIDES = 8 #多边形的边数
DRY_RUN = 1 #如果为0,则生成SprayOn/SprayOff程序调用,否则不会激活工具
RUN_MODE = RUNMODE_SIMULATE #仿真行为(模拟、生成程序或生成程序后发送给机器人)
#使用RUNMODE_SIMULATE来模拟
#使用RUNMODE_MAKE_ROBOTPROG生成程序
#使用RUNMODE_MAKE_ROBOTPROG_AND_UPLOAD生成程序并将其发送给机器人
#主程序
def调用():
使用默认的全局变量
全球PROGRAM_NAME
全球的方法
全球半径
全球SPEED_WELD
全球SPEED_MOVE
全球边
全球DRY_RUN
全球RUN_MODE
与RoboDK的任何交互都必须通过RDK完成。
RDK = Robolink()
#得到家庭目标和焊接目标;
home = RDK.Item(' home ')
target = RDK。项目(目标参考)
#获取机器人作为物品:
机器人= RDK。项目(ITEM_TYPE_ROBOT”)
#强加运行模式
RDK.setRunMode (RUN_MODE)
#设置生成程序的名称
RDK。ProgramStart(PROGRAM_NAME, "", "", robot)
#获取参考目标的姿态(4x4矩阵表示位置和方向):
poseref = target.Pose()
#将机器人移动到home位置,然后移动到接近位置
robot.MoveJ(回家)
robot.setSpeed (SPEED_MOVE)
机器人。MoveJ(transl(0,0, APPROACH) * poseref)
#在参考目标周围创建一个n边的多边形
对于i在范围(SIDES + 1):
ang = i * 2 * pi / SIDES #角度:0,60,120,…
#计算下一个位置
posi = posseref * rotz(ang) * transl(RADIUS, 0,0) * rotz(-ang)
robot.MoveL (posei)
#只对第一点施加焊接速度
如果I == 0:
设定焊接速度,到达第一个点后启动焊枪
robot.setSpeed (SPEED_WELD)
如果不是DRY_RUN:
#在我们到达第一个点后立即启动喷雾
机器人。INSTRUCTION_CALL_PROGRAM RunCodeCustom(“SprayOn”)
#停止工具,如果我们不做一个演习
如果不是DRY_RUN:
机器人。INSTRUCTION_CALL_PROGRAM RunCodeCustom(“SprayOff”)
robot.setSpeed (SPEED_MOVE)
#移回接近点,然后回家:
机器人。MoveL(transl(0,0, APPROACH) * poseref)
robot.MoveJ(回家)
#激发程序生成(当RDK完成时自动生成)
RDK.Finish ()
#使用tkinter显示GUI菜单
从tkinter import *
#生成主窗口
root = Tk()
根。标题(“项目设置”)
#使用链接到全局变量的变量
runmode = IntVar()
runmode.set(RUN_MODE) #设置默认值
dryrun = IntVar()
dryrun.set(DRY_RUN) #设置默认值
entry_name = StringVar()
entry_name.set (PROGRAM_NAME)
entry_speed = StringVar()
entry_speed.set (str (SPEED_WELD))
#定义反馈调用
def ShowRunMode ():
print("选择的运行模式:" + str(runmode.get()))
为程序名定义一个标签和条目文本
标签(根,文本="程序名").pack()
条目(根,textvariable = entry_name) .pack ()
定义焊接速度的标签和输入文本
标签(根,文本="焊接速度(毫米/秒)").pack()
条目(根,textvariable = entry_speed) .pack ()
定义一个复选框来进行演练
Checkbutton(root, text="Dry run", variable=dryrun, onvalue=1, offvalue=0, height=5, width=20).pack()
#为运行模式添加显示标签
Label(root, text="Run mode", justify=LEFT, padx=20).pack()
#设置运行模式(单选按钮)
runmodes = [("Simulate", RUNMODE_SIMULATE), ("Generate program", RUNMODE_MAKE_ROBOTPROG), ("Send program to robot", RUNMODE_MAKE_ROBOTPROG_AND_START)]
对于txt,在runmodes中输入val:
单选按钮(根,文本=txt, padx=20,变量=runmode,命令=ShowRunMode,值=val).pack(锚=W)
添加一个按钮和默认动作来执行用户当前的选择
def ExecuteChoice ():
全球DRY_RUN
全球RUN_MODE
全球SPEED_WELD
全球PROGRAM_NAME
DRY_RUN = dryrun.get()
RUN_MODE = runmode.get()
SPEED_WELD = float(entry_speed.get())
PROGRAM_NAME = entry_name.get()
#运行主程序一旦所有的全局变量已经设置
调用()
按钮(根,文本='模拟/生成',命令=ExecuteChoice).pack()
#重要的是显示图形用户界面
root.mainloop ()