Skip to content

UFACTORY Gcode

UFACTORY Gcode指令兼容 Linux CNC gcode http://linuxcnc.org/, 参考RS-274标准进行开发。

  • 固件版本:≥ v2.5.0
  • UFACTORY Studio版本:≥ v2.5.0
  • TCP端口:504

1. G 指令

G指令功能定义样例指令说明
G0快速移动G0 X Y Z A B C固定速度为 240mm/s
G1直线运动G1 X Y Z A B C FXYZ 单位 mm,ABC 对应 roll/pitch/yaw(单位°),F 为速度 (单位 mm/min 或英寸 /min,缺省为上一次 G1 指令的速度或 100mm/s)(当有 XYZABC 参 数时,G1 也可以省略)
G2顺时针圆弧G2 X Y Z R P F
G2 X Y Z I J K P F
半径格式圆XYZ表示目标位置,R表示圆半径,P表示整圆圈数,F表示速度
中心格式圆弧, XYZ表示目标位置,IJK对应圆心,P表示整圆圈数,F表示速度
G3逆时针圆弧G3 X Y Z R P F
G3 X Y Z I J K P F
半径格式圆:XYZ表示目标位置,R表示圆半径,P表示整圆圈数,F表示速度
中心格式圆弧, XYZ表示目标位置,IJK对应圆心,P表示整圆圈数,F表示速度
G4等待G4 P4休眠指令,P为休眠的秒数
G17圆弧指令设置XY平面G17G2/G3默认使用该平面
G18圆弧指令设置XZ平面G18-
G19圆弧指令设置YZ平面G19-
G20设置单位为英制英寸G20影响 G0/G1
G21设置单位为公制毫米G21G0/G1
G90使用绝对坐标系G90影响G0/G1/G2/G3,G0/G1默认使用该模式,G2/G3的XYZ参数默认使用该模式
G91使用相对坐标系G91影响G0/G1/G2/G3
G90.1圆弧指令使用绝对坐标系G90.1影响G2/G3
G91.1圆弧指令使用相对坐标系G91.1影响G2/G3, G2/G3的IJK参数默认使用该模式

用户可以通过‘UFACTORY Studio-Gcode’页面进行调试,此模块提供一些简单例子供参考。

2. M指令

M指令功能定义样例指令说明
M2/M30结束程序M2/M30
M62设置CGPIO数字IO输出为高电平,队列执行M62 PP:控制器数字输出的编号(0-15, 0-7:CO0-CO7, 8-15:DO0-D7)
M63设置CGPIO数字IO输出为低电平,队列执行M63 PP:控制器数字输出的编号(0-15, 0-7:CO0-CO7, 8-15:DO0-D7)
M64设置CGPIO数字IO输出为高定平,立即执行M64 PP:控制器数字输出的编号(0-15, 0-7:CO0-CO7, 8-15:DO0-D7)
M65设置CGPIO数字IO输出为低电平,立即执行M65 PP:控制器数字输出的编号(0-15, 0-7:CO0-CO7, 8-15:DO0-D7)
M67设置CGPIO模拟IO输出,队列执行M67 E QE:控制器模拟IO的编号(AO0:0, AO1:1 )
Q:模拟IO的值,范围0-10V
M68设置CGPIO模拟IO输出,立即执行M68 E QE:控制器模拟IO的编号(AO0:0, AO1:1 )
Q:模拟IO的值,范围
M100使能或断使能M100 P QP:P1使能,P0断使能
Q:关节ID,默认为8,代表所有关节
M101清除错误M101
M102清除警告M102
M103设置模式M103 PP:要设置的模式
M104设置状态M104 PP:要设置的状态
M115设置TGPIO的数字输出M115 P QP:0/1/2/3/4(TI)
Q:0/1/10/11
M116控制末端执行器M116 P Q

2.1 M116定义

M116为自定义指令,用于控制器UFACTORY机械臂的末端执行器。

M116定义控制设备
样例指令说明
M116 P1xArm机械爪M116 P1 Q0Q:机械爪位置,范围-10~850
M116 P2xArm真空吸头M116 P2 Q0Q0:打开(队列执行)
Q1:关闭(队列执行)
Q10:打开(立即执行)
Q11:关闭(立即执行)
M116 P3BIO机械爪M116 P3 Q1Q0:闭合机械爪
Q1:张开机械爪
M116 P4Robotiq机械爪M116 P4 Q100Q:位置(0~255)
M116 P5Robotiq机械爪M116 P5 Q100Q:位置(0~255)
M116 P11Lite6机械爪M116 P11 Q1Q0:闭合(队列执行)
Q1:张开(队列执行)
Q10:闭合(立即执行)
Q11:张开(立即执行)
M116 P12Lite6真空吸头M116 P12 Q0Q0:打开(队列执行)
Q1:关闭(队列执行)
Q10:打开(立即执行)
Q11:关闭(立即执行)

2.2 注意事项

  1. 端口使用 504
  2. 回复暂时有 5 字节:
  • byte0: Gcode命令返回值,0表示成功(非 0 表示该命令不支持或格式不对)
  • byte1: 模式和状态
  • byte2: 错误码
  • byte3 & byte4: 保留
  1. 建议每次发一行非空数据(带换行符),固件按行回复的 sock.send(b'G0 X300\n')
  2. 要接收回复,不然久了缓冲区会满 sock.recv(5)

3. Python示例

python

import socket
import time

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.setblocking(True)
sock.connect(('192.168.1.240', 504))

def send_and_recv(data):
    for line in data.split('\n'):
        line = line.strip()
        if not line:
            continue
        sock.send(line.encode('utf-8', 'replace') + b'\n')
        ret = sock.recv(5)
        print(ret)
        code, mode_state, err = ret[0:3]
        print(code,err)
        state, mode = mode_state & 0x0F, mode_state >> 4
        print(state)
        cmdnum = ret[3] << 8 | ret[4]
        if code != 0 or state >= 4 or err > 0:
            print('code: {}, mode: {}, state: {}, err: {}, cmdnum: {}, cmd: {}'.format(code, mode, state, err, cmdnum, line))
            
# move x to x=500mm, speed= 10000 mm/min
send_and_recv('G1 X400 F10000')