MODULE Module1
CONST robtarget EXTREME:=[[200.001,126.279387098,-390.936633595],[0.707089442,-0.004951901,0.004951901,0.707089442],[0,0,0,1],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget Target_10:=[[0,0,0],[0.707106781,0,0,0.707106781],[0,-2,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget Target_20:=[[400,0,0],[0.707106781,0,0,0.707106781],[-1,1,-2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
CONST num SHUT_DOWN := -1;
CONST num TO_WAIT := 0;
CONST num TO_PAINT := 1;
CONST num TO_INTRODUCE := 2;
VAR speeddata drawingSpeed;
VAR num speedLevel := 0;
VAR num flag := 0;
VAR bool repeat := TRUE;
//VAR:变量,程序运行中可以被赋值,但是程序复位后会变为初始值
//PERS:可变量,程序运行中,可以被赋值,并且***保持***最后一次赋值结果
//CONST:常量,程序运行中,不可被赋值,作为固定值存储
PERS pos tgPos{500};
VAR num targetsNum;
//FUNC 功能程序能够返回一个特定数据类型的值,在其他程序中当做功能来调用。
// create_robtarget函数:输入点坐标pos ,返回一个目标点robtarget
FUNC robtarget create_robtarget(pos position)
RETURN [position,[0.707106781,0,0,0.707106781],[1,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
ENDFUNC
//shifting函数:输入标志base ,返回一个机器人运动速度speeddata
FUNC speeddata shifting(num base)
IF base = 0 THEN RETURN v100;
ELSEIF base = 1 THEN RETURN v300;
ELSEIF base = 2 THEN RETURN v600;
ELSE RETURN v1000;
ENDIF
ENDFUNC
// variable initialization 变量初始化
FUNC bool init()
drawingSpeed := shifting(speedLevel); //设置机器运动速度为speedLevel:=0;即v100
targetsNum := 0; //机器人运动点数归零
repeat := TRUE;//重复运动
flag := 0;
RETURN TRUE;
ENDFUNC
//机器人运动规划的路径
PROC EX_PAINT()
VAR num i := 2;
drawingSpeed := shifting(speedLevel);
// 对机器人的姿态控制指令可分为四种,分别是关节插补姿态控制(ConfJ)、
//直线插补姿态控制 (ConfL)、奇异点姿态控制(SingArea)和
//圆弧插补姿态控制(CirPathMode)。
//ConfL\on或off 如离线编程创建目标点或手动示教相邻两目标点
//间轴配置数据相差较大时,在机器人运动过程中容易出现报警“轴配置错误”而造成停机。
//此种情况下,若对轴配置要求较高,则一般通过添加中间过渡点;
//若对轴配置要求不高,则可通过指令ConfL\Off关闭轴监控,
//使机器人自动匹配可行的轴配置来到达指定目标点。
ConfL \Off;
//从待机位点到目标点tgPos{1}
MoveL create_robtarget(tgPos{1}), shifting(3), z100, Pen_TCP\WObj:=canvas1;
//重复运动下一个点位
WHILE repeat DO
MoveL create_robtarget(tgPos{i}), drawingSpeed, z100, Pen_TCP\WObj:=canvas1;
i := i + 1;
//目标点走完,结束机器人运动
IF i > targetsNum THEN repeat := FALSE; ENDIF
ENDWHILE
//标志由0变成1
flag := TO_WAIT;
//归零,运动完成之后,初始化
repeat := TRUE;
i := 2;
//返回待机位点
MoveL EXTREME,shifting(3),z100,Pen_TCP\WObj:=canvas1;
ENDPROC
//等待
PROC EX_INTRODUCING()
flag := TO_WAIT;
ENDPROC
! main process
PROC main()
IF init() = TRUE THEN //如果机器人已经初始化
//用于使机器人可以在奇异点运动,使用完这个指令之后记得SingArea\off,关闭指令
SingArea \Wrist;
//机器人运动到待机位点 可以通过EXTREME设置待机位点
MoveL EXTREME,v1000,z100,Pen_TCP\WObj:=canvas1;
//一种自制的事件处理程序---1为走轨迹,2为紧急停止
WHILE flag > SHUT_DOWN DO
//如果标志为TO_PAINT --1,即机器人运行函数EX_PAINT--走轨迹
IF flag = TO_PAINT THEN EX_PAINT; ENDIF
//如果标志为 TO_INTRODUCE--2,即机器人运行函数EX_INTRODUCING--等待
IF flag = TO_INTRODUCE THEN EX_INTRODUCING; ENDIF
WaitTime 0.2;
ENDWHILE
ENDIF
ENDPROC
ENDMODULE
09-19
1668
