AnnexF/gravel_st.txt
author Manuele Conti <conti.ma@alice.it>
Mon, 30 Jul 2012 22:59:00 +0200
changeset 622 eaa49b276e17
parent 0 fb772792efd1
permissions -rwxr-xr-x
Add check bison version in configure.ac file.
To build correctly matiec we need bison greater or equals than 2.4 version.
Now the "configure" script is able to check if system has correctly requirements.
PROGRAM GRAVEL  (* Gravel measurement and loading system *)
 VAR_INPUT
    OFF_PB         : BOOL ;
    ON_PB          : BOOL ;
    FILL_PB        : BOOL ;
    SIREN_ACK      : BOOL ;
    LOAD_PB        : BOOL ; (* Load truck from bin *)
    JOG_PB         : BOOL ;
    LAMP_TEST      : BOOL ;
    TRUCK_ON_RAMP  : BOOL ; (* Optical sensor *)
    SILO_EMPTY_LS  : BOOL ;
    BIN_EMPTY_LS   : BOOL ;
    SETPOINT       : BYTE ; (* 2-digit BCD *)
 END_VAR
 VAR_OUTPUT
    CONTROL_LAMP    : BOOL ;
    TRUCK_LAMP      : BOOL ;
    SILO_EMPTY_LAMP : BOOL ;
    CONVEYOR_LAMP   : BOOL ;
    CONVEYOR_MOTOR  : BOOL ;
    SILO_VALVE      : BOOL ;
    BIN_VALVE       : BOOL ;
    SIREN           : BOOL ;
    BIN_LEVEL       : BYTE ;
 END_VAR
 VAR
  BLINK_TIME : TIME; (* BLINK ON/OFF time *)
  PULSE_TIME : TIME; (* LEVEL_CTR increment interval *)
  RUNOUT_TIME: TIME; (* Conveyor running time after loading *)
  RUN_IN_TIME: TIME; (* Conveyor running time before loading *)
  SILENT_TIME: TIME; (* Siren silent time after SIREN_ACK *)
  OK_TO_RUN  : BOOL; (* 1 = Conveyor is allowed to run *)
  (* Function Blocks *)
  BLINK: TON; (* Blinker OFF period timer / ON output *)
  BLANK: TON; (* Blinker ON period timer / blanking pulse *)
  PULSE: TON; (* LEVEL_CTR pulse interval timer *)
  SIREN_FF: RS;
  SILENCE_TMR: TP; (* Siren silent period timer *)
 END_VAR
 VAR RETAIN LEVEL_CTR : CTU ; END_VAR
   (* Program body *)
   (* Major operating states *)
   INITIAL_STEP START : END_STEP
   TRANSITION FROM START TO FILL_BIN
      := FILL_PB & CONTROL.X ; END_TRANSITION
   STEP FILL_BIN: SILO_VALVE(N); END_STEP
   TRANSITION FROM FILL_BIN TO START
      := NOT FILL_PB OR NOT CONTROL.X ; END_TRANSITION
   TRANSITION FROM FILL_BIN TO LOAD_WAIT := LEVEL_CTR.Q ;
   END_TRANSITION
   STEP LOAD_WAIT : END_STEP
   TRANSITION FROM LOAD_WAIT TO RUN_IN
      := LOAD_PB & OK_TO_RUN ; END_TRANSITION
   STEP RUN_IN : END_STEP
   TRANSITION FROM RUN_IN TO LOAD_WAIT := NOT OK_TO_RUN ;
   END_TRANSITION
   TRANSITION FROM RUN_IN TO DUMP_BIN
      := RUN_IN.T > RUN_IN_TIME;
   END_TRANSITION
   STEP DUMP_BIN: BIN_VALVE(N); END_STEP
   TRANSITION FROM DUMP_BIN TO LOAD_WAIT := NOT OK_TO_RUN ;
   END_TRANSITION
   TRANSITION FROM DUMP_BIN TO RUNOUT := BIN_EMPTY_LS ;
   END_TRANSITION
   STEP RUNOUT : END_STEP
   TRANSITION FROM RUNOUT TO LOAD_WAIT := NOT OK_TO_RUN ;
   END_TRANSITION
   TRANSITION FROM RUNOUT TO START
      := RUNOUT.T >= RUNOUT_TIME ; END_TRANSITION
