'NEW VERSION FOR FLASH  BOILER DESIGN

 
        'Issue F4s now iss F5
        'Addition to stop pump running during cut-out period
        
      'T1 (MP1) senses temp of water return to hot well coil (infomation only)
      'T2 (MP2)senses temp of exhaust from steam engine or feed water from economiser (infomation only)
      'T3 (MP3) senses temp of steam/water from main coil                 
      'T4 (MP4) senses temp of steam from separator (infomation only)
      'T5 (MP5) senses temp of steam output from superheater
      'P senses  pressure of steam at outlet from separator
                                         
	Include "PROTON_G20X.INT"			
	
	                               'Version based on SERVO_ADINBOLDav

    GLCD_EXTERNAL_PRINT = PPRINT			' Point to PPRINT.INC file
    	ADIN_RES = 10				' Set number of bits in result
		ADIN_TAD = FRC				' Set clock source (3=rc)
		ADIN_STIME = 100             ' Set sampling time in uS
	
        Dim x           As Word  				
        Dim Raw0        As Word	
        Dim Raw0a 		As Word
         Dim Raw0b 		As Word 		
         Dim Raw1		As Word
         Dim Raw1a 		As Word
         Dim Raw1b 		As Word
         Dim Raw2 		As Word
         Dim Raw2a 		As Word
         Dim Raw2b 		As Word
         Dim Raw3 		As Word
         Dim Raw4 		As Word
         Dim Raw5 		As Word		
		Dim Value0 		As Word
		Dim Value1 		As Word
		Dim Value2 		As Word
		Dim Value3 		As Word
		Dim Value4 		As Word
		Dim Value5 		As Word
        Dim Scale0      As Word
        Dim Scale1      As Word
        Dim Scale2      As Word
       	Dim Temp0 	   As Word	
       	Dim Temp1 	   As Word
       	Dim Temp2 	   As Word
        Dim Temp3 	   As Word
       	Dim Temp4 	   As Word
       	Dim Presure	   As Word
        Dim Shut        As Bit
        Dim Shut2       As Bit
        
       	Dim w          As Word
		Dim G          As Word
       	Dim z          As Word
       	Dim o          As Word
       	Dim F          As Word
       	Dim b          As Word	
       	
       	
		Symbol Pin0 = PORTB.0		' Alias servo pin 
		Symbol Pin1 = PORTB.4
		Symbol Pin2 = PORTB.5
		Symbol Level = PORTB.7      'Alias float level switch (used only to operate pump' manually)
        Symbol Pump = PORTB.6      'Alias Feed pump "Pump"
        
       'Position the servo

		Input TRISA					' Set PORTA to all input
		TRISB = %11110000			' Set PORTB.0-3 to output
		PORTB = 0					' Set PORTB.0-3 low
        ADCON1 = %10000010			' Set PORTA analog and right justify result
        TRISE = %00000001           ' Set PORTE.0 To Output
        PORTE = 0                   ' Set PORTE.0 low
        TRISB.6 = 0                 ' Set PORTB.6 output
           Shut = 0
          Shut2 = 0
          z = 0
          G = 0
          F = 0
          b = 0
                          
