脚本编程手册
文档版本:V3.3.2
App版本号:V3.3.6
控制器版本号:V3.4.0_alpha3
协作机器人的定义遵循国际ISO标准及国标相关规定来保护作业者的安全,我们不推荐直接将机器人本体应用于作业对象为人体的场合。但机器人应用者或应用开发者确有需要涉及机器人作业对象为人体的场合时,需要在应用者或应用开发者充分评估在人员安全得到保障的前提下,为机器人本体配置安全可靠、经过充分测试及认证的安全防护系统,以保护人员安全。
此App使用手册所包含的内容是上海节卡机器人股份有限公司(后文统称为节卡)的专有财产,未经节卡的书面同意,不得以任何形式使用其内容。
节卡会定期对App使用手册进行修正和完善,其内容可能会更改,恕不另行通知。使用本手册前请认真核对实际产品信息。
App使用手册所包含的信息不是节卡的承诺,节卡对本手册中可能出现的任何错误以及对使用本手册及其所介绍产品而引起的意外或间接伤害概不负责。安装、使用产品前,请仔细阅读本手册。
本手册图片仅供参考,请以实物为准。
若机器人本体出现被改造或者拆卸的情况,节卡不负责售后工作。
节卡提醒用户在使用、维修JAKA机器人时必须使用安全设备,必须遵守安全条款。
节卡机器人的程序设计者、机器人系统的设计和调试者,必须熟悉JAKA机器人的编程方式和系统应用安装。
手册使用说明
本手册主要包含JAKA Zu App的脚本编程介绍与使用等部分。
本手册面向的用户应接受过基本的机器人使用培训,这将更加有助于JAKA Zu软件脚本编程使用。
更多信息
如果您还想了解更多的产品信息,请扫描右侧二维码访问我们的官网www.jaka.com。
JAKA编程脚本简介
JAKA编程脚本是控制节卡机器人的专用编程语言。用户可以根据JAKA编程脚本所规定的语法进行编程来控制机器人。
JAKA编程脚本基础
JAKA基础语法
标识符
在JAKA编程脚本中,标识符区分大小写,and 是一个保留字,但And和AND是两个不同的有效的名称。按照惯例,程序应当避免创建以下划线后跟一个或多个大写字母开头的名称(例如:_VERSION)。
另外命名需要满足以下规则:
·只能使用英文字母、数字和下划线
·第一个字符不能是数字
·不能将关键字用作标识符
·最长支持255个字符,建议不超过30个字符,1个汉字按3个字符计算
示例:
# legal
\_var1 = 1
var2 = 1
VAR3 = 1
\_2KDDinKAEld74Zl8WzKP = 1
# illegal
4VAR = 1
if = 1
预留关键字
下表展示了在JAKA机器人编程脚本中的保留字。这些保留字不能用作常数或变量,或任何其他标识符名称。
and |
break |
do |
|---|---|---|
else |
elif |
end |
false |
for |
function |
goto |
if |
in |
local |
nil |
not |
or |
repeat |
return |
then |
true |
until |
while |
脚本注释
JAKA机器人编程脚本支持单行注释,不支持多行注释。单行注释采用 # 开头,从#开始至该行末尾的所有字符串作为注释内容。
示例:
# the first comment
str = “Hello, World!” #the second comment
语句
JAKA机器人编程脚本支持多个语句或表达式使用分号分隔,写在同一行,解析器会根据优先级自左向右顺序执行。不支持一行语句拆分到多行书写。
基本类型
JAKA机器人编程脚本提供标量、字符串与数组三种基本类型数据支持。在数组的基础上,用户可以使用预定义的系统变量。
标量
JAKA 机器人编程脚本不区分布尔类型、整形与浮点型数据。对布尔类型,false对应0,true对应1。
示例:
var = 1
# or
var = 1.0
# or
var = (expr1 > expr2)
字符串
用户定义字符串时需要使用英文双引号(“”)进行包裹。目前JAKA Script支持的转义字符如下表,用户在定义字符串时需要注意,否则会造成解析错误。
转义字符 |
描述 |
|---|---|
|
反斜杠符号 |
|
单引号 |
|
双引号 |
|
换行 |
|
横向制表符 |
|
回车 |
示例:
string = “this is a \\“string\””
string = “This is a string \\n”
数组
数组是存放一组数据的容器。目前数组中的内容可以是标量、字符串,也可以是另一个数组。
·数组定义
语法形式:
arr = [...] #定义一个数组
arr = [] #定义一个空数组
arr_num = [1,2,3,4] # 标量数组
arr_str = [“aa”, “bb”, “cc”] #字符串数组
arr_arr = [[1,2,3],[4,5,6],[7,8,9]] #嵌套数组
#结果
# arr_num[0] : 1
# arr_str[1] : bb
# arr_arr[2][2]: 9
·单元素的索引访问
假设数组变量array的长度为N,对于单个元素的访问,支持以下形式:
array[index],其中index范围支持 [0, N-1]。
当index取值不在支持范围内,获取到的值为默认的空值nil。
示例:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
b = a[0] # b = a[0]
Index = 1
b = a[Index] # b = a[1]
b = a[100] # b=nil
·数组的子区间访问
提供脚本函数 subarr = slice(arr, start, end, step) 用于数组的切片访问。
示例:
arr = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
#使用切片语法
#a5 = arr[5]
slice1 = arr[1:5:2] #获取索引 2 到 5 的元素 (不包括 5)
log_message(1,slice1) #
slice2 = slice(arr, 1,5,2)
log_message(1,slice2) # 输出:20,40
slice3 = slice(arr, 1,8,2)
log_message(1,slice3) # 输出:20,40,60,80
slice4 = slice(arr, 1,5)
log_message(1,slice4) # 输出:20,30,40,50
slice5 = slice(arr, 1,100)
log_message(1,slice5) # 输出:20,30,40,50,60,70,80,90
# 输出日志
2026/02/28 17:18:17:793 # 1 # 0 # 20,40
2026/02/28 17:18:17:800 # 1 # 0 # 20,40
2026/02/28 17:18:17:809 # 1 # 0 # 20,40,60,80
2026/02/28 17:18:17:818 # 1 # 0 # 20,30,40,50
2026/02/28 17:18:17:824 # 1 # 0 # 20,30,40,50,60,70,80,90
支持访问指定数组区间内按指定间隔选取的子序列,并以数组形式返回。访问格式为 array[num_start: num_end: num_step]。
参数 num_start、num_end、num_step 必须为整型常数字面量,暂不支持使用变量作为参数。当 num_step 为0时,程序报错并终止执行;其他情况下,即使参数超出数组边界,也不会报错,只返回数组有效范围内满足条件的值;如不存在则返回空数组。
示例:
a = [1,2,3,4,5,6,7,8,9,0]
b = a[0:5:1] #[1, 2, 3, 4, 5]
# illegal
Start = 0
End = 5
Step = 1
B = a[Start: End: Step] # num_start、num_end、num_step,必须为整形常数字面量,暂不支持使用变量作为参数
·数组与位姿表示
在JAKA机器人编程脚本中,采用6元素数组表示机器人关节位置或空间位姿。关节位置数组的各元素为 [joint1, joint2, joint3, joint4, joint5, joint6],分别表示各关节相对于零位的角度值,单位为°。空间位姿的各元素为 [Tx, Ty, Tz, Rx, Ry, Rz],其中Tx、Ty、Tz和Rx、Ry、Rz分别为机器人末端TCP(Tool Center Point)相对于机器人坐标系的平移距离和旋转角度,单位分别为mm和°。
示例:
endPosJ = [90, 90, 90, 90, 90, 90] #关节空间位置数组
endPosL = [663.5, 8.159996, 6.950005, 90, 0, 0] #笛卡尔空间位置数组
·数组赋值
两个数组的赋值是引用传递,而不是拷贝。例如:
a = [1, 2, 3, 4] # 定义并初始化数组 a,内容为 [1,2,3,4]
b = [] # 定义一个空数组 b(此步骤实际上没有意义,因为下一行会覆盖)
b = a # b 和 a 现在引用同一个数组
b[1] = 11 # 修改 b[1],实际上修改的是 a 和 b 共同引用的那个数组
# a[1] = b[1] = 11,因为 a 和 b 指向同一个数组
若需要实现拷贝赋值,可使用内部指令 table.move(a1, s, e, t, a2)。该指令将数组a1中从 a1[s] 到 a1[e] 的元素,复制到数组a2中从 a2[t] 开始的位置。目标范围可以与源范围重叠,待移动的元素数量必须在数组索引可表示的范围内。
示例:
a = [1, 2, 3, 4] # 定义并初始化数组 a,内容为 [1,2,3,4]
b = [] # 定义一个空数组 b
table.move(a,0,get_length(a),0,b) # 将数组a 的所有元素 拷贝给 数组b ;b = [1,2,3,4]
b[1] = 66 # 修改b[1]为66
# b[1] = 66; a[1] = 1
全局变量
在作业程序中定义的变量(程序变量)在程序执行结束之后将被释放。对于希望值能够持久保存的变量,JAKA编程脚本提供全局变量机制。全局变量分为持久化全局变量和非持久化全局变量。
持久化全局变量需通过APP预先定义,设置别名并自动随机分配ID(ID为大于等于0小于2147483647的整数),定义好后,可在脚本程序中直接通过ID访问.访问方式为: SYSVAR[ID]。
非持久化全局变量的定义与程序变量相同,区别在于非持久化全局变量在定义后可以在主线程调用的其他程序或子线程中使用,但是程序停止后会被释放,不会保存到文件中。
全局变量值的类型支持标量、字符串和数组,数组元素值的类型同样支持标量、字符串和数组。
数组类型的全局变量支持区间访问,访问方式与数组子区间访问相同。
示例:
SYSVAR[5500] = 100
a = SYSVAR[5500]
SYSVAR[234512] = “this is string”
b = SYSVAR[234512]
SYSVAR[34321] = [1,2,3,4,5,6,7,8,9,10,11,12]
c = SYSVAR[34321][1] # c=2
SYSVAR[34321][0]=”str” # SYSVAR[34321] = [“str”,2,3,4,5,6,7,8,9,10,11,12]
SYSVAR[34321][11]=[11,22,33] # SYSVAR[34321] = [“str”,2,3,4,5,6,7,8,9,10,11,[11,22,33]]
arr = SYSVAR[34321][1:5:1] # arr = [2,3,4,5]
注:
全局变量暂不支持负索引。
全局变量的ID索引值大于等于0,小于2147483647.
解析器在执行全局变量的赋值和读取时,都会先进行指令同步操作,即指令队列中的指令都执行完,队列清空后才执行全局变量的赋值和读取(原因:全局变量会被用在多线程间交互数据,操作全局变量前进行同步可避免执行逻辑的混乱)。潜在影响:若全局变量操作指令前后存在运动指令,则前后两条运动指令之间的转接会被打断。
表达式
算术运算符
算术运算符用来进行四则运算,按照运算符优先级将其分组,(、/、%、*)的优先级高于(+、-)。优先级高的运算符比优先级低的运算符结合得更加紧密,下表的运算符满足左结合律,即当运算符优先级相同时按照从左向右的顺序进行。
算术运算符 |
||
|---|---|---|
运算符 |
功能 |
用法 |
* |
乘法 |
expr * expr |
/ |
除法 |
expr / expr |
% |
求余 |
expr % expr |
** |
求幂 |
expr ** expr |
+ |
加法 |
+expr |
- |
减法 |
-expr |
逻辑与关系运算符
关系运算符作用于算术类型,逻辑运算符作用于任意能转换成布尔值的类型。逻辑运算符和关系运算符的返回值类型都是布尔类型。
逻辑运算符和关系运算符 |
||||
|---|---|---|---|---|
结合律 |
运算符 |
功能 |
用法 |
支持的输入数据类型 |
右 |
! |
逻辑非 |
!expr |
整型、布尔型 |
左 |
&& |
逻辑与 |
expr && expr |
整型、布尔型 |
左 |
|| |
逻辑或 |
expr || expr |
整型、布尔型 |
左 |
< |
小于 |
expr < expr |
整型、字符串 |
左 |
> |
大于 |
expr > expr |
整型、字符串 |
左 |
== |
等于 |
expr == expr |
整型、字符串 |
左 |
!= |
不等于 |
expr != expr |
整型、字符串 |
左 |
<= |
小于等于 |
expr <= expr |
整型、字符串 |
左 |
>= |
大于等于 |
expr >= expr |
整型、字符串 |
位运算符
位运算符作用于整数类型的运算对象,并把运算对象看作是二进制位的集合,目前仅支持异或操作。
位运算符(左结合律) |
||
|---|---|---|
运算符 |
功能 |
用法 |
^ |
异或 |
expr1 ^ expr2 |
语句
通常情况下,语句是顺序执行的。但这仅适用于最简单的程序,因此JAKA编程脚本提供了一组控制流语句以支持更复杂的执行控制。
简单语句
JAKA机器人编程脚本中,要求语句单独成行,且大多数语句无需结束符。简单语句包括表达式语句、函数调用语句等。
条件语句
·if…end语句
if语句的作用是:判断一个指定的条件是否为真,根据判断结果决定是否执行另外一条语句。if语句包括两种形式,一种含有else分支,另一种没有。
语法形式如下:
if(condition):
statement
end
示例:
condition = get_digital_output(0, 1)
if(condition):
endPosJ = [0, 0, 0, 0, 0, 0]
movj(endPosJ, 0, 60, 200, 0)
end
·if…else…end语句
语法形式如下:
if(condition):
statement
else:
statement
end
示例:
condition = get_digital_output(0, 1)
if(condition):
endPosJ = [0, 0, 0, 0, 0, 0]
movj(endPosJ, 0, 60, 200, 0)
else:
endPosL = [663.5, 8.159996, 6.950, 90, 0, 0]
movl(endPosL, 0, 250, 250, 0)
end
·if…elif…else…end语句
语法形式如下:
if(condition1):
statement
elif(condition2):
statement
else:
statement
end
示例:
condition1 = get_digital_output(0,1)
condition2 = get_digital_output(0,2)
if(condition1):
endPosJ = [0,0,0,0,0,0]
movj(endPosJ,0,60,200,0)
elif(condition2):
endPosL =[663.5,8.159996,6.950,90,0,0]
movl(endPosL,0,250,250,0)
else:
endPosL =[663.5,8.159996,6.950,90,0,0]
movl(endPosL,0,1000,250,0)
end
循环语句
·while循环语句
只要条件为真,while语句就会重复地执行循环体。
语法形式如下:
while(condition):
statement
end
在while结构中,只要condition的求值结果为真,就会一直执行statement(通常是一个语法块),condition不能为空。如果condition第一次求值就是false,statement一次都不执行。
示例:
i = 0
while(i <= 4):
endPosJ1 = [0, 90, 90, 90, -90, 0]
movj(endPosJ1, 0, 10, 600, 0)
endPosJ2 = [90, 90, 90, 90, -90, 0]
movj(endPosJ2, 0, 10, 600, 0)
i = (i+1)
end
跳转语句
跳转语句可以中断当前while语句的执行过程,JAKA编程脚本提供了两种跳转语句,break和continue。
·break语句
break语句负责终止离它最近的while语句,并从这些语句之后的第一条语句开始继续执行。break的作用范围仅限于最近的while循环。
示例:
statement是语句块,condition1和condition2是判断条件。
while(condition1):
statement
...
if(condition2):
break
end
...
statement
end
·continue语句
continue语句终止最近循环中的当前迭代并立即开始下一次迭代。continue语句只能出现在while循环体的内部。和break类似,continue的作用范围仅限于最近的while循环。continue中断当前的迭代,但会继续执行当前的循环,对于while语句来说即继续判断条件的值。
示例:
statement是语句块,condition1和condition2是判断条件。
while(condition1):
statement
...
if(condition2):
continue
end
...
statement
end
多线程
最新的控制器软件支持多线程功能,用户可以在非主线程中使用特定的非运动相关类指令。
线程的创建
用户使用多线程时,需要通过子程序文件的方式定义线程的执行体,即线程执行体被单独保存在以jks为后缀的脚本文件中。线程创建时需指定线程执行体子程序文件的绝对路径,线程创建后将自动开始执行。JAKA控制器支持子线程数量为5个。
线程创建时需要同步写入线程名称,线程的名称用于对子线程资源的管理,如线程的销毁、同步、暂停等操作。
示例:
/path/to/thread/file.jks为子线程对应脚本文件的绝对路径,thread_name为标识该线程的唯一字符串。
thread_create(“/path/to/thread/file.jks”, “thread_name”)
注: 子线程中默认使用主线程环境下的函数定义。如果子线程执行独立作业工程文件对应的JKS文件,且该文件定义了独立函数,执行时会报“函数未定义”错误。
线程的操作
JAKA脚本编程语言支持线程等待(join)与线程销毁操作,支持线程分离(detach)。主线程结束后所有的子线程均将被终止,所使用的资源也将会被回收。线程的相关操作仅支持在主线程中调用,在子线程中调用无效;线程操作中必须保证是有效的线程名称,线程操作指令传入的线程名称若无效,指令执行时解析器找不到对应线程的名称,默认认为对应名称的线程已经执行结束或关闭。
运动相关类、部分设置类(如:负载设置,坐标系设置)指令只能在主线程中使用,在子线程中这些指令将会被跳过,不会被执行。
示例:
thread_name为线程名称
线程同步:thread_join (“thread_name”)
线程销毁:thread_destroy (“thread_name”)
此外,子线程与主线程可以调用程序暂停指令,暂停指令执行后,程序中所有的线程都将进入暂停状态;程序恢复则所有线程都恢复,继续运行。
线程的调度
用户在作业程序中创建的所有子线程保持相同的优先级,且不支持修改。在控制指令周期内仅允许一个线程拥有底层控制接口调用权,各线程之间需要通过竞争实现。在竞争的过程中,线程其他的任务也将被阻塞运行。
线程的互斥
多个线程同时访问共享数据或资源(如系统变量)时可能会冲突,JAKA机器人编程脚本提供进入和退出临界区的操作接口以解决资源冲突。在多个线程同时准备进入该临界区域时,只有一个线程能获得该临界区域的操作权限,其他所有的线程将处于等待状态,直到线程退出临界区域。由于进入临界区域相当于独占运行权限,为保证其他线程能够正常运行,要求在进入与退出临界区域期间执行的指令尽量简短。
示例:
thread_enter_critical()
# do some stuff
thread_exit_critical()
函数
从JAKA控制器软件版本V3.3.3起,支持用户定义函数并调用。JAKA脚本中函数定义如下:
function functionName(parameters):
# 函数体
return result
end
示例如下:
function greet(name):
log_message(1, string_concat("Hello, ", name))
end
greet("Jack") #日志输出Hello, Jack
函数支持多个返回值,如下所示。
function calculate(x, y):
return x + y, x - y, x \* y, x / y
end
ret1, ret2, ret3, ret4 = calculate(4,2) #结果依次为: 6,2,8,2
此外,允许用户将要要用的函数名以字符串参数传入,以实现函数的动态调用。在此基础上,支持函数参数的传入。脚本指令的函数原型如下:
函数原型 |
参数说明 |
|---|---|
succ, <...> = call_function( func_name, <...>) |
输入func_name: 期望调用的函数名字符串变量;不声称支持多语言; 输入<...>:拟调用的函数的输入参数; 返回值succ: 为函数执行是否成功,1为成功, 0为失败。当函数不存在、函数参数错误等情况下,该均返回0而不终止程序执行。 返回值<...>: 如果succ为0,则返回值为错误信息字符串;如果succ为1,则返回值为所调用函数的返回值。 |
示例如下:
function greet(name):
log_message(1, string_concat("Hello, ", name))
end
succ = call_function("great", "Jack") #输出日志 Hello, Jack
注:
当使用JAKA图形化编程软件时,函数的定义存储于工程下独立的函数定义文件中,函数定义可以供该工程下的主线程、子线程所调用;
当涉及到跨文件的程序调用(execute_script)或子线程执行(thread_create)时,会后台隐式加载所执行工程下的函数定义,而不是其所在路径下的函数工程定义。
JAKA脚本预置函数
运动相关指令
基本运动
movel
指令原型:
movl(var_pos, rel_flag, vel, acc, tol) # 5个参数
movl(var_pos, rel_flag, vel, acc, tol, end_cond) # 6个参数
movl(var_pos, rel_flag, vel, acc, tol, end_cond,ori_vel) # 7个参数
movl(var_pos, rel_flag, vel, acc, tol, end_cond, ori_vel, ori_acc) # 8个参数
movl(var_pos, rel_flag, vel, acc, tol, end_cond, ori_vel, ori_acc, planner_type) # 9个参数
movl(var_pos, rel_flag, vel, acc, tol, end_cond, ori_vel, ori_acc, planner_type, robot_id) # 10个参数
指令说明:
用于控制机器人执行笛卡尔空间直线运动。
参数介绍:
var_pos |
六元素数组变量,用于指定笛卡尔空间目标位置,需提前定义。 |
|---|---|
rel_flag |
指定该段运动是相对运动还是绝对运动。 ·0为绝对运动,此时var_pos给定值将被解释为笛卡尔空间某绝对位置; ·1为相对当前用户坐标系的增量运动,此时var_pos给定值将被解释为笛卡尔空间位置增量; ·2为相对当前工具坐标系的增量运动。 |
vel |
运动速度,单位mm/s。 |
acc |
直线加速度,单位mm/ s^2。 |
tol |
到达指定终点的容许偏差。 若为0,则将准确到达目标点; 若为正值,则位置可能会与后续段混合,不能准确到达目标点。 |
end_cond |
该段指令停止条件,可选参数为一个包括3个参数的数组,包括: di_type:IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
di_index: IO 地址。 di_state: IO 满足条件的状态0/1。 |
ori_vel |
姿态速度,是可选参数,单位deg/s。 不输入该参数的话,机器人将采用最大姿态速度运行。 |
ori_acc |
姿态加速度,是可选参数,单位deg/s^2。 不输入该参数的话,机器人将采用最大姿态加速度运动。 |
planner_type |
速度规划类型,是可选参数,根据不同的场景灵活选择。 0: 采用节拍优先的速度规划方式; 1: 采用柔顺优先的速度规划方式。 |
robot_id |
机器人ID,用于双机械臂臂或多机械臂运动控制。 0:(default) 控制器机型文件中id为0 的机械臂。 1:控制器机型文件中id为1的机械臂。 |
返回值:无
示例:
#Zu15机型
endPosJ = [0,0,0,0,0,0]
endPosL = [0,0,0,0,0,0]
pos_mvl = [0,0,0,0,0,0]
pos_waypoint = [0,0,0,0,0,0]
set_tool_id(0)
set_user_frame_id(0)
endCon_UVOTzWMDQPCvnYNDMZ78 = [-1, -1, -1]
endPosJ = [13.187 ,80.642 ,97.289 ,91.046 ,-88.980 ,-5.741]
movj(endPosJ, 0, 60, 200, 0, endCon_UVOTzWMDQPCvnYNDMZ78,1)
endCon_Hj5Vu0vPxcRWewys6tA6 = [-1, -1, -1]
endPosJ = [13.187 ,92.258 ,129.041 ,47.678 ,-88.980 ,-5.741]
endPosL = [-615.884 ,20.989 ,365.746 ,-178.880 ,0.912 ,108.946]
movl(endPosL, 0, 60, 200, 0) #5 个参数
endCon_P0z9CPUaM6VViMjrX8mf = [-1, -1, -1]
endPosJ = [39.212 ,97.420 ,123.280 ,47.933 ,-89.532 ,20.280]
endPosL = [-615.884 ,-293.012 ,365.746 ,-178.880 ,0.912 ,108.946]
movl(endPosL, 0, 250, 250, 0, endCon_P0z9CPUaM6VViMjrX8mf) #6 个参数
endCon_XEQqXa4nuSqkFUu3nwAX = [-1, -1, -1]
endPosJ = [39.212 ,87.254 ,80.052 ,101.327 ,-89.532 ,20.280]
endPosL = [-615.884 ,-293.012 ,867.746 ,-178.880 ,0.912 ,108.946]
movl(endPosL, 0, 60, 200, 0, endCon_XEQqXa4nuSqkFUu3nwAX,180) #7 个参数
endCon_bzy9YphvZS3it4mu6Ck3 = [-1, -1, -1]
endPosJ = [-30.905 ,100.209 ,65.705 ,104.061 ,-88.556 ,-49.841]
endPosL = [-615.884 ,554.989 ,867.746 ,-178.880 ,0.912 ,108.946]
movl(endPosL, 0, 250, 250, 0, endCon_bzy9YphvZS3it4mu6Ck3,180,360) #8 个参数
endCon_n0BaqEHl2zaXDidMteQp = [-1, -1, -1]
endPosJ = [-30.905 ,99.882 ,92.474 ,77.619 ,-88.556 ,-49.841]
endPosL = [-615.884 ,554.989 ,607.746 ,-178.880 ,0.912 ,108.946]
movl(endPosL, 0, 60, 200, 0, endCon_n0BaqEHl2zaXDidMteQp,180,360,1) #9 个参数
endCon_kSap6DB6Kb5jXbv27vow = [-1, -1, -1]
endPosJ = [-13.013 ,104.031 ,87.355 ,78.146 ,-88.633 ,-31.944]
endPosL = [-807.884 ,350.988 ,607.746 ,-178.880 ,0.912 ,108.946]
movl(endPosL, 0, 250, 250, 0, endCon_kSap6DB6Kb5jXbv27vow,180,360,1,0) #10 个参数
movej
指令原型:
movj(var_pos, rel_flag, vel, acc, tol) # 5个参数
movj(var_pos, rel_flag, vel, acc, tol, end_cond) # 6个参数
movj(var_pos, rel_flag, vel, acc, tol, end_cond, planner_type) # 7个参数
movj(var_pos, rel_flag, vel, acc, tol, end_cond, planner_type,robot_id) # 8个参数
指令说明:
用于控制机器人执行关节空间运动。
参数介绍:
var_pos |
六元素数组变量,用于指定关节空间目标位置,需提前定义。 |
|---|---|
rel_flag |
指定该段运动是相对运动还是绝对运动。 ·0为绝对运动,此时var_pos给定值将被解释为关节空间某绝对位置; ·1为相对运动,此时var_pos给定值将被解释为关节空间位置增量。 |
vel |
各关节指令速度,单位deg/s。 实际运动时,将受各关节实际最大速度约束。 |
acc |
直线加速度,单位: deg/ s^2。 |
tol |
到达指定终点的容许偏差。 若为0,则将准确到达目标点; 若为正值,则可能会与后续段混合,不能准确到达目标点。 |
end_cond |
该段指令停止条件,可选参数为一个包括3个参数的数组,包括: di_type:IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
di_index: IO 地址。 di_state: IO 满足条件的状态0/1。 |
planner_type |
速度规划类型,是可选参数,根据不同的场景灵活选择。 0: 采用节拍优先的速度规划方式; 1: 采用柔顺优先的速度规划方式。 |
robot_id |
机器人ID,用于双机械臂臂或多机械臂运动控制。 0:(default) 控制器机型文件中id为0 的机械臂。 1:控制器机型文件中id为1的机械臂。 |
返回值:无
示例:
#Zu15机型
endPosJ = [0,0,0,0,0,0]
endPosL = [0,0,0,0,0,0]
pos_mvl = [0,0,0,0,0,0]
pos_waypoint = [0,0,0,0,0,0]
set_tool_id(0)
set_user_frame_id(0)
endPosJ = [13.187 ,80.642 ,97.289 ,91.046 ,-88.980 ,-5.741]
movj(endPosJ, 0, 60, 200, 0) #5 个参数
endCon_Hj5Vu0vPxcRWewys6tA6 = [-1, -1, -1]
endPosJ = [44.483 ,80.642 ,97.289 ,91.046 ,-88.980 ,-5.741]
movj(endPosJ, 0, 60, 200, 0, endCon_Hj5Vu0vPxcRWewys6tA6) #6 个参数
endCon_P0z9CPUaM6VViMjrX8mf = [-1, -1, -1]
endPosJ = [13.187 ,80.642 ,97.289 ,91.046 ,-88.980 ,-5.741]
movj(endPosJ, 0, 60, 200, 0, endCon_P0z9CPUaM6VViMjrX8mf,1) #7 个参数
endCon_XEQqXa4nuSqkFUu3nwAX = [-1, -1, -1]
endPosJ = [44.483 ,80.642 ,97.289 ,91.046 ,-88.980 ,-5.741]
movj(endPosJ, 0, 60, 200, 0, endCon_XEQqXa4nuSqkFUu3nwAX,1,0) #8 个参数
movec
指令原型:
movc(var_pos_mid, var_pos_end, rel_flag, vel, acc, tol, turn_cnt) #7个参数
movc(var_pos_mid, var_pos_end, rel_flag, vel, acc, tol, turn_cnt, end_cond) # 8个参数
movc(var_pos_mid, var_pos_end, rel_flag, vel, acc, tol, turn_cnt, end_cond, movc_mode) # 9个参数
movc(var_pos_mid, var_pos_end, rel_flag, vel, acc, tol, turn_cnt, end_cond, movc_mode, planner_type)
movc(var_pos_mid, var_pos_end, rel_flag, vel, acc, tol, turn_cnt, end_cond, movc_mode, planner_type, robot_id)
指令说明:
用于控制机器人执行笛卡尔空间圆弧运动。
参数介绍:
var_pos_mid |
六元素数组变量,用于指定空间圆弧的中间经过点,需提前定义。 |
|---|---|
var_pos_end |
六元素数组变量,用于指定空间圆弧的停止点,需提前定义。 |
rel_flag |
指定该段运动是相对运动还是绝对运动,目前仅支持绝对运动。 ·0为绝对运动,此时var_pos给定值将被解释为笛卡尔空间某绝对位置。 |
vel |
各关节指令速度,单位deg/s。 实际运动时,将受各关节实际最大速度约束。 |
acc |
用于指定运动的加速度,单位mm/s^2。 |
tol |
到达指定终点的容许偏差。 若为0,则将准确到达目标点; 若为正值,则可能会与后续段混合,不能准确到达目标点。 |
turn_cnt |
用户指定圆弧运动圈数(非负实数)。 当圈数为0时,则按三点确定圆弧运动; 如果圈数为非0,则按三点确定的圆弧运动指定圈数,姿态保持初始点姿态与转轴的夹角相同。 |
end_cond |
该段指令停止条件,可选参数为一个包括3个参数的数组,包括: di_type:IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
di_index: IO 地址。 di_state: IO 满足条件的状态0/1。 |
movc_mode |
指定姿态在圆弧运动中的模式,为可选参数,当turn_cnt为0时生效。 ·0为最小姿态变化模式,机器人的姿态将绕起始-终止姿态转轴以最小角度变化方向运动; ·1为较大姿态变化模式,机器人的姿态将绕起始-终止姿态转轴较大角度变化方向(即最小角度变化方向的反方向)运动; ·2 为中间点姿态适配模式,机器人的姿态将根据中间点姿态自动选择最小姿态变换或较大姿态变化; ·3 为姿态夹角固定模式,机器人圆弧运动中的工具姿态与笛卡尔圆弧轴线-半径所构成坐标系的变换夹角固定。 |
planner_type |
单条运动指令速度规划类型,是可选参数,根据不同的场景灵活选择。 0: 采用节拍优先的速度规划方式; 1: 采用柔顺优先的速度规划方式。 |
robot_id |
机器人ID,用于双机械臂臂或多机械臂运动控制。 0:(default) 控制器机型文件中id为0 的机械臂。 1:控制器机型文件中id为1的机械臂。 |
返回值:无
示例:
#Zu15机型
endPosJ = [0,0,0,0,0,0]
endPosL = [0,0,0,0,0,0]
pos_mvl = [0,0,0,0,0,0]
pos_waypoint = [0,0,0,0,0,0]
set_tool_id(0)
set_user_frame_id(0)
endCon_UVOTzWMDQPCvnYNDMZ78 = [-1, -1, -1]
endPosJ = [37.399 ,62.195 ,113.698 ,94.107 ,-90.000 ,37.399]
movj(endPosJ, 0, 60, 200, 0, endCon_UVOTzWMDQPCvnYNDMZ78,1)
endCon_vx4cnIAdgBWueR0AUS2J = [-1, -1, -1]
passPos = [-600.000,100.000,700.000,-180.000,0.000,90.000]
endPos = [-800.000,-100.000,700.000,-180.000,0.000,90.000]
movc(passPos, endPos, 0, 250, 1200, 0, 1) #7个参数
endCon_5GIIkUcWwXQJ88GjuoeN = [-1, -1, -1]
endPosJ = [37.399 ,62.195 ,113.698 ,94.107 ,-90.000 ,37.399]
movj(endPosJ, 0, 60, 200, 0, endCon_5GIIkUcWwXQJ88GjuoeN,1)
endCon_wgO4L4bhhf9FaMELLH4P = [-1, -1, -1]
passPos = [-600.000,-300.000,700.000,180.000,0.000,90.000]
endPos = [-800.000,-100.000,700.000,180.000,0.000,90.000]
movc(passPos, endPos, 0, 250, 1200, 0, 1, endCon_wgO4L4bhhf9FaMELLH4P) #8个参数
endCon_wgn4JqmGzgnoR7czsXfw = [-1, -1, -1]
endPosJ = [37.399 ,62.195 ,113.698 ,94.107 ,-90.000 ,37.399]
movj(endPosJ, 0, 60, 200, 0, endCon_wgn4JqmGzgnoR7czsXfw,1)
endCon_48LioWCySzmj4freJNnS = [-1, -1, -1]
passPos = [-400.000,-300.000,500.000,180.000,0.000,90.000]
endPos = [-400.000,-100.000,300.000,180.000,0.000,90.000]
movc(passPos, endPos, 0, 250, 1200, 0, 1, endCon_48LioWCySzmj4freJNnS,0) #9个参数
endCon_a9ZrKEqwWmgcGFOJrasw = [-1, -1, -1]
endPosJ = [37.399 ,62.195 ,113.698 ,94.107 ,-90.000 ,37.399]
movj(endPosJ, 0, 60, 200, 0, endCon_a9ZrKEqwWmgcGFOJrasw,1)
endCon_GPiBONpvTms1as0TVpus = [-1, -1, -1]
passPos = [-400.000,100.000,500.000,180.000,0.000,90.000]
endPos = [-400.000,-100.000,300.000,180.000,0.000,90.000]
movc(passPos, endPos, 0, 250, 1200, 0, 1, endCon_GPiBONpvTms1as0TVpus,0,1) #10个参数
endCon_UVOTzWMDQPCvnYNDMZ78 = [-1, -1, -1]
endPosJ = [37.399 ,62.195 ,113.698 ,94.107 ,-90.000 ,37.399]
movj(endPosJ, 0, 60, 200, 0, endCon_UVOTzWMDQPCvnYNDMZ78,1)
endCon_vx4cnIAdgBWueR0AUS2J = [-1, -1, -1]
passPos = [-600.000,100.000,700.000,-180.000,0.000,90.000]
endPos = [-800.000,-100.000,700.000,-180.000,0.000,90.000]
movc(passPos, endPos, 0, 250, 1200, 0, 1, endCon_GPiBONpvTms1as0TVpus,0,1,0) #11个参数
move_ext
指令原型:
move_ext(ext_id,var_pos, rel_flag, vel, acc, tol,end_cond, planner_type)
指令说明:
用于设置外部轴运动指令 。
参数介绍:
ext_id |
int型,运动单元id。 |
|---|---|
var_pos |
数组,维数与外部轴的自由度相同,表示目标点位信息。也可传入目标点位ID(整数)。 |
rel_flag |
int型,指定该段运动是相对运动还是绝对运动。 ·0为绝对运动; ·1为相对运动; ·2为相对当前工具坐标系的增量运动。 |
vel |
指令速度: ·外部轴为直线轴时,单位mm/s; ·外部轴为旋转轴时,单位deg/s。 |
acc |
直线加速度: ·外部轴为直线轴时,单位mm/s^2; ·外部轴为旋转轴时,单位deg/ s^2。 |
tol |
到达指定终点的容许偏差。 若为0,则将准确到达目标点; 若为正值,则可能会与后续段混合,不能准确到达目标点。 |
end_cond |
该段指令停止条件,可选参数为一个包括3个参数的数组,包括: di_type:IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
di_index: IO 地址。 di_state: IO 满足条件的状态0/1。 |
planner_type |
速度规划类型,是可选参数,根据不同的场景灵活选择。 0: 采用节拍优先的速度规划方式; 1: 采用柔顺优先的速度规划方式。 |
返回值:
无
示例:
#外部轴运动示例
endCon_FSnDVILoIRCaoIsHCCcO = [-1, -1, -1]
end_ext_0 = [50]
move_ext(0, end_ext_0, 0, 80, 80, 0, endCon_FSnDVILoIRCaoIsHCCcO,0)
set_move_multi_info
指令原型:
set_move_multi_info(move_info_string, move_unit_type, motion_type, move_unit_id, motion_cmd_info)
指令说明:
用于设置协同运动时运动单元的运动段信息 。
参数介绍:
move_info_string |
字符串类型,表示命名运动段信息的标签,可命名但不限于: "movj_rob_0", "movj_ext_0", "movl_rob_0", "movc_rob_0"。 |
|---|---|
move_unit_type |
int型,表示运动单元类类型 : ·0为机器人; ·1为外部轴。 |
motion_type |
int型,表示运动段类型: ·0为关节运动; ·1为直线运动; ·2为圆弧运动; 当move_unit_type为1时,仅支持关节运动。 |
move_unit_id |
int型,表示运动单元在控制器中id。 |
motion_cmd_info |
运动段指令信息,根据参数“move_unit_type”以及参数“motion_type”的值确定传参个数和格式。 ·move_unit_type = 0,motion_type = 0,即,运动单元是机器人,运动段类型是关节运动时,依次传参:var_pos, rel_flag, vel, acc, tol,参数含义与movej中相同; ·move_unit_type = 0,motion_type = 1,即,运动单元是机器人,运动段类型是直线运动时,依次传参:var_pos, rel_flag, vel, acc, tol, ori_vel, ori_acc,参数含义与movel中相同; ·move_unit_type = 0,motion_type = 2,即,运动单元是机器人,运动段类型是圆弧运动时,依次传参:var_pos_mid, var_pos_end, rel_flag, vel, acc, tol, turn_cnt, movc_mode,参数含义与movec中相同; ·move_unit_type = 1,motion_type = 0,即,运动单元是外部轴,运动段类型是关节运动时,依次传参:var_pos, rel_flag, vel, acc, tol,var_pos是与维数外部轴自由度相同的数组,其他参数含义与movej中相同; |
返回值:
无
示例:
#机器人关节运动示例
endPosJ = [0.000 ,90.000 ,90.000 ,90.000 ,90.000 ,0.000]
set_move_multi_info( "movj_rob_0", 0, 0, 0, endPosJ, 0, 60, 200, 0)
#机器人直线运动示例
endPosL = [-356.145 ,-245.514 ,587.150 ,0.000 ,0.000 ,-40.000]
set_move_multi_info("movl_rob_0", 0, 1, 0, endPosL, 0, 60, 200, 0,180,720)
#机器人圆弧运动示例
passPos = [-356.145,-245.514,587.150,0.000,0.000,-40.000]
endPos = [-300.000,-240.000,587.150,0.000,0.000,-40.000]
set_move_multi_info("movc_rob_0", 0, 2, 0, passPos, endPos, 0, 60, 200, 0, 0,0)
#外部轴关节运动示例
end_ext_posJ_0 = [50]
set_move_multi_info("movj_ext_0", 1, 0, 0, end_ext_posJ_0, 0, 80, 80, 0)
move_multi
指令原型:
move_multi(var_move_seg_num, move_info_string1, move_info_string2,... ,end_cond, planner_type)
指令说明:
用于设置协同运动指令,与set_move_multi_info指令结合使用 。
参数介绍:
var_move_seg_num |
int型,标签总数,即协同运动包含多少个运动单元/运动段,不可大于10。 |
|---|---|
move_info_string1, move_info_string2,... |
即set_move_multi_info指令中的参数“move_info_string”,string型,运动段信息标签,个数对应var_move_seg_num。 |
end_cond |
该段指令停止条件,可选参数为一个包括3个参数的数组,包括: di_type:IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
di_index: IO 地址。 di_state: IO 满足条件的状态0/1。 |
planner_type |
速度规划类型,是可选参数,根据不同的场景灵活选择。 0: 采用节拍优先的速度规划方式; 1: 采用柔顺优先的速度规划方式。 |
返回值:无
示例:
#机器人与外部轴协同关节运动示例
endCon_ozAy4xNbJVWhp9r7qvnS = [-1, -1, -1]
endPosJ = [0.000 ,90.000 ,90.000 ,90.000 ,90.000 ,0.000]
set_move_multi_info( "movj_rob_0", 0, 0, 0, endPosJ, 0, 60, 200, 0)
end_ext_posJ_0 = [50]
set_move_multi_info("movj_ext_0", 1, 0, 0, end_ext_posJ_0, 0, 80, 80, 0)
move_multi(2, "movj_rob_0", "movj_ext_0", endCon_ozAy4xNbJVWhp9r7qvnS,0)
get_atl_joint_pose
指令原型:
atlJntPos = get_atl_joint_pose()
指令说明:
用于获取当前机器人实际关节位置。
返回值:
返回当前实际关节位置。
get_atl_tcp_pose
指令原型:
atlTcpPos = get_atl_tcp_pose()
指令说明:
用于获取当前机器人实际末端工具中心点位姿。
返回值:
返回当前实际工具末端中心点位姿。
get_atl_flange_pose
指令原型:
atlFlangePos = get_atl_flange_pose()
指令说明:
用于获取当前机器人末端法兰中心点位姿。
返回值:
返回当前实际末端法兰中心点位姿。
enable_speed_override
指令原型:
enable_speed_override(type, vel, acc)
enable_speed_override(type, vel, acc, ori_vel, ori_acc)
指令说明:
用于设置函数块的速度与加速度。
参数介绍:
type |
·0表示笛卡尔空间运动类型 ·1表示关节空间运动类型 ·2 表示外部直线轴 ·3 表示外部旋转轴 |
|---|---|
vel |
double类型数据,表示设置的覆盖速度。 |
acc |
double类型数据,表示设置的覆盖加速度。 |
ori_vel |
double类型数据,表示设置的覆盖的姿态速度。默认值:90.0 |
ori_acc |
double类型数据,表示设置的覆盖的姿态加速度。默认值:180.0 |
返回值:
无
disable_speed_override
指令原型:
disable_speed_override(type)
指令说明:
用于取消函数块的速度与加速度设置。
参数介绍:
type |
·0表示笛卡尔空间运动类型 ·1表示关节空间运动类型 |
返回值:
无
enable_planner_override
指令原型:
enable_planner_override(type)
指令说明:
用于设置全局速度规划器类型。
参数介绍:
type |
全局速度规划类型,根据不同的场景灵活选择。 0: 采用节拍优先的速度规划方式; 1: 采用柔顺优先的速度规划方式。 使用全局速度规划指令时,单条指令中的速度规划参数将会失效。 |
返回值:
无
disable_planner_override
指令原型:
disable_planner_override()
指令说明:
用于取消全局速度规划器类型的设置。
返回值:
无
vib_suppress_on
指令原型:
vib_suppress_on (var_freq)
指令说明:
用于开启抖动抑制,抖动抑制生效范围在该指令之后、vib_suppress_off之前的运动段。
参数介绍:
var_freq |
double型,抖动抑制频率。有效范围为 [2.5, 50.0] Hz,超出范围时自动限制到边界值。 |
返回值:
无
vib_suppress_off
指令原型:
vib_suppress_off ()
指令说明:
关闭抖动抑制 。
返回值:
无
movs
指令原型:
movs(coefs_a, coefs_b, coefs_c, coefs_d, coef_time)
movs(coefs_a, coefs_b, coefs_c, coefs_d, coef_time, smooth_space)
movs(coefs_a, coefs_b, coefs_c, coefs_d, coef_time, smooth_space, robot_id)
指令说明: 用于控制机器人执行多项式轨迹运动(按给定多项式系数规划各轴轨迹)。
参数介绍:
velcoefs_a/coefs_b/coefs_c/coefs_d |
多项式系数数组(6或7个元素,对应轴数),支持数组变量或系统变量。 |
coef_time |
运动时间,单位s。 |
smooth_space |
可选参数,空间类型:·0为关节空间 ·1为笛卡尔空间。 |
robot_id |
可选参数,机器人ID,默认为0。 |
返回值: 无
movs_vel_settings
指令原型:
movs_vel_settings(movs_syn_vel, movs_enable_jacc, robot_id)
指令说明:
用于设置movs运动的同步速度与加加速度限制。
参数介绍:
movs_syn_vel |
同步速度,须不小于0.001 |
movs_enable_jacc |
是否启用加加速度限制:·1为启用 ·0为不启用。 |
robot_id |
机器人ID。 |
返回值: 无
kine_inverse_ext
指令原型:
res = kine_inverse_ext (posJ, posP)
指令说明:
该指令用于计算运动学逆解(扩展版本),在kine_inverse基础上支持外部轴等扩展信息。
参数介绍:
posJ |
posJ为参考关节值,用于确定逆解多解的选取。 |
posP |
需要进行逆解的笛卡尔空间位姿。 |
返回值:
返回逆运动学计算结果。当逆解失败时,程序报错终止。
传送带跟踪
enable_conveyor_linear_track
指令原型:
enable_conveyor_linear_track(dir, mm_per_pulse, trigger, com_dis, max_dis)
指令说明:
用于使能直线传送带跟踪。
参数介绍:
dir |
跟踪方向数组,至少包含3个元素的方向向量。如[1,0,0]表示沿X+方向,[-1,0,0]表示X-方向,以此类推。 |
|---|---|
mm_per_pulse |
用于指定脉冲当量,即跟踪传送带上的编码器反馈每个脉冲对应传送带方向的位移,单位为mm。 |
trigger |
可选参数,为机器人运动起始点到开始跟踪传送带之间的距离。用于自定义机器人开始跟踪传送带的位置,范围为0~3000 mm。 |
com_dis |
用于补偿实际位置与示教位置之间的误差,范围为±100 mm。 |
max_dis |
可选参数,为机器人运动起始点到运动终点之间的距离。用于限制机器人跟踪距离,避免机器人超出传送带范围或达到奇异点,范围为1~3000 mm。 |
返回值:
无
enable_conveyor_circular_track
指令原型:
enable_conveyor_circular_track(convey_P1, convey_P2, convey_P3, rad_per_pulse, rotate_tool, com_dis, max_dis)
指令说明:
用于使能圆形传送带跟踪。
参数介绍:
convey_P1 convey_P2 convey_P3 |
表示世界坐标系下一点的位置向量,例如: convey_P1 = [P1x, P1y, P1z] convey_P2 = [P2x, P2y, P2z] convey_P3 = [P3x, P3y, P3z] convey_P1, convey_P2, convey_P3为传送带上共圆三点在世界坐标系下的位置坐标,在传送带转动方向依次选取,用于获取传送带圆心坐标系{O}在世界坐标系下的变换矩阵,可通过直接输入或示教得到。 |
|---|---|
rad_per_pulse |
用于指定脉冲当量,指跟踪传送带的编码器每反馈一个脉冲对应地在Oz轴正方向(右手定则)上旋转的角度,单位为°/cnt。 |
rotate_tool |
·0圆形传送带跟踪过程中末端姿态保持不变 ·1末端绕传送带轴线转动,姿态改变(App默认为1) |
com_dis |
用于补偿实际位置与示教位置之间的误差,范围为±20° 。 |
max_dis |
为机器人运动起始点到运动终点之间的距离。用于限制机器人跟踪距离,避免机器人超出传送带范围或达到奇异点,范围为1~20°(输入超出20°时按20°执行)。 |
返回值:
无
disable_convayor_track
指令原型:
disable_convayor_track()
指令说明:
用于关闭传送带跟踪。
返回值:
无
record_pulse_cond()
指令原型:
record_pulse_cond(type, index, state)
指令说明:
用于获取并存储传送带上的物料位置,与IO绑定,防止因传送带运动速度较快,机器人来不及处理每一个物料而漏料。此指令需要与“传送带队列取值”搭配使用。使用此指令后,传送带上触发IO的物料位置信息被记录在控制器内,当程序运行“传送带队列取值”指令后,存储的物料位置信息按存储的先后顺序被获取。
参数介绍:
type |
IO类型定义如下:
|
|---|---|
index |
所控制数字输出的编号,从0开始索引。 |
state |
·1为开 ·0为关 |
返回值:
无
get_pulse_cond()
指令原型:
get_pulse_cond()
指令说明:
用于获取存储的传送带脉冲队列信息
返回值:
无
clear_pulse_cond()
指令原型:
clear_pulse_cond()
指令说明:
用于清空存储的传送带脉冲队列信息
返回值:
无
record_pos_cond()
指令原型:
record_cond(array)
指令说明:
用于存储位姿数组变量队列,可搭配传送带视觉跟随使用,存储相机发送的位姿信息
参数介绍:
array |
位置变量或程序变量,必须为12位数组。 |
返回值:
无
get_pos_cond()
指令原型:
get_pos_cond()
指令说明:
用于获取存储的位姿队列信息,
返回值:
从位姿队列中获取到的位姿数组变量
clear_pos_cond()
指令原型:
clear_pos_cond()
指令说明:
用于清空存储的位姿队列信息
返回值:
无
get_pulse_num()
指令原型:
get_pulse_num()
指令说明:
用于获取当前传送带脉冲队列所存储目标的个数
返回值:
当前传送带脉冲队列所存储目标的个数
get_pos_num()
指令原型:
get_pos_num()
指令说明:
用于获取当前位姿队列所存储目标的个数
返回值:
当前位姿队列所存储目标的个数
运动柔顺控制
set_compliance_ft_config
指令原型:
set_compliance_ft_config(id, admitctrlconfig, immed)
指令说明:
用于恒力柔顺控制配置。admitctrlconfig是配置参数数组。
参数介绍:
id |
代表配置轴编号[0, 5] |
|---|---|
admitctrlconfig |
= [opt, FTuser, FTreboundK, FTconstant, FTnormalTrack] opt:在该方向(由id参数指定的轴方向)上是否开启恒力柔顺,1代表开启,0代表不开启。 FTuser:机器人在恒力柔顺控制过程中所表现出的刚度,一般力方向上需要设置大于5,力矩方向上设置大于0.2。 FTreboundK:机器人外力作用下,偏离原位置后产生向原位置反弹的运动趋势时所表现出的弹性系数。需要设置为非负数,其中设置为0代表不进行反弹。 FTconstant:代表目标恒力。 FTnormalTrack:内部预留参数,必须给定固定数值0。 |
immed |
内部预留参数,必须给定固定数值1。 |
返回值:
无
disable_force_control
指令原型:
disable_force_control()
指令说明:
用于关闭力控。
返回值:
无
enable_force_control
指令原型:
enable_force_control(type, compensation, robot_id=0)
指令说明:
用于柔顺控制类型配置和传感器补偿。
参数介绍:
type |
预留参数,当前版本不生效。 |
compensation |
预留参数,当前版本不生效。 |
robot_id |
可选参数,机器人ID,默认为0。 |
返回值:
无
set_end_force_condition
指令原型:
condition = [enableEndCond, lowFlag, lowLimitForce, upFlag, upLimitForce]
set_end_force_condition(axis, condition, robot_id)
指令说明:
用于设置力控终止条件。设置力控终止条件,不能立即生效,默认是非即时指令,作用且仅作用于其后的第一条运动指令。此终止条件触发时,该运动指令将被立刻终止,程序跳转至该运动指令的下一行继续执行。
参数介绍:
axis |
代表轴号,取值范围是[0, 5] |
|---|---|
enableEndCond |
是否使能,1代表生效,0则相反 |
lowFlag |
运动终止力下限生效标志位,1代表生效,0则相反 |
lowLimitForce |
运动终止力下限 |
upFlag |
运动终止力上限生效标志位,1代表生效,0则相反 |
upLimitForce |
运动终止力上限 |
robot_id |
可选参数,机器人ID,默认为0。 |
返回值:
无
set_force_control_frame
指令原型:
set_force_control_frame(ftFrame, robot_id)
指令说明:
该函数用于设置力控坐标系。
参数介绍:
ftFrame |
·0 表示工具坐标系;·1 代表世界坐标系。 |
robot_id |
可选参数,机器人ID,默认为0。 |
返回值:
无
get_sensor_torque
指令原型:
torq = get_sensor_torque(type, sensor_id)
指令说明:
用于获取力矩底座或末端力矩传感器的力矩值,该值为补偿传感器末端负载后的净力矩值。
参数介绍:
type |
·0 为末端力矩传感器;·1 为保留值(当前版本查询不区分该参数)。 |
sensor_id |
可选参数,传感器ID,默认为0。 |
返回值:
六维数组表示的六维力矩传感器读数
set_force_sensor_zero
指令原型:
set_force_sensor_zero()
指令说明:
末端力传感器校零。
参数介绍:
无
返回值:
无
接口设置与查询
IO控制与查询
set_digital_output
指令原型:
set_digital_output(type, index, tarState, immed)
指令说明:
用于控制数字输出信号。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
index |
所控制数字输出的编号,从0开始索引。 |
tarState |
·1为开 ·0为关 |
immed |
·1为即时指令 ·0为非即时指令 若为非即时指令,则该指令的实际执行将在下一条运动指令之前执行。 |
注:
即时IO指令会打断不同运动段之间的转接,非即时仅限于控制柜DO/AO可用。
返回值:
无
set_analog_output
指令原型:
set_analog_output(type, index, tarValue, immed)
指令说明:
用于控制模拟输出信号。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
index |
所控制模拟输出的编号,从0开始索引。 |
tarValue |
Real类型值,用于指定模拟输出的目标值。 |
immed |
·1为即时指令 ·0为非即时指令 若为非即时指令,则该指令的实际执行将在下一条运动指令之前执行。 |
注:
即时IO指令会打断不同运动段之间的转接。
返回值:
无
get_digital_output
指令原型:
get_digital_output(type, index)
指令说明:
用于获取指定数字输出的状态。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
index |
数字输出索引 |
返回值:
函数返回查询结果:0 -> off, 1 -> on
get_analog_output
指令原型:
get_analog_output(type, index)
指令说明:
用于获取指定模拟输出的状态。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
index |
模拟输出索引 |
返回值:
函数返回double类型的查询结果。
get_digital_input
指令原型:
get_digital_input(type, index)
指令说明:
获取指定数字输入的状态。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
index |
数字输入索引 |
返回值:
函数返回查询结果:0 为关,1 为开。
get_analog_input
指令原型:
get_analog_input(type, index)
指令说明:
获取指定模拟输入的状态。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
index |
模拟输入索引 |
返回值:
函数返回double类型的查询结果。
set_multiple_digital_outputs
指令原型:
set_multiple_digital_outputs(type, indexArr, valueArr, syncFlag)
指令说明:
用于设置多个DO的状态值。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
indexArr |
所控制的IO索引数组(同一模块),索引从0开始计数。 |
valueArr |
所控制IO的目标数值数组,单个IO状态1为开,0为关。 |
syncFlag |
同步标志位,当syncFlag为1时会等待前序所有指令均执行完才执行(会打断该指令前后段运动转接),当syncFlag为0时则解析后即执行。 |
注:
该指令不支持缓冲指令,即在不影响转接的情况下批量设置IO。
返回值:
无
set_multiple_analog_outputs
指令原型:
set_multiple_analog_outputs(type, indexArr, valueArr, syncFlag)
指令说明:
用于批量设置多个模拟输出通道的目标值。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
indexArr |
所控制的IO索引数组(同一模块),索引从0开始计数。 |
valueArr |
对应通道的目标值数组(浮点数值,单位取决于量程)。 |
syncFlag |
同步标志位,当syncFlag为1时会等待前序所有指令均执行完才执行(会打断该指令前后段运动转接),当syncFlag为0时则解析后即执行。 |
注:
该指令不支持缓冲指令,即在不影响转接的情况下批量设置IO。
返回值:
无
get_multiple_digital_outputs
指令原型:
retArr = get_multiple_digital_outputs(type, indexArr)
指令说明:
用于批量读取多个数字输出通道的当前状态。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
indexArr |
所控制的IO索引数组(同一模块),索引从0开始计数。 |
返回值:
对应通道的状态值数组(0/1值,0 为off, 1为on)。
get_multiple_analog_outputs
指令原型:
retArr = get_multiple_analog_outputs(type, indexArr)
指令说明:
用于批量读取多个模拟输出通道的当前输出值。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
indexArr |
所控制的IO索引数组(同一模块),索引从0开始计数。 |
返回值:
对应通道的当前输出值数组(浮点数)。
get_multiple_digital_inputs
指令原型:
retArr = get_multiple_digital_inputs(type, indexArr)
指令说明:
用于批量读取多个数字输入通道的当前状态。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
indexArr |
所控制的IO索引数组(同一模块),索引从0开始计数。 |
返回值:
对应通道的输入状态数组(0/1值,0 为off, 1为on)。
get_multiple_analog_inputs
指令原型:
retArr = get_multiple_analog_inputs(type, indexArr)
指令说明:
批量读取多个模拟输入通道的当前输入值。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
indexArr |
所控制的IO索引数组(同一模块),索引从0开始计数。 |
返回值:
对应通道的输入值数组(浮点数)。
wait_input
指令原型:
wait_input(type, index, state, time)
指令说明:
用于等待指定输入变成指定状态,若超出最大等待时间,则置TIMEOUT状态标志,可用GETTIMEOUT函数查询。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
index |
输入的索引 |
state |
期待的输入状态 |
time |
最长等待时间,0为无限等待。 |
返回值:
无
get_timeout
指令原型:
get_timeout()
指令说明:
该函数用于获取wait_input指令的执行结果。
1为等待超时,0为在指定时间内成功等到该信号。
返回值:
无
set_motion_digital_output
指令原型:
set_motion_digital_output(type, index, refpoint, distance, tarState)
指令说明:
用于控制运动过程中输出数字信号。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
index |
所控制数字输出的编号,从0开始索引。 |
refpoint |
信号触发距离所选参考点 ·0为起始点 ·1为终止点 |
distance |
信号触发距离。 |
tarState |
·1为开 ·0为关 |
注:
运动中设置IO指令之后需要存在运动指令才生效。两段运动指令中间最多可设置8个运动中设置IO指令。
返回值:
无
set_motion_analog_output
指令原型:
set_motion_analog_output(type, index, refpoint, distance, tarValue)
指令说明:
用于控制运动过程中输出模拟信号。
参数介绍:
type |
IO类型与模块ID(注:模块ID适用于机器人做主站扩展多个IO模块,从0开始索引)的复合字段,低16位为IO类型,高16位为模块ID(若不适用,则为0)。IO类型定义如下:
|
|---|---|
index |
所控制模拟输出的编号,从0开始索引。 |
refpoint |
信号触发距离所选参考点 ·0为起始点 ·1为终止点 |
distance |
信号触发距离。 |
tarValue |
Real类型值,用于指定模拟输出的目标值。 |
注:
运动中设置IO指令之后需要存在运动指令才生效。两段运动指令中间最多可设置8个运动中设置IO指令。
返回值:
无
TIO+控制与查询
tio_update_signal
指令原型:
tio_update_signal(strId, freq)
指令说明:
用于以一定周期刷新指定的TIO Modbus RTU信号。
参数介绍:
strId |
信号量的标识符 |
|---|---|
freq |
为0时,仅刷新一次; 为其他正值时为刷新频率,刷新频率内部自动受限于CAN通讯瓶颈。 |
返回值:
无
tio_get_signal_value
指令原型:
res = tio_get_signal_value(strId)
指令说明:
用于获取指定信号的值。
参数介绍:
strId |
信号量的标识符 |
返回值:
返回信号的值。
tio_send_command
指令原型:
tio_send_command(chnId, cmdBuf, crcType, immed)
指令说明:
用于向指定的TIO RS485通道发送字节数据。
参数介绍:
chnId |
通道编号。 ·0为RS485通道1 ·1为RS485通道2 |
|---|---|
cmdBuf |
字节数组 |
crcType |
发送数据类型,当且指定通道为RS485透传时生效,Modbus RTU时写0。 |
immed |
0为即时指令,1为非即时指令。若为非即时指令,则该指令的实际执行将在下一条运动指令之前执行。 |
返回值:
无
网络通讯
socket_open
指令原型:
sockid = socket_open(ip, port, ssl_enable, keepAlive, keepIdle, keepInterval, keepCount)
指令说明:
用于打开指定的IP与端口号,并将创建的SOCKET句柄保存在变量并返回。
参数介绍:
ip |
字符串形式TCP服务器地址,如“192.168.1.10” |
|---|---|
port |
TCP服务器端口 |
ssl_enable |
是否启动ssl,0为不启用,1为启用 |
keepAlive |
可选参数,是否启用TCP保活(SO_KEEPALIVE),0或1 |
keepIdle |
可选参数,保活空闲时间(秒)。 |
keepInterval |
可选参数,保活探测间隔(秒)。 |
keepCount |
可选参数,保活探测次数。 |
返回值:
返回socket句柄
socket_close
指令原型:
socket_close(sockid)
指令说明:
用于关闭指定的套接字。
参数介绍:
sockid |
需要关闭的套接字连接 |
返回值:
无
socket_get_var
指令原型:
varname = socket_get_var(sockid, type, argname, timeout,timeopt,defaultvalue)
指令说明:
用于请求远端对参数的设置。
参数介绍:
sockid |
套接字ID,需事先创建。 |
|---|---|
type |
参数类型。 ·0为整型 ·1为浮点数 ·2为字符串 |
argname |
字符串类型的变量名,表示想要获取的变量的值。 形式为“argname”或<argname> |
timeout |
获取反馈等待超时,0为永久等待。 |
timeopt |
可选参数,默认值为2。 接收变量超时后的操作: 0:接收变量超时后停止运行 1:接收超时后暂停运行 2:收变量超时后继续运行 |
defaultvalue |
可选参数。发生超时等异常后作为接收指令的返回值。 |
返回值:
返回值储存变量。
该函数将通过socket发送字符串get <arg_varname>,并期望接收数据格式<arg_varname><value>。默认有2s的超时,超时后返回0。
当期望发送一个数组时,上位机发送格式为:
<arrName><{num1, num2, ..., numN}>
当期望发送一个字符串时,上位机发送格式为:
<strName><“stringValue”>
示例:
\_b41s50sf7mpd9j5j = [-99.991,-399.991,300,180,0.0,90.008,92.016,82.182,120.004,67.814,-90.000,92.008]
\_jaka_socket_server_1 = socket_open("192.168.58.1", 1000, 0)
\_xs7fOkKGQRfrBycO9rAx = socket_get_var(_jaka_socket_server_1, 0, "pos1", 1, 2, \_b41s50sf7mpd9j5j)
\_b41s50sf7mpd9j5j = \_xs7fOkKGQRfrBycO9rAx
socket_close(_jaka_socket_server_1)
socket_read_real
指令原型:
res = socket_read_real(sockid, num, timeout, timeopt, defaultvalue)
指令说明:
用于通过制定的套接字从外界获取(一组)数,并存储在数组变量中。
参数介绍:
sockid |
套接字ID,需事先创建。 |
|---|---|
num |
期望接收的数的数量。 |
timeout |
获取反馈等待超时时间,单位为秒,0为永久等待。 |
timeopt |
可选参数,默认值为2。 接受变量超时后的操作: 0,接收变量超时后停止运行 1,接收超时后暂停运行 2,接收超时后继续运行 |
defautvalue |
可选参数。 发生超时等异常后作为接收指令的返回值。 |
返回值:
接收的数据结果。
若接收失败,则返回标量0,成功接收则均存在数组中。
默认有2s的超时,若接收失败,将返回0。
示例:
\_1c25p8d6c3kkeche = [1,2,3,4,5]
\_jaka_socket_server_1 = socket_open("192.168.58.1", 1000, 0)
\_xV0CEY1c02D5XkiCQKLa = socket_read_real(_jaka_socket_server_1, 5, 1)
\_1c25p8d6c3kkeche = \_xV0CEY1c02D5XkiCQKLa
socket_close(_jaka_socket_server_1)
socket_read_string
指令原型:
res = socket_read_string(sockid, prefix, suffix, timeout)
指令说明:
用于通过指定的套接字从外界获取一段字符串,并存储在变量中。
函数返送格式为get#string#prefix#suffix#,期望接收数据格式为prefixSTRINGsuffix。
参数介绍:
sockid |
套接字ID,需事先创建。 |
|---|---|
prefix |
期望接收字符串的前缀要求。 |
suffix |
期望接收的字符串的后缀要求。 |
timeout |
获取反馈等待超时,0为永久等待。 |
返回值:
接收的数据结果。
默认2s的超时,若接收失败,将返回空的字符串。
示例:
sockid = socket_open("192.168.58.1", 1000, 0)
prefix = "abc"
suffix = "xyz"
res = socket_read_string(sockid, prefix, suffix, 3)
# server 端发送 abcSTRINGxyz
# res = "STRING"
socket_close(sockid)
socket_send
指令原型:
res = socket_send(sockid, var)
指令说明:
用于通过指定的SOCKET以字符串形式发送一个变量的值。
参数介绍:
sockid |
套接字ID,需事先创建。 |
|---|---|
var |
期望发送的变量,变量目前支持Number,Number数组,以及 String类型。 发送数组时,发送的字符串格式为“{Num1, Num2, ...}” |
返回值:
res为发送结果标志。
默认有2s的发送超时,如果发送成功,返回实际发送的字节数(正整数),否则返回0。
发送的数据格式为:
<varName><varValue>
<intVar><12>
<strVar><“string”>
<listVar><{ele1, ele2, ele3, ...}>
socket_recv
指令原型:
res = socket_recv(sockid, timeout, timeopt, defaultvalue)
指令说明:
用于从指定的socket接收数据,用户可设置超时时间。
注:
该指令单纯用于接收数据,不会向另一连接端发送请求。
参数介绍:
sockid |
套接字ID,需事先创建。 |
|---|---|
timeout |
接收超时设置,单位为秒。0为永久等待,永不超时。 |
timeopt |
可选参数,默认值为2。 接受变量超时后的操作: 0,接收变量超时后停止运行 1,接收超时后暂停运行 2,接收超时后继续运行 |
defautvalue |
可选参数。 发生超时等异常后作为接收指令的返回值。 |
返回值:
正常接收,函数返回接收的字符串。
如果超时未接收到数据,返回为空字符串;
如果网络问题,则会返回标量-1。
示例:
\_dlg3d1h0c2fpamhe = " "
\_jaka_socket_server_1 = socket_open("192.168.58.1", 1000, 0)
\_bkzsRALzcKwvhGauKlsa = socket_recv(_jaka_socket_server_1, 1) #接收字符串,timeout=1
\_dlg3d1h0c2fpamhe = \_bkzsRALzcKwvhGauKlsa
socket_close(_jaka_socket_server_1)
参数设置与查询
负载设置查询
set_payload
指令原型:
set_payload(m, centriod)
指令说明:
用于设置当前机器人负载。
参数介绍:
m |
负载质量,单位kg。 |
|---|---|
centroid |
负载质心,包含x,y,z三个分量的数组,单位:mm。 |
注:
该指令会同步运动,打断转接。
返回值:
无
get_payload
指令原型:
payload = get_payload()
指令说明:
用于获取当前机器人负载。
返回值:
返回机器人法兰末端总负载。
payload[0]为负载质量(单位kg),payload[1]~[3]为负载质心(单位mm)。
示例:
payload = [100, 100, 0]
set_payload(3, payload)
payload_res = get_payload()
#结果
#payload_res = [3.0, 100.0, 100.0, 0.0]
config_payload
指令原型:
config_payload(payload_id, switch_interval)
指令说明:
设置当前机器人使用的负载ID,并设置负载切换的平滑过渡时间。该指令主要解决由于切换负载瞬间机器人实际负载以及控制模型中使用的负载不一致而造成的可能误报碰撞的问题。
参数介绍:
payload_id |
预期使用的负载ID。 |
|---|---|
switch_interval |
预期的平滑过渡时间,单位秒,参数范围0-1,启用平滑过渡,系统将在过渡期间限制转矩变化斜率,以降低负载切换时的抖动 |
注:
该指令会同步运动,打断转接。
返回值:
无
碰撞等级设置查询
set_collision_level
指令原型:
set_collision_level(clsnLevel)
指令说明:
默认不支持该指令。
若执行的JKS程序包含该指令,主线程在解析到该指令时会报错提示,并跳过该指令、继续执行后续的指令;子线程解析到该指令时会直接跳过,继续执行后续指令(子线程中不处理运动及修改运动参数的指令)。
返回值:
无
get_collision_level
指令原型:
res = get_collision_level()
指令说明:
用于获取当前碰撞检测灵敏度。
返回值:
返回当前碰撞灵敏度。
工具坐标系设置查询
set_tool
指令原型:
set_tool(var_tool)
指令说明:
用于设置工具末端相对于末端法兰的位置偏置。
法兰坐标系垂直端面向外为z轴正方向, 工具IO连接端口为y轴负方向。
参数介绍:
var_tool |
工具末端相对于法兰坐标系的偏置,为6元素数组。 |
返回值:
无
set_tool_id
指令原型:
set_tool_id(id)
指令说明:
用于设置工具坐标系id。
参数介绍:
id |
取值[-1, 15]。 控制系统内最大支持[0,15] 共16个工具坐标系,通过设置ID指定当前使用的工具偏置值。当id为0时,即使用默认工具坐标系与法兰坐标系重合。 id为 -1 仅适用于AL12 机型,用于使用该机型末端内置相机的坐标系。 |
返回值:
无
get_tool_offsets
指令原型:
res = get_tool_offsets()
指令说明:
用于获取当前工具坐标系偏置值。
返回值:
返回6元素数组。
get_tool_offsets_of
指令原型:
res = get_tool_offsets_of(id)
指令说明:
用于获取指定工具坐标系偏置值。
参数介绍:
id |
指定的工具坐标系,取值范围是[1, 15]。 |
返回值:
返回6元素数组。
用户坐标系设置查询
set_user_frame
指令原型:
set_user_frame(user_frame)
指令说明:
用于设置用户坐标系。
设置时工具ID将设置为-1,程序中设置后不会被保存。(仅本次程序运行期间生效)。
参数介绍:
user_frame |
用户坐标系值,为6元素数组。 |
返回值:
无
示例: set_user_frame_id ^^^^^^^^^^^^^^^^^^^^^^^^^
指令原型:
set_user_frame_id(id)
指令说明:
用于设置用户坐标系id。
参数介绍:
id |
取值[0, 15]。 控制系统内最大支持16个用户坐标系,通过设置ID指定当前使用的用户坐标系偏置值。当id为0时,即不使用用户自定义的坐标系,而是默认的世界坐标系。 |
返回值:
无
示例: get_user_frame ^^^^^^^^^^^^^^^^^^^^^^
指令原型:
res = get_user_frame()
指令说明:
用于获取当前用户坐标系偏置值。
返回值:
返回6元素数组。
示例: get_user_frame_of ^^^^^^^^^^^^^^^^^^^^^^^^^
指令原型:
res = get_user_frame_of(id)
指令说明:
用于获取指定用户坐标系偏置值。
参数介绍:
id |
指定的用户坐标系,取值范围是[1, 15]。 |
返回值:
返回6元素数组。
辅助函数库
数学计算库
函数原型 |
函数描述 |
|---|---|
res = abs(arg) |
计算表达式绝对值 |
res = atan2(arg_y, arg_x) |
该指令用于计算点(arg_x, arg_y)相对于原点的角度(单位为°),输出角度范围为(-180°,180°] |
res = atan(arg) |
该指令用于计算输入值arg的反正切值(角度,单位为°),输出角度范围为(-180°,180°] |
res = acos(arg) |
反余弦函数,返回值单位为° |
res = asin(arg) |
反正弦函数,返回值单位为° |
res = cos(arg) |
余弦函数,参数单位为° |
res = sin(arg) |
正弦函数,参数单位为° |
res = tan(arg) |
正切函数,参数单位为° |
res = floor(arg) |
向下取整 |
res = ceil(arg) |
向上取整 |
res = round(arg) |
四舍五入取整 |
res = sqrt(arg) |
取平方根 |
res = ln(x) |
计算指定值的自然对数,即求"e的多少次方等于x",e为自然常数。x: 输入值,必须为正实数(x > 0) |
res=exp(x) |
用于计算自然指数函数,即求"e的x次方",e为自然常数 |
res = rad2deg(arg) |
弧度转角度 |
res = deg2rad(arg) |
角度转弧度 |
位姿运算库
pose_add
指令原型:
res = pose_add(pos1, pos2)
指令说明:
用于计算两个位姿之和并返回计算结果。
位置进行简单累加计算;
姿态计算公式为:R_res = R_pos2 * R_pos1
注:
R表示旋转矩阵。
返回值:
返回计算结果。
示例:
#(S5 机型)
pos1 = [200.0 ,0.0 ,600.0 ,90.0 , -0.0, 0.0]
pos2 = [-300, -400, -300, 90, 0, 90]
add_res = pose_add(pos1, pos2)
#结果
# add_res = [-100.0 -400.0 300.0 180.0 0.0 90.0]
pose_sub
指令原型:
res = pose_sub(pos1, pos2)
指令说明:
用于计算两个位姿之差并返回计算结果。
位置进行简单相减计算;
姿态计算公式为:R_res = inv(R_pos2) * R_pos1
注:
R表示旋转矩阵。
返回值:
返回计算结果。
示例:
#(S5 机型)
pos1 = [-100,-400,300,180,0,90]
pos2 = [-300,-400,-300,90,0,90]
res = pose_sub(pos1, pos2)
#结果
# res = [ 200.0 0.0 600.0 90.0 -0.0 0.0]
pose_dist
指令原型:
res = pose_dist(pos1, pos2)
指令说明:
用于计算两个位姿之间的距离,计算仅考虑位置坐标。
返回值:
返回计算结果。
示例:
#(S5 机型)
pos1 = [-100,-400,300,180,0,90]
pos2 = [-300,-400,-300,90,0,90]
Dist_res = pose_dist(pos1, pos2)
#结果 sqrt( sqr(-100-(-300)) + sqr(300 - (-300)) )
# Dist_res = 632.45550537109
pose_inv
指令原型:
res = pose_inv(pos)
指令说明:
用于计算某个位置的逆变换。
返回值:
返回pose形式的计算结果。
示例:
#(S5 机型)
basePose = [-100,-400,300,180,0,90]
transPose = [100,100,0,90,45,0]
Pi_res= pose_inv(transPose)
PT_res = pose_trans(basePose, transPose) # 变换
res = pose_trans(PT_res, Pi_res) # 对变换后的结果逆变换
#结果
# Pi_res =[ -70.711 -70.711 100.0 -90.0 -0.0 45.0]
# PT_res =[ 0.0 -300.0 300.0 -90.0 -45.0 90.0]
# res = [-100.0 -400.0 300.0 180.0 0.0 90.0 ]
pose_trans
指令原型:
res = pose_trans(p_from, p_from_to)
指令说明:
用于计算位置变换,p_from为变换的起始位姿,p_from_to为变换的位姿增量。
计算公式为:p_res = p_from * p_from_to
返回值:
返回位置结果。
示例:
#(S5 机型)
basePose = [-100,-400,300,180,0,90]
transPose = [100,100,0,90,45,0]
PT_res = pose_trans(basePose, transPose)
#结果
# PT_res = 0 -300.0 300.0 -90.0 45.0 90.0
pose_intpl
指令原型:
res = pose_intpl(pos1, pos2, alpha)
指令说明:
用于按照给定的系数计算两点之间的插补点。
计算公式为:p_res = pos1 + (pos2 - pos1) * alpha
其中,alpha >= 0 且 alpha <= 1,包含姿态且其插值方法同为线性插值。
返回值:
返回插补点的位置变量。
示例:
#(S5 机型)
pos1 = [-100,-400,300,180,0,90]
pos2 = [-300,-400,-300,90,0,90]
alpha = 0.5
res = pose_intpl(pos1, pos2, alpha)
#结果
# res =[ -200.0 -400.0 0.0 135.0 0.0 90.0]
xy_plane_trans
指令原型:
res = xy_plane_trans(posebase, dx, dy, drz)
指令说明:
该指令将刚体在XY平面内做变换,在posebase处先绕posebase的Z轴旋转drz度,然后沿用户坐标系的X轴平移dx,沿沿用户坐标系的Y轴平移dy。
返回值:
返回变换后的位姿。
示例:
#(S5 机型)
posebase = [-100,-400,300,180,0,90]
dx = 100
dy = 100
drz = 90
xyT_res= xy_plane_trans(posebase, dx, dy, drz)
#结果:
#xyT_res = [ -0 -300.0 300.0 180.0 -0.0 180.0]
注:绕轴旋转变换后的姿态不可做简单地加减对比,若需验证,可通过以下公式进行计算:
首先根据posebase的RPY姿态描述变换为旋转矩阵
描述,得到posebase的Z轴在用户坐标系下的向量表示,我们用旋转轴为
来表示,绕该轴旋转角度为θ时的变换矩阵为:
则有:
姿态变换计算公式为:
位置变换计算公式为
yz_plane_trans
指令原型:
res = yz_plane_trans(posebase, dy, dz, drx)
指令说明:
该指令将刚体在YZ平面内做变换,在posebase处先绕posebase的X轴旋转drx度,然后沿用户坐标系的Y轴平移dy,沿用户坐标系的Z轴平移dz。
返回值:
返回变换后的位姿。
示例:
#(S5 机型)
posebase = [-100,-400,300,180,0,90]
dy = 100
dz = 100
drx = 90
res = yz_plane_trans(posebase, dy, dz, drx)
#结果:
#res = [ -100.0 -300.0 400.0 -90.0 -90.0 0.0]
注:绕轴旋转变换后的姿态不可做简单地加减对比,若需验证,可通过以下公式进行计算:
首先根据posebase的RPY姿态描述变换为旋转矩阵
描述,得到posebase的X轴在用户坐标系下的向量表示,我们用旋转轴为
来表示,绕该轴旋转角度为θ时的变换矩阵为:
则有:
姿态变换计算公式为:
位置变换计算公式为
zx_plane_trans
指令原型:
res = zx_plane_trans(posebase, dz, dx, dry)
指令说明:
该指令将刚体在ZX平面内做变换,在posebase处先绕posebase的Y轴旋转dry度,然后沿用户坐标系的Z轴平移dz,沿用户坐标系的X轴平移dx。
返回值:
返回变换后的位姿。
示例:
#(S5 机型)
posebase = [-100,-400,300,180,0,90]
dz = 100
dx = 100
dry = 90
zxT_res= zx_plane_trans(posebase, dz, dx, dry)
#结果:
**#zxT_res = [0.0 -400.0 400.0 -90.0 -0.0 90.0**]
注:绕轴旋转变换后的姿态不可做简单地加减对比,若需验证,可通过以下公式进行计算:
首先根据posebase的RPY姿态描述变换为旋转矩阵
描述,得到posebase的Y轴在用户坐标系下的向量表示,我们用旋转轴为
来表示,绕该轴旋转角度为θ时的变换矩阵为:
则有:
姿态变换计算公式为:
位置变换计算公式为
kine_inverse
指令原型:
res = kine_inverse(posJ, posP)
指令说明:
该指令用于计算运动学逆解。
功能为计算输入的笛卡尔空间位置posP所对应的关节空间位置。
posJ为这个逆解关节值附近的一组关节值,用来确定逆解函数多解的选取。
返回值:
返回逆运动学计算结果。
当逆解失败时,程序报错终止。
示例:
#(S5 机型)
posP = [-100,-400,300,180,0,90]
PosJ = [91.34,108.433,90.751,70.816,-90,91.34]
kI_res = kine_inverse(posJ, posP)
#结果
#kI_res = [92.015 82.184 120.003 67.813 -90.0 92.015]
kine_forward
指令原型:
res = kine_forward(posJ)
指令说明:
用于计算运动学正解。
功能为计算输入的关节角度对应所在笛卡尔空间位姿。
返回值:
返回正运动学计算结果。
示例:
#(S5 机型)
posJ = [91.34,108.433,90.751,70.816,-90, 91.34]
res = kine_forward(posJ)
#结果
# res = [-100,-600.00310646982,300,180.0,-0.0,90.0]
is_pose_reachable
指令原型:
res = is_pose_reachable(posP)
有参考关节角度时,使用以下指令:
res = is_pose_reachable_refjpos (posP)
指令说明:
用于判断在当前位姿下,是否能够以通过笛卡尔空间运动指令运动至posP。
返回值:
若可以,则返回1(条件为真);
若否,则返回0(条件为假)。
示例:
# S5机器人本体,当前机器人各关节位置 [91.34,108.433,90.751,70.816,-90,91.34]
posP = [-100,-400,300,180,0,90]
res = is_pose_reachable(posP) #参考关节角默认为当前关节位置
#结果
#res = 1
is_pose_reachable_refjpos
指令原型:
res = is_pose_reachable_refjpos (posP, ref_jointPos)
指令说明:
该指令用于查询指定的笛卡尔空间位置在指定的参考角度下是否可达,ref_jointPos: 用于posP逆解时提供参照。
返回值:
若可以,则返回1(条件为真);
若否,则返回0(条件为假)。
示例:
# S5机器人本体
posP = [-100,-400,300,180,0,90]
ref_posJ = [91.34,108.433,90.751,70.816,-90,91.34]
res = is_pose_reachable_refjpos(posP,ref_posJ)
#结果
#res = 1
set_target_pose
指令原型:
set_target_pose(poseID, fieldType, <...>)
指令说明:
设置指定目标点位的值或特定字段值。
参数介绍:
poseID |
指定目标点位的ID,整型值,取值范围为[0,65535]。 |
|---|---|
fieldType |
标识目标点位期望设定的字段,整形值,取值区间为:-1, [1, 10]。各值对应的访问字段定义如下:
|
... |
当fieldType为-1时,需提供字段1~10所有参数值; 当fieldType为[1,10]间值时,仅需提供对应字段的参数值。 |
返回值:
无。
当设置出错时,如poseID无效,名称冲突或值无效时,会报错并终止程序运行。
get_target_pose
指令原型:
<...> = get_target_pose(poseID, fieldType)
指令说明:
查询指定目标点位的值或特定字段值。
参数介绍:
poseID |
指定目标点位的ID,整型值,取值范围为[0,65535]。 |
|---|---|
fieldType |
标识目标点位期望设定的字段,整形值,取值区间为:-1, [1, 10]。各值对应的访问字段定义如下:
|
返回值:
所查询目标点位所有字段或特定字段的值。当查询出错如poseID无效时,会报错并终止程序运行。注:当fieldType为-1查询目标点位所有字段值时,会存在多个返回值。
get_target_pose_to_array
指令原型:
dataArray = get_target_pose_to_array(poseID)
指令说明:
获取指定poseID的所有数据字段并形成数组返回。
参数介绍:
poseID |
指定目标点位的ID,整型值,取值范围为[0,65535]。 |
返回值:
返回的单一数组,包含该目标点位的所有数据,数据格式为:
[PointID,Label,X,Y,Z,Rx,Ry,Rz,Tool,Frame,Shoulder,Elbow,Wrist,ExJ1,ExJ2,ExJ3,ExJ4,ExJ5,ExJ6,J1,J2,J3,J4,J5,J6,J7,J8,J9,toolOffX,toolOffY,toolOffZ,toolOffRx,toolOffRy,toolOffRz,userOffX,userOffY,userOffZ,userOffRx,userOffRy,userOffRz,Variable]
当指定poseID的目标点位不存在时,程序报错并终止运行。
delete_target_pose
指令原型:
delete_target_pose(poseID)
指令说明:
删除指定poseID对应的目标点位。
参数介绍:
poseID |
指定目标点位的ID,整型值,取值范围为[0,65535]。 |
返回值:
无。
当指定poseID的目标点位不存在时,程序将正常运行;当poseID无效时,程序报错并终止运行。
target_pose_exists
指令原型:
target_pose_exists(poseID)
指令说明:
查询指定poseID对应的目标点位是否存在。
参数介绍:
poseID |
指定目标点位的ID,整型值,取值范围为[0,65535]。 |
返回值:
查询结果,0为不存在,1为存在。
当poseID无效时,程序报错并终止运行。
字符串操作库
sprintf
指令原型:
resLen,bufferOut = sprintf(stringFormat, …)
指令说明:
用于对字符串的格式化输出,即将指定数据按指定格式输出为字符串。
参数介绍:
stringFormat |
定义格式字符串,目前仅支持变量形式。 支持对%f、%d、%s三种类型变量的格式化。 格式如:%f、%s、%d |
|---|---|
… |
待格式化变量,可变参数。支持整型、浮点型及字符串类型的变量,或者常数。 |
返回值:
strLen:如果格式化成功,返回字符串的长度,否则返回-1。
strOut:返回的字符串。
示例:
num1 = 66
num2 = 55.3
num3 = 0.3
formatStr = "%f,%f,%f"
resLen,strOut = sprintf(formatStr, num1,num2,num3)
#结果:
#strOut = "66,55.3,0.3"
sscanf
指令原型:
resNum,... = sscanf(bufferIn, stringFormat)
指令说明:
用于对字符串的格式化输入,即将匹配一定格式的字符串将数据输入到变量中。
参数介绍:
bufferIn |
待匹配的字符串,目前仅支持变量格式。 |
|---|---|
stringFormat |
定义格式字符串,目前仅支持变量形式。 支持对%f、%d、%s三种类型变量的格式化。 格式如:%f、%d、%s %f 匹配一个浮点数; %d 匹配十进制整数,数字前面的+或-可选; %s 匹配字符串,读取连续字符直到遇到一个空格字符(空白、换行和制表符等)或格式化字符串中下一个匹配字符(非%s、%f、%d)。 |
返回值:
resNum:如果格式化成功,返回匹配的变量的数目,否则返回-1。
... : 用于接收格式化输出的变量,可变参数,stringFormat中预设的变量数量和类型一致。支持整型、浮点型及字符串类型的变量。
示例:
strIn = "1#2#3#4#5#6#7#8"
a1,a2,a3,a4,a5,a6,a7,a8=0,0,0,0,0,0,0,0
resNum,a1,a2,a3,a4,a5,a6,a7,a8 = sscanf(strIn,"%d#%d#%d#%d#%d#%d#%d#%d")
#结果
#resNum = 8
# a1,a2,a3,a4,a5,a6,a7,a8 = 1 2 3 4 5 6 7 8
string_concat
指令原型:
strRes = string_concat(str1, str2)
指令说明:
用于将两个数字或字符串以字符串的形式进行拼接,并返回拼接后的字符串。
参数介绍:
str1 |
待拼接的子字符串,变量或者常量。 |
|---|---|
str2 |
待拼接的子字符串,变量或者常量。 |
返回值:
strRes: 字符串拼接结果。
示例:
str1 = "str1"
str2 = "str2"
concatStr = string_concat(str1, str2)
#结果
#concatStr = “str1str2”
get_string_from_array
指令原型:
resLen,stringOut = get_string_from_array(arrayIn, splittingToken)
指令说明:
用于将数组元素转换成字符串形式,并通过输入的分隔符拼接成一个完整字符串。
参数介绍:
arrayIn |
用户给定的数组。 |
|---|---|
splittingToken |
字符串格式的分隔符。 |
返回值:
resLen: 如果转换成功,返回字符串的长度(不包含截止符);
失败则返回-1。
stringOut:转换成功后的字符串。
示例:
arrIn=[1,2,3,4,5,6,7,8]
sep="#"
ret,strOut = get_string_from_array(arrIn,sep)
#执行结果:
#ret = 15
#strOut = “1#2#3#4#5#6#7#8”
get_array_from_string
指令原型:
resNum,arrayOut = get_array_from_string(stringIn, splittingToken)
指令说明:
用于将给定字符串转换为数组变量。
参数介绍:
stringIn |
用户给定的字符串(包含个数组中的数据)。 |
|---|---|
splittingToken |
字符串格式的分隔符。 |
返回值:
resNum: 如果转换成功,返回数组的元素数量;
失败则返回-1。
arrayOut: 转换成功后的数组。
示例:
strIn = "1,2,3,4,5,6"
sep=","
ret,arrOut = get_array_from_string(strIn,sep)
#结果:
# ret = 6
# arrOut = [1,2,3,4,5,6]
get_length
指令原型:
len = get_length(str_or_arr)
指令说明:
用于获取字符串或数组的长度。
返回值:
如果参数数据类型不是数组或字符串,返回-1,不报错,程序继续正常执行。
示例:
len = get_length(int_val)
#参数int_val是一个整型变量,则指令执行的结果为len = -1。
strcmp
指令原型:
res = strcmp(str1, str2)
指令说明:
用于两个字符串间的比较。
返回值:
若str1=str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。
程序控制与调试
log_message
指令原型:
log_message(level, message)
指令说明:
用于用户自行添加日志信息。
参数介绍:
level |
日志消息类型。 具体定义如下: ·WARNING:2 ·ERROR:3 |
|---|---|
message |
日志消息文本。 |
返回值:
无
get_system_clock
指令原型:
clock = get_system_clock()
指令说明:
用于用户获取系统实时时钟。
返回值:
为double类型浮点数,单位为ms(毫秒),精确到10ns。
底层使用CLOCK_MONOTONIC,即本次系统启动后流逝的时钟数。
sleep
指令原型:
sleep(time)
指令说明:
用于延时程序的一段执行时间。
参数介绍:
time |
延时时间长度,单位s。 time=0 表示无限等待。 |
注:
该指令会打断不同运动段之间的转接。
返回值:
无
pause
指令原型:
pause()
指令说明:
用于程序暂停操作,程序中调用该指令时,所有线程都将暂停。
返回值:
无
exit
指令原型:
exit()
指令说明:
用于控制作业程序终止。
返回值:
无
execute_script
指令原型:
execute_script ( jks_file_path )
指令说明:
该指令用于加载执行指定的jks脚本文件,执行完指定文件后继续执行execute_script() 后面的指令。
参数介绍:
file_path |
输入的期望执行的jks脚本文件路径。 |
需要注意的是,execute_script指令执行的jks脚本默认使用主线程环境下的函数定义,在使用图形化编程时如果执行程序主线程时选择的是其他的作业工程文件对应的jks文件且其定义了独立的函数定义,执行时会报错函数未定义。
返回值:
无
call_function
指令原型:
succ, <...> = call_function(func_name, <arg1, ..., argN>)
指令说明:
根据指定的函数名以及给定的函数入参,进行函数调用。
参数介绍:
func_name |
需要调用的函数名称 |
|---|---|
arg1, ..., argN |
条件输入参数,为所调用函数所需的所有输入参数 |
返回值:
succ |
函数调用是否成功,0为调用失败,1为调用成功 |
|---|---|
... |
当succ为1时表示调用成功,第2个或之后的返回值为所调用函数返回值; 当succ为0时表示调用失败,第2个返回参数为调用错误信息。 |
slice
指令原型:
res = slice(array, startIndex, endIndex, step)
指令说明:
用于对数组的切片访问。
参数介绍:
array |
输入的待切片访问的数组,注:该指令不支持字符串。 |
|---|---|
startIndex |
数组切片访问的起始索引(包含),取值范围为[0, N),其中N为数组长度, |
endIndex |
数组切片访问的终止索引(不包含),取值范围为[startIndex+1, N),其中N为数组长度。 |
step |
缺省时step默认为1。数组切片访问的元素索引间隔,取值范围为(-N,-1] ∪ [1, N) , step!=0 |
返回值:
返回数组切片访问结果数组。
注意:
当step > 0时,endIndex <= startIndex 且 endIndex >= 0;
当 step < 0 时, endIndex >= startIndex 且 endIndex < N。
#示例1:
array= [1,2,3,4,5,6,7,8]
startIndex = 0
endIndex = 7
step = 2
res = slice(array, startIndex, endIndex, step)
#结果: res=[1,3,5,7]
#示例2:
startIndex = 7
endIndex = 0
step = -2
res = slice(array, startIndex, endIndex, step)
#结果: res=[8,6,4,2]
多线程指令
thread_create
指令原型:
thread_create(thread_file_path, thread_name, detach)
指令说明:
用于创建子线程,并启动线程运行。
参数介绍:
thread_file_path |
线程程序文件保存的绝对路径。必须统一保存在 |
thread_name |
标识线程的唯一字符串。线程名称重复会提示创建失败。 |
detach |
可选参数,布尔型,默认为 |
返回值:
无
thread_join
指令原型:
thread_join(thread_name)
指令说明:
用于同步指定线程的操作,该函数仅在主线程中生效。
参数介绍:
thread_name |
线程辨识唯一字符串。 线程名称重复会提示创建失败。 |
返回值:
无
thread_destroy
指令原型:
thread_destroy(thread_name)
指令说明:
用于销毁指定线程的操作,该函数仅在主线程中生效。
参数介绍:
thread_name |
线程辨识唯一字符串。 线程名称重复会提示创建失败。 |
返回值:
无
thread_enter_critical
指令原型:
thread_enter_critical()
指令说明:
用于线程进入临界区操作。
返回值:
无
thread_exit_critical
指令原型:
thread_exit_critical()
指令说明:
用于线程退出临界区操作。
返回值:
无