(* Control state sequencing *)
INITIAL_STEP CONTROL_OFF: END_STEP
TRANSITION FROM CONTROL_OFF TO CONTROL
     := ON_PB & NOT OFF_PB ; END_TRANSITION
STEP CONTROL: CONTROL_ACTION(N); END_STEP
ACTION CONTROL_ACTION:
   BLINK(EN:=CONTROL.X & NOT BLANK.Q, PT := BLINK_TIME) ;
   BLANK(EN:=BLINK.Q, PT := BLINK_TIME) ;
   OK_TO_RUN := CONTROL.X & TRUCK_ON_RAMP ;
   CONVEYOR_MOTOR :=
     OK_TO_RUN & OR(JOG_PB, RUN_IN.X, DUMP_BIN.X, RUNOUT.X);   
END_ACTION
TRANSITION FROM CONTROL TO CONTROL_OFF := OFF_PB ;
END_TRANSITION
(* Monitor Logic *)
INITIAL_STEP MONITOR: MONITOR_ACTION(N); END_STEP
ACTION MONITOR_ACTION:
  CONVEYOR_LAMP := CONVEYOR_MOTOR & BLINK.Q ;
  CONTROL_LAMP := CONTROL.X OR LAMP_TEST ;
  TRUCK_LAMP := TRUCK_ON_RAMP OR LAMP_TEST ;
  SILO_EMPTY_LAMP := BLINK.Q & SILO_EMPTY_LS OR LAMP_TEST ;
  SILENCE_TMR(IN:=SIREN_ACK, PT:=SILENT_TIME) ;
  SIREN_FF(S:=SILO_EMPTY_LS, R1:=SILENCE_TMR.Q) ;
  SIREN := SIREN_FF.Q1 ;
  PULSE(IN:=FILL_BIN.X & NOT PULSE.Q, PT:=PULSE_TIME) ;
  LEVEL_CTR(R := BIN_EMPTY_LS, CU := PULSE.Q,
            PV := BCD_TO_INT(SETPOINT)) ;
  BIN_LEVEL := INT_TO_BCD(LEVEL_CTR.CV) ;
END_ACTION

END_PROGRAM

 CONFIGURATION GRAVEL_CONTROL
   RESOURCE PROC1 ON PROC_TYPE_Y
     PROGRAM G : GRAVEL
      (* Inputs *)
       (OFF_PB        := %I0.0 ,
        ON_PB         := %I0.1 ,
        FILL_PB       := %I0.2 ,
        SIREN_ACK     := %I0.3 ,
        LOAD_PB       := %I0.4 ,
        JOG_PB        := %I0.5 ,
        LAMP_TEST     := %I0.7 ,
        TRUCK_ON_RAMP := %I1.4 ,
        SILO_EMPTY_LS := %I1.5 ,
        BIN_EMPTY_LS  := %I1.6 ,
        SETPOINT      := %IB2  ,
       (* Outputs *)
        CONTROL_LAMP    => %Q4.0,
        TRUCK_LAMP      => %Q4.2,
        SILO_EMPTY_LAMP => %Q4.3,
        CONVEYOR_LAMP   => %Q5.3,
        CONVEYOR_MOTOR  => %Q5.4,
        SILO_VALVE      => %Q5.5,
        BIN_VALVE       => %Q5.6,
        SIREN           => %Q5.7,
        BIN_LEVEL       => %B6) ;
   END_RESOURCE
 END_CONFIGURATION