安装驱动

kuka 机械臂驱动文件列表

– src
  • xyz_motion.src (工控机主控运行程序)

  • xyz_master.src (机械臂主控运行程序)

  • xyz_CartMove_template.src (座标移动模板程序)

  • xyz_CartMove_reposition.src (座标移动二次定位模板程序)

  • xyz_libmotpkt.src (协议处理相关函数)

  • xyz_libsock.src (socket 相关函数)

  • RobotData.dat (存放的是 src 文件使用的全局变量)

  • sps.sub (后台运行程序)

– xml
  • MasterClient.xml (机械臂主控 socket 配置文件)

  • MotionClient.xml (工控机主控 motion socket 配置文件)

  • StatusClient.xml (工控机主控 status socket 配置文件)

设定机械臂 IP

进入用户组选择界面,选择专家登录,密码为 kuka。以下设定均需在 专家模式 下。

从“主菜单”中选择“投入运行” -> “网络配置”,然后分别选择“IP地址”,“子网隐码”,“标准网关”进行修改。

  • “IP地址”设置为:192.168.37.100

  • “子网隐码”设置为:255.255.255.0

  • “标准网关”设置为:0.0.0.0

../../../_images/kuka_network_configuration_1.png

kuka 设定机械臂 IP 1

../../../_images/kuka_network_configuration_2.png

kuka 设定机械臂 IP 2

网络设置完成后重启机械臂生效(也可在导入程序完成后进行重启)。

注:若”网络配置”无法按下,或无法删除文件,尝试按”R”或”S”->取消选择程序。

拆码垛机器人额外需要进行的操作

在程序导入到示教器之前,修改 xyz_motion 代码,修改 xyzSetJointsMovej()函数,按照提示,将注释的三行代码反注释, 即:

DEFFCT INT xyzSetJointsMovej()

  ; for palleting, uncomment the following sentences
  curJoint = $AXIS_ACT
  Target_Jnt.a4 = curJoint.A4
  Target_Jnt.a5 = curJoint.A5

使用U盘导入程序

  • 切换用户为专家或更高权限

  • 将 MAX 安装目录下的 share/robot_code 中 kuka 文件夹拷入U盘,插入示教器USB口或控制柜U盘口

  • 在U盘找到 src 程序,选中程序 *.src, *.dat。点击示教器底部菜单“编辑”->”复制”

../../../_images/kuka_import_src_1.png

U盘导入程序 1

  • 在 R1 文件夹下,点击底部菜单“新”,”新建 xyz_robotics 文件夹

../../../_images/kuka_import_src_2.png

U盘导入程序 2

  • 在 xyz_robotics 文件夹下,点击底部菜单 “编辑” -> “添加”,这时文件开始粘贴

../../../_images/kuka_import_src_3.png

U盘导入程序 3

  • 按照相同拷贝过程,将U盘中的 sps.sub 拷贝到 R1/System 路径下

../../../_images/kuka_import_src_4.png

U盘导入程序 4

  • 将 xml文件夹下的所有 xml 文件拷贝到 C:\KRC\ROBOTER\Config\User\Common\EthernetKRL\

../../../_images/kuka_import_src_5.png

U盘导入程序 5

此时,程序已经全部导入。

工控机主控时 IO 相关设定

  • 设定数字输出 xyzSetDigitalOutput 不需要进行端口绑定,直接在 MAX 中输入实际的端口号。

  • 获取数字输入 DigitalInput 不需要进行端口绑定,直接在 MAX 中输入实际的端口号。

  • 另外,xyzSendRobotStatus() 也会在后台定时不断发送机械臂关节角、位姿、数组输入,要注意进行 di 绑定设置。

GLOBAL DEF xyzSendRobotStatus()
  DECL STATE_T status_state
  DECL EKI_STATUS status_ret
  E6AXIS curJoint
  INT i
  CHAR Str[256]
  BOOL flag
  REAL J1, J2, J3, J4, J5, J6
  CHAR Port_state[16]
  CHAR RECV_STR[128]
  INT status_offset

  status_offset = 0
  IF $FLAG[3] == FALSE THEN
      gRet = EKI_Open("StatusClient")
      WAIT FOR $FLAG[3]
  ENDIF

  IF $FLAG[3] == TRUE THEN
      gRet = EKI_ClearBuffer("StatusClient","Buffer")
      curJoint = $AXIS_ACT
      J1 = curJoint.a1
      J2 = curJoint.a2
      J3 = curJoint.a3
      J4 = curJoint.a4
      J5 = curJoint.a5
      J6 = curJoint.a6
      flag = STRCLEAR(Str[])
      status_offset = 0
      FOR i=1 TO 16 STEP 1
         Port_state[i] = 0
      ENDFOR
      ; Bind DigitalInput with port here !!! 在这里进行 DI 的绑定
      ;For example,$IN[500] 绑定端口 0
      ;IF $IN[500] == True THEN
          ;Port_state[0] = 1 ; port number:0
      ;ELSE
          ;Port_state[0] = 0
      ;ENDIF
      SWRITE(Str[], status_state, status_offset, "200,")
      SWRITE(Str[], status_state, status_offset, "201,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%d,%d,", J1, J2, J3, J4, J5, J6, 0, 0)
      SWRITE(Str[], status_state, status_offset, "202,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%d,", $pos_act.x, $pos_act.y, $pos_act.z, $pos_act.A, $pos_act.B, $pos_act.C, 0)
      SWRITE(Str[], status_state, status_offset, "203,%d,%d,%d,%d,%d,%d,%d,%d,", Port_state[1], Port_state[2], Port_state[3], Port_state[4], Port_state[5], Port_state[6], Port_state[7], Port_state[8])
      SWRITE(Str[], status_state, status_offset, "%d,%d,%d,%d,%d,%d,%d,%d,", Port_state[9], Port_state[10], Port_state[11], Port_state[12], Port_state[13], Port_state[14], Port_state[15], Port_state[16])
      gRet = Eki_Send("StatusClient", Str[])

      FOR i = 1 TO 128 STEP 1
          RECV_STR[i] = 0
      ENDFOR
      WAIT FOR $FLAG[4]
      status_ret = EKI_GetString("StatusClient","Buffer", RECV_STR[])
      $FLAG[4] = FALSE
  ENDIF
END