前言
昨天有人在群里问了一个问题,大概需求就是项目现场机器人有上百个点位,每个点位客户都需要动态去微调位置,而且是在运行中调整。
想解决这个问题对于搞编程的人来说实现起来并不难。
思路
1.需要把修正量加到位置点中,因为只修正X,Y,Z三个方向的值,所以用SHIFT指令就够了。
2.需要做数组,每个位置点的X,Y,Z修正量对应一个唯一的变量值。
3.需要添加一个对应位置编号的整数值作为数组的下标值(pnum),而且可以实时修改。
4.因为是动态修正只能是在已经修正的数据上进行加减数据。
5.需要一个信号来触发这个修正的动作,并且只允许他执行一次(锁定它不允许执行)。
6.要添加一个解除锁定的信号。
7.要初始化(生成)所有数组变量,否则没有数据会报错。
8.可以一键把已经输入的数据归零,方便继续修正或者修正下一个点位。
9.以上功能可以实时监测并执行(需要后台程序)。
10.以上功能需要界面化操作(接口面板)。
实现步骤
1.规划变量,做接口面板(操作面板)
.INTER_PANEL_D
0,8,"px"," X修正量"," px",10,9,3,2,0
1,8,"py"," Y修正量"," py",10,9,3,2,0
2,8,"pz"," Z修正量"," pz",10,9,3,2,0
3,2," 归零"," 2004","","",2,4,9,2004,0
4,8,"pnum"," 修正编号"," pnum",10,9,3,1,0
5,2," 开始修正"," 2002","","",10,4,9,2002,-1
6,2," 解除锁定"," 2003","","",2,4,9,2003,0
13,1," 锁定标志"," 2022","","",10,15,2,0,2022,0
20,2," 初始化"," 2001","","",2,4,9,2001,-1
.END
效果图
2.实现后台程序功能(实时监测并执行)
.PROGRAM autostart.pc() #0;后台程序
CALL init;调用初始化程序
start:
; //初始化/生成修正数据
IF SIG(2001) THEN
FOR a = 1 TO maxpos
fx[a] = 0
fy[a] = 0
; fz[a] = 0
END
END
; //写入对应修正数据
IF SIG(2002,-2022) THEN
fx[pnum] = fx[pnum]+px
fy[pnum] = fy[pnum]+py
fz[pnum] = fz[pnum]+pz
SIGNAL 2022;//锁定重复执行
END
; //解除修正限制
IF SIG(2003) THEN
SIGNAL -2022
END
; //一键归零
IF SIG(2004) THEN
px = 0
py = 0
pz = 0
END
GOTO start
.END
3.初始化程序内容
可有可无,为了方便新手理解并没有把信号转化成变量加入到后台程序中
.PROGRAM init() #0;初始化程序
;为了方便理解后台程序信号转变量并未在后台程序使用
ctrl_init = 2001;修正数据初始化信号
ctrl_fix = 2002;修正数据使能
ctrl_lock = 2022;修正功能锁定(防止二次执行修正)
ctrl_unlock = 2003;允许修正数据(解除修正锁定)
ctrl_zero = 2004;一键归零
maxpos = 160;最大点位数(如果接口面板上做了元件就不用加了)
RETURN
.END
4.主程序调用模板样例
.PROGRAM main() #0;前台执行程序
start:
LMOVE SHIFT(p1 BY fx[1],fy[1],0)
LMOVE SHIFT(p2 BY fx[2],fy[2],0)
LMOVE SHIFT(p3 BY fx[3],fy[3],0)
GOTO start
.END
总结
数组变量的应用适用于标准规则大体量数据的改变,循环语句要灵活运用.
解决问题的方法有很多种,程序模板只是给他人一个借鉴的思路.