AnnexF/gravel_st.txt
changeset 0 fb772792efd1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AnnexF/gravel_st.txt	Wed Jan 31 15:32:38 2007 +0100
@@ -0,0 +1,129 @@
+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
+