' Main program loop 
          
       Again:
       
          
 
       
        For x = 1 To 5            'go round  servos loop 5 times for each display loop                            
         
		                                'SUPERHEATER GAS VALVE CONTROL
                                      
                                                                     
                                                                     'SELECT  TEMPERATURE AND GAIN
          Raw0a = (Value4 / 16) + 390                    'Set S/H temp. ( = Open at aboutC150, Closed at about 195C)                                                           
          'Raw0a = (Value4 / 8) + 110                    'Set S/H temp. ( = Open at about170C, Closed at about 195C)                                                                                                                                
          'Raw0a = (Value4 / 8) + 90                     'Set S/H temp. ( = Open at about175C, Closed at about 206C)                              
         If Raw0a > 650 Then GoTo jumpover8                                                           
         If Raw0a > Raw0b + 5  Then Raw0b = Raw0b + 1 Else Raw0b = Raw0a    'dead band & slow up responce (small changes)
         If Raw0a < Raw0b - 5  Then Raw0b = Raw0b - 1 Else Raw0b = Raw0a
         If Raw0b < 600 Then GoTo jumpover0
         If Raw0a > Raw0b + 50  Then Raw0b = Raw0b + 3   'dead band & slow up responce (large changes)
         If Raw0a < Raw0b - 50  Then Raw0b = Raw0b - 3 
         jumpover0:
         If Raw0b < 600 Then Raw0b = 600                'Limit servo travel (600 = max, 640 = 60%)
         If Raw0b > 700 Then Raw0b = 700 
         If Raw0a < 650 Then Shut = 0: GoTo jumpover5
         
          jumpover8:
         If Shut = 1 Then GoTo jumpover6         
         If Raw0a > 670 Then Raw0b = 700 : Shut = 1 : GoTo jumpover5             'Snap open/closed secondary burner to 25% for ignition or shut-off 
 
         jumpover6:
         If Raw0a < 660 Then Raw0b = 650 : Shut = 0      
         jumpover5:        
       
         
      
          
          
         DelayMS 10      
            Scale0 = Raw0b -600              
             If Scale0 < 1 Then Scale0 = 0
             If Scale0 > 100 Then Scale0 = 100                                                       
             Scale0 = Scale0 * 14
             If Presure < 60 Then Scale0 = 1400                'Disable s/h outside pressure range 60-85           
             If Presure > 85 Then Scale0 = 1400
            
        If b > 450 Then b = 450                           'Disable s/h for frist 3 mins
             If b < 450 Then Scale0 = 1400     
        Servo Pin0 , 1000 + Scale0
        
        
        DelayMS 10
                                            
         
                                       ' MAIN GAS VALVE CONTROL
                                       
                                       
           If Value5 < 1000 Then Value5 = 1000 'NEW                             
                                                                   'SELECT PRESSURE AND GAIN
          'Raw1a = (Value5 / 30) + 480             'Gas valve porpotinal to pressure, ( = open at 60PSI shut at 80PSI, )
          Raw1a = (Value5 / 20) + 380             'Gas valve porpotinal to pressure, ( = open at 65PSI shut at 80PSI, )
           'Raw1a = Value5 / 9                      'Gas valve porpotinal to pressure, ( = open at 70PSI shut at 78PSI, ) 
          'Raw1a = (Value5 / 10) - 30              'Gas valve porpotinal to pressure, ( = open at 83PSI shut at 90PSI, )
          'Raw1a = Value5 / 10                     'Gas valve porpotinal to pressure, ( = open at 78PSI shut at 87PSI, )  
          'Raw1a = (Value5 / 8)  - 100             'Gas valve porpotinal to pressure, ( = open at 74PSI shut at 80PSI, )
          'Raw1a = (Value5 / 11)                   'Gas valve porpotinal to pressure, ( = open at 88PSI shut at 95PSI, )
          'Raw1a = (Value5 / 12)  + 30             'Gas valve porpotinal to pressure, ( = open at 90PSI shut at 99PSI, )
         If Raw1a > 680 Then GoTo jumpover18                                  
         If Raw1a > Raw1b + 5  Then Raw1b = Raw1b + 1  Else Raw1b = Raw1a      ' dead band & slow up responce (small changes)
         If Raw1a < Raw1b - 5  Then Raw1b = Raw1b - 1  Else Raw1b = Raw1a
         If Raw1b < 600 Then GoTo jumpover1
         If Raw1a > Raw1b + 50  Then Raw1b = Raw1b + 3   'dead band & slow up responce (large changes)
         If Raw1a < Raw1b - 50  Then Raw1b = Raw1b - 3 
         jumpover1:      
         If Raw1b < 640 Then Raw1b = 640             'Limit servo travel (600 = max, 640 = 60%)
         If Raw1b > 700 Then Raw1b = 700 
         If Raw1a < 680 Then Shut2 = 0: GoTo jumpover15
         
          jumpover18:
         If Shut2 = 1 Then GoTo jumpover16         
         If Raw1a > 699 Then Raw1b = 700 : Shut2 = 1 : GoTo jumpover15             'Snap open/closed burner to 25% for ignition or shut-off 
 
         jumpover16:
         If Raw1a < 681 Then Raw1b = 680 : Shut2 = 0      
         jumpover15:          
         DelayMS 10
     
            Scale1 = Raw1b -600              
             If Scale1 < 1 Then Scale1 = 0
             If Scale1 > 100 Then Scale1 = 100                                                           
             Scale1 = Scale1 * 14
            
        Servo Pin1 , 1000 + Scale1
             DelayMS 10
             Next x
             
              b = b + 1
             
             
                       'FEED WATER MOS-FET CONTROL 
                       
              z = z + 1
              If z = 2 Then z = 0:GoTo jumpover20        ' set pump on period - 2
                         
              Pump = 0                                    
              G = G + 1
              If G > 100 Then G = 100                     'Enable pump at 8:2 for 90 secs after start or reset 
              If G < 100 Then Pump = 1
              If G > 101 Then Pump = 0
               
            
              F = F + 1
              If F < 24 Then Pump = 0:GoTo jumpover20        'set pump off  period (2 to 19) (5 = 5:1)                                                     
              If F > 24 Then F = 24:Pump = 1
              
              If G < 100 Then Pump = 1:F = 16:GoTo jumpover20       'pump 8:2  for first 2 mins
              If Temp2 > 178 Then Pump = 1:F = 21:GoTo jumpover20   'pump 3:2  T3 > 178
              If Temp2 > 170 Then Pump = 1:F = 18:GoTo jumpover20   'pump 6:2  T3 > 170
              If Temp2 > 160 Then Pump = 1:F = 11:GoTo jumpover20   'pump 13:2  T3 > 160
              If Temp2 > 150 Then Pump = 1:F = 9:GoTo jumpover20   'pump 15:2  T3 > 150
              Pump = 1:F = 0                                       'pump 24:2  T3 < 150
              jumpover20:  
              If Level = 1 Then Pump = 0: F = 0: G = 100   ' Pump can be turned off manually during first 3 minutes
              If Level = 1 Then Pump = 1                   'Pump can be turned on/off manually after  1st 3 minutes
                   
                                      'DISPLAY
              Raw0 = ADIn 0
              Raw1 = ADIn 1
              Raw2 = ADIn 2
              Raw3 = ADIn 3
              Raw4 = ADIn 4                                                  
              Raw5 = ADIn 5             
          
          Cls 				         ' Clear the LCD
                                     ' Quantasize the result
        Value3 = Raw0 *10			 'Raw0 is T4 Temp3  Separator steam out, For information only
        Value4 = Raw1 *10            'Raw1 is T5 Temp4 for controlling superheater burner
        Value5 = Raw2 *10            'Raw2 is P5 Pressure For controllimg Main Burner
        Value0 = Raw3 *10            'Raw3 is T1 Temp0   Heat exchanger to hot well.For information only
        Value1 = Raw4 *10            'Raw4 is T2 Temp1  Feed water to main heater coil For information only
		Value2 = Raw5 *10            'Raw5 is T3 Temp2  Output from main coil. For controlling feed pump              
		
		Temp0 = Value0/46           '0-220 Deg C
		Temp1 = Value1/46           '0-220 Deg C
		Temp2 = Value2/46           '0-220 Deg C
		Temp3 = Value3/46           '0-220 Deg C
		Temp4 = Value4/23           '0-440 Deg C
		Presure = Value5/80         '0-120 PSI
    Cls

    Print Font TIMES_BOLD14  						' Choose the font
    
        Print At 0,0, "T1 = ", DEC3 Temp0,"  C" ' Display the result
       	Print At 10,0, "T2 = ", DEC3 Temp1,"  C"
       	Print At 20,0, "T3 = ", DEC3 Temp2,"  C"   
       	Print At 30,0, "T4 = ", DEC3 Temp3,"  C"   
       	Print At 40,0, "T5 = ", DEC3 Temp4,"  C"
       	Print At 50,0, "P5 = ", DEC3 Presure," PSI" 
       	         
       	
        'Print At 10,90, DEC3 b          'Use this section to display diagnostic information
        'Print At 20,90, DEC3 G 
        'Print At 30,90, DEC4 Raw0a
        'Print At 40,90, DEC4 Value4 
        
        If b < 450 Then Print At 0,65, "Warm-up"        
        If b < 450 Then Print At 10,90, "2"
        If G < 100 Then Print At 10,90, "1"       
        If Pump = 1 Then Print At 40,90,"Pump"         	
  	    If Temp2 > 173 Then Print At 20,70, "HI"
        If Temp3 > 170 Then Print At 30,70, "HI"
       	If Temp4 > 205 Then Print At 40,70, "HI"
       	If Presure > 100 Then Print At 50,75, "HI"
       	Print At 50,104, "F5"                         'Show software issue number
       	
       	SerOut PORTC.6,T9600,[DEC3 Temp0,44,DEC3 Temp1,44,DEC3 Temp2,44,DEC3 Temp3,44,DEC3 Temp4,44,DEC3 Presure,44,DEC4 Scale0,44,DEC4 Scale1,44,DEC1 Pump,44,10]   ' Output serial data comma delimited(44), CR/LF(10). 
                                                                                                                                                                          ' 5 temps, pressure, 3 servo positions
       	                                     'OVER TEMPERATURE/PRESSURE SHUT DOWN                                                                                       ' Use Baud 9600; no parity; Byte size 8; 1 stop bit
       	                                                                                                                                                                ' Will only work properly on Lap-top
       	If Presure > 100 Then GoTo closevalves         ' Close primary & secondary valve if temp exceads limits	
		If Temp2 > 185 Then GoTo closevalves 		
		If Temp3 > 175 Then GoTo closevalves	
		If Temp4 > 220 Then GoTo closevalves
	
   GoTo Again    
        closevalves:
        Print At 10,65, "Over Temp" 	
        Print At 20,65, "Cut-Out" 
        Print At 30,65, "Wait"
        Print At 40,65, "1 min"
       
        For w = 0 To 50                 'Set S/H gas valve closed 
        Servo Pin0 , 2400
        DelayMS 10
             
        Servo Pin1 , 2400                 'Set  gas valve closed 
        DelayMS 10
        
        Pump = 0                          ' Stop pump during cut-out
        
        Next w     
             
        For o = 1 To 60                    'Reset cut-out after 1 mins
        DelayMS 1000
        Next o
        G = 100
        b = 300
        GoTo Again
        End
' Load the fonts used

    Include "TIMES_BOLD_14.FNT"