ar 语言指令手册 -...

77
AR 语言指令手册 1 AR 语言指令手册

Upload: others

Post on 24-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

  • AR 语言指令手册

    1

    AR 语言指令手册

  • AR 语言指令手册

    2

    AR机器人语言AR机器人语言...........................................................................................................................2

    1 AR语言总览............................................................................................................................4

    1.1算术运算符...................................................................................................................... 9

    1.2 关系运算符..................................................................................................................... 9

    1.3逻辑运算符.................................................................................................................... 10

    1.4一般符号........................................................................................................................ 11

    1.5一般关键字.................................................................................................................... 12

    1.6 基本函数库................................................................................................................... 13

    1.7机器人轴定义................................................................................................................ 14

    1.8机器人全局变量............................................................................................................ 14

    1.9过程控制指令................................................................................................................ 15

    1.9.1 if 条件分支指令..................................................................................................... 15

    1.9.2 while循环指令........................................................................................................15

    1.9.3 for 循环指令...........................................................................................................16

    1.9.4 repeat–until 循环指令........................................................................................... 17

    1.9.5 goto 无条件跳转指令............................................................................................17

    1.9.6函数指令................................................................................................................. 17

    1.10 字符串操作................................................................................................................. 19

    1.11运动指令...................................................................................................................... 21

    1.12运动参数设置指令...................................................................................................... 33

    1.13程序管理指令.............................................................................................................. 34

    1.14一般指令...................................................................................................................... 35

    1.15输入/输出指令.............................................................................................................36

    1.16坐标系指令.................................................................................................................. 39

    1.17码垛指令...................................................................................................................... 45

    1.17.1三点法编程码垛................................................................................................... 45

    1.17.2 四点法编程码垛............................................................................................47

    1.17.3 配置码垛........................................................................................................49

  • AR 语言指令手册

    3

    1.17.4 圆形码垛........................................................................................................50

    1.18伺服管理指令.............................................................................................................. 52

    1.19通信指令...................................................................................................................... 53

    1.20视觉指令...................................................................................................................... 59

    1.21动态跟随指令.............................................................................................................. 62

    1.22调试指令...................................................................................................................... 65

    1.23点位指令...................................................................................................................... 65

    1.24系统指令...................................................................................................................... 67

    1.25 modbus 主站读写指令................................................................................................ 69

    1.26 文件操作指令............................................................................................................. 72

    1.27队列操作指令.............................................................................................................. 75

    2 修改记录..........................................................................................错误!未定义书签。

  • AR 语言指令手册

    4

    1 AR 语言总览

    指令类别 指令符号 指令说明

    算术运算符

    + 加法运算- 减法运算* 乘法运算/ 除法运算// 取整除法,即得到不大于结果的最大整数值% 取余除法^ 指数运算- 取负运算~ 异或运算& 与运算| 或运算~ 取反运算> 右移运算

    关系运算符

    == 等于~= 不等于= 大于等于< 小于> 大于

    逻辑运算符

    or 逻辑或not 逻辑非and 逻辑与false 假 (注:nil 也为 false)true 真

    一般符号

    # 求 table 数组长度= 赋值操作-- 单行注释--[[ 多行注释开始行--]] 多行注释结束行( ) 用于函数定义、调用,表达式运算{ } 用于定义 table 数组[ ] table 数组元素操作符:: 定义 goto 指令的跳转位置标签; 语句结束符,可以省略不写

    ,用于函数参数定义、调用,多变量赋值,table数组定义等

  • AR 语言指令手册

    5

    . 用于 table 数组元素访问.. 字符串连接符… 定义函数可变参数项

    过程控制指令

    if then else elseif end if条件分支指令while do end while 循环控制指令for do end for 循环控制指令repeat until repeat循环控制指令

    goto goto 无条件跳转指令function end 用户函数定义指令

    一般关键字

    break 跳出 for、while、repeat 循环local 定义局部变量nil 变量为空值

    return 函数调用返回

    机器人轴定义

    AX 笛卡尔坐标系 X 轴号AY 笛卡尔坐标系 Y 轴号AZ 笛卡尔坐标系 Z 轴号AC 笛卡尔坐标系 C 轴号J1 J1关节J2 J2关节J3 J3关节J4 J4关节

    字符串操作

    string.find 函数用于在一个给定的目标字符串中搜索一个模式, 返回该模式所在的位置

    string.match 用于在一个字符串中搜索一种模式,返回的是目标字符串中与模式相匹配的那部分字符串

    string.sub截取字符串 s的从第 i个字符到第 j个字符之间的字符串

    string.gsub 将目标字符串中所有出现模式的地方替换为目标字符串

    string.char,string.byte 用于转换字符和对应的数字string.format 用来对字符串格式化,与 C 语言中的 printf()函

    数类似

    tonumber 将数字组成的字符串 string 变量转化成数字number 类型

    机器人全局变量

    ON 打开状态OFF 关闭状态

    p0~p2999 机器人默认点名称

    运动指令

    MovL 直线方式运行到笛卡尔坐标系绝对位置的指令MovLR 直线方式运行到笛卡尔坐标系相对位置的指令

    MovP点到点方式运行到笛卡尔坐标系绝对位置的指

    MovPR 点到点方式运行到笛卡尔坐标系相对位置的指

  • AR 语言指令手册

    6

    MovJ 控制各个关节移动到目标绝对角度的指令MArchP 点到点方式控制机器人进行拱形移动的指令

    MArc从当前位置圆弧插补到笛卡尔坐标系绝对位置

    的指令

    MCircle 笛卡尔坐标系下的整圆插补指令MSpline 样条曲线插补运动指令

    handmove自动运行状态下实现手动笛卡尔/关节的连续、点动运动

    stoprun 自动运行状态下实现停止手动直线运动

    waitpos等待运动脉冲发送完成指令(运动 DSP 发送脉冲完成指令)

    waitrealpos机器人运动到位(停稳)指令(伺服响应脉冲

    到位指令)

    运动参数设置指

    AccJ设置加速度比例指令,影响 MovJ、MovP、MovPR、MArchP 指令的加速时间

    DecJ设置减速度比例指令,影响 MovJ、MovP、MovPR、MArchP 指令的减速时间

    SpdJ设置速度比例指令,影响 MovJ、MovP、MovPR、MArchP指令的运行速度

    AccL设置直线运动指令加速度,影响 MovL、MovLR、MArc、MCircle 指令的加速时间。单位:mm/s^2

    DecL设置直线运动指令减速度,影响 MovL、MovLR、MArc、MCircle 指令的减速时间。单位:mm/s^2

    SpdL设置直线运动指令速度,影响 MovL、MovLR、MArc、MCircle 指令的运行速度。单位:mm/s

    程序管理指令

    Delay 延时指令。单位:毫秒Exit 程序运行终止Pause 暂停程序运行

    一般指令

    X 创建指定 X 轴笛卡尔坐标绝对位置点的指令Y 创建指定 Y 轴笛卡尔坐标绝对位置点的指令Z 创建指定 Z 轴笛卡尔坐标绝对位置点的指令C 创建指定 C 轴笛卡尔坐标绝对位置点的指令

    XYZC创建指定 XYZC 轴笛卡尔坐标绝对位置点的指令

    输入/输出指令

    DI 读取输入端口状态DO 输出端口打开或关闭操作

    WDI读取输入端口状态,直到等待某一信号有效,则继续执行后续的程序

    WDO读取输出端口状态,直到等待某一信号有效,则继续执行后续的程序

    坐标系指令 SetU 设置机器人当前用户坐标系

  • AR 语言指令手册

    7

    WrU 修改用户坐标系的数据SetT 设置机器人当前工具坐标系WrT 修改工具坐标系的数据CacU 新建用户坐标系U2U 用户(0~9)之间坐标相互转换V2Tool 根据视觉坐标计算工具坐标CacT 两点法新建工具坐标系getcart 获取当前笛卡尔坐标以及关节坐标getjoint 计算目标点对应的某一个轴的关节坐标

    encoderget 获取编码器的脉冲值targetok 判断目标位置是否为机器人可到达点位

    码垛指令

    SetPlt 设置码垛数指令GetPlt 取码垛数据点指令SET_PLT 设置码垛数指令(用于编程码垛)GET_PLT 取码垛数据点指令(用于编程码垛)

    GetPLTPos获取码盘是否码满、码盘当前码垛的个数以及

    码垛点位置信息(适用于配置码垛)

    ResetPLT 重置码垛个数SetArcPlt 圆形码垛设置GetArcPlt 获取圆形码垛当前位置

    伺服管理指令

    MotOn 伺服所有轴上电使能MotOff 关闭伺服所有轴使能

    DragMode AR 程序实现拖拽功能

    通信指令

    RecCom 从 RS232 串口接收数据ClrCom 清除 RS232 串口接收缓冲区sysnetclr 清除网络数据缓冲区sysnetget 查询方式读取网络数据sysnetsend 从控制器向外围设备发送网络数据sysnetcatch 阻塞式读取网络数据CloseNet 关闭 TCP 网络连接OpenNet 创建 TCP 网络

    ConnectNet 连接TCP网络RecvNet 网络接收数据功能函数WriteNet 网络发送数据功能函数publicread 读取全局表数据值publicwrite 写入数据值到全局表

    视觉指令

    initTCPnet 网络通讯参数初始化CCDrecv 接收视觉返回的坐标数据

    CCDtrigger 触发相机拍照CCDsent 发送字符串到视觉CCDclr 清除网络托管的 IP

    CCDoffset 视觉偏差补偿

  • AR 语言指令手册

    8

    GetDynCCDPos 动态视觉位置计算CCDGet 接收视觉返回的字符串类型数据

    动态跟随指令

    FollowInit 动态跟随参数初始化SetDynCatch 开启或关闭跟随抓取任务GetCatchSpace 获取物件是否进入抓取区域

    SetCatch 执行跟随GetCatchState 获取抓取状态SynOover 结束跟随GetTrigger 获取触发状态(同一物体拍两次使用)SetViewData 发送数据给控制器,存入缓存待跟随

    FastCatch 动态跟随快速抓取,拱形运动到抓取位置GetSynPos 获取进入抓取区工件的信息

    调试指令print 打印输出用户调试数据Error 终止程序运行,并输出错误信息

    点位指令

    Point 调用点位表中的点位new 将要更新的点位写入到对应工程中的点位表里teach 将当前点位示教到对应工程中的点位表里

    ReadTabDat 加载当前工程中的点位数据表

    系统指令

    syswork 设置系统工作状态sysstate 读取系统状态sysrate 设置全局速度倍率systime 获取系统时钟

    Modbus 主站读写指令

    ReadRegW 读指定 PLC 寄存器的 16 位字地址ReadRegDW 读指定 PLC 寄存器的 32 位双字地址WriteRegW 写入 16 位字地址到指定的 PLC 寄存器WriteRegDW 写入 32 位字地址到指定的 PLC 寄存器

    文件操作指令

    fopen 文件打开fsize 文件大小fwrite 写文件,写数据到文件中fread 读文件,从文件中读取数据fgets 逐行获取文件中的数据

    fseek文件定位,把文件指针地址移动到一个指定位

    feof 文件结束fclose 文件关闭

    队列操作指令

    qexist 判断队列是否存在qcreate 创建队列qpush 往队列中写入数据qpop 删除队列中的首元素qfront 取队列中的首元素

    qpopfront 取队列中的首元素然后从队列中删除qempty 判断队列是否为空

  • AR 语言指令手册

    9

    qsize 队列大小qdestroy 删除队列

    注意:AR 语言是大小写敏感的语言,用户一定按照规定的操作符使用,表中的所有指令符号用户只能根据说明使用,不能重新定义。例如:

    local X --定义变量 XX=10 --赋值给变量 X

    X 已经定义为系统指令,用户重新定义可能会运行出错。

    1.1算术运算符指令符号 指令说明

    + 加法运算- 减法运算* 乘法运算/ 除法运算// 取整除法,即得到不大于结果的最大整数值% 取余除法^ 指数运算- 取负运算~ 异或运算& 与运算| 或运算~ 取反运算> 右移运算

    算术运算符提供了各种实数的运算功能,整形数据的位运算功能等。

    “+” 加法运算还可以实现两个点位数据的加法运算。举例说明:

    local point1=p1local point2=p2local point3=p3

    注:自定义的数据点位不能直接相加。能直接相加的数据点位,必须是机器人系统定义

    的数据点位(p0~p2999)。

    1.2 关系运算符指令符号 指令说明

    == 等于~= 不等于= 大于等于

  • AR 语言指令手册

    10

    < 小于> 大于

    关系运算符用在流程控制语句的条件判断中。

    举例说明:

    local a =10local b=20if a == b then……endif a < b then……endif a < 30 then……end

    == 等号可以比较字符串类型变量。

    local a = “ROBOT”if a == “ROBOT” then……end

    1.3逻辑运算符指令符号 指令说明

    or 逻辑或not 逻辑非and 逻辑与false 假(注:nil 也为假)true 真

    逻辑运算符用在流程控制语句的条件判断中。

    举例说明:

  • AR 语言指令手册

    11

    if 5 or 6 then --真……end

    local a = 30local b = trueif a and b then --真……end

    local a = 0local b = 1if a and b then --真…..end

    local a = 0local b = nilif a and b then --假……end

    注意:AR 语言中,只有 nil 和 false 值为假,其它值都为真,包括 0 也为真。

    1.4一般符号

    指令符号 指令说明

    # 求 table 数组中元素的个数或计算字符串的长度= 赋值操作-- 单行注释--[[ 多行注释开始行--]] 多行注释结束行( ) 用于函数定义、调用,表达式运算{ } 用于定义 table 数组[ ] table数组元素操作符:: 定义 goto指令的跳转位置标签; 语句结束符,可以省略不写, 用于函数参数定义、调用,多变量赋值,table数组定义等. 用于 table 数组元素访问.. 字符串连接符… 定义函数可变参数项

  • AR 语言指令手册

    12

    举例说明:

    1. print(#(“123,456”)) --返回值为 7(字符串)print(#{123,456}) --返回值为 2(数组)

    2. local a,b,c = 1,2,3 --用,符号写多变量赋值语句3. p.x --用.符号访问数组元素4. local a={10,20,30} --用{}符号定义数组5. a[1] --用[]符号访问数组元素6. ::lab:: --用::符号定义 goto 指令跳转位置标签

    注意:table类型数组变量下标是从 1 开始,如 a[1]的值为 10。

    1.5一般关键字指令符号 指令说明

    break 跳出 for、while、repeat 循环local 定义局部变量

    global.* 同一个工程中,多个 CPU 之间变量的共用nil 变量为空值

    return 函数调用返回

    local 符号用来声明局部变量举例说明:

    local a --声明局部变量 a ,值为 nillocal b={10,10} --声明 table 数组local b={{10,20},{30,40}} --声明 table 二维数组local a="ROBOT" --声明字符串变量 a

    介绍局部变量之前,首先来介绍一下 lua 语言中,代码块内全局变量是如何定义的;

    全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初

    始化的全局变量也不会出错,只不过得到的结果是:nil

    print(b) -->nilb = 10print(b) -->10--如果想删除一个全局变量,只需要将变量赋值为 nil;这样变量 b 就好像从来没被使用过一样,换句话说,当且仅当一个变量不等于 nil 时,这个变量存在。b =nilprint(b) -->nil

    使用 local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码

    块内有效。代码块:指一个控制结构内,一个函数体,或者一个 chunk(变量被声明的那个文件或者文本串)。

  • AR 语言指令手册

    13

    x = 10local i = 1 -- local to the chunkwhile i 2, 4, 6, 8, ...i = i + 1

    endif i > 20 then

    local x -- local to the “then” bodyx = 20print(x +2) -->22(the local one)

    elseprint(x) --> 10 (the global one)

    endprint(x) --> 10 (the global one)

    global.* 根据实际应用工艺需求,一个工程须包含多个 CPU。公共变量(global.*)可解决多个 CPU 之间共用同一个变量的问题。

    使用说明:

    在各个 CPU 中,公共变量定义为 global.*的形式,例如:global.var, global.a,global.b;

    公共数组变量里不能再嵌套数组,例如:global={pos={x=0,y=0},a=1,b=2} 非法;

    全局(公共)变量仅限于一个工程中多个 CPU 之间变量的共用,单个 CPU 中全局

    变量的使用可参考 AR 编程手册中的 local 指令的使用;

    1.6 基本函数库函数名 描述 示例 结果

    math.pi 圆周率 math.pi 3.1415926math.abs 取绝对值 math.abs(-2012) 2012math.ceil 向上取整 math.ceil(9.1) 10math.floor 向下取整 math.floor(9.9) 9math.max 取参数最大值 math.max(2,4,6,8) 8math.min 取参数最小值 math.min(2,4,6,8) 2math.pow 计算 x 的 y 次幂 math.pow(2,16) 65536math.sqrt 开平方 math.sqrt(65536) 256math.fmod 取模 math.fmode(14,5) 4math.modf 取整数和小数部分 math.modf(20.12) 20 0.12

    math.randomseed 设随机数种子 math.randomseed(os.time())

  • AR 语言指令手册

    14

    math.random 随机坐标系 math.random(5,90) 5~90math.rad 角度转弧度 math.rad(180) 3.1415926math.deg 弧度转角度 math.deg(math.pi) 180math.exp e 的 x 次方 math.exp(4) 54.5981math.log 计算 x 的自然对数 math.log(54.5981) 4

    math.log10计算 10 为底,x 的

    对数

    math.log10(1000) 3

    math.frexp将 参 数 拆 成 x*

    (2^y)的形式

    math.frexp(160) 0.625 8

    math.ldexp 计算 x*(2^y) math.ldexp(0.625,8) 160math.sin 正弦 math.sin(math.rad(30)) 0.5math.cos 余弦 math.cos(math.rad(60)) 0.5math.tan 正切 math.tan(math.rad(45)) 1math.asin 反正弦 math.deg(math.asin(0.5)) 30math.acos 反余弦 math.deg(math.acos(0.5)) 60math.atan 反正切 math.deg(math.atan(1)) 45

    1.7机器人轴定义指令符号 指令说明

    AX 笛卡尔坐标系 X 轴号AY 笛卡尔坐标系 Y 轴号AZ 笛卡尔坐标系 Z 轴号AC 笛卡尔坐标系 C 轴号J1 J1 关节J2 J2 关节J3 J3 关节

    J4 J4 关节

    轴号是全局变量,作为运动指令的一些参数使用,用户也不能重新定义。

    1.8机器人全局变量指令符号 指令说明

    ON 打开状态OFF 关闭状态

    p0~p2999 机器人默认点名称全局变量为系统定义好的变量,有具体的意义,用户不能再重新定义或赋值,否则可能

    运行出错。

    点位变量 p0~p2999 为 table 类型的点变量,定义如下:

    local p={x=VALUE1,y=VALUE2,z=VALUE3,c=VALUE4,h=VALUE5}

    程序中,用户可以以 p.x p.y 的方式访问点的数据值。

  • AR 语言指令手册

    15

    local a = p1 -- a 为 p1 的引用a.x = 10 --那么 p1.x 的值也变为 10local a = #p1 --拷贝 p1 的值到 aa.x=10 --p1.x保持原来的值

    1.9过程控制指令指令符号 指令说明

    if then else elseif end if条件分支指令while do end while 循环控制指令for do end for循环控制指令repeat until repeat 循环控制指令

    goto goto无条件跳转指令function end 用户函数定义指令

    1.9.1 if 条件分支指令

    使用说明: if then else elseif end语法说明:

    Case1 Case2 Case3if conditions then

    then-partend

    if conditions thenthen-part

    elseelse-part

    end

    if conditions thenthen-part

    elseif conditions thenelseif-part

    elseelse-part

    end

    Conditions 表示控制语句的条件,如果为 true 则条件成立,part 为执行的代码部分。Conditions 条件可以是常量,变量,表达式,函数调用等,程序只判断最终结果为 false

    或 true 去选择执行程序。

    1.9.2 while 循环指令

    使用说明: while do end语法说明:

    while condition dostatements

    end

    conditions 表示控制条件,如果为 true 则条件成立,statements 为执行的代码部分,如果为 false 则条件不成立,不执行 statements 代码部分。

  • AR 语言指令手册

    16

    a = 15while a>10 do --条件判断,如果为 true,则继续执行 a = a-1

    a = a-1end

    1.9.3 for 循环指令

    使用说明: for….. do …..end语法说明:

    for var=exp1,exp2,exp3 doloop-part

    end

    for 将用 exp3 作为 step(步进值)从 exp1(初始值)到 exp2(终止值),执行 loop-part(循环体)。其中 exp3 可以省略,默认 step=1

    exp 是一个表达式,可以是数值常量,变量,或函数调用的返回值,表达式运算。有几点需要注意:

    1. 三个表达式只会被计算一次,并且是在循环开始前。

    for i=1,f(x) do --调用 f(x)函数一次,函数返回值作为循环的终止值print(i)

    endfor i=10,1,-1do

    print(i)end

    2. 控制变量 var 是局部变量自动被声明,并且只在循环内有效.

    for i=1,10 doprint(i)

    endmax =i --错误引用 i,i 是局部变量

    如果需要保留控制变量的值,需要在循环中将其保存

    local found = nilfor i=1,a.n do

    if a[i] == value thenfound = ibreak

    endendprint(found)

    3. 循环过程中不要改变控制变量的值,那样做的结果是不可预知的。如果要退出循环,使用 break 语句。

  • AR 语言指令手册

    17

    1.9.4 repeat–until 循环指令

    使用说明: repeat-until语法说明:

    repeatstatements

    until conditions

    while 语句大致相同,只是循环部分 statements 的执行先后不一样,repeat-until 的循环体先执行在判断循环条件,而 while 语句是先判断循环条件。

    1.9.5 goto 无条件跳转指令

    使用说明 goto语法说明 goto lab_name其中 lab_name 用户定义的文件行跳转位置名称,字符串类型,如果没有定义会出错。

    local a = 0::lab:: --定义跳转位置名称 labMovL(p0)MovL(p1)a = a + 1print(“跳转次数:”,a)goto lab --跳转到示例 2 循环执行

    注意:goto 指令不能从一个函数跳转到另外一个函数,lab_name 跳转名称不能重复定义。

    1.9.6函数指令

    使用说明 function …… end语法说明 function func_name (arguments-list)

    function func_name(arguments-list)statements-list --函数体部分

    end

    func_name 是函数名字,根据 AR 语言命名规则进行定义,且函数名不能重复,否则会出错。

    arguments-list 为函数的参数列表,列表中的参数可以是任何数据类型的变量,当有多个参数时,通过”,”分隔。函数还可以没有参数,在定义的时候参数列表为空即可,但是括号不能省略。

    statements-list 为函数体部分,函数体就是实现该函数功能的具体程序细节,函数体结束部分可以有返回值,也可以没有返回值,如果有返回值则通过关键字 return 说明。

    例如:定义一个加法功能函数:

  • AR 语言指令手册

    18

    function add (a,b)return a+b

    endadd(1,2) --函数相加并返回结果 3

    返回多个值,求相加与相乘函数

    function addmul(a,b)return a+b,a*b

    endaddmul(2,5) --函数相加相乘,返回 7 10

    注意 1:function main 主函数的使用方法,当 AR 程序中包含有 function main主函数是,子函

    数既可以放在 function main 函数的前面定义也可以放在后面定义,例如:

    function addmul(a,b)return a+b,a*b

    endfunction main()

    while true doaddmul(2,5) --函数相加相乘,返回 7 10

    endend

    function main()while true do

    addmul(2,5) --函数相加相乘,返回 7 10end

    endfunction addmul(a,b)

    return a+b,a*bend

  • AR 语言指令手册

    19

    注意 2:当 AR 程序中没有主函数时,子函数一定要放在调用前定义,否则程序出错,例如:

    function addmul(a,b)return a+b,a*b

    end

    while true doprint(“开始运行”)addmul(2,5)

    end

    while true doprint(“开始运行”)addmul(2,5)

    endfunction addmul(a,b)

    return a+b,a*bend

    1.10 字符串操作指令符号 指令说明

    string.find函数用于在一个给定的目标字符串中搜索一个模式, 返回该模式所在的位置

    string.match 用于在一个字符串中搜索一种模式,返回的是目标字符串中与模式相匹配的那部分字符串

    string.sub 函数截取字符串 s 的从第 i 个字符到第 j 个字符之间的串string.gsub 将目标字符串中所有出现模式的地方替换为目标字符串

    string.char,string.byte 用于转换字符和对于的数字之间值string.format 用来对字符串格式化,与 C 语言中的 printf()函数类似tonumber 将数字组成的字符串 string 变量转化成数字 number 类型

    1. string.find() 函数用于在一个给定的目标字符串中搜索一个模式。最简单的模式就是一个单词,它只会匹配与自己完全相同的拷贝。当 find 找到一个模式后,它会返回两个值:匹配到的起始索引和结尾索引;如果没有找到任何匹配,它就返回 nil。 示例代码:local str = “Hello World”local i,j = string.find(str, “Hello”) --返回 Hello 在 str 中的起始位置和终止位置print(i,j) --> 1 5

    2. string.match() 与 string.find()非常相似,它也是用于在一个字符串中搜索一种模式。区别在于,string.match返回的是目标字符串中与模式相匹配的那部分字符串,并不是该模式

    运行异常

    运行正常

  • AR 语言指令手册

    20

    所在的位置。示例代码:

    local str = “Hello12345World”local subStr = string.match(str, “%d+”)print(subStr) --> 1 2 3 4 5

    local i,j = string.find(str, “%d+”)subStr = string.sub(str,i,j)print(subStr) --> 1 2 3 4 5

    3. string.sub(s,i,j) 函数截取字符串 s 的从第 i 个字符到第 j 个字符之间的串. Lua 中,字符串的第一个字符索引从 1 开始。你也可以使用负索引,负索引从字符串的结尾向前计数:-1 指向最后一个字符,-2 指向倒数第二个,以此类推。示例代码:

    s = “[in brackets]”b = string.sub(s,2,-2)print(b) --> in brackets

    4. string.gsub(s, pattern,reps)有三个参数,给定字符串,匹配模式和替代字符串。作用就是将所有符合匹配模式的地方都替换成替代字符串。并返回替换后的字符串,以及替换

    次数。示例代码:

    s = string.gsub("Lua is cute", "cute", "great")print(s) --> Lua is great

    5. string.char() &&string.byte() 用于转换字符和对应的数字之间值。示例代码:i = 97print(string.char(i, i+1, i+2)) --> abcprint(string.byte("abc")) --> 97print(string.byte("abc"), -2) --> 98

    6. string.format() 的功能就是格式化一个字符串。第一个参数为字符串格式,后面的参数可以任意多个,用于填充第一个参数中的格式控制符,最后返回完整的格式化后的字符

    串。示例代码:str = string.format(“%0.2f”, 34.2344)print(str) --> 34.23str = string.format(“0x%08X”, 348)print(str) --> 0x0000015C

    7. tonumber() 函数的功能是将数字组成的字符串变量转化成数字类型, 如果要转换的

    string 不能被转为 number,它返回 nil。示例代码:

    1. Str1 = “12”A = tonumber(Str1)print(A) --12

    2. Str2=”123,456”B=tonumber(Str2)

  • AR 语言指令手册

    21

    print(B) --nil3. Str3 = “123,a”

    C=tonumber(Str3)print(C) --nil

    1.11运动指令指令符号 指令说明

    MovL 直线方式运行到笛卡尔坐标系绝对位置的指令MovLR 直线方式运行到笛卡尔坐标系相对位置的指令MovP 点到点方式运行到笛卡尔坐标系绝对位置的指令MovPR 点到点方式运行到笛卡尔坐标系相对位置的指令MovJ 控制各个关节移动到目标角度的指令

    MArchP 点到点方式控制机器人进行拱形移动的指令MArc 从当前位置圆弧插补到笛卡尔坐标系绝对位置的指令MCircle 笛卡尔坐标系下的整圆插补指令MSpline 样条曲线插补运动指令

    handmove 自动运行状态下实现手动笛卡尔/关节的连续、点动运动stoprun 自动运行状态下实现停止手动直线运动waitpos 等待运动脉冲发送完成指令(运动 DSP 发送脉冲完成指令)

    waitrealpos 机器人运动到位(停稳)指令(伺服响应脉冲到位指令)

    MovL

    使用说明 以直线的方式运动到笛卡尔坐标系下的目标绝对位置

    语法说明 STA = MovL(A, “CP=20 Acc=20 Dec=20 Spd=100 AccC=20 SpdC=20 I=0 In=10ON/ OFF”)

    参数说明 该指令一共两个参数,第一个参数 A 为目标点,第二个参数为可选参数、省略时系统默认全局状态值

    输入参数说明

    A笛卡尔坐标目标位置。可以是点的名称 p1~p2999,也可以是点的索引号 1~2999。可选参数,可以指定运动到目标位置的各项参数

    CP可选参数,说明运动到目标点时是否平滑过渡,范围为

    0~100Acc 可选参数,指定运动到目标位置的加速度,单位为 mm/s2

    Dec 可选参数,指定运动到目标位置的减速度,单位为 mm/s2

    Spd 可选参数,指定运动到目标位置的速度,单位为 mm/sAccC 可选参数,指定运动到目标位置的姿态加速度,单位度/��

    SpdC 可选参数,指定运动到目标位置的姿态速度,单位度/s

    I可选参数,第三轴电流设定值,单位 mA。若运动过程中的电流超过了设定值则当前运动指令停止,继续往下执行

  • AR 语言指令手册

    22

    其它指令。

    In可选参数,输入检测信号。若运动过程中检测到该输入信

    号则当前的运动停止,继续往下执行其它指令。

    ON/OFF ON:打开;OFF:关闭返回值说明

    STA0:指令运行正常1:输入信号中断运行-1:电流到达阈值中断运行

    示意图

    举例说明 1. MovL(p1) --机器人以直线的方式从当前位置运动到 p1 目标点2. MovL(10) --机器人以直线的方式从当前位置运动到 p10 目标点3. MovL(10, "Acc=100 Spd=1000") --机器人以直线的方式从当前位

    置运动到目标点 p10,其中加速度为 100mm/s2,速度为 1000mm/s4. MovL(p20, "CP=20") --机器人以直线的方式运动到 p20

    位置,其中目标位置 p20 以平滑度 20 过渡5. MovL(p20, "In=10 ON") --机器人以直线的方式运动到 p20 目标位置,

    在运动过程中如果检测输入信号 In10 打开则当前指令运行结束。6. MovL(p3, “I = 2000”) --机器人以直线的方式运动到 p3 目标位置,

    在运动过程中如果检测电流超过 2000mA 则当前指令运行结束。7. MovL(p10+Z(-10) ) --机器人以直线的方式从当前位置运动到 p10

    点下方 10mm 的位置8. MovL(p11+Z(10)) --机器人以直线的方式从当前位置运动到 p10点

    上方 10mm 的位置9. local pos = {x=300,y=100,z=-50,c=60} --用户定义 pos点变量

    MovL(pos+X(-10)) --机器人以直线的方式从当前位置运动到相对于 pos 点 X 负方向 10mm 的位置

    10. MovL(12+Y(10)) --机器人以直线的方式从当前位置运动到相对于p12 点 Y 正方向 10mm 的位置

    注意:

    可选参数编程时可以根据需要是否设置,其中 Acc、Spd 省略时,系统默认全局值,当设置 In 选项触发停止时,参数 ON/OFF 才会有意义,且只能二选一设置信号有效停止或无效停止。

    当使用 MovL 走直线偏移(例如,例 7、8、9、10)时,一定要用正号(+)连接轴实现偏移,偏移的正负取决于轴括号内的数字的正负。

    大写 X 、Y、Z、C 分别表示 X 轴、Y 轴、Z 轴、C 轴方向的轴偏移

  • AR 语言指令手册

    23

    MovLR

    使用说明 以直线的方式运动到笛卡尔坐标系下的目标相对位置

    语法说明 STA = MovLR(A,B,“CP=20 Acc=20 Dec=20 Spd=100 AccC=20 SpdC=20 I = 0In=10 ON/ OFF")

    参数说明 该指令一共三个参数,第一个为笛卡尔坐标轴号,第二个参数为移动的

    相对距离,第三个参数为可选参数、省略时系统默认全局状态值

    输入参数说明

    A AX,AY,AZ,AC 各笛卡尔坐标轴号B 各轴移动的相对距离

    CP可选参数,说明运动到目标点时是否平滑过渡,范围为

    0~100

    Acc可选参数,指定运动到目标位置的直线加速度,单位为

    mm/s2

    Dec可选参数,指定运动到目标位置的直线减速度,单位为

    mm/s2

    Spd 可选参数,指定运动到目标位置的直线速度,单位 mm/sAccC 可选参数,指定运动到目标位置的姿态加速度,单位度/��

    SpdC 可选参数,指定运动到目标位置的姿态速度,单位度/s

    I可选参数,第三轴电流设定值,单位 mA。若运动过程中的电流超过了设定值则当前运动停止,继续往下执行。

    In可选参数,输入检测信号。若运动过程中检测到该输入信

    号则当前的运动停止,继续往下执行。

    ON/OFF ON:打开;OFF:关闭返回值说明

    STA0:指令运动正常1:输入信号中断运行-1:电流到达阈值中断运行

    举例说明 1. MovLR(AX,10) --从当前位置往 X 轴正方向移动 10mm 的距离2. MovLR(AC,10) --从当前位置往 C 轴正方向移动 10 度的角度3. MovLR(AY,10) --从当前位置往 Y 轴正方向移动 10mm 的距离4. MovLR(AZ,-10) --从当前位置往 Z 轴负方向移动 10mm 的距离

    MovP

    使用说明 点到点方式移动到笛卡尔坐标系下的目标绝对位置

    语法说明 STA = MovP(A,"CP=20 Acc=20 Dec=20 Spd=100 I=0 In =10 ON/OFF”)参数说明 该指令一共两个参数,第一个参数 A 为目标点,第二个参数为可选参数,

    省略时系统默认全局状态值

    输入参数说明

    A笛卡尔坐标目标位置。可以是点的名称 p1~p2999,也可以是点的索引号 1~2999

    CP 可选参数,说明运动到目标点时是否平滑过渡,范围 0~100

  • AR 语言指令手册

    24

    Acc 可选参数,指定运动到目标位置的加速度比例,范围 1~100Dec 可选参数,指定运动到目标位置的减速度比例,范围 1~100Spd 可选参数,指定运动到目标位置的速度比例,范围 1~100

    I可选参数,第三轴电流设定值,单位 mA。若运动过程中的电流超过了设定值,则会报警(电流超出报警)终止整个程

    序运行

    In可选参数,输入检测信号。若运动过程中检测到该输入信号

    则当前的运动停止,继续往下执行。

    ON/OFF ON:打开;OFF:关闭返回值说明

    STA0: 指令运动正常1:输入信号中断运行-1:电流到达阈值中断运行

    示意图

    举例说明 1. MovP(p1) --机器人以点到点的方式从当前位置运动到 p1 目标点MovP(10) --机器人以点到点方式从当前位置运动到 p10 目标点

    2. MovP(10, "Acc=50 Spd=50") --机器人以点到点方式从当前位置运动到 p10 目标点,其中加速度为 50%的倍率,速度为 50%的倍率

    3. MovP(p20, "CP=20") --机器人以点到点方式运动到 p20 位置,其中目标位置 p20 以平滑度 20 过渡

    4. local p={x=200,y=10,z=-10,c=30} --用户定义 p 点变量MovP(p) --运动到 p点目标位置

    5. MovP(p10+Z(-10) ) --机器人以点到点的方式从当前位置运动到p10 点下方 10mm 的位置

    6. MovP(p11+Z(10)) --机器人以点到点的方式从当前位置运动到 p10点上方 10mm 的位置

    7. local pos = {x=300,y=100,z=-50,c=60} --用户定义 pos 点变量MovP(pos+X(-10)) --机器人以点到点的方式从当前位置运动到相对于 pos 点 X 负方向 10mm 的位置

    8. MovP(12+Y(10)) --机器人以点到点的方式从当前位置运动到相对于 p12 点 Y 正方向 10mm 的位置

    注:

    (1) 当使用 MovP 走点位偏移(例如,例 5、6、7、8)时,一定要用正号(+)连接轴实现偏移,偏移的正负取决于轴括号内的数字的正负。

    (2) 大写 X 、Y、Z、C 分别表示 X 轴、Y 轴、Z 轴、C 轴方向的轴偏移

  • AR 语言指令手册

    25

    MovPR

    使用说明 点到点方式移动到笛卡尔坐标系下的目标相对位置

    语法说明 STA = MovPR(A,B," CP=20 Acc=20 Dec=20 Spd=100 I=0 In =10 ON/OFF ")参数说明 输入参数说明

    A AX,AY,AZ,AC 各笛卡尔坐标轴号

    B 各轴移动的相对距离

    CP 可选参数,说明运动到目标点时是否平滑过渡,范围 0~100

    Acc 可选参数,指定运动到目标位置的加速度比例,范围 1~100

    Dec 可选参数,指定运动到目标位置的减速度比例,范围 1~100

    Spd 可选参数,指定运动到目标位置的速度比例,范围 1~100

    I 可选参数,第三轴电流设定值,单位 mA。若运动过程中的电流超过了设定值则当前运动停止,继续往下执行。

    In 可选参数,输入检测信号。若运动过程中检测到该输入信号则当前的运动停止,继续往下执行。

    ON/OFF ON:打开;OFF:关闭

    返回值说明

    STA0: 指令运动正常

    1:输入信号中断运行

    -1:电流到达阈值中断运行

    举例说明 1. MovPR(AX,10) --从当前位置以点到点的方式往 X 轴正方向移动10mm 的距离

    2. MovPR(AC,10) --从当前位置以点到点的方式往C轴正方向移动10度的角度

    MovJ

    使用说明 点到点的方式移动机器人各个关节到指定的角度绝对位置

    语法说明 1. MovJ (A,B," Acc=20 Dec=20 Spd=20")2. MovJ(A,"Acc=20 Dec=20 Spd=20")

    参数说明 用法 1:下表各指令参数说明A J1,J2,J3,J4 对应机器人各个关节号B 各关节移动的目标角度Acc 可选参数,指定运动到目标位置的加速度比例,范围 1~100Dec 可选参数,指定运动到目标位置的减速度比例,范围 1~100Spd 可选参数,指定运动到目标位置的速度比例,范围 1~100

    用法 2:下表各指令参数说明A 每个轴的关节目标位置(数组变量)Acc 可选参数,指定运动到目标位置的加速度比例,范围 1~100Dec 可选参数,指定运动到目标位置的减速度比例,范围 1~100Spd 可选参数,指定运动到目标位置的速度比例,范围 1~100

  • AR 语言指令手册

    26

    举例说明 1. MovJ (J1,10) --机器人第一关节移动到 10 度的位置2. MovJ (J3,-10) --机器人第三关节移动到-10 毫米的位置3. JointAngle = {x=30,y=40,z=10,c=30}

    MovJ(JointAngle, “Acc=20 Dec=20 Spd=20”) –关节运动到目标位置点 注意:关节运动时 J3 为毫米单位,其它关节单位为角度。

    MArchP

    使用说明 机器人以点到点的方式做拱形运动

    语法说明 1. STA = MArchP(A,B,C,D," Acc=20 Dec=20 Spd=100 I=0 In=10 ON/OFF”)2. STA = MArchP(A,B, "Acc=20 Dec=20 Spd=100 I=0 In=10 ON/OFF")

    参数说明 用法 1:输入参数说明

    A笛卡尔坐标目标位置。可以是点的名称 p1~p2999,也可以是点的索引号 1~2999

    B Z 轴最高限位绝对位置,单位为毫米C Z 轴上升的高度,单位为毫米D Z 轴下降的高度,单位为毫米Acc 可选参数,指定拱形运动的加速度比例,范围 1~100Dec 可选参数,指定拱形运动的减速度比例,范围 1~100Spd 可选参数,指定拱形运动的速度比例,范围 1~100I 可选参数,第三轴电流设定值,单位 mA。若运动过程中

    的电流超过了设定值则当前运动停止,继续往下执行。

    In 可选参数,输入检测信号。若运动过程中检测到该输入信号则当前的运动停止,继续往下执行。

    ON/OFF ON:打开;OFF:关闭示意图

    用法 2:输入参数说明A 笛卡尔坐标目标位置。可以是点的名称 p1~p2999,也可以

    是点的索引号 1~2999B Z 轴最高限位(绝对位置),也是 Z 轴要实际走到的高度,

    单位为毫米

    Acc 可选参数,指定拱形运动的加速度比例,范围 1~100Dec 可选参数,指定拱形运动的减速度比例,范围 1~100

  • AR 语言指令手册

    27

    Spd 可选参数,指定拱形运动的速度比例,范围 1~100I 可选参数,第三轴电流设定值,单位 mA。若运动过程中

    的电流超过了设定值则当前运动停止,继续往下执行

    In 可选参数,输入检测信号。若运动过程中检测到该输入信号则当前的运动停止,继续往下执行

    ON/OFF ON:打开;OFF:关闭返回值说明

    STA0: 指令运动正常1:输入信号中断运行-1:电流到达阈值中断运行

    举例说明 1. MArchP(p1,0,10,5) --机器人从当前位置 Z 轴上升 10mm 距离,然后以点到点的运动方式移动到距离目标位置 5mm 处,Z 轴下降5mm 到达目标位置(拱形的高度不能超过 Z 轴的最高限 0mm(绝对位置))

    2. MArchP(p1,0,10,5,”Acc=50 Spd=100”) --机器人以 50%的加速度,100%的速度做点到点方式拱形运动

    3. MArchP(p2,-10) --机器人从当前位置 Z 轴上升到-10mm 位置,然后以点到点的运动方式移动到(p2.x,p2.y,-10,p2.c)位置,最后 Z轴下降(-10-p2.z)到达目标位置

    MArc

    使用说明 笛卡尔坐标系下的圆弧运动

    语法说明 MArc(A,B,"CP=20 Acc=20 Dec=20 Spd=100 Angle = 360")参数说明 下表各指令参数说明

    A笛卡尔坐标圆弧经过点。可以是点的名称 p1~p2999,也可以是点的索引 1~2999

    B笛卡尔坐标圆弧终点。可以是点的名称 p1~p2999,也可以是点的索引 1~2999

    CP 可选参数,说明运动到目标点时是否平滑过渡,范围 0~100Acc 可选参数,指定运动到目标位置的加速度,单位为 mm/s2

    Dec 可选参数,指定运动到目标位置的减速度,单位为 mm/s2

    Spd 可选参数,指定运动到目标位置的速度,单位为 mm/sAngle 可选参数,指定圆弧的角度,范围 1~360

  • AR 语言指令手册

    28

    示意图

    举例说明 1. MArc(p1,p2) --机器人从当前位置以圆弧的方式经过 p1 点运动到 p2 目标位置

    2. MArc(1,2) --机器人从当前位置以圆弧的方式经过 p1点运动到p2 目标位置

    3. MArc(1,2,"Acc=100 Spd=1000") --机器人从当前位置以圆弧的方式经过 p1 点运动到 p2 目标点,其中加速度为 100mm/s2,速度为1000mm/s

    4. MArc(1,2,"CP=20") --机器人圆弧运动到 p2 点时平滑过渡

    MCircle

    使用说明 机器人在笛卡尔坐标系下的圆周运动

    语法说明 MCircle(A,B," CP=20 Acc=20 Dec=20 Spd=100 Angle=360 ")参数说明 下表各指令参数说明

    A笛卡尔坐标圆周经过点 1。可以是点的名称 p1~p2999,也可以是点的索引 1~2999

    B笛卡尔坐标圆周经过点 2。可以是点的名称 p1~p2999,也可以是点的索引 1~2999

    CP 可选参数,说明运动到目标点时是否平滑过渡,范围 0~100Acc 可选参数,指定运动到目标位置的加速度,单位为 mm/s2

    Dec 可选参数,指定运动到目标位置的减速度,单位为 mm/s2

    Spd 可选参数,指定运动到目标位置的速度,单位为 mm/sAngle 指定圆周的角度,范围 1~360

  • AR 语言指令手册

    29

    示意图

    当前点

    中间点1

    中间点2

    举例说明 1. MCircle(p1,p2) --机器人从当前位置经过 p1 点运动到 p2 目标位置的整圆运动

    2. MCircle(1,2) --机器人从当前位置经过 p1 点运动到 p2 目标位置的整圆运动。

    3. MCircle(1,2,"Acc=100 Spd=1000") --机器人从当前位置经过 p1点运动到 p2 目标点的圆周运动,其中加速度为 100mm/s2,速度为 1000mm/s。

    4. MCircle(1,2,"CP=20") --机器人圆周运动到 p2点时平滑过渡 p2点。5. MCircle (1,2,"Angle=180") --机器人从当前位置往 p1 到 p2 的方

    向运动 180 度的半圆

    MSpline

    使用说明 样条曲线插补运动指令

    语法说明 MSpline(A,B, “CP=20 Acc=20 Dec=20 Spd=100 AccC=20 SpdC=20”)参数说明 下表各指令参数说明

    A 样条曲线起始点(点位表中示教)B 样条曲线结束点(点位表中示教)Acc 可选参数,指定运动到目标位置的加速度,单位 mm/s2

    Dec 可选参数,指定运动到目标位置的减速度,单位 mm/s2

    Spd 可选参数,指定运动到目标位置的速度,单位 mm/sAccC 可选参数,指定运动到目标位置的姿态加速度,单位度/��

    SpdC 可选参数,指定运动到目标位置的姿态速度,单位度/s举例说明 1. MSpline(p1,p10) --p1~p10 点共 10 个点形成的样条曲线轨迹

    2. MSpline(p10,p150) --p10~p150 共 141 个点形成的样条曲线轨迹注:

    起始点、结束点、以及之间的点位都需要在点位表(DATA.PTS)中示教(必须连续,中间的点位数据不能为空,否则出错);

    从起始点到结束点,点位坐标(数据)个数不能少于 3 个,也不能超过 300 个; 样条曲线插补运动指令,须结合示教器参数里的样条曲线参数(默认拆分步长);

    该指令会自动判断起始点与结束点坐标是否为同一个点,若为同一个点,则曲线

    封闭,否则曲线不封闭。

  • AR 语言指令手册

    30

    handmove

    使用说明 自动运行状态下实现手动笛卡尔/关节的连续、点动运动语法说明 handmove(0xAB,C,D,E)参数说明 下表各指令参数说明

    AA=0:非阻塞运动;A=1:阻塞运动

    B

    B=0:笛卡尔连续运动;B=1:关节连续运动;B=2:笛卡尔点动运动;B=3:关节点动运动

    C

    笛卡尔运动

    C=AX:X 轴;C=AY:Y 轴;C=AZ:Z 轴;C=AC:C 轴

    关节运动

    C=J1:J1 轴;C=J2:J2 轴;C=J3:J3 轴;C=J4:J4 轴

    D连续运动

    D=1:正方向;D=-1:负方向

    点动运动

    点动移动的距离(距离的正负代

    表运动方向)

    E指定机器人运动速度倍率,范围 1~100(-1 指的是默认当前的机器人速度倍率)

    举例说明 1. handmove(0x00,AX,1,20) --机器人以 20%的速度倍率往 X 轴正方向连续运动,若接收到停止信号立即响应

    2. handmove(0x01,J2,-1,30) --机器人以30%的速度倍率往 J2轴负方向连续运动,若接收到停止信号立即响应

    3. handmove(0x12,AZ,-10,-1) --机器人以当前默认的速度倍率往 Z 轴负方向运动 10mm 的距离,直到运动到指定位置才能响应停止信号

    4. handmove(0x13,J4,30,-1) --机器人以当前默认的速度倍率往 J4 轴正方向运动 30 度,直到运动到指定位置才能响应停止信号

    stoprun

    使用说明 自动运行状态下实现停止手动直线运动

    语法说明 stoprun()参数说明 无参数

    举例说明 function Bit(value,bit)if (value & (0x0001

  • AR 语言指令手册

    31

    function ExtManu()local value = publicread(0x100)if Bit(value,0) then

    print("X+\n")--handmove(0x00,1,1,-1) --X+方向连续运动--handmove(0x01,1,1,-1) --J1+方向连续运动handmove(0x12,1,5,-1) --X+方向寸动--handmove(0x13,1,5,-1) --J1+方向寸动

    elseif Bit(value,1) thenprint("X-\n")--handmove(0x00,1,-1,-1)--X-方向连续运动--handmove(0x01,1,-1,-1)--J1-方向连续运动handmove(0x12,1,-5,-1) --X-方向寸动--handmove(0x13,1,-5,-1)--J1-方向寸动

    elseif Bit(value,2) thenprint("Y+\n")--handmove(0x00,2,1,-1)--Y+方向连续运动--handmove(0x01,2,1,-1)--J2+方向连续运动handmove(0x12,2,5,-1) --Y+方向寸动--handmove(0x13,2,-5,-1)--J2+方向寸动

    elseif Bit(value,3) thenprint("Y-\n")--handmove(0x00,2,-1,-1)--Y-方向连续运动--handmove(0x01,2,-1,-1)--J2-方向连续运动handmove(0x12,2,-5,-1) --Y-方向寸动--handmove(0x13,2,-5,-1)--J2-方向寸动

    elseif Bit(value,4) thenprint("Z+\n")--handmove(0x00,3,1,-1)--Z+方向连续运动--handmove(0x01,3,1,-1)--J3+方向连续运动handmove(0x12,3,5,-1) --Z+方向寸动--handmove(0x13,3,-5,-1)--J3+方向寸动

    elseif Bit(value,5) thenprint("Z-\n")--handmove(0x00,3,-1,-1)--Z-方向连续运动--handmove(0x01,3,-1,-1)--J3-方向连续运动handmove(0x12,3,-5,-1) --Z-方向寸动--handmove(0x13,3,-5,-1)--J3-方向寸动

    elseif Bit(value,6) thenprint("C+\n")--handmove(0x00,4,1,-1)--C+方向连续运动--handmove(0x01,4,1,-1)--J4+方向连续运动handmove(0x12,4,5,-1) --C+方向寸动

  • AR 语言指令手册

    32

    --handmove(0x13,4,-5,-1)--J4+方向寸动elseif Bit(value,7) then

    print("C-\n")--handmove(0x00,4,-1,-1)--C-方向连续运动--handmove(0x01,4,-1,-1)--J4-方向连续运动handmove(0x12,4,-5,-1) --C-方向寸动--handmove(0x13,4,-5,-1)--J4-方向寸动

    elsestoprun()

    endendwhile 1 do

    if publicread(0x102)==1 then --手动运动print("手动模式停止 CPU1")syswork(3) --停止 CPU1 的运动ExtManu()

    endif publicread(0x104) ==1 then --自动运行

    stoprun()print("自动模式启动 CPU1")syswork(1)

    endDelay(10)

    end注: stoprun 指令实现的是停止自动运行状态下的手动运动,故 handmove 指令和

    stoprun指令是配套使用的。

    waitpos

    使用说明 等待运动脉冲发送完成指令(运动 DSP 发送脉冲完成指令)语法说明 waitpos()参数说明 无

    举例说明 1. MovP(p1)MovP(p2)waitpos() --等待运动 DSP将运动到 P2点的脉冲全部发送给伺服 DSPa =1 --若无 waitpos()指令, a的值会提前打印print(“a”)

    waitrealpos

    使用说明 机器人运动到位(停稳)指令(伺服响应脉冲到位指令)

    语法说明 waitrealpos()参数说明 无

  • AR 语言指令手册

    33

    举例说明 2. MovP(p1)waitrealpos() --等待机器人到达 p1 点(伺服响应有一定的滞后性)print(“已到达 p1 点”)

    1.12运动参数设置指令指令符号 指令说明

    AccJ设置加速度比例指令,影响 MovJ、MovJR、MovP、MovPR、MArchP 指令的加速时间

    DecJ设置减速度比例指令,影响 MovJ、MovJR、MovP、MovPR、MArchP 指令的减速时间

    SpdJ设置速度比例指令,影响 MovJ、MovJR、MovP、MovPR、MArchP指令的运行速度

    AccL设置直线运动指令加速度,影响 MovL、MovLR、MArc、MCircle指令的加速时间。单位 mm/s2

    DecL设置直线运动指令减速度,影响 MovL、MovLR、MArc、MCircle指令的减速时间。单位 mm/s2

    SpdL设置直线运动指令速度,影响 MovL、MovLR、MArc、MCircle指令的运行速度。单位 mm/s

    AccJ

    使用说明 设置点到点运动方式的加速度比例

    语法说明 AccJ(A)参数说明 A 百分比,范围 1~100举例说明 1. AccJ(50) --设置点到点 50%的加速度比例

    2. MovP(p2) --机器人以 50%的加速度比例运动到 p2 目标位置 注意:设置后机器人一直保持该全局加速度比例为点到点运动的默认加速度比例值,

    直到下一次更新。

    DecJ

    使用说明 设置点到点运动方式的减速度比例

    语法说明 DecJ(A)参数说明 A 百分比,范围 1~100举例说明 3. DecJ(50) --设置点到点 50%的减速度比例

    4. MovP(p2) --机器人以 50%的减速度运动到 p2 目标位置

    SpdJ

    使用说明 设置点到点运动方式的速度比例

  • AR 语言指令手册

    34

    语法说明 SpdJ(A)参数说明 A 百分比,范围 1~100举例说明 1. SpdJ(50) --设置点到点 50%的速度比例

    2. MovP(p2) --机器人以 50%的速度比例运动到 p2 目标位置

    AccL

    使用说明 设置直线运动方式的加速度

    语法说明 AccL(A)参数说明 A 实际加速度,单位 mm/s2,范围 1~10000举例说明 1. AccL(500) --设置直线运动的加速度为 500 mm/s2

    2. MovL(p2) --机器人以 500 mm/s2的加速度运动到 p2 目标位置

    DecL

    使用说明 设置直线运动方式的减速度

    语法说明 DecL(A)参数说明 A 实际减速度,单位 mm/s2,范围 1~10000举例说明 DecL(500) --设置直线运动的减速度为 500 mm/s2

    MovL(p2) --机器人以 500 mm/s2的减速度运动到 p2 目标位置

    SpdL

    使用说明 设置直线运动方式的速度

    语法说明 SpdL(A)参数说明 A 实际速度,单位 mm/s举例说明 1. SpdL(500) --设置直线运动的速度为 500mm/s

    2. MovL(p2) --机器人以 500mm/s 的速度运动到 p2 目标位置

    1.13程序管理指令指令符号 指令说明

    Delay 延时指令。单位:毫秒Exit 程序运行终止Pause 暂停程序运行

    Delay

    使用说明 延时指令

    语法说明 Delay(A)参数说明 A 延时时间,单位为毫秒,范围 1~100000举例说明 1. Delay(1000) --程序延时 1000 毫秒

  • AR 语言指令手册

    35

    2. Delay(1) --机器人延时 1 毫秒3. local time = 1000

    Delay(time) --参数为变量

    Exit

    使用说明 退出程序执行指令

    语法说明 Exit()参数说明 该指令无参数

    举例说明 Exit() --执行该指令后程序程序停止执行MovL(1) --该指令不会被执行

    Pause

    使用说明 暂停程序执行指令

    语法说明 Pause()参数说明 该指令无参数

    举例说明 Pause() --执行该指令后程序暂停执行 ,按启动键后程序继续运行MovL(p1)

    注意:暂停后,按启动键后程序会继续从暂停行继续运行。

    1.14一般指令指令符号 指令说明

    X 创建指定 X 轴笛卡尔坐标绝对位置点的指令Y 创建指定 Y 轴笛卡尔坐标绝对位置点的指令Z 创建指定 Z 轴笛卡尔坐标绝对位置点的指令C 创建指定 C 轴笛卡尔坐标绝对位置点的指令

    XYZC 创建指定 XYZC 轴笛卡尔坐标绝对位置点的指令

    X/Y/Z/C

    使用说明 创建指定某个轴笛卡尔坐标位置的点

    语法说明 X(A) Y(A) Z(A) C(A)参数说明 A 各个轴笛卡尔坐标位置,C 轴为角度,其它轴为 mm举例说明 1. MovL(p10 + X(20)) --机器人运动到相对于 p10 点往 X 轴正向偏移

    20 毫米的位置2. MovL(p11 + Y(-20)) --机器人运动到相对于 p11 点往 Y 轴负向偏移

    20 毫米的位置3. MovL(p12 + Z(-10)) --机器人运动到相对于 p12 点往 Z 轴负向偏移

    10 毫米的位置4. MovL(p13 +C(30)) --机器人运动到相对于 p13 点往 C 轴正向偏移

    30 度的位置

  • AR 语言指令手册

    36

    注意:该指令是用来生成一个点数据,不会产生运动,一般与点数据运算后作为参

    数传递给运动指令。

    XYZC

    使用说明 创建指定各个轴笛卡尔坐标位置的点

    语法说明 XYZC(A,B,C,D)参数说明 下表各指令参数说明

    A 指定 X 轴笛卡尔坐标位置,单位 mmB 指定 Y 轴笛卡尔坐标位置,单位 mmC 指定 Z 轴笛卡尔坐标位置,单位 mmD 指定 C 轴笛卡尔坐标位置,单位 mm

    举例说明 MovL(p10 + XYZC(10,20,-5,30)) --机器人运动到相对于 p10点往 X轴正向偏移 10 毫米,Y轴正向偏移 20 毫米、Z 轴负向偏移 5 毫米、C 轴正向偏移 30 度的位置移动

    1.15输入/输出指令指令符号 指令说明

    DI 读取输入端口状态DO 输出端口打开或关闭操作

    WDI读取输入端口状态,直到等待某一信号有效,则继续执行后续的程序

    WDO读取输出端口状态,直到等待某一信号有效,则继续执行后续的程序

    DI

    使用说明 读取输入端口状态

    语法说明 形式 1:DI(-1)或 DI(-2)形式 2:DI(A)

    参数说明 形式 1:DI(-1)的返回值是一个 32 位的二进制数转化的十进制数值,从低位到高位分别代表输入端口(0~31)的状态值;DI(-2)的返回值也是一个 32 位的二进制数转化的十进制数值,低两位分别代表输入端口(32~33)的状态值。其中 0 代表关闭,1 代表打开。形式 2:返回值 ON(OFF) 或十进制的值下表各指令参数说明

    A 读取的输入端口号,范围 0~33举例说明 1. local input = DI(-1) --获取输入端口(0~31)的状态

    if ((input>>0)&0x0001)==1 then --判断输入端口 0 是否打开,若为--1, 则输入端口 0 打开

    MovP(p1)elseif ((input>>9)&0x0001)==1 then--判断输入端口 9 是否打开,若

  • AR 语言指令手册

    37

    --为 1,则输入端口 1 打开MovP(p2)

    end2. if DI(10) == ON then --输入端口 10有效时运动到 p1点

    MovP(p1)end

    3. value = DI({1,2,3}) --读取输入端口 1,2,3 的状态,若返回值value 为 7(111)则表示输入端口 1,2,3 打开;若 value 为 6(110),则 1,2 打开,3 关闭;若 value 为 5(101),则 1,3 打开,2 关闭….依次类推…

    注意:DI 指令只是读取输入端口的状态,状态有效或无效都不会死等待。 注意:若同时读取某几个输入端口的状态,输入端口一定要按照从小到大或从大到

    小的顺序排序。

    DO

    使用说明 输出端口打开或关闭操作

    语法说明 用法 1:DO(A,B)用法 2:DO(A,B,"Time = C")用法 3:DO(A,B, “F”)用法 4:DO(A,B, “Time = C H”)用法 5:DO(A,B , “Time = C F”)用法 6:DO(A,B, “POS=D”)

    参数说明 返回值 ON 或 OFF下表各指令参数说明

    A读写的输出端口号,范围 0~26,可以是单个端口,也可以是多个端口

    B 输出端口的状态值C 可选参数,时间(ms)D 位置百分比

    举例说明 1. DO(10,ON) --打开 10 号输出端口为 ON2. DO(10,ON,“Time=1000”) --打开 10 号输出端口为 ON,并保持

    1 秒钟,1 秒之后输出 10 切换为 OFF3. DO({1,2,3,4},{ON,ON,ON,ON}) --打开输出 1,2,3,4 为 ON4. DO({5,6,7,8},{ON,OFF,ON,OFF}) --打开输出 5,7 为 ON,关闭输出

    6,8 为 OFF5. DO({9,10},{ON,ON},“Time=2000”) --打开输出 9,10,并保持 2 秒钟,

    2 秒之后输出 9,10 切换为 OFF6. DO({9,10},{0,0},“Time=2000”) --打开输出 9,10 为 OFF,并保持

    2 秒钟,2 秒之后输出 9,10 切换为 ON7. DO({1,2,3},7) --1 对应的二进制为 111,则表示打开输出端口 1,

    2,3 都为 ON8. DO({1,2,3},5) --5 对应的二进制为 101,则表示打开输出端口 1,3

  • AR 语言指令手册

    38

    为 ON,关闭输出端口 2 为 OFF9. MovP(p9)

    DO(1,ON, “F”) --从当前位置运动到 p9 点,到达 p9 点后打开输出端口 1,然后运动到 p10 点,运动连续MovP(p10)

    10. MovP(p1)MovP(p2)DO(1,ON, “POS=50”) --从 p1点运动到 p2的点的 50%距离时打开输出端口 1

    11. MovP(p1)MovP(p2)DO(1,ON, “Time=100 H”) --从 p1 点运动到 p2 的点,在到达 p2点前的 100ms 打开输出端口 1

    12. MovP(p1)MovP(p2)DO(1,ON, “Time=50 F”) --从 p1 点运动到 p2 的点,在到达 p2点后的 50ms 打开输出端口 1

    可选参数 Time 为输出端口保持时间,超过保持时间后会将该当前的输出端口状态切换为相反状态;

    若同时打开或关闭某几个输出端口,输出端口一定要按照从小到大或从大到小的顺

    序排序;

    缓存 IO 功能不适用于组合 IO 的情况; 缓存 IO功能适用于点到点运动(MovP)、直线运动(MovL)以及拱形运动(MArchP); Time、POS、F、H 为 DO 指令中的关键字,不能修改; 运动过程中启用缓存 IO 功能,当前的运动不会终止,运动连续。

    WDI

    使用说明 读取输入端口状态,直到等待某一或多个信号有效,则继续执行后续的程序

    语法说明 WDI(A,B)WDI(A,B, “Time=1000”)

    参数说明 返回值 1 (ON)或 0 (OFF)下表各指令参数说明

    A 读取的输入端口号B 输入端口的状态值,ON 或 OFF

    Time 可选参数,等待时间,单位为毫秒举例说明 1. local flag = WDI(10,ON) --直到等到输入端口 10 状态为 ON 再执行

    MovP 指令print(flag) --返回值为 1MovP(p1)

    2. local flag = WDI(10,OFF) --直到等到输入端口 10状态为 OFF再执行MovP 指令

  • AR 语言指令手册

    39

    print(flag) --返回值为 0MovP(p1)

    3. local flag = WDI(10,ON, “Time=2000”) --等待输入端口 10 状态为 ON,等待时间 2 秒,若 2 秒后输入端口 10 状态仍为 OFF,则继续执行MovP 指令if flag == 1 then --在 2 秒内输入端口 10 状态检测为 ON

    MovP(p1)elseif flag == 0 then --在 2 秒内输入端口 10 状态一直检测为 OFF

    MovP(p2)end

    4. local flag = WDI({1,2,3},{ON,ON,ON}) --直到同时等到输入端口 1,2,3同时为 ON 再执行 MovP 指令print(flag) --返回结果为 7(对应二进制的 111)MovP(p1)

    5. local flag = WDI({1,2,3},{ON,ON,ON}, “Time=2000”) --等待输入端口1,2,3 状态为 ON,等待时间为 2 秒,若 2 秒之后输入端口仍 OFF ,仍继续执行 MovP 指令if flag ==7 then --输入端口 1、2、3 在 2 秒内状态检测到为 ON

    MovP(p1)elseif flag ==0 then

    MovP(p2) --输入端口 1、2、3 在 2 秒内状态一直检测为 OFFend

    注意:若同时等待某几个输入端口的状态,输入端口一定要按照从小到大或从大到小

    的顺序排列。

    WDO

    使用说明 读取输出端口状态,等待某一信号有效,则继续执行后续的程序语法说明 WDO(A,B)

    WDO(A,B, “Time=1000”)参数说明 返回值 ON 或 OFF

    下表各指令参数说明

    A 读取的输出端口号B 输出端口的状态值,ON 或 OFF

    Time 可选参数,等待时间,单位为毫秒举例说明 1. WDO(10,ON) --直到等到输入端口 10状态为 ON再执行MovP指令

    MovP(p2)2. WDO(10,ON, “Time=2000”) --等待输出端口 10 状态为 ON,等待时

    间为 2秒,若 2 秒之后输出端口 10 状态仍为 OFF,则继续执行MovPMovP(p2)

    1.16坐标系指令指令符号 指令说明

  • AR 语言指令手册

    40

    SetU 设置机器人当前用户坐标系WrU 修改用户坐标系的数据SetT 设置机器人当前工具坐标系WrT 修改工具坐标系的数据CacU 两点法新建用户坐标系U2U 用户(0~9)之间坐标相互转换V2Tool 根据视觉坐标计算工具坐标CacT 两点法新建工具坐标系getcart 获取当前笛卡尔坐标getjoint 计算目标点对应的某一个轴的关节坐标

    encoderget 获取编码器的脉冲值targetok 判断目标位置是否为机器人可到达点位

    SetU

    使用说明 设置当前用户坐标系

    语法说明 形式 1:SetU(A)形式 2:SetU(A,B)

    参数说明 A 设置的用户坐标系号,范围 0~9B 用户坐标偏移量

    举例说明 1. SetU(1) --选择用户坐标系 1MovL(p1) --运动到用户坐标系 1 中的 p1 位置

    2. SetU(1,{ x=10,y=20,z=0,c=30}) --在用户坐标系 1的基础上增加偏移量,然后设定为新的用户坐标系

    MovL(p1) --在新的用户坐标系中运动到 p1 位置 注意:坐标系设置后立即有效并保持到下一次更新。

    注意:在原有的用户坐标系的基础上设置偏移量生成新的用户坐标,原有的用户坐

    标没有被修改。

    SetT

    使用说明 设置当前工具坐标系

    语法说明 SetT(A)参数说明 A 设置的工具坐标系号,范围 1~9举例说明 1. SetT (1) --选择工具坐标系 1

    2. MovL(p1) --运动到工具坐标系 1 中的 p1 位置

    WrU

    使用说明 修改用户坐标系的数据

    语法说明 形式 1: WrU(A,B,C)形式 2: WrU(A,B)

  • AR 语言指令手册

    41

    参数说明 下表各指令参数说明(形式 1)A 要修改的用户坐标系号,范围为 1~9B 修改的轴号,分别为 AX、AY、AZ、ACC 修改的值,X/Y/Z轴单位为毫米,C 轴单位为角度

    下表各指令参数说明(形式 2)A 要修改的第几组用户坐标系号,范围为 1~9

    BTable 类型,包含用户坐标系的原点坐标,以及该用户相对于用户 0 旋转的角度

    举例说明 1. WrU(1,AX,200) --修改第一组用户坐标系的 X 轴为 200 毫米2. WrU(1,AC,100) --修改第一组用户坐标系的 C 轴为 100 度3. WrU(2,{x=200,y=100,z=0,c=90}) --修改用户 2 的原点为(200,100,0),

    用户 2 相对于用户 0 的旋转角度为 90 度4. Pos = { x=300,y=100,z=0,c=-90}

    WrU(3,Pos)

    WrT

    使用说明 修改工具坐标系的数据

    语法说明 形式 1:WrT (A,B,C)形式 2: WrT(A,B)

    参数说明 下表各指令参数说明(形式 1)A 要修改的工具坐标系号,范围为 1~9B 修改的轴号,分别为 AX、AY、AZ、ACC 修改的值,单位为毫米,C 轴为角度

    下表各指令参数说明(形式 2)A 要修改的工具坐标系号,范围为 1~9

    BTable 类型,包含要修改的工具末端相对于机器人末端在X,Y,Z,C 轴方向的偏移量

    举例说明 1. WrT(1,AX,20) --修改工具坐标系 1 的 X 轴偏移量为 20 毫米2. WrT(1,AY,10) --修改工具坐标系 1 的 Y 轴偏移量为 10 毫米3. WrT(1,{x= 10,y=20,z=0,c=30}) –修改工具1相对于机器人末端在 X、Y、

    Z、C 方向上的偏移量分别为 10mm,20mm,0mm,30 度。4. Offset = { x=10,y=10,z=0,c=-30}

    WrT(2,Offset)

    CacU

    使用说明 新建用户坐标系

    语法说明 CacU (pos1,pos2)参数说明 下表各指令参数说明

    pos1 用户坐标系的原点Pos2 用户坐标系 X 方向上的一点

  • AR 语言指令手册

    42

    举例说明 1. local pos1 = {300,100,0,0} --用户坐标系的原点2. local pos2 = {300,120,0,0} --用户坐标系 X 轴方向上的一点3. WrU(1,CacU(pos1,pos2)) --将新建的用户坐标指定为用户坐标系 1

    U2U

    使用说明 用户(0~9)之间坐标相互转换语法说明 Pos = U2U (A,B,C)参数说明 下表各指令参数说明

    A 被转换的用户号(0~9)B 目标用户号(0~9)C 被转换用户号下的坐标Pos 目标用户号下的坐标

    举例说明 1. local pos = U2U(0,2,p1) --将用户 0 下的 p1 点转换到用户 2 下的坐标

    SetU(2)MovP(pos)

    2. local pos1= {x= 100,y=40,z=-10,c=30}local pos = U2U(1,3,pos1) –把用户 1中的 pos1点的坐标转换到用户 3下的坐标

    SetU(3)MovP(pos)

    V2Tool

    使用说明 根据视觉坐标计算工具坐标

    语法说明 V2Tool(A,B)参数说明 A 视觉输出的笛卡尔坐标值

    B 工具坐标系号,范围 1~9举例说明 local vis = {x=300, y=10,z=0,c=0} --视觉坐标

    V2Tool(vis,3) --将计算出来的工具写入到工具坐标系 3SetT(3) --设置当前工具坐标系为 3 号坐标系

    注意:视觉坐标和当前的机器人坐标必须在同一坐标系下。

    CacT

    使用说明 两点法新建工具坐标系

    语法说明 CacT(pos1,pos2)参数说明 下表各指令参数说明

    pos1 机器人末端笛卡尔坐标pos2 夹具末端笛卡尔坐标

    举例说明 Pos1= getcart()

  • AR 语言指令手册

    43

    pos2 = {x=300,y=100,z=0,C=30}WrT(1,CacT(pos1,pos2))

    注:

    (1) 夹具末端的笛卡尔坐标通过视觉定位获取;(2) 夹具末端笛卡尔坐标和机器人末端笛卡尔坐标必须处于同一坐标系;

    getcart

    使用说明 获取当前笛卡尔坐标以及关节坐标

    语法说明 pos1,pos2=getcart()参数说明 无参数

    返回值 pos1 机器人当前的笛卡尔坐标pos2 机器人当前的关节坐标

    举例说明 1. local pos1,pos2= getcart()--获取当前笛卡尔坐标以及关节坐标--pos1.x,pos1.y,pos1.z,pos1.c,pos1.h 分别为笛卡尔 x/y/z/c/h的值--pos2.x,pos2.y,pos2.z,pos2.c,pos2.h 为关节 J1/J2/J3/J4 以及手系的值2. local pos = getcart() --获取当前笛卡尔坐标-- pos.x,pos.y,pos.z,pos.c,pos.h 分别为笛卡尔 x/y/z/c/h 的值

    getjoint

    使用说明 计算目标点对应的 J1 轴或 J2 轴的关节坐标语法说明 Err, Joint = getjoint(pos,A)参数说明 pos 目标点坐标

    A 轴关节号 J1/J2

    返回值

    Err错误号,用来判断目标点是否是机器人可到达点;

    Err = 0 : 目标点能到达Err = 6: 目标点不能到达

    Joint J1 或 J2 轴对应的关节值举例说明 local p1 --基准点

    local pos =CCDrecv(“CAM0”) --目标位置 pospos.h = p1.hlocal Err,Joint1 = getjoint(pos,J1) –计算 pos 点在基准点手系下的 J1 角度if Err==0 then --目标点是机器人能到达点

    print(Joint1) --打印目标点 J1 轴的关节坐标if joint>190 and joint

  • AR 语言指令手册

    44

    elseprint(“Err 不正确,机器人不能到达这个点”,Err)Exit()

    end 注意:计算目标点对应的 J1 轴或 J2 轴对应的关节坐标,一定要指定达到目标点的

    手系,默认是机器人当前点的手系;

    getjoint 函数主要解决用于吊装(倒装)机器人走自定义点位(例如:视觉发送的坐标或码垛点计算的坐标,非示教点位)最优路径的问题。

    encoderget

    使用说明 获取编码器的脉冲值

    语法说明 Pulse = encoderget(A)参数说明 A 编码器号,范围 1~6

    返回值 Pulse 返回对应编码器的脉冲值举例说明 1. Pulse1=encoderget(1) --获取 J1 轴编码器 M1 的脉冲值;

    2. Pulse2=encoderget(2) --获取 J2 轴编码器 M2 的脉冲值;3. Pulse3=encoderget(3) --获取 J3 轴编码器 M3 的脉冲值;4. Pulse4=encoderget(4) --获取 J4 轴编码器 M4 的脉冲值;5. Pulse5=encoderget(5) --获取外接编码器 M5 的脉冲值;6. Pulse6=encoderget(6) --获取外接编码器 M6 的脉冲值;

    targetok

    使用说明 判断目标位置是否为机器人可到达点位

    语法说明 sta = targetok(A)参数说明 A 目标点位,table 类型数据

    返回值 sta 是否为可到达表示位,sta=0 为可到达,sta=1 为不可到达举例说明 1. sta = targetok(p1) --判断 p1 点是否为机器人可到达点位

    if sta == 0 thenprint(“p1 点为机器人可到达点位”)

    elseif sta== 1 thenprint(“p1 点位为机器人不可到达点位,请检查”)Pause() --暂停

    end2. pos = {x=300,y=10,z=-20,c=30,h=1}

    sta = targetok(pos) --判断 pos 点是否为机器人可到达点位if sta == 0 then

    print(“pos 点为机器人可到达点位”)elseif sta== 1 then

    print(“pos 点位为机器人不可到达点位,请检查”)Pause() --暂停

    end

  • AR 语言指令手册

    45

    3. local pos ={ }local n,data,err=CCDrecv(“CAM1”) --接收视觉 CAM1 的数据if err == 0 and n ~=nil then

    for i=1,n do --n 决定循环的次数print(i,data[i][1],data[i][2],data[i][3]) --打印每组数据if data[i][1]~=0 or data[i][2]~=0 then--判断数据不同时为零

    pos.x=data[i][1] --数据 data[i][1]赋值给 pos.xpos.y=data[i][2] --数据 data[i][2]赋值给 pos.ypos.z=0pos.c=data[i][3] --数据 data[i][3]赋值给 pos.cpos.h = 0sta = targetok(pos)if sta == 0 then

    print(“pos 点为机器人可到达点位”)MovP(pos) --点到点方式运动到点 pos

    elseif sta== 1 thenprint(“pos 点位为不可到达点位,请检查”)Pause() --暂停运动

    endend

    endelseif err==0 and n == nil then

    print(“数据格式配置错误”)elseif err~=0 then

    print(“网线断开或 IP 配置错误或网络超时”)end

    注:判断目标点是否为机器人可到达点位时,一定要指定目标点的手系, 因为对于四轴机器人来说有些点位只能有一个手系可以到达。

    1.17码垛指令

    1.17.1三点法编程码垛

    指令符号 指令说明

    SetPlt 设置码垛数指令(用于编程码垛)GetPlt 取码垛数据点指令(用于编程码垛)

    SetPlt

    使用说明 设置码垛参数

    语法说明 平面码垛 SetPlt(A,B,C,D,E,F)三维码垛 SetPlt(A,B,C,D,E,F,G,H)

    参数说明 下表各指令参数说明

  • AR 语言指令手册

    46

    平面码垛 SetPlt(A,B,C,D,E,F)A 码垛号(number 类型数据)B 码垛原点位置C 码垛行方向的最后一个点D 码垛列方向的最后一个点E 码垛的行数F 码垛的列数

    三维码垛 SetPlt(A,B,C,D,E,F,G,H)A 码垛号(number 类型数据)B 码垛原点位置C 码垛行方向的最后一个点D 码垛列方向的最后一个点E 码垛层方向的最后一个点F 码垛的行数G 码垛的列数H 码垛的层数

    举例说明 1. SetPlt(1,p1,p2,p3,5,11) --设置 XY 轴码垛2. SetPlt(1,p1,p2,p3,p4,11,5,3) --设置 XYZ 轴码垛

    注意: 码垛设置指令只要在程序开始执行一次,指令自动根据参数的个数判断是 XY轴码垛或 XYZ 轴码垛。

    GetPlt

    使用说明 获得码垛数据点

    语法说明 平面码垛 GetPlt(A,B,C)三维轴码垛 GetPlt(A,B,C,D)

    参数说明 返回值 返回码垛中的各个点位数据

    下表各指令参数说明

    平面码垛 GetPlt(A,B,C)A 码垛号(number 类型数据)B 码垛行方向上的某一点,从 1 开始C 码垛列方向上的某一点,从 1 开始

    三维码垛 GetPlt(A,B,C,D)A 码垛号(number 类型数据)B 码垛行方向上某一点,从 1 开始C 码垛列方向上某一点,从 1 开始D 码垛层方向上某一点,从 1 开始

  • AR 语言指令手册

    47

    举例说明

    SetPlt(1,p1,p2,p3,5,4) --设置平面码垛while true do

    i=1j=1while i

  • AR 语言指令手册

    48

    pxy 码垛第一层对角线的点位pxyz 码垛最后一层对角线的点位nx 码垛的行数ny 码垛的列数nz 码垛的层数,nz=1 为平面码垛,nz 大于 1 为三维码垛

    举例说明 1. SET_PLT(1,p1,p2,p3,p4,p5,5,4,1) --平面码垛2. SET_PLT(1,p1,p2,p3,p4,p5,5,4,3) --三维码垛

    GET_PLT

    使用说明 获得码垛数据点

    语法说明 pos =GET_PLT(No,num)参数说明 返回值 返回码垛中的各个码垛点位置数据

    下表各指令参数说明

    平面码垛 GetPlt(A,B,C)No 码垛号(number 类型数据)num 当前码垛的序列号

    举例说明

    local org = p1local px = p2local py = p3local pxy = p4local pxyz = p4local nx,ny,nz = 5,4,1local pos = {}SET_PLT(1,org, px,py,pz,pxy,pxyz,nx,ny,nz) --设置平面码垛while true do

    for i =1, nx*ny*nz dopos = GET_PLT(1,i)print(pos.x,pos.y,pos.z,pos.c)MArchP(pos,0,10,10)

    endend

    注意: GET_PLT指令与 SET_PLT指令是组合配套使用,应用于矩形阵列码垛; 编程码垛是通过 AR 程序实现的,码垛中涉及到的参数(例如:码垛名、行数、列

  • AR 语言指令手册

    49

    数等)都是在 AR 程序中设定的,故称作编程码垛; 编程码垛须添加码垛库(GET_PLT和 SET_PLT这两个指令是在 pallet.lib 库里面封装

    定义的);

    四点法码垛相对于三点法码垛须多示教一个码垛点位,但是精度高于三点法;故在

    某些应用中出现码盘对角线位置附近的某些点出现偏差时须考虑用四点法码垛来

    替代三点法码垛。

    1.17.3 配置码垛

    指令符号 指令说明

    GetPLTPos获取码盘是否码满、码盘当前码垛的个数以及码垛点位置信息

    (适用于配置码垛)

    ResetPLT 重置码垛个数(适用于配置码垛)

    GetPLTPos

    使用说明 获取码盘是否码满、码盘当前码垛的个数以及码垛点位置信息

    语法说明 flag,num,pos=GetPLTPos(“PltName”)参数说明 无返回值

    输入参数说明

    PltName 码垛名(PLT0~PLT4)

    flag

    码盘是否码满的标志位

    0 表示没有码满

    1 表示码满

    2 表示最后一个为不码垛点,码满的情况

    num 当前码垛的个数pos 当前码垛点的位置

    注:使用该语句,须在码垛配置中设置关于码垛的一些参数,包括码垛名、码垛顺序、参考

    坐标系等。

    ResetPLT

    使用说明 重置码垛个数

    语法说明 ResetPLT(“PltName”,count)参数说明 返回值

    输入参数说明

    PltName 码垛名(PLT0~PLT4)count 码垛个数,可任意设置个数,码垛个数从 1 开始

    举例说明 local posReady = p1 --待机点&安全点local quliao = p2 --取料点local flaglocal num

  • AR 语言指令手册

    50

    local pos ={}MArchP(posReady,5,1,1) --待机点&安全点while true do

    MovP(quliao) --运动到取料点DO(1,ON)Delay(150)flag,num,pos =GetPLTPos(“PLT0”)if flag == 0 then --未码完

    MovP(pos) --运动到码垛点DO(1,OFF)Delay(150)

    elseif flag ==1 then --码满MovP(pos) --运动到码垛点DO(1,OFF)Delay(150)ResetPLT(“PLT0”,1) --重置码垛

    elseif flag==2 then --码盘的最后一个点为不码垛点,码完的返回值ResetPLT(“PLT0”,1) --重置码垛

    endend

    注意:GetPLTPos指令与 ResetPLT指令是组合配套使用的。 配置码垛是通过在码垛配置界面设定码垛工艺用到的参数(例如:码垛名、行数、

    列数、间隔数等),然后结合 AR 程序实现码垛工艺,故称作配置码垛; 配置码垛须添加码垛库(GetPLTPos与 ResetPLT这两个指令是在 pallet.lib 库里面封

    装定义的)。

    1.17.4 圆形码垛

    指令符号 指令说明

    SetArcPlt 圆形码垛设置GetArcPlt 获取圆形码垛当前位置

    SetArcPlt

    使用说明 设置圆形码垛参数

    语法说明 平面码垛 SetArcPlt(A,B,C,D,E)三维码垛 SetArcPlt(A,B,C,D,E,F,G)

    参数说明 下表各指令参数说明

    平面码垛 SetArcPlt(A,B,C,D,E)A 码垛号(number 类型数据)B 码垛原点,即圆形码垛的圆心位置C 码垛起点位置D 码垛终点位置

  • AR 语言指令手册

    51

    E法向方向码垛等分个数(第一层起点与终点之间沿着圆周

    方向的间隔数)

    三维码垛 SetArcPlt(A,B,C,D,E,F,G)A 码垛号(number 类型数据)B 码垛原点,即圆形码垛的圆心位置C 码垛第一层起点位置D 码垛第一层终点位置E Z方向最后一层起点位置

    F法向方向码垛等分个数(第一层起点与终点之间沿着圆周

    方向的间隔数)

    G 空间码垛层数

    举例说明 1. SetArcPlt(1,p1,p2,p3,7) --设置 XY 轴码垛,如下图所示2. SetArcPlt(1,p1,p2, p3, p4,7,3) --设置空间(三维)码垛

    注意: 圆形码垛设置指令只要在程序开始执行一次,指令自动根据参数的个数判断是 XY 轴码垛或 XYZ 轴码垛。

    GetArcPlt

    使用说明 获取圆形码垛上每个点的位置

    语法说明 GetArcPlt(A,B,C,D)参数说明 A 码垛号(number 类型数据)

    B 从第一个位置点起的第几个位置C 圆形码垛当前处于的层数(第几层)D 法向顺时针或者逆时针,1 为顺时针,0 为逆时针

    举例说明

    SetU(1) --以圆形码盘上的六个点建立的圆形用户坐标系 1local posready = p10 --待机点(用户 1 下示教)local place = p1 --放料点(用户 1 下示教)local Arc_org = {x=0,y=0,z=0,c=0} --码垛圆心位置(用户 1 原点)local Arc_start = p2 --码垛第一层起点位置(用户 1 下示教)local Arc_end = p3 --码垛第一层终点位置(用户 1 下示教)local Arc_layer = p4 --码垛最后一层终点位置(用户 1 下示教)

  • AR 语言指令手册

    52

    local num = 7 --起点(p2)和终点(p3)之间(顺时针)的等分数 7local layer = 6 --圆形码垛层数(p2 点与 p4 点之间的间隔数)SetArcPlt(1,Arc_org,Arc_start,Arc_end,Arc_layer,num,layer) --设置平面圆形码垛

    MArchP(posready,0,10,10)while true do

    i = 1j = 1for j =1,layer do

    for i =1,num dopos = GetArcPlt(1,i,j,1) --读取码垛点位数据(顺时针)MArchP(pos,0,10,10) --运动到码垛位置Delay(5)MArchP(place,0,10,10) --运动到放料点

    endend --主程序结束

    end 注意:GetArcPlt 指令与 SetArcPlt 指令是组合配套使用,应用于圆形码垛; 配置码垛须添加码垛库(GetArcPlt 与 SetArcPlt 这两个指令是在 pallet.lib 库里面

    封装定义的)。

    圆形码垛一定先以圆形码盘建立一个圆形用户坐标系(六点法),因此圆形码盘圆心的位置为{x=0,y=0,z=0,c=0}

    1.18伺服管理指令指令符号 指令说明

    MotOn 伺服所有轴打开使能MotOff 伺服所有轴关闭使能

    DragMode AR 程序中实现拖拽功能

    MotOn

    使用说明 伺服所有轴使能打开

    语法说明 MotOn()参数说明 无参数

    举例说明 MotOn() --所有轴使能打开

    MotOff

    使用说明 伺服所有轴使能关闭

    语法说明 MotOff()参数说明 无参数

    举例说明 MotOff() --所有轴使能关闭

  • AR 语言指令手册

    53

    DragMode

    使用说明 AR 程序实现拖拽工能语法说明 DragMode()参数说明 无参数

    举例说明 MovP(p1)MotOff() --先断开断使能DragMode() --再切换到拖拽模式

    注:AR 程序中实现自动模式下拖拽模式的切换,一定要在断使能的情况下使用。

    1.19通信指令指令符号 指令说明

    RecCom 从 RS232 串口接收数据SendCom 往 RS232 串口发送数据ClrCom 清除 RS232 串口接收缓冲区sysnetclr 清除网络数据sysnetget 查询方式读取网络数据sysnetsend 发送网络数据sysnetcatch 阻塞式读取网络数据CloseNet 关闭 TCP 网络连接OpenNet 创建 TCP 网络

    ConnectNet 连接TCP网络RecvNet 网络接收数据功能函数WriteNet 网络发送数据功能函数publicread 读取全局表数据值publicwrite 写入数据值到全局表

    RecCom

    使用说明 无协议 RS232 串口通讯接收数据语法说明 Err,RecBuf=RecCom(A, "Time=B")参数说明 指令参数说明

    A 通信端口号 1B 接收数据超时时间,单位为毫秒

    返回值

    RecBuf 接收数据缓冲区

    Err0 表示接收成功

    非 0 表示接收超时举例说明 local RecBuf --定义接收缓冲区

    local Err --定义接收错误号Err,RecBuf = RecCom(1,"Time=5000") --串口 1 接收数据,接收超时时间

  • AR 语言指令手册

    54

    为 5 秒print(RecBuf.buff) --RecBuf 缓冲区中接收到上位机发送的数据

    end注:通过 RecCom 指令接收到的数据存储在缓冲区 RecBuf 的 buff 变量中;调用方法为:RecBuf.buff

    SendCom

    使用说明 无协议 RS232 串口通讯发送数据语法说明 SendCom(A, “B”)参数说明 指令参数说明

    A 通信端口号 1

    B发送的数据,可以是ASCII码类型,也可以使TABLE十六进制类型数据,指令自动判断参数类型进行发送

    举例说明 1. local SendBuf={0x01,0x05,0x00,0x1A,0xff,0x00}SendCom(1,SendBuf) --串口 1 以十六进制方式发送数据

    2. SendCom(1, “ROBOT”) --发送字符串3. pos =getcart()

    SendCom(1,string.format(“%f,%f,%f,%f;”,pos.x,pos.y.pos.z,pos.c)) --将数值变量 pos.x,pos.y,pos.z,pos.c 以字符串的形式发送SendCom(1, “abc,123,34,56”) --发送字符串

    ClrCom

    使用说明 无协议 RS232 串口通讯清除接收数据缓冲区语法说明 ClrCom(A)参数说明 A 通信端口号 1举例说明 ClrCom(1) --清除端口号 1 中串口数据

    Err,RecBuf = RecCom(1,"Time=5000") --清除串口 1 接收缓冲区后再接收

    注:串口通讯端口号只能为 1,且示教器里的 7号参数要设置成“无协议”。

    sysnetclr

    使用说明 清除网络数据

    语法说明 sysnetclr(ipaton{“A”},B)参数说明 返回值 无返回值

    指令参数说明

    A 网络通讯 IP 地址B 网络通讯端口号

    举例说明 local CameraNet={ipaton("192.168.0.100"),8080} -- IP:192.168.0.100;端口号 8080sysnetclr(CameraNet) --清除网络数据

  • AR 语言指令手册

    55

    sysnetget

    使用说明 查询方式读取网路数据

    语法说明 Err,RecBuf = sysnetget({ipaton("A"),B})参数说明 指令参数说明

    A 网络通讯 IP 地址B 网络通讯端口号

    返回值

    Err接收错误号

    0 表示接收成功非 0 表示接收失败

    RecBuf 接收数据缓冲区举例说明 local CameraNet={ipaton("192.168.0.100"),2000} -- IP:192.168.0.100;

    端口号 2000local Errlocal RecBufErr,RecBuf =sysnetget(CameraNet) --扫描式接收数据

    注:通过 sysnetget指令接收到的数据存储在缓冲区 RecBuf 的 buff变