线程评级:
使用RoboDK编程FANUC CR-15iA / R-30iB控制器的IO
# 1
你好,

我正在试图弄清楚如何解决FANUC CR-15iA上的终端执行器(EE) I/O端口,该端口通过FANUC R-30iB Plus控制器盒控制。我将使用RoboDK网站上提供的FANUC/RoboDK驱动程序,但似乎没有一个库列出了可以调用的各种方法。我希望能遇到像“setRO[x]=1”这样的命令,可以在RoboDK输入机器人的KAREL代码中执行。我想在特定的机器人运动中注入这些命令,这样KAREL代码看起来就像这样:

J1 xxx J2 xxx J3 xxx
J4 xxx J5 xxx J6 xxx
setRO[x] = 1;
等等……

此外,我已经深入研究了事物的后期处理方面,并发现了“setDO(io_var, io_value)”命令。我想知道我是否将此函数称为“setDO(1,1)”,如果这将在EE I/O端口上将机器人输出引脚1 (RO[1])设置为1。

关于如何通过RoboDK代码编程FANUC CR-15iA / R-30iB加控制器的任何信息将非常感谢。

谢谢你!
(05-04-2022, 07:53 pm)RobotOverlord写道:你好,

我正在试图弄清楚如何解决FANUC CR-15iA上的终端执行器(EE) I/O端口,该端口通过FANUC R-30iB Plus控制器盒控制。我将使用RoboDK网站上提供的FANUC/RoboDK驱动程序,但似乎没有一个库列出了可以调用的各种方法。我希望能遇到像“setRO[x]=1”这样的命令,可以在RoboDK输入机器人的KAREL代码中执行。我想在特定的机器人运动中注入这些命令,这样KAREL代码看起来就像这样:

J1 xxx J2 xxx J3 xxx
J4 xxx J5 xxx J6 xxx
setRO[x] = 1;
等等……

此外,我已经深入研究了事物的后期处理方面,并发现了“setDO(io_var, io_value)”命令。我想知道我是否将此函数称为“setDO(1,1)”,如果这将在EE I/O端口上将机器人输出引脚1 (RO[1])设置为1。

关于如何通过RoboDK代码编程FANUC CR-15iA / R-30iB加控制器的任何信息将非常感谢。

谢谢你!

根据我的经验,如果你想使用机器人的EE接口,你必须用机器人写一个程序。你可以用机器人。运行指令('程序名',robolink.INSTRUCTION_CALL_PROGRAM)调用您在R-30iB中编写的程序。但是,我只能在T1/T2模式下使用该功能,不能在AUTO模式下使用。
为了解决这个问题,我修改了我的教学吊坠。如果你感兴趣的话。你可以看到我的帖子
//www.sinclairbody.com/forum/Thread-RUNINSTR...nuc-R30-ib
我相信有一个更好的解决方案,但我仍然没有找到它:(。
# 3
谢谢你的回复,蒂莫西,

对于机器人、控制器和RoboDK的编程语言方面缺乏文档,我感到非常沮丧。你是否有一个链接,可以找到像“r”这样的代码的语法obolink。“我对工业机器人很陌生,所以我仍然不知道机器人代码语法或库,甚至不知道我应该使用什么世界杯2022美洲预选赛直播IDE,如果我可以使用RoboDK来编写代码”robolink。INSTRUCTION_CALL_PROGRAM“进去吧。我的编程背景是Arduino和C。
# 4
这里的链接是robodk的命令,它是基于Python的,我认为你会很“舒服”地用Python写,因为你有C的背景。
//www.sinclairbody.com/doc/en/PythonAPI/robodk.html
我只使用其中的一些,比如:

连接机器人:
RDK = Robolink()
item = RDK.Item('base')
itemlist = RDK.ItemList()
机器人= RDK。ItemUserPick('选择机器人',ITEM_TYPE_ROBOT)

要检查机器人是否连接,你可以写一个循环
而真正的:
success = robot.Connect()
time . sleep (X)
status, status_msg = robot.ConnectedState()
= ROBOTCOM_READY:
打印(XXX)
其他:
打破

直接在机器人上执行程序:
RDK.setRunMode (RUNMODE_RUN_ROBOT)
在robodk执行程序:
RDK.setRunMode (RUNMODE_SIMULATE)

设置机器人速度:
机器人。setSpeed(值)


的机器人。setDO'控制数字IO

'robot. movej(关节)','robot。move '来移动机器人,我写了一个函数来做这个:
def moverobot1 (x_offset y_offset z_offset):
target_ref = robot.Pose()
pos_ref = target_ref.Pos()
Robot_x = pos_ref[0]+x_offset
Robot_y = pos_ref[1]+y_offset
Robot_z = pos_ref[2]+z_offset
target_i = Mat(target_ref)
target_i.setPos ([robot_x、robot_y robot_z])
robot.MoveL (target_i)

def moverobotj (a_value b_value c_value):
target = robot.Pose()
xyzabc = Pose_2_Fanuc(目标)
X yz,a bc = xyzabc
Xyzabc2 = [x,y,z,a+a_value,b+b_value,c+c_value]
target2 = Fanuc_2_Pose(xyzabc2)
robot.MoveJ (target2)

'robot.关节()'来获取机器人的位置,它返回一个二维列表[[x],[y],[z],[rx],[ry],[rz]],如果你想使用它,你必须将它转移到一维列表:[x,y,z,rx,ry,rz]
joints_org = robot. joint ()
当你移动你的机器人到其他位置,并想回到这个位置:robot. movej (joints_org)

'RelTool'来移动rx,ry,rz,我不知道怎么解释。你可以尝试一下,你就会知道reltool和moveL/moveJ之间的区别
target2 = robot.Pose()
target2= RelTool(target2,0,0,0,rz=角度值)
robot.MoveJ (target2)


这个链接是为初学者编写的
//www.sinclairbody.com/forum/Thread-CONNECT-...ht=timothy

这就是我对RoboDK的全部了解




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