大神们麻烦帮小弟看一下这段代码的意思 点击:820 | 回复:5



小趴菜123

    
  • 精华:0帖
  • 求助:5帖
  • 帖子:7帖 | 5回
  • 年度积分:143
  • 历史总积分:193
  • 注册:2020年10月23日
发表于:2022-10-29 09:59:53
楼主
求助帖30分-未结帖

在我的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



楼主最近还看过



IAN CHIANG

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 29回
  • 年度积分:325
  • 历史总积分:376
  • 注册:2017年12月08日
发表于:2022-10-29 13:43:16
1楼

if $in[12]==true then
CWRITE($CMD,STAT,MODE,"RUN/R1/CELL()") ->應該是呼叫CELL這隻檔案執行
endif

BasisTech_PLC_LOOP() ->單純看程序是再狀態列秀出字元


以上是憑印象回答的,不敢保證是否正確


121111115

  • [版主]
  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 378回
  • 年度积分:594
  • 历史总积分:21966
  • 注册:2016年1月20日
发表于:2022-10-29 22:17:43
2楼

意思是创建$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像是一个警告,不太像是完成操作的标志,所以具体还得看你这个是干什么用的。

USB_KEY

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1002回
  • 年度积分:0
  • 历史总积分:935
  • 注册:2019年3月26日
发表于:2022-11-03 12:50:15
3楼

多谢分享实用的资料

Smile-lyc

  • [管理员]
  • 精华:127帖
  • 求助:50帖
  • 帖子:3482帖 | 22331回
  • 年度积分:1963
  • 历史总积分:145694
  • 注册:2006年8月04日
发表于:2022-12-14 10:00:49
4楼

感谢求助者和答疑者对求助答疑板块的厚爱,赠人玫瑰,手留余香。

对于求助者要求:

1、请在一个月内自行结贴,把悬赏积分(如果设置积分悬赏求助)发放给答疑者;

2、如果在求助答疑过程中,自己已经有效解决问题,建议大家把解决问题方法在自己求助帖分享,有效分享可以获得50积分奖励。

3、求助答疑板块版主结贴时间一般滞后30~45天,以方便大家对求助问题答疑足够时间,也为了每一个优秀答疑人员都可以获取到自己的积分和MP奖励。



见v_v见

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 54回
  • 年度积分:759
  • 历史总积分:959
  • 注册:2023年4月17日
发表于:2023-04-17 15:33:51
5楼

不太明白什么意思,顺着理解,不难


热门招聘
相关主题

官方公众号

智造工程师