抢答器实现(逐个判断)第二部分

已锁定

柳叶飘飘

  • 帖子

    95
  • 精华

    7
  • 被关注

    194

论坛等级:侠圣

注册时间:2016-12-08

黄金 黄金 如何晋级?

抢答器实现(逐个判断)第二部分

370

3

2016-12-27 21:59:57

VAR_TEMP

    // Temporary Variables

I:INT;

 // 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;


END_VAR

VAR

sbRESTART   :BOOL := TRUE;       // Initial start memory bit

siRUNUPCNT  :INT := 0;           // Counter for RUNUPCYC execution

ALARM_8P_1:ALARM_8P;  


END_VAR



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

// 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:;

ELSE

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

// Message suppression during the startup    

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


  IF siRUNUPCNT = 0               // RUNUPCYC cycle already elapsed ?

  THEN 

    ALARM_OUT :=TRUE;

  ELSE

   siRUNUPCNT := siRUNUPCNT - 1;

  END_IF;

END_CASE;

    





IF RST.VALUE THEN

    OUT.VALUE:=0;

    FOR I:= 0 TO 7 BY 1 DO

        FirstInBits[I]:=0;

    END_FOR;


  ELSE

     IF NOT(OUT.VALUE) THEN

        

        IF IN1.VALUE & IN1_EN.VALUE THEN

            OUT.VALUE:=1;

            FirstInBits[0]:=1;

         ELSE

           IF IN2.VALUE & IN2_EN.VALUE THEN

              OUT.VALUE:=1;

              FirstInBits[1]:=1; 

             ELSE

               IF IN3.VALUE & IN3_EN.VALUE THEN

                  OUT.VALUE:=1;

                  FirstInBits[2]:=1;

                 ELSE

                   IF IN4.VALUE & IN4_EN.VALUE THEN

                       OUT.VALUE:=1;

                       FirstInBits[3]:=1;

                     ELSE

                        IF IN5.VALUE & IN5_EN.VALUE THEN

                           OUT.VALUE:=1;

                           FirstInBits[4]:=1;

                          ELSE

                            IF IN6.VALUE & IN6_EN.VALUE THEN

                               OUT.VALUE:=1;

                               FirstInBits[5]:=1;

                             ELSE

                                IF IN7.VALUE & IN7_EN.VALUE THEN

                                   OUT.VALUE:=1;

                                   FirstInBits[6]:=1;

                                  ELSE

                                    IF IN8.VALUE & IN8_EN.VALUE THEN

                                       OUT.VALUE:=1;

                                       FirstInBits[7]:=1;

                                    END_IF;

                                END_IF;

                            END_IF;  

                         END_IF;

                    END_IF;

                END_IF;

           END_IF;

        END_IF;

     END_IF;

END_IF;



//alarm_8p

 ALARM_8P_1

     (EN_R := TRUE,    // Update output ACK_STATE

      ID := 16#EEEE,         // Data channel for messages (always 16#EEEE)

      EV_ID:= EV_ID,         // 消息编号

      SIG_1:= ALARM_OUT AND OUT.VALUE,                // Signal 1 to be monitored 

      SIG_2:= 0,                        // Signal 2 to be monitored 

      SIG_3:= 0,                        // Signal 3 to be monitored  

      SIG_4:= 0,                        // Signal 4 to be monitored 

      SIG_5:= 0,                        // Signal 5 to be monitored

      SIG_6:= 0,                        // Signal 6 to be monitored

      SIG_7:= 0,                        // Signal 7 to be monitored

      SIG_8:= 0,                        // Signal 8 to be monitored

      SD_1 := AUX_PR01,      // Auxiliary value 1

      SD_2 := AUX_PR02,     // Auxiliary value 2

      SD_3 := AUX_PR03,       // Auxiliary value 3

      SD_4 := AUX_PR04,       // Auxiliary value 4

      SD_5 := AUX_PR05,      // Auxiliary value 5

      SD_6 := AUX_PR06,      // Auxiliary value 6

      SD_7 := AUX_PR07,      // Auxiliary value 7

      SD_8 := AUX_PR08,      // Auxiliary value 8

      SD_9 := AUX_PR09,      // Auxiliary value 9

      SD_10:= AUX_PR10);     // Auxiliary value 10

    

    QMSG_ERR := ALARM_8P_1.ERROR;      // ERROR status parameter

    MSG_STAT := ALARM_8P_1.STATUS;     // STATUS status parameter

    MSG_ACK := ALARM_8P_1.ACK_STATE;   // Current OS confirmation status 

END_FUNCTION_BLOCK


抢答器实现(逐个判断)第二部分 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

DCS/SIMATIC PCS7

共有4374条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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