FUNCTION_BLOCK FB 1 TITLE = VERSION : 0.0 VAR_INPUT Start : BOOL ; Stop : BOOL ; Response : BOOL ; Reset_Maint : BOOL ; Timer_No : TIMER ; Response_Time : S5TIME ; END_VAR VAR_OUTPUT Fault : BOOL ; Start_Dsp : BOOL ; Stop_Dsp : BOOL ; Maint : BOOL ; END_VAR VAR_IN_OUT Motor : BOOL ; END_VAR VAR Time_bin : WORD ; Time_BCD : WORD ; Starts : INT ; Start_Edge : BOOL ; END_VAR BEGIN NETWORK TITLE =Start/Stop and Latching A( ; O #Start; O #Motor; ) ; AN #Stop; = #Motor; NETWORK TITLE =Startup Monitoring A #Motor; L #Response_Time; SD #Timer_No; AN #Motor; R #Timer_No; L #Timer_No; T #Time_bin; LC #Timer_No; T #Time_BCD; A #Timer_No; AN #Response; S #Fault; R #Motor; NETWORK TITLE =Start Lamp / Fault Reset A #Response; = #Start_Dsp; R #Fault; NETWORK TITLE =Stop Lamp AN #Response; = #Stop_Dsp; NETWORK TITLE =Count Starts A #Motor; FP #Start_Edge; JCN lab1; L #Starts; + 1; T #Starts; lab1: NOP 0; NETWORK TITLE =Maintenance L #Starts; L 50; >=I ; = #Maint; NETWORK TITLE =Reset Maintenance A #Reset_Maint; A #Maint; JCN END; L 0; T #Starts; END: NOP 0; END_FUNCTION_BLOCK DATA_BLOCK DB 1 TITLE = VERSION : 0.0 FB 1 BEGIN Start := FALSE; Stop := FALSE; Response := FALSE; Reset_Maint := FALSE; Timer_No := T 0; Response_Time := S5T#0MS; Fault := FALSE; Start_Dsp := FALSE; Stop_Dsp := FALSE; Maint := FALSE; Motor := FALSE; Time_bin := W#16#0; Time_BCD := W#16#0; Starts := 0; Start_Edge := FALSE; END_DATA_BLOCK DATA_BLOCK DB 2 TITLE = VERSION : 0.0 FB 1 BEGIN Start := FALSE; Stop := FALSE; Response := FALSE; Reset_Maint := FALSE; Timer_No := T 0; Response_Time := S5T#0MS; Fault := FALSE; Start_Dsp := FALSE; Stop_Dsp := FALSE; Maint := FALSE; Motor := FALSE; Time_bin := W#16#0; Time_BCD := W#16#0; Starts := 0; Start_Edge := FALSE; END_DATA_BLOCK DATA_BLOCK DB 3 TITLE = VERSION : 0.0 FB 1 BEGIN Start := FALSE; Stop := FALSE; Response := FALSE; Reset_Maint := FALSE; Timer_No := T 0; Response_Time := S5T#0MS; Fault := FALSE; Start_Dsp := FALSE; Stop_Dsp := FALSE; Maint := FALSE; Motor := FALSE; Time_bin := W#16#0; Time_BCD := W#16#0; Starts := 0; Start_Edge := FALSE; END_DATA_BLOCK FUNCTION FC 1 : VOID TITLE = VERSION : 0.0 VAR_INPUT Open : BOOL ; Close : BOOL ; END_VAR VAR_OUTPUT Dsp_Open : BOOL ; Dsp_Closed : BOOL ; END_VAR VAR_IN_OUT Valve : BOOL ; END_VAR BEGIN NETWORK TITLE =Open/Close and Latching A( ; O #Open; O #Valve; ) ; AN #Close; = #Valve; NETWORK TITLE =Display "Valve open" A #Valve; = #Dsp_Open; NETWORK TITLE =Display "Valve closed" AN #Valve; = #Dsp_Closed; END_FUNCTION ORGANIZATION_BLOCK OB 1 TITLE = VERSION : 0.0 VAR_TEMP OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1) OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB1), 3 (Scan 2-n of OB1) OB1_PRIORITY : BYTE ; //1 (Priority of 1 is lowest) OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1) OB1_RESERVED_1 : BYTE ; //Reserved for system OB1_RESERVED_2 : BYTE ; //Reserved for system OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds) OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds) OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds) OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started Enable_Motor : BOOL ; Enable_Valve : BOOL ; Start_Fulfilled : BOOL ; Stop_Fulfilled : BOOL ; Inlet_Valve_A_Open : BOOL ; Inlet_Valve_A_Closed : BOOL ; Feed_Valve_A_Open : BOOL ; Feed_Valve_A_Closed : BOOL ; Inlet_Valve_B_Open : BOOL ; Inlet_Valve_B_Closed : BOOL ; Feed_Valve_B_Open : BOOL ; Feed_Valve_B_Closed : BOOL ; Open_Drain : BOOL ; Close_Drain : BOOL ; Close_Valve_Fulfilled : BOOL ; END_VAR BEGIN NETWORK TITLE =Interlock for Feed Pump A A I 1.6; A I 1.3; AN Q 9.5; = #Enable_Motor; NETWORK TITLE =Call FB Motor for Ingredient A A I 0.0; A #Enable_Motor; = #Start_Fulfilled; A( ; O I 0.1; ON #Enable_Motor; ) ; = #Stop_Fulfilled; CALL FB 1 , DB 1 ( Start := #Start_Fulfilled, Stop := #Stop_Fulfilled, Response := I 0.2, Reset_Maint := I 1.7, Timer_No := T 12, Response_Time := S5T#7S, Fault := Q 4.5, Start_Dsp := Q 4.2, Stop_Dsp := Q 4.3, Maint := Q 4.6, Motor := Q 4.4); NETWORK TITLE =Delay Valve Enable Ingredient A A Q 4.4; L S5T#1S; SD T 13; AN Q 4.4; R T 13; A T 13; = #Enable_Valve; NETWORK TITLE =Inlet Valve Control for Ingredient A AN I 0.2; AN Q 4.4; = #Close_Valve_Fulfilled; CALL FC 1 ( Open := #Enable_Valve, Close := #Close_Valve_Fulfilled, Dsp_Open := #Inlet_Valve_A_Open, Dsp_Closed := #Inlet_Valve_A_Closed, Valve := Q 4.0); NETWORK TITLE =Feed Valve Control for Ingredient A AN I 0.2; AN Q 4.4; = #Close_Valve_Fulfilled; CALL FC 1 ( Open := #Enable_Valve, Close := #Close_Valve_Fulfilled, Dsp_Open := #Feed_Valve_A_Open, Dsp_Closed := #Feed_Valve_A_Closed, Valve := Q 4.1); NETWORK TITLE =Interlock for Feed Pump B A I 1.6; A I 1.3; AN Q 9.5; = #Enable_Motor; NETWORK TITLE =Call FB Motor for Ingredient B A I 0.3; A #Enable_Motor; = #Start_Fulfilled; A( ; O I 0.4; ON #Enable_Motor; ) ; = #Stop_Fulfilled; CALL FB 1 , DB 2 ( Start := #Start_Fulfilled, Stop := #Stop_Fulfilled, Response := I 0.5, Reset_Maint := I 1.7, Timer_No := T 14, Response_Time := S5T#7S, Fault := Q 5.5, Start_Dsp := Q 5.2, Stop_Dsp := Q 5.3, Maint := Q 5.6, Motor := Q 5.4); NETWORK TITLE =Delay Valve Enable Ingredient B A Q 5.4; L S5T#1S; SD T 15; AN Q 5.4; R T 15; A T 15; = #Enable_Valve; NETWORK TITLE =Inlet Valve Control for Ingredient B AN I 0.5; AN Q 5.4; = #Close_Valve_Fulfilled; CALL FC 1 ( Open := #Enable_Valve, Close := #Close_Valve_Fulfilled, Dsp_Open := #Inlet_Valve_B_Open, Dsp_Closed := #Inlet_Valve_B_Closed, Valve := Q 5.0); NETWORK TITLE =Feed Valve Control for Ingredient B AN I 0.5; AN Q 5.4; = #Close_Valve_Fulfilled; CALL FC 1 ( Open := #Enable_Valve, Close := #Close_Valve_Fulfilled, Dsp_Open := #Feed_Valve_B_Open, Dsp_Closed := #Feed_Valve_B_Closed, Valve := Q 5.1); NETWORK TITLE =Interlock for Agitator A I 1.6; A I 1.4; AN Q 9.5; = #Enable_Motor; NETWORK TITLE =Call FB Motor for Agitator A I 1.1; A #Enable_Motor; = #Start_Fulfilled; A( ; O I 1.2; ON #Enable_Motor; ) ; = #Stop_Fulfilled; CALL FB 1 , DB 3 ( Start := #Start_Fulfilled, Stop := #Stop_Fulfilled, Response := I 1.0, Reset_Maint := I 1.7, Timer_No := T 16, Response_Time := S5T#10S, Fault := Q 8.3, Start_Dsp := Q 8.1, Stop_Dsp := Q 8.2, Maint := Q 8.4, Motor := Q 8.0); NETWORK TITLE =Interlock for Drain Valve A I 1.6; A I 1.5; AN Q 8.0; = #Enable_Valve; NETWORK TITLE =Drain Valve Control A I 0.6; A #Enable_Valve; = #Open_Drain; A( ; O I 0.7; ON #Enable_Valve; ) ; = #Close_Drain; CALL FC 1 ( Open := #Open_Drain, Close := #Close_Drain, Dsp_Open := Q 9.6, Dsp_Closed := Q 9.7, Valve := Q 9.5); NETWORK TITLE =Container Level Display AN I 1.3; = Q 9.0; AN I 1.4; = Q 9.1; AN I 1.5; = Q 9.2; END_ORGANIZATION_BLOCK