呵呵......这次纯理论。
程序结构:
DEF CELL()
;FOLDAUTOMATIK EXTERN ;%{SE}%MKUKATPVW,%C,%V
Folgenummerberechnen
Folgestarten
关键词:机器人原位,外部自动,SPS程序状态,程序号
-CELL的功能:只能检测是否在原点,PLC给入得程序号是否正确,打开FOLGEN程序。
AUTOMATIK EXTERN -外部自动
-主要是初始化设置,检测机器人是否在原位,是否在外部自动状态。
INT I,J,CELL_CNT
BOOL IS_ANY_BIT
STEP=0-变量规0,证明在CELL程序的开始步
PGNO=0-执行的程序号规0
CELL_CNT=0-变量规0,
P0_MERKER=TRUE -返回在原位条件
-$OUT[PF0]=(P0_MERKER OR(DownLoadActive AND ($Mode_OP==#EX))) AND $IN_HOME
- 发出机器人在原位的条件-
$OUT[LPKT]=FALSE -关闭A14结束机器人程序在最后一点
VW_INB=FALSE ; -外部自动程序还没有运行
VW_CBY_CELL=TRUE–已经在CELL
VW_CALL_CELL=FALSE–关闭调用CELL
IF $MODE_OP==#EX THEN -工作模式:外部自动
IF NOT $IN_HOME THEN-如果没有在机器人原点会提示:
$LOOP_MSG[]=" "
$LOOP_MSG[]="KeyWord_WaitingForPF0"–等在钥匙语言——PF0机器人在原位
$LOOP_CONT=TRUE
WAITFOR($IN_HOME) OR ( NOT $LOOP_CONT AND($MODE_OP<>#EX))
$LOOP_MSG[]=" "
ENDIF
ENDIF
;ENDFOLD
;FOLDFolgenummerberechnen- 程序号的核实
-检查程序号是否大于0 ,- 机器人状态是否在轨迹上,-SPS指令是否在执行-是否在外部自动;%{SE}%MKUKATPVW,%C,%V
IF(P_OLD<>0) AND ($MODE_OP==#EX)THEN
-上次的程序号- 外部自动状态-
IF P_TYPE==0 THEN;外部自动号输入方式:0
PGNO=P_SELECT–上次的程序号的存储
STEP=1
ELSE;-其他程序控制方式时,如1
IF(P_SELECT>0) AND (P_SELECT<17)THEN -如果程序号在范围内0-17
PGNO=1
FOR I=1 TO(P_SELECT-1)-程序号的换算
PGNO=PGNO*2
ENDFOR
STEP=1
ELSE–不在程序号在范围内0-17,进行清0
STEP=0
PGNO=0
ENDIF
ENDIF
ENDIF
IF(P_SELECT>0) AND ($MODE_OP<>#EX)THEN–不是外部自动-
IF P_TYPE==0 THEN
PGNO=P_SELECT
STEP=1
ELSE;1 AUS N
IF(P_SELECT>0) AND (P_SELECT<17)THEN-如果程序号在范围内0-17
PGNO=1
FOR I=1 TO(P_SELECT-1)
PGNO=PGNO*2
ENDFOR
STEP=1
ELSE–不在程序号在范围内0-17,进行清0
CELL_CNT=1
STEP=0
PGNO=0
ENDIF
ENDIF
ENDIF
LOOP
IF(( NOT $ON_PATH) AND ($MODE_OP<>#EX))THEN;
-机器人没在轨迹上-也没不外部自动
IF CELL_CNT==1 THEN
IF P_TYPE==0 THEN;
PGNO=P_OLD
STEP=1
ELSE;1 AUS N
IF(P_OLD>0) AND (P_OLD<17)THEN
PGNO=1
FOR I=1 TO(P_OLD-1)
PGNO=PGNO*2
ENDFOR
STEP=1
ELSE
PGNO=0
STEP=0
ENDIF
ENDIF
ENDIF
CELL_CNT=CELL_CNT+1
ELSE
IF $ON_PATH THEN-机器人在轨迹上
STEP=0
ENDIF
ENDIF
IF($PRO_STATE0<>#P_ACTIVE)THEN-SPS程序没有在激活状态-
$LOOP_MSG[]=" "
$LOOP_MSG[]="Keyword_StartSpsSub "
-提示激活SPS后台程序-
$LOOP_CONT=TRUE
WAITFOR($PRO_STATE0==#P_ACTIVE)-SPS程序激活状态-
$LOOP_MSG[]=" "
ENDIF
$LOOP_MSG[]="KeyWord_WarteAufGueltigeFolgenummer "
-提示等待机器人程序号给入
IFSTEP==0 THEN
IS_ANY_BIT=FALSE
REPEAT-循环执行指令
OUT_WPROZ=FALSE
OUT_WSLAV=TRUE
IF(PRG_NR <= 0)THEN–程序号给入不正确(A1 – A8)
IS_ANY_BIT = FALSE
PGNO=0
ELSE
IS_ANY_BIT = TRUE–程序号位检测正确
PGNO = PRG_NR-正确,给入程序号大于0
ENDIF
UNTIL IS_ANY_BIT-退出指令条件
OUT_WPROZ=FALSE
OUT_WSLAV=FALSE
ENDIF
STEP=0
;ENDFOLD
;FOLDFolgestarten打开Folge程序
-程序启动-
SWITCH P_TYPE -程序使用类型选择
CASE 0 ;-以整数形式接受发出程序号
SWITCH PGNO
CASE 10-如程序满足选择程序10
FOLGE10()-执行程序10
CASE 124
FOLGE124()
CASE 125
FOLGE125()
ENDSWITCH
CASE 1 以2进制控制程序号
SWITCH PGNO
CASE 1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768
SWITCH PGNO
CASE-1
ENDSWITCH
ENDSWITCH
ENDSWITCH
WAITSEC 0.001
ENDLOOP
END
编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !