PU414-5H CPU指示灯读取(修改自西门子源程序)第二部分

已锁定

柳叶飘飘

  • 帖子

    95
  • 精华

    7
  • 被关注

    194

论坛等级:侠圣

注册时间:2016-12-08

黄金 黄金 如何晋级?

PU414-5H CPU指示灯读取(修改自西门子源程序)第二部分

547

1

2016-12-28 00:13:03

//第二部分


//**************************************************************************************

// Declaration Section Multiple Instances(SFB/FB), remember to copy the FB/FC blocks into your projects manually!

//**************************************************************************************

  

  ALARM_8P_1:  ALARM_8P;   // Generation of max. 8 messages with max. 10 auxiliary values

END_VAR


//**************************************************************************************

// Declaration Section: Temporary Variables

//**************************************************************************************


VAR_TEMP

  // Start info: Structure with info for the OB that has just called the block

  TOP_SI:    STRUCT      

   EV_CLASS :BYTE;

   EV_NUM   :BYTE;

   PRIORITY :BYTE;

   NUM      :BYTE;

   TYP2_3   :BYTE;

   TYP1     :BYTE;

   ZI1      :WORD;

   ZI2_3    :DWORD;

  END_STRUCT;


  // Start info: Structure with info for the last called startup OB 

  START_UP_SI:  STRUCT

   EV_CLASS :BYTE;

   EV_NUM   :BYTE;

   PRIORITY :BYTE;

   NUM      :BYTE;

   TYP2_3   :BYTE;

   TYP1     :BYTE;

   ZI1      :WORD;

   ZI2_3    :DWORD;

  END_STRUCT; 


  DUMMY  :INT;                     // Auxiliary variable

  

  ALARM_OUT :BOOL;

  TEMP1 : INT;

  TEMP2,TEMP3,TEMP4,TEMP5 : DWORD;

  TEMP6 : WORD;

 

END_VAR


//**************************************************************************************

// Code Section

//*************************************************************************************


//*************************************************************************************

// Dependence on Calling OB

//*************************************************************************************


// Read out start info with SFC6 (RD_SINFO)

  DUMMY := RD_SINFO (TOP_SI := TOP_SI, START_UP_SI := START_UP_SI);

  

 IF sbRESTART THEN

  // Initial start  

  TOP_SI.NUM := 100;         // Execute initial start as warm restart

  sbRESTART := FALSE;         // Reset initial start

 END_IF;


// In which OB was the block called ?


 CASE WORD_TO_INT(BYTE_TO_WORD(TOP_SI.NUM)) OF


//************************************************************************************

// Handling Error OBs

//************************************************************************************

// OB80: time error

    80:

    ;

//************************************************************************************

// Startup

//************************************************************************************

// OB100: Warm restart

    100:

    ;

    siRUNUPCNT := RUNUPCYC;  // Save RUNUPCYC value

 ELSE

//**********************************************************************************

// Technological Section

//**********************************************************************************

 //get the LED status from controller

    TEMP1:=RDSYSST(REQ :=REQ  // IN: BOOL

            ,SZL_ID :=SSL_ID  // IN: WORD

            ,INDEX :=INDEX  // IN: WORD

            ,BUSY :=BUSY  // OUT: BOOL

            ,SZL_HEADER :=SZL_HEADER  // OUT: STRUCT

            ,DR :=DR  // OUT: ANY

            ); // INT

    LENTHDR := SZL_HEADER.LENTHDR;

    N_DR := SZL_HEADER.N_DR;

   // IF N_DR=W#16#E THEN

         IF N_DR=W#16#F THEN

        CPU_FAILURE :=TRUE;

    ELSE

        CPU_FAILURE :=FALSE;

    END_IF;


 //filter the data and construct the data for displaying in OS 

    TEMP3 :=BYTE_TO_DWORD(DR[1].LED_ON);

    TEMP4 :=BYTE_TO_DWORD(DR[1].LED_BLINK)AND DW#16#1; 

    FOR TEMP1:= 1 TO (WORD_TO_INT(SZL_HEADER.N_DR)-1) BY 1 DO

    // Statement Section

     TEMP2 :=ROL(IN:=BYTE_TO_DWORD(DR[TEMP1+1].LED_ON), N :=TEMP1);

     TEMP3 :=TEMP3 OR TEMP2;

     TEMP5 :=ROL(IN:=BYTE_TO_DWORD(DR[TEMP1+1].LED_BLINK), N :=TEMP1) AND ROL(IN:=DW#16#1, N :=TEMP1);

     TEMP4 :=TEMP4 OR TEMP5;

    END_FOR;

    TEMP6 :=DR[1].CPU_LED_ID AND W#16#FF00;

    IF TEMP6=W#16#F900 THEN

       // TEMP2 :=ROR(IN:=TEMP3 AND DW#16#0FFF8000, N :=14);

       // TEMP5 :=ROL(IN:=TEMP3 AND DW#16#00003FFF, N :=14);

       // TEMP3 :=TEMP2 OR TEMP5;

        //TEMP2 :=ROR(IN:=TEMP4 AND DW#16#0FFF8000, N :=14);

       // TEMP5 :=ROL(IN:=TEMP4 AND DW#16#00003FFF, N :=14);

        //----------------------------

        

        TEMP2 :=ROR(IN:=TEMP3 AND DW#16#3FFF0000, N :=15);

        TEMP5 :=ROL(IN:=TEMP3 AND DW#16#00007FFF, N :=15);

        TEMP3 :=TEMP2 OR TEMP5;

        TEMP2 :=ROR(IN:=TEMP4 AND DW#16#3FFF0000, N :=15);

        TEMP5 :=ROL(IN:=TEMP4 AND DW#16#00007FFF, N :=15); 

        

        TEMP4 :=TEMP2 OR TEMP5;   

       

    ELSE

        ;

    END_IF;

  //字数限制 未完程序请看第三部分

//此程序为修改程序 请多交流 QQ 275578306

PU414-5H CPU指示灯读取(修改自西门子源程序)第二部分 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54621条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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