AnnexF/gravel_st.txt
changeset 0 fb772792efd1
equal deleted inserted replaced
-1:000000000000 0:fb772792efd1
       
     1 PROGRAM GRAVEL  (* Gravel measurement and loading system *)
       
     2  VAR_INPUT
       
     3     OFF_PB         : BOOL ;
       
     4     ON_PB          : BOOL ;
       
     5     FILL_PB        : BOOL ;
       
     6     SIREN_ACK      : BOOL ;
       
     7     LOAD_PB        : BOOL ; (* Load truck from bin *)
       
     8     JOG_PB         : BOOL ;
       
     9     LAMP_TEST      : BOOL ;
       
    10     TRUCK_ON_RAMP  : BOOL ; (* Optical sensor *)
       
    11     SILO_EMPTY_LS  : BOOL ;
       
    12     BIN_EMPTY_LS   : BOOL ;
       
    13     SETPOINT       : BYTE ; (* 2-digit BCD *)
       
    14  END_VAR
       
    15  VAR_OUTPUT
       
    16     CONTROL_LAMP    : BOOL ;
       
    17     TRUCK_LAMP      : BOOL ;
       
    18     SILO_EMPTY_LAMP : BOOL ;
       
    19     CONVEYOR_LAMP   : BOOL ;
       
    20     CONVEYOR_MOTOR  : BOOL ;
       
    21     SILO_VALVE      : BOOL ;
       
    22     BIN_VALVE       : BOOL ;
       
    23     SIREN           : BOOL ;
       
    24     BIN_LEVEL       : BYTE ;
       
    25  END_VAR
       
    26  VAR
       
    27   BLINK_TIME : TIME; (* BLINK ON/OFF time *)
       
    28   PULSE_TIME : TIME; (* LEVEL_CTR increment interval *)
       
    29   RUNOUT_TIME: TIME; (* Conveyor running time after loading *)
       
    30   RUN_IN_TIME: TIME; (* Conveyor running time before loading *)
       
    31   SILENT_TIME: TIME; (* Siren silent time after SIREN_ACK *)
       
    32   OK_TO_RUN  : BOOL; (* 1 = Conveyor is allowed to run *)
       
    33   (* Function Blocks *)
       
    34   BLINK: TON; (* Blinker OFF period timer / ON output *)
       
    35   BLANK: TON; (* Blinker ON period timer / blanking pulse *)
       
    36   PULSE: TON; (* LEVEL_CTR pulse interval timer *)
       
    37   SIREN_FF: RS;
       
    38   SILENCE_TMR: TP; (* Siren silent period timer *)
       
    39  END_VAR
       
    40  VAR RETAIN LEVEL_CTR : CTU ; END_VAR
       
    41    (* Program body *)
       
    42    (* Major operating states *)
       
    43    INITIAL_STEP START : END_STEP
       
    44    TRANSITION FROM START TO FILL_BIN
       
    45       := FILL_PB & CONTROL.X ; END_TRANSITION
       
    46    STEP FILL_BIN: SILO_VALVE(N); END_STEP
       
    47    TRANSITION FROM FILL_BIN TO START
       
    48       := NOT FILL_PB OR NOT CONTROL.X ; END_TRANSITION
       
    49    TRANSITION FROM FILL_BIN TO LOAD_WAIT := LEVEL_CTR.Q ;
       
    50    END_TRANSITION
       
    51    STEP LOAD_WAIT : END_STEP
       
    52    TRANSITION FROM LOAD_WAIT TO RUN_IN
       
    53       := LOAD_PB & OK_TO_RUN ; END_TRANSITION
       
    54    STEP RUN_IN : END_STEP
       
    55    TRANSITION FROM RUN_IN TO LOAD_WAIT := NOT OK_TO_RUN ;
       
    56    END_TRANSITION
       
    57    TRANSITION FROM RUN_IN TO DUMP_BIN
       
    58       := RUN_IN.T > RUN_IN_TIME;
       
    59    END_TRANSITION
       
    60    STEP DUMP_BIN: BIN_VALVE(N); END_STEP
       
    61    TRANSITION FROM DUMP_BIN TO LOAD_WAIT := NOT OK_TO_RUN ;
       
    62    END_TRANSITION
       
    63    TRANSITION FROM DUMP_BIN TO RUNOUT := BIN_EMPTY_LS ;
       
    64    END_TRANSITION
       
    65    STEP RUNOUT : END_STEP
       
    66    TRANSITION FROM RUNOUT TO LOAD_WAIT := NOT OK_TO_RUN ;
       
    67    END_TRANSITION
       
    68    TRANSITION FROM RUNOUT TO START
       
    69       := RUNOUT.T >= RUNOUT_TIME ; END_TRANSITION
       
    70 (* Control state sequencing *)
       
    71 INITIAL_STEP CONTROL_OFF: END_STEP
       
    72 TRANSITION FROM CONTROL_OFF TO CONTROL
       
    73      := ON_PB & NOT OFF_PB ; END_TRANSITION
       
    74 STEP CONTROL: CONTROL_ACTION(N); END_STEP
       
    75 ACTION CONTROL_ACTION:
       
    76    BLINK(EN:=CONTROL.X & NOT BLANK.Q, PT := BLINK_TIME) ;
       
    77    BLANK(EN:=BLINK.Q, PT := BLINK_TIME) ;
       
    78    OK_TO_RUN := CONTROL.X & TRUCK_ON_RAMP ;
       
    79    CONVEYOR_MOTOR :=
       
    80      OK_TO_RUN & OR(JOG_PB, RUN_IN.X, DUMP_BIN.X, RUNOUT.X);   
       
    81 END_ACTION
       
    82 TRANSITION FROM CONTROL TO CONTROL_OFF := OFF_PB ;
       
    83 END_TRANSITION
       
    84 (* Monitor Logic *)
       
    85 INITIAL_STEP MONITOR: MONITOR_ACTION(N); END_STEP
       
    86 ACTION MONITOR_ACTION:
       
    87   CONVEYOR_LAMP := CONVEYOR_MOTOR & BLINK.Q ;
       
    88   CONTROL_LAMP := CONTROL.X OR LAMP_TEST ;
       
    89   TRUCK_LAMP := TRUCK_ON_RAMP OR LAMP_TEST ;
       
    90   SILO_EMPTY_LAMP := BLINK.Q & SILO_EMPTY_LS OR LAMP_TEST ;
       
    91   SILENCE_TMR(IN:=SIREN_ACK, PT:=SILENT_TIME) ;
       
    92   SIREN_FF(S:=SILO_EMPTY_LS, R1:=SILENCE_TMR.Q) ;
       
    93   SIREN := SIREN_FF.Q1 ;
       
    94   PULSE(IN:=FILL_BIN.X & NOT PULSE.Q, PT:=PULSE_TIME) ;
       
    95   LEVEL_CTR(R := BIN_EMPTY_LS, CU := PULSE.Q,
       
    96             PV := BCD_TO_INT(SETPOINT)) ;
       
    97   BIN_LEVEL := INT_TO_BCD(LEVEL_CTR.CV) ;
       
    98 END_ACTION
       
    99 
       
   100 END_PROGRAM
       
   101 
       
   102  CONFIGURATION GRAVEL_CONTROL
       
   103    RESOURCE PROC1 ON PROC_TYPE_Y
       
   104      PROGRAM G : GRAVEL
       
   105       (* Inputs *)
       
   106        (OFF_PB        := %I0.0 ,
       
   107         ON_PB         := %I0.1 ,
       
   108         FILL_PB       := %I0.2 ,
       
   109         SIREN_ACK     := %I0.3 ,
       
   110         LOAD_PB       := %I0.4 ,
       
   111         JOG_PB        := %I0.5 ,
       
   112         LAMP_TEST     := %I0.7 ,
       
   113         TRUCK_ON_RAMP := %I1.4 ,
       
   114         SILO_EMPTY_LS := %I1.5 ,
       
   115         BIN_EMPTY_LS  := %I1.6 ,
       
   116         SETPOINT      := %IB2  ,
       
   117        (* Outputs *)
       
   118         CONTROL_LAMP    => %Q4.0,
       
   119         TRUCK_LAMP      => %Q4.2,
       
   120         SILO_EMPTY_LAMP => %Q4.3,
       
   121         CONVEYOR_LAMP   => %Q5.3,
       
   122         CONVEYOR_MOTOR  => %Q5.4,
       
   123         SILO_VALVE      => %Q5.5,
       
   124         BIN_VALVE       => %Q5.6,
       
   125         SIREN           => %Q5.7,
       
   126         BIN_LEVEL       => %B6) ;
       
   127    END_RESOURCE
       
   128  END_CONFIGURATION
       
   129