回复:【分享】SCL编写模拟量监视功能块,用于S7-300

宁超

  • 帖子

    1009
  • 精华

    39
  • 被关注

    373

论坛等级:至圣

注册时间:2012-12-11

普通 普通 如何晋级?

发布于 2016-05-26 21:44:28

8楼

报警消息的处理:

我记得同事说以前有一个项目,报警消息使用的都是Alarm8P,功能块大概使用了200多个后就CPU412-5H直接不行了,怎么调用的Alarm8P呢?

直接CALL,每周期都扫描所有的Alarm8P,但其实CPU手册里总有一项写明了该CPU同时处理的消息块的个数,越低端这个数越小。占用不少CPU资源呢。因此做了以下处理:

  1. CPU刚启动的时候不调用,此时CPU要干的事情太多,而此时的报警也基本毫无意义。

  2. 只有当消息状态有变化的时候才调用消息功能块。

  3. ....

    S7300CPU被省略了后面的处理(这下面代码其实是不够完善的处理)

//报警消息处理

 //Alarm Message   

         MsgEff1[0]:=QHHA;

         MsgEff1[1]:=QHW;

         MsgEff1[2]:=QLW;

         MsgEff1[3]:=QLLA;

         MsgEff1[4]:=FALSE;

         MsgEff1[5]:=FALSE;

         MsgEff1[6]:=FALSE;

         MsgEff1[7]:=FALSE;

         

          

   IF (RunUpCyc = 0)  AND (MsgEffOld<>MsgEff)THEN 

    

            IF (MsgEff AND 16#01) <> ( MsgEffOld AND 16#01)THEN 

            iRet1:=  ALARM_SQ(SIG := MsgEff1[0]  // IN: BOOL

                     ,ID :=W#16#EEEE  // IN: WORD

                     ,EV_ID :=MsgEvID1  // IN: DWORD

                     ,SD :=SD1  // IN: ANY

                     ); // INT

            END_IF;

            IF  (MsgEff AND 16#02) <> ( MsgEffOld AND 16#02) THEN   

            iRet2:=   ALARM_SQ(SIG :=MsgEff1[1]   // IN: BOOL

                      ,ID :=W#16#EEEE  // IN: WORD

                      ,EV_ID :=MsgEvID2  // IN: DWORD

                      ,SD :=SD2  // IN: ANY

                      ); // INT

             END_IF; 

             IF  (MsgEff AND 16#04) <> ( MsgEffOld AND 16#04)THEN  

             iRet3:=  ALARM_SQ(SIG :=MsgEff1[2]   // IN: BOOL

                     ,ID :=W#16#EEEE  // IN: WORD

                     ,EV_ID :=MsgEvID3  // IN: DWORD

                     ,SD :=SD3  // IN: ANY

                     ); // INT  

             END_IF;    

             IF  (MsgEff AND 16#08) <> ( MsgEffOld AND 16#08)THEN  

             iRet4:=  ALARM_SQ(SIG :=MsgEff1[3]   // IN: BOOL

                     ,ID :=W#16#EEEE  // IN: WORD

                     ,EV_ID :=MsgEvID4  // IN: DWORD

                     ,SD :=SD4  // IN: ANY

                     ); // INT  

             END_IF;                                 

                     

    END_IF;  

    MsgEffOld:=MsgEff ;  


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54774条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。