在我的SPS.SUB中有个LOOP一直在循环,等待$IN[12]这个信号被触发,然后执行下面的IF语句。
这段IF中的意思是。。。。。。。求解
下划线的两行没明白,手册也讲的很乱!
if $in[12]==true then
CWRITE($CMD,STAT,MODE,"RUN/R1/CELL()")
endif
WAIT FOR NOT($POWER_FAIL)
BasisTech_PLC_LOOP()
IF BM_ENABLED THEN
BM_OUTPUTSIGNAL = BM_OUTPUTVALUE
ENDIF
ENDLOOP
还有下面的子程序在BAS.scr里的如下
GLOBAL DEF BasisTech_PLC_LOOP()
DECL KRLMSG_T MSG
DECL KRLMSGPAR_T MsgPar[4]
DECL KRLMSGOPT_T Opt
DECL BOOL bDummy
MSG.Nr = 6789
MSG.MODUL[] = "TechHandler"
MSG.MSG_TXT[] = "EasyTeachKeepOriWarning"
Opt = {VL_STOP FALSE, CLEAR_P_RESET FALSE, LOG_TO_DB TRUE}
IF EasyTeachKeepOriWarning THEN
IF EasyTeachKeepOriHandle == 0 THEN
EasyTeachKeepOriHandle = SET_KRLMSG(#State,MSG,MsgPar[],Opt)
ENDIF
ELSE
IF EasyTeachKeepOriHandle > 0 THEN
bDummy=Clear_KrlMsg(EasyTeachKeepOriHandle)
IF bDummy THEN
EasyTeachKeepOriHandle = 0
ENDIF
ENDIF
ENDIF
END
楼主最近还看过
意思是创建$CMD,STAT,MODE,"RUN/R1/CELL()" 这个进程的运行、这一看就是系统操作。
等待系统电源满,看到这里我觉得你这个像是个充电的东西吧。如果没满就循环执行BasisTech_PLC_LOOP()这个函数。
下面是如果BM_ENABLED这个标志为1了就把输出信号改成输出变量,并结束循环。看起来像是电充满了哈哈。
子程序里像是通讯,但又像是报警的处理,就是发生警告以后判断标志EasyTeachKeepOriHandle,如果为0则加载定义的那几个参数到KRLMSG,并把执行加载的结果返回给EasyTeachKeepOriHandle,结束。如果没有发生报警且EasyTeachKeepOriHandle不为0则对EasyTeachKeepOriHandle进行清空操作,清空结果返回给bDummy,如果清空了,结束,如果没清空则强制EasyTeachKeepOriHandle为0,下一波EasyTeachKeepOriHandle直接为0,加载参数结束。再下一波EasyTeachKeepOriHandle不为0,执行清空操作······来回这么操作。
这么一看像极了轮询程序,你只要修改你加载的那几个参数(应该主要是这个MsgPar[]),在程序执行每一次加载任务时加载不同的参数最会对不同的站进行访问,构成一个间接寻址的程序。但是这个Warning像是一个警告,不太像是完成操作的标志,所以具体还得看你这个是干什么用的。