本文描述了一种自动计算焊道布置与焊接的ABB机器人程序,并借此程序与您共同学习一下ABB机器人无返回值程序、有返回值程序及它们的调用。
main程序段
PROC main()
Teach_start_end;
Auto_Weld;
ENDPROC
在主程序段中,我们用了“Teach_start_end”和“Auto_Weld”两个字段,它们不是ABB机器人系统自带的指令,而是我们自己创建的子程序,它们的具体内容如下:
“Teach_start_end”子程序段****************************
PROC Teach_start_end()
MoveJ p_sec,v50,z20,tWeldGun\WObj:=wobj_piece;
MoveL p_start,v50,fine,tWeldGun\WObj:=wobj_piece;
MoveL p_end,v50,fine,tWeldGun\WObj:=wobj_piece;
ENDPROC
“Teach_start_end”程序的格式为:
PROC <程序名>()**
********程序段中执行的指令
ENDPROC
PROC代表该程序段为无返回值的程序,也是这段程序的开始;
ENDPROC与PROC对应,表示这段程序的结束。
主程序中可以直接通过该段程序的程序名调用这段程序,当主程序指针到达调用的子程序名时,指针将跳转至子程序内部,从开始到结束将内部指令执行一遍,最后跳出子程序,并出现在主程序中的子程序名的下一行。
“Auto_Weld”子程序段***********************
PROC Auto_Weld()
FOR Tier FROM NOW_i TO LAYERS DO
FOR Beadno FROM NOW_j TO Passes_Fill{Tier} DO
n_welded:=n_weled_calc(Tier,Beadno);
Path_calc n_welded,Tier,Beadno,tWeldGun,wobj_piece;
welding;
ENDFOR
ENDFOR
ENDPROC
“Auto_Weld”程序与“Teach_start_end”程序段的格式相同,区别在于他们内部指令不同,他们分别执行了该焊接程序的两部分内容。“Teach_start_end”用于执行程序中的示教工作,用于保存焊接过程需要通过的3个关键点(安全点,焊接的起收弧的两个端点)的信息,“Auto_Weld”用于执行焊道计数、计算焊道路径与执行焊接的功能,焊道计数功能是程序内部调用的“FOR语句”控制的,计算焊道路径是调用的“n_weled_calc”和“Path_calc ”子程序完成,焊接功能是程序内部调用的“welding”子程序完成。
FUNC num n_weled_calc(num a, num b)
VAR num sum:=0;
VAR num i;
FOR i FROM 1 TO a-1 DO
sum:= sum + Passes_Fill{i};
ENDFOR
sum:=sum + b;
RETURN sum;
ENDFUNC
“n_weled_calc”子程序段的格式可以看出与前面两段采用的PROC程序有所区别,它的格式如下:
FUNC <返回值类型><程序名>(形参1,形参2…)
***程序中执行的指令;
ENDFUNC
FUNC我们一般称作为有返回值的程序,它是这段程序的开始;
<返回值类型>用于规定这段程序返回值的类型,如num、bool等;
<程序名>即为这段程序的名称,其他程序可以通过程序名来调用这段程序;
<形参>表示这段程序被调用时需要被传到该程序中的一些值,通常这些值用来参加程序中的计算;
ENDFUNC表示这段程序的结束。
其余程序段:
PROC Path_calc(num n, num i, num j, PERS tooldata tWeldGun, PERS wobjdata wobj_piece)
Dy:=...............;
Dz:=...............;
IF n MOD 2 <> 0 THEN
p_arcon:=...............;
p_arcoff:=..............;
ENDIF
p_arcon:=Offs(p_end,0,Dy,Dz);
p_arcoff:=Offs(p_start,0,Dy,Dz);
ENDPROC
“轨迹计算程序”
PROC welding()
MoveJ p_sec,v50,z20,tWeldGun\WObj:=wobj_piece;
ArcLStart p_arcon, v50, seam1, weld1, fine, tWeldGun\WObj:=wobj_piece;
ArcLEnd p_arcoff, v50, seam1, weld1, fine, tWeldGun\WObj:=wobj_piece;
MoveJ p_sec,v50,z20,tWeldGun\WObj:=wobj_piece;
ENDPROC
“焊接执行程序”
完整版程序见https://download.csdn.net/download/ZW_finder/43102060