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