FUNCTION_BLOCK Tfb_nastroj_otvor
VAR_IN_OUT
   otvor : Totvor;
  END_VAR
  casovac(cas := otvor.cas);  // nastaveni promenych pro casovac , nastavuje se otvor.cas 
  casovac(cas := otvor.cas_primazavani); // nastavuje se otvor.cas_primazavani 
  out_primazavani_otvoru := ((otvor.cas_primazavani > 0) // primazavani otvoru v pipad zapnuti casovace

  CASE otvor.Scase OF  

    1 :  // nazacatku musi byt valec nahore a musi byt zasunut pidrzeni
      out_valec_nah := 1; // jen pro kontrolu zda je valec nahoe
      out_valec_d := 0; // jen pro kontrolu aby do obou komor neel vzduch
      ovl_pridrzeni := 0; // jen pro kontrolu zda je zasunute pridrzeni
      otvor.cas := 0;
      otvor.Scase := 2;  //na dalsi akci

    2:    // primazavani po uritm potu a vysunuti pridrzeni

     	IF(pridrz_zas_s)
          IF (pocet_cyklu_primazavani >= 100) THEN
            pocet_cyklu_primazavani := 0;
            otvor.cas_primazavani := c_cas_primazavani;  //primazavani - striknuti oleje
	  END_IF;
 	 otvor.cas := 200;  // nahozeni casovace
         ovl_pridrzeni := 1; // vysunuti pridrzeni
	 otvor.Scase:=3;
	ELSE // neni zasunut pidrzeni
	 chyba(ch1 := 66, ch2 := 91); // chyba polohy nastoje otvoru // nezasunulo se prdrzeni
	 otvor.Scase := 255; // do chyby
	END_IF;
      IF NOT (h_s_valce) THEN  // vlec neni v horn pozici
	chyba(ch1 := 66, ch2 := 31);  //"Chyba polohy nastroje otvoru" / "-Nedojel nahoru"          
        otvor.Scase := 255;  //do chyby
      END_IF

    3 :  // kontrola vysunuti pridrz , + pohyb valce dolu  
	IF(pridrz_vys_s) THEN // senzor vysunuti pidrzeni    
          out_valec_d := 1;   // vlec jede dolu
          out_valec_nah := 0; //  pro vyfouknut vzduchu v horn pozici pstu (uzaven ventilu)
          otvor.cas := 200;  //nahozeni casovace
          otvor.Scase := 4;  //na dalsi akci
	ELSE
	  IF (otvor.cas = 0) THEN  //vyprsel cas a nevysunulo se pridrzeni = chyba
           chyba(ch1 := 66, ch2 := 90); // chyba polohy nastoje otvoru // Nevysunulo se pridrzeni     
            otvor.Scase := 255;  //do chyby 
	  END_IF;
	END_IF; 

    4 :  //otvor u je vytvoen, nahoru vyjede vlec 
      IF (d_s_valce) THEN  //dojeto dolu (senzor)
        out_valec_d := 0; // pro vyfouknut vzduchu (uzaven ventilu)
        out_valec_nah := 1; // pohyb pstu nahoru
        otvor.cas := 200;  //[10 ms] nahozeni casovace
        otvor.Scase := 5;  //na dalsi akci
      ELSE  
	  IF (otvor.cas = 0) THEN  //vyprsel cas - chyba     
            chyba(ch1 := 66, ch2 := 30);  //"Chyba polohy nastroje otvoru" / "-Nedojel dolu"     
            otvor.Scase := 255;  //do chyby 
	  END_IF;       
      END_IF;

    5 :  // kontrola dojeti nahoru vlce a zasunut pridrzeni
      IF (h_s_valce) THEN  //dojeto vlec nahoe
        ovl_pridrz := 0; // zasunuti pridrzeni
	otvor.cas = 100; // nahozeni casovace
	pocet_cyklu_primazavani := pocet_cyklu_primazavani + 1; // vykonan cyklus pitem
        otvor.Scase := 6;  //na dalsi akci
      ELSE
        IF (otvor.cas = 0) THEN  //vyprsel cas - chyba          
            chyba(ch1 := 66, ch2 := 31);  //"Chyba polohy nastroje otvoru" / "-Nedojel nahoru"          
            otvor.Scase := 255;  //do chyby
        END_IF;
      END_IF;    
   
    6 :  //pridzeni zpet  
	IF(pridrz_zas_s) THEN    // senzor kontrolu zasunuti pridrzeni
        otvor.cas := 50;  // nahozeni casovace
        otvor.Scase := 99;  //ukonceni
	ELSE
	  IF (otvor.cas = 0) THEN  //vyprsel cas + neni zasunute pridrzeni = chyba     
           chyba(ch1 := 66, ch2 := 91); // chyba polohy nastoje otvoru // Nezasunulo se pridrzeni     
            otvor.Scase := 255;  //do chyby 
	  END_IF;
	END_IF; 

    99 :  //ukonceni 
      IF (otvor.cas = 0) THEN  //vyprsel cas
         out_valec_nah := 1; // pro kontrolu zajistime polohu nahore
	 out_valec_d := 0;                            
      END_IF;

  END_CASE;
END_FUNCTION_BLOCK
VAR_GLOBAL 
  fb_nastroj_otvor : Tfb_nastroj_otvor;
END_VAR