KUKA机器人指令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指令样板
各种输出
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※$out[1]=true
$out[appl_run]=false ;外部自动信号
$out_c[1]=true
pulse($out[1],true,0.1)
TRIGGER WHEN PATH=0 DELAY=0 DO $OUT[1]=TRUE ;PATH=±2000mm,DELAY=±1000ms,受运动点限制TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[1]=TRUE ;不推荐
TRIGGER WHEN DISTANCE=1 DELAY=0 DO $OUT[1]=TRUE ;不推荐
TRIGGER WHEN path=0 DELAY=2 DO PULSE($OUT[1],TRUE,.2)
TRIGGER WHEN PATH=0 DELAY=0 DO clean_pulse=FALSE
TRIGGER WHEN PATH=0 DELAY=0 DO clean_pulse=FALSE
时间:等待与延时、计时器
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※$timer[1]=5
启动:$TIMER_STOP[Nr] = FALSE
停止:$TIMER_STOP[Nr] = TRUE
wait sec 5
wait for $in[1]
$ROB_TIMER机器人运行时间,只读参数,整形变量,单位ms
例:
INT time_r
INI
time_r=$ROB_TIMER
标示
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※$flag[1]=$in[1] and $in[2]
$cycflag[1]=$in[1] and $in[2]
wait for $cycflag[2]
计数器
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
i[1]=5
INTERRUPT中断指令
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
例1:
GLOBAL INTERRUPT DECL 100 WHEN e_stop==FALSE DO robot_stop( )
PTP HOME Vel= 100 % DEFAULT
INTERRUPT ON 100
LOOP
…
…
ENDLOOP
INTERRUPT OFF 100
PTP HOME Vel= 100 % DEFAULT
END
-------------------------------------
def robot_stop()
INTERRUPT OFF 100
BRAKE
WAIT FOR (E_stop)
CONTINUE
INTERRUPT ON 100
End
例2:
DEF CELL ()
INIT
BASISTECH INI
$out[appl_run]=false
CHECK HOME
PTP HOME Vel= 100 % DEFAULT
AUTOEXT INI
LOOP
INTERRUPT DECL 100 WHEN $out[236]==TRUE do Backhome() ;声明中断100
...
INTERRUPT ON 100 ;打开中断100
P00 (#EXT_PGNO,#PGNO_GET,DMY[],0 )
SWITCH PGNO ; Select with Programnumber
CASE 9
P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ); Reset Progr.No.-Request
purge (); Call purge
DEFAULT
P00 (#EXT_PGNO,#PGNO_FAULT,DMY[],0 )
ENDSWITCH
INTERRUPT OFF 100 ;关闭中断100 ENDLOOP
------------------------------------------------------------
DEF Backhome() ;中断子程序
INTERRUPT OFF 100 ;中断生效后立即关闭中断防多次触发
$TIMER_STOP[2]=TRUE
$TIMER[2]=0
BRAKE;终止当前动作
PTP XHOME ;返回Home点(中断中不能轨迹逼近)...
RESUME;返回声明程序层面的触发位置
END
码垛模式开关
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
$PAL_MODE = TRUE
暂停与刹车
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
HALT
brake
高级运动指令
PTP {A1 0, A2 -80, A3 75, A4 30, A5 30, A6 110}
PTP {X 100, Y -50, Z 1500, A 0, B 0, C 90, S 3, T3 35}
PTP {A1 30}
PTP {X 200, A 30}
CIRC XP3, XP4, CA 190 ;沿着当前点计算的轨迹运行190°
CIRC XP3, XP4, CA -190 ;先走目标点,再走辅助点。
CIRC {X 100, Y ...}, {X 150, Y ...}, CA 180
SRC.完整的动作语句指令包括:
1.指定速度/参数:
PDAT_ACT=PPDAT1(PTP点)
LDAT_ACT=LCPDAT23(CP点)
2.指定坐标系参数(CIRC只需要记录目标点的坐标系参数及姿态):
FDAT_ACT=FP1
将语句速度带入BAS()宏程序中,此函数作用非常多,速度只是其一。
BAS(#PTP_PARAMS,100)
3.指定运动方式/位置/预进:
PTP XP1
LIN XP1
PTP XP1 C_DIS (仅限于PTP→CP模式)
PTP XP1 C_PTP (仅限于PTP→PTP模式)
LIN XP3 C_DIS
CIRC XP4, XP5 C_DIS
PTP实例:
PTP Maduo Vel=100 % PDAT1 Tool[1] Base[0]
$BWDSTART=FALSE→为了兼容性保留的参数,写TRUE或FALSE没影响
PDAT_ACT=PPDAT1
FDAT_ACT=Fmaduo
BAS(#PTP_PARAMS,100)
PTP Xmaduo
LIN实例:
LIN P3 CONT Vel=0.8 m/s CPDAT23 Tool[1] Base[0]
$BWDSTART=FALSE
LDAT_ACT=LCPDAT23
FDAT_ACT=FP3
BAS(#CP_PARAMS,0.8)
LIN XP3 C_DIS
CIRC实例:
CIRC P4 P5 CONT Vel=0.5 m/s CPDAT24 Tool[1] Base[0]
$BWDSTART=FALSE
LDAT_ACT=LCPDAT24
FDAT_ACT=FP5→只有一个FDAT,无需辅助点的姿态及坐标系
BAS(#CP_PARAMS,0.5)
CIRC XP4, XP5 C_DIS
DAT文件:
DECL E6POS Xmaduo={X 2351.64502,Y 316.603394,Z 392.080292,A -114.480301,B 14.86026,C 174.518799,S 2,T 43,E1
0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}
DECL FDAT Fmaduo={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " ",TQ_STATE FALSE}
DECL PDAT PPDAT1={VEL 100.0,ACC 100.0,APO_DIST 100.0}
DECL E6POS XP3={X 2342.65991,Y 488.290497,Z 273.178101,A -114.029404,B 8.39402199,C 176.497101,S 2,T 43,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}
DECL FDAT FP3={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] " ",TQ_STATE FALSE}
DECL LDAT LCPDAT23={VEL 2.0,ACC 100.0,APO_DIST 100.0,APO_FAC 50.0,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC
50.0,EXAX_IGN 0}
DECL E6POS XP4={X 2322.7251,Y 497.332306,Z 276.723114,A -84.1798706,B 12.8147297,C 175.826294,S 2,T 43,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}
DECL E6POS XP5={X 2267.14697,Y 496.700012,Z 279.398407,A -7.00408697,B 8.41247082,C 176.494202,S 2,T 35,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}
DECL FDAT FP5={TOOL_NO 1,BASE_NO 0,IPO_FRAME #BASE,POINT2[] "XP4",TQ_STATE FALSE}
DECL LDAT LCPDAT24={VEL 2.0,ACC 100.0,APO_DIST 100.0,APO_FAC 50.0,ORI_TYP #VAR,CIRC_TYP #BASE,JERK_FAC
50.0,EXAX_IGN 0}
相对运动,相对当前位置
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
PTP_REL {A3 45}
PTP_REL {Z 200}
PTP_REL {X 100,Z -200}
LIN_REL {X 100,Z -200} ; #BASE 为默认设置
LIN_REL {X -100} #TOOL
myposition.x = myposition.x + 100;给x 值加上100mm
myposition.t = 35 ; 设置转角方向值
$POS_ACT:当前的机器人位置(E6POS),使用前必须先声明其tool与base:
For example:$tool=tool_data[1]
$base=base_data[7]
xp200 = $pos_act
$AXIS_ACT:基于轴坐标的当前机器人位置(额定值)(E6PAxis)。
例:IF $POS_ACT.Z<=500 then
......
Endif
机器人当前位置(REAL)↔ I/O
Signal x $OUT[1] to $ OUT [32]
Signal y $ OUT [33] to $ OUT [64]
Signal z $ OUT [65] to $ OUT [96]
Signal a $IOUT [97] to $ OUT [128]
Signal b $ OUT [129] to $ OUT [160]
Signal c $ OUT [161] to $ OUT [192]
x=$POS_ACT.x*1000+8388608
y=$POS_ACT.y*1000+8388608
z=$POS_ACT.z*1000+8388608
a=$POS_ACT.a*1000+8388608
b=$POS_ACT.b*1000+8388608
c=$POS_ACT.c*1000+8388608
※":"偏移法(矢量和计算,计算相对参考坐标系的新位置)
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
注意:workpiece矢量需考虑Table方向
例子1
Decl Pos P1
P1=base_data[1]:XP1 ;P1是指某点相对于地球坐标的位置信息,它是由base1坐标与在base1上的点的位置信息XP1矢量变换
例子2
LIN $ACT_POS:{X -100,y 0,z 0,a 0,b 0,c 0} :由当前位置沿工具坐标X负方向直线运动100mm
主要应用于FRAME的相对偏移,如:
BASE_DATA[1]=$NULLFRAME:Xp_base ;已知位置点PTP Xp_base TOOL[1] BASE[0],将此点转化为base数据DECL FRAME P_POSITION[ceng1,ge1]
BASE_DATA[3]=BASE_DATA[4]
BASE_DATA[3]=BASE_DATA[3]:P_POSITION[ceng1,ge1]
其它用法:
PTP XP1:{X 0,Y -20,Z 30,A 0,B 0,C 0}
Lin xPickPos : {X 0,Y 0,Z -50, A 0, B 0,C 0}
※不适用于POS,E6POS.需注意,对于S,T,E1,E2,E3,E4,E5,E6,会直接使用后面的值覆盖前面的值。
例如:
DECL POS XP1,XP2,XP3
INI
XP1={X 990,Y 400,Z 700,A -113,B 0,C -179,S 2,T 43}
XP2={X 0,Y 0,Z 0,A 0,B 0,C 0,S 0,T 0}
XP3=XP1:XP2
查看xp3的值可知
XP3={X 990,Y 400,Z 700,A -113,B 0,C -179,S 0,T 0}
程序速度:
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
$ov_pro;程序速度,(范围:1-100,单位:%),面板显示数值随之改变
$ov_rob;机器人真正执行的速度,不能直接编辑 $ov_rob=$ov_pro * $red_vel
$red_vel;降低后会降低机器人速度,但面板上的程序速度不变。
(实测写入SPS后重启会报警,需加入逻辑判断)
速度($VEL_MA/$ACC_MA可在machine.dat中查看):
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※$VEL_AXIS[x]=100% ;针对PTP x=1...8,针对对单轴,最大值100% $VEL={CP 2.0,ORI1 300.0,ORI2 300.0} ;针对 CP 模式,范围【0.0 … $VEL_MA】$VEL.CP = 2.0 ;轨迹速度,最大值2[m/s]
$VEL.ORI1=300 ;回转速度[°/s]
$VEL.ORI2=300 ;旋转速度[°/s]
加速度
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※$ACC_AXIS[x]=100% ;针对 PTP x=1...8,针对每个轴,最大值100% $ACC={CP 5.0,ORI1 500.0,ORI2 500.0} ;针对 CP 模式,范围【0.0 … $ACC_MA】$ACC.CP=2.0 ;轨迹加速度,[m/s2]
$ACC.ORI1=200 ;回转加速度[°/s2]
$ACC.ORI2=500 ;旋转加速度[°/s2]
姿态
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
LIN/CIRC
$ORI_TYPE = #CONSTANT;姿态引导
$ORI_TYPE = #VAR;稳定的方向导引
$ORI_TYPE = #JOINT;标准或手动PTP
CIRC
$CIRC_TYPE = #PATH;圆周运动时以轨迹为参考恒定姿态
$CIRC_TYPE = #BASE;圆周运动时以基座标为参考恒定姿态
外部工具
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
$IPO_MODE = #BASE;工具在法兰上,默认
$IPO_MODE = #TCP;固定工具
轨迹逼近/continue
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
1.高级语句中的continue是用来给打断轨迹逼近的指令用的,如$OUT[2]=true会打断轨迹
逼近,可以在前面加continue:
continue
$OUT[2]=true
加入continue后,输出会在预读过程即被触发,预读行受$advance控制。
例:
1. PTP HOME 。
2. LIN P1 CONT 。
3. LIN P2 CONT 。
4. LIN P3 CONT 。
5.→LIN P4 CONT 。
6. CONTINUE
7. $OUT[2]=true
8. LIN P5 CONT 。
9. LIN P6 CONT 。
当$advance=0时,较特殊,无预读,continue会在主进度条下被触发,即第7行,走到P4点时触发输出。
当$advance=1时,预读行在主进度条下一行,即主运行到第5行,走到P3点向P4点运动时触发输出。
当$advance=2时,预读行在主进度条下两行,即主运行到第4行,走到P2点向P3点运动时触发输出。
当$advance=3时,预读行在主进度条下三行,即主运行到第3行,走到P1点向P2点运动时触发输出。
2.动作指令中的 CON 在FOLD被打开后并不是continue,而是C_DIS之类的参数。
例:LIN ABLAGE[4] C_DIS;机器人运行到一个位置并轨迹逼近点ABLAGE[4]
3.因运动模式不同而不同(只要含有CP点就用C_DIS,只有PTP-PTP用且必须用C_PTP)
a.PTP XP1 C_DIS (仅限于PTP→CP模式)
b.PTP XP1 C_PTP (仅限于PTP→PTP模式)
c.LIN XP3 C_DIS
d.CIRC XP4, XP5 C_DIS
e.LIN XP1 C_ORI
f.LINXP1 C_VEL
4.参数设置
$APO.CPTP =100.0 ; [%] 百分数,1-100,当与下一个点的距离低于100时触发轨迹逼近,最大值
(100)即两点距离的一半
$APO.CDIS = 250.0 ; [mm] 距离,当与下一个点的距离低于250时触发轨迹逼近
$APO.CORI = 50.0 ; [°] 角度,当主导姿态角低于50时触发轨迹逼近
$APO.CVEL = 75.0 ; [%] 百分数,1-100,当机器人驶向目标点并减速时速度低于75时触发轨迹
逼近
运行模式
$MODE_OP=操作模式Operating mode
例:
IF($MODE_OP==#T2)OR($MODE_OP==#AUT)OR($MODE_OP==#EX)THEN
$OV_PRO=50 ;非T1模式下速度限制
ENDIF
循环
无限循环
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※loop
exit
endloop
IF循环
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※if $flag[1] then
$out[1]=false
else
$out[1]=true
Endif
if($in[10] and ( not $in[3]))then
LIN waitpoint CONT Vel=0.5 m/s CPDAT18 Tool[1]:Charles_Test Base[1]:Charles_test endif
当。
WHILE循环
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※while $flag[1]
ptp xhome
endwhile
for循环(必须使用INT变量,不能使用计数器I[x])
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※for i=1 to 5
$out[i]=true
endfor
REPEAT直到型循环
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※repeat
ptp xhome
i=i+1
$out[1]=true
until i==5
选择开关switch(i可以是整形INT,也可是枚举数据ENUM)
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※switch i
case 1
ptp xhome1
case 2
ptp xhome2
case 3
ptp xhome3
default
ptp xp1
endswitch
各种定义
常用四种变量
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
DECL INT counter=2
DECL REAL price=-27.3509827
DECL BOOL error=true
DECL CHAR symbol=”ready”
在DAT文件中声明后最好立即初始化,在SRC中声明与初始化要分离
位置变量:
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※DECL E6AXIS XP12;-------------------(A1,A2,A3,A4,A5,A6,E1,E2,E3,E4,E5,E6)DECL AXIS XP12;------------------------------------------------AXIS不包含E1-E6 DECL E6POS XP12;---------------------(X,Y,Z,A,B,C,S,T,E1,E2,E3,E4,E5,E6)DECL POS xp12;------------------------------------------------ POS不包含E1-E6 DECL FRAME xp12;----------------------------FRAME其实就是坐标系,不包含E1-E6,不包含
状态S和转角T,如Base跟Tool就是FRAME.例:
变量查寻base_data[1],$tool
1.机器人控制器仅在 PTP 运动时才会考虑编程的状态S和转角方向值T。
在 CP运动时会将
它们忽略
2.所以FRAME型位置变量不能用于程序的第一点(包括HOME点)。
定义全局变量
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
定义的后面添加:GLOBAL,或直接在config.dat内定义
例:DECL GLOBAL INT counter
枚举数据类型
ENUM COLOR_TYPE green, blue, red, yellow ;定义一种枚举数据类型,可扩展超过250个常量STRUC CAR_TYPE INT motor, REAL price, COLOR_TYPE car_color ;可穿插进结构变量声明使用
DECL COLOR_TYPE my_color ;声明一个枚举变量,名称必须以_TYPE结尾
my color =#green ;枚举变量初始化,必须以“#”开头
结构
STRUC CAR_TYPE INT motor, REAL price, BOOL air_condition, CHAR car_model[15] , POS car_pos 定义结构DECL CAR_TYPE my_car ;声明结构变量my_car = {price 14999.95, motor 50, air_condition TRUE} ;结构变量的初始化两种赋值方法的区别:使用“{}”赋值不必注意顺序,只能使用常量赋值,可以只写部分,未定义的部分会被删除。
使用“ .”可以使用变量,只能单一赋值,其它元素保持不变
例:my_car.price = 12000.0 ;电机和空调设备的数值保持不变my_car = {price 12000.0} ;删除电机和空调设备的数值
起点/HOME点
1.HOME点是程序起点的起点与终点
2.HOME点属于系统变量
3.如果不使用HOME点,则程序的起点(第一点)也必须使用PTP运动
4.第一个点必须是完整的位置(不能使FRAME,若是POS,必须有s,t)
5.机器人可以使用不同的起点,如使用$POS_ACT/$AXIS_ACT计算出的数值。
例:
DECL AXIS XP200
INI
XP200=$AXIS_ACT
PTP XP200
……
坐标系
$Base = $Nullframe
$Tool = $Nullframe
$BASE = base_data[x] ; x = 1 (32)
$TOOL = tool_data[x] ; x = 1 (16)
$LOAD = load_data[x] ; x = 1 (16)
号码不能为0
例:
$tool=tool_data[1]
$base=base_data[7]
BASE_DATA[3]=BASE_DATA[4]
BASE_DATA[3]=BASE_DATA[3]:P_POSITION[ceng1,ge1]
$act_tool=1 ;仅改变面板当前坐标系显示,无其它作用
$act_base=2 ;仅改变面板当前坐标系显示,无其它作用
工作空间实例
$workspace[6].x=xp102.x
$workspace[6].y=xp102.y
$workspace[6].z=xp102.z
$workspace[6].x1=xp103.x-xp102.x
$workspace[6].y1=xp103.y-xp102.y
$workspace[6].z1=xp103.z-xp102.z
$WORKSPACE[6].MODE = #off
$workspace[7].x=xp104.x
$workspace[7].y=xp104.y
$workspace[7].z=xp104.z
$workspace[7].x1=xp155.x-xp104.x
$workspace[7].y1=xp155.y-xp104.y
$workspace[7].z1=xp155.z-xp104.z
$WORKSPACE[7].MODE = #inside_stop
例1:
if $workspace[6].state==true then
i=2
endif
if $workspace[7].state==true then
i=4
endif
子程序
用 RETURN 可结束子程序
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※DEF GLOBAL1( )
...
GLOBAL2( )
...
END
———————————————————
DEF GLOBAL2( )
...
IF $IN[12]==FALSE THEN
RETURN ; 跳回GLOBAL1( )
ENDIF
...
END
通过IN/OUT可与子程序参数交互
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※DEF MY_PROG( )
DECL REAL w
DECL INT a, b
...
CALC(w, b, a)
...
CALC(w, 30, a)
...
END
_______________________________________
DEF CALC(ww:OUT, bb:IN, aa:OUT)
;1.) w <-> ww, b -> bb, a <-> aa
;2.) w <-> ww, 30 -> bb, a <-> aa
DECL REAL ww
DECL INT aa, bb
...
END
宏程序FUNCTION
作为 IN 参数进行值传递
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※DEF MY_PROG( )
DECL REAL result, value
INI
value = 2.0
result = CALC(value)
; value = 2.0,value只是输入值,即使在宏程序里面发生了变化也不会回传
; result = 1000.0
END
————————————————————
DEFFCT REAL CALC(num:IN)
DECL REAL return_value, num
num = num + 8.0
return_value = num * 100.0
RETURN(return_value)
ENDFCT
作为 OUT 参数进行值传递
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
DEF MY_PROG( )
DECL REAL result, value
INI
value = 2.0
result = CALC(value)
; value = 10.0,value在宏程序内的变化会被回传至主程序。
; result = 1000.0
END
——————————————————
DEFFCT REAL CALC(num:OUT)
DECL REAL return_value, num
num = num + 8.0
return_value = num * 100.0
RETURN(return_value)
ENDFCT
信息编写
一.编写一套信息需要什么?四大要素。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※handle = Set_KrlMsg(Type, MyMessage, Parameter[ ], Option)
handle = Set_KrlMsg(a, b, c[ ], d)
handle = Set_KrlMsg(类型, 内容, 通配符[ ], 设置项)
1.内容(KrlMsg_T):
这个信息要显示什么?来源与哪?编号多少?
2.类型(E KrlMsg Type):
何种信息,报警还是提示?
3.通配符参数(KrlMsg Par_T):
比如你想要码垛计数不停的显示在示教器上,计数200个,难道要写200个内容吗?能不能把变量显示在信息里呢?答案是可以,通配符就是答案。
每个信息最多可以配套3个通配符1%、2%、3%,通配符可以与通配符参数自由组合。
而信息又可以与通配符自由组合。
4.设置项(KrlMsg Opt_T):
这个信息要触发预进停止吗?退出/重置程序要取消吗?选择语句是要取消吗?要把这个信息写入log库吗?
二.四大元素的在系统中定义的结构:
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
1.内容(KrlMsg_T):
STRUC KrlMsg_T CHAR Modul[24], INT Nr, CHAR Msg_txt[80]
内容来源编号文本
例:
DECL KrlMsg_T mymessage
mymessage = {Modul[ ] "College", Nr 1906, Msg_txt[ ] "My first Message"}
2.类型(E KrlMsg Type):
ENUM EKrlMsgType Notify, State, Quit, Waiting
类型提示状态确认等待
3.通配符参数(KrlMsg Par_T):
STRUC , CHAR Par_txt[26], INT Par_Int, REAL Par_Real, BOOL Par_Bool 通配符参数参数类型通配符文本整型实型布尔
Enum KrlMsgParType_T
参数类型内容关键词空(不用)
例:
如果Msg_txt[1]写的是“Fault in %1”.
Msg_txt[9]写成“%2components missing”.
DECL KrlMsgPar_T Parameter_1[3] ;至少创建1个通配符参数数组,必须是个3位元素的...
DECL INT a
...
a = 13
Parameter_1[1] = {Par_Type #VALUE, Par_txt[ ] "Finisher"}
Parameter_[2] = {Par_Type #VALUE}
Parameter_[2].Par_Int = a
Parameter_[3] = {Par_Type #EMPTY};所有要使用的通配符数组,其元素必须全部赋值
...
Msg_txt[1]是: Fault in finisher
Msg_txt[9]是: 13 components missing
4.设置项(KrlMsg Opt_T):
STRUC KrlMsgOpt_T BOOL VL_Stop, BOOL Clear_P_Reset, BOOL,Clear_SAW, BOOL Log_To_DB 设置项预进停止取消/复位程序删除语句选择删除计入Log数据库
⏹ VL_Stop:预进停止
TRUE 触发一次预进停止。
将信息提示设置为与主进指针同步。
默认:TRUE ⏹ Clear_P_Reset : 在重置/ 取消选择程序时删除
当重置或取消选择程序后,TRUE 将删除所有状态、确认和等待信息。
默认:TRUE ⏹ Clear_P_SAW: 通过按键“选择语句”进行语句选择时删除
通过按键“选择语句” (Satzanwahl) 执行了语句选择后,TRUE 将删除所有状态、确认和等待信息。
默认:FALSE ⏹ Log_To_DB: 记入 Log 数据库
TRUE 使该信息提示记录在 Log 数据库中。
默认:FALSE 三.信息编写常用函数
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
提示信息
DECL KRLMSG_T mymessage
DECL KRLMSGPAR_T Parameter[3]
DECL KRLMSGOPT_T Option
DECL INT handle
...
mymessage={modul[] "College", Nr 1906, msg_txt[] "My first Message"}
Option={VL_STOP FALSE, Clear_P_Reset TRUE, Clear_P_SAW FALSE,Log_to_DB TRUE} ;Placeholders [1..3] are empty
Parameter[1] = {Par_Type #EMPTY}
Parameter[2] = {Par_Type #EMPTY}
Parameter[3] = {Par_Type #EMPTY}
handle = Set_KrlMsg(#NOTIFY, mymessage, Parameter[ ], Option)
...
状态信息
DECL KRLMSG_T mymessage
DECL KRLMSGPAR_T Parameter[3]
DECL KRLMSGOPT_T Option
DECL INT handle
DECL BOOL present, eraser
...
IF $IN[12]==FALSE THEN
mymessage={modul[] "College", Nr 1909, msg_txt[] "My Messagetext"}
Option= {VL_STOP FALSE, Clear_P_Reset TRUE, Clear_P_SAW FALSE,Log_to_DB TRUE} ; 通配符[1..3] 为空
Parameter[1] = {Par_Type #EMPTY}
Parameter[2] = {Par_Type #EMPTY}
Parameter[3] = {Par_Type #EMPTY}
handle = Set_KrlMsg(#STATE, mymessage, Parameter[ ], Option)
ENDIF
eraser=FALSE
; 用于在删除信息提示前停住程序的循环
REPEAT
IF $IN[12]==TRUE THEN
eraser=Clear_KrlMsg(handle) ; 删除信息提示
ENDIF
present=Exists_KrlMsg(handle) ; 附加检查
UNTIL NOT(present) or eraser
确认信息
DECL KRLMSG_T mymessage
DECL KRLMSGPAR_T Parameter[3]
DECL KRLMSGOPT_T Option
DECL INT handle
DECL BOOL present
...
mymessage={modul[] "College", Nr 1909, msg_txt[] "My Messagetext"}
Option= {VL_STOP FALSE, Clear_P_Reset TRUE, Clear_P_SAW FALSE,Log_to_DB TRUE} ; 通配符[1..3] 为空
Parameter[1] = {Par_Type #EMPTY}
Parameter[2] = {Par_Type #EMPTY}
Parameter[3] = {Par_Type #EMPTY}
handle = Set_KrlMsg(#QUIT, mymessage, Parameter[ ], Option)
; 用于在删除信息提示前停住程序的循环
REPEAT
present=Exists_KrlMsg(handle)
UNTIL NOT(present)
等待信息
DECL KRLMSG_T mymessage
DECL KRLMSGPAR_T Parameter[3]
DECL KRLMSGOPT_T Option
DECL INT handle
DECL BOOL present, eraser
...
IF $IN[12]==FALSE THEN
mymessage={modul[] "College", Nr 1909, msg_txt[] "My Messagetext"}
Option= {VL_STOP FALSE, Clear_P_Reset TRUE, Clear_P_SAW FALSE,Log_to_DB TRUE}
; 通配符[1..3] 为空
Parameter[1] = {Par_Type #EMPTY}
Parameter[2] = {Par_Type #EMPTY}
Parameter[3] = {Par_Type #EMPTY}
handle = Set_KrlMsg(#WAITING, mymessage, Parameter[ ], Option) ENDIF
eraser=FALSE
; 用于在删除信息提示前停住程序的循环
REPEAT
IF $IN[12]==TRUE THEN
eraser=Clear_KrlMsg(handle) ;Meldung loeschen
ENDIF
present=Exists_KrlMsg(handle) ;kann über simuliere geloescht worden sein
UNTIL NOT(present) or eraser。