/*
 * ZDistL.h
 *
 *
 *  Created on: 29-11-2016
 *      Author: KJ
 */

#ifndef ZDISTL_H_KOMP_
#define ZDISTL_H_KOMP_
//#include "pawel_usun_to.h"

#include "tdefs.h"
#include "helper.h"
#include "ZDistL.h"


struct Wyjscie1_zdistl_komp
{
	u8 dbl_Com[7]; ///deblokowanie dzia�ania stref w zale�no�ci od stanu ��cza
	u8 PSPZ;//pobudzenie SPZ
};

struct dane_wewnetrzne_ZDistL_komp
{
       u8 blok_lacza[6];
        u8 wydl_czas;       
        u8 wylacz_od_lacza;
        u8 wylacz_od_echa;
        u8 wylacz_od_lacza_suma;
        //lacze nad       
        u16 t_lacze_nad;
        u8 lacze_nad;
        
        u16 trwanie_nad;
        u8 skrocil_strefa;
        u8 skrocil_echo;
        
        
        //logika pradu wstecznego       
        u8 blokada_pradu_wstecznego;
        u16 t_pod_blok_wst;
        u8 kopia_lacze_ok;
        u8 lacze_odb_old;
        
        
        //logika odblokowania
        u8 logika_dblokowania;
        u16 t_log_odblokowania;
             
        u8 blok_LRC[6];
        

        u16 t_wyl_od_echa;
               
        float RL1Em; ///< Rezystancja pętli zwarciowej fazy L1 z ziemia (rejestracja)
        float XL1Em; ///< Rezaktancja pętli zwarciowej fazy L1 z ziemia (rejestracja)
        float RL2Em; ///< Rezystancja pętli zwarciowej fazy L2 z ziemia (rejestracja)
        float XL2Em; ///< Rezaktancja pętli zwarciowej fazy L2 z ziemia (rejestracja)
        float RL3Em; ///< Rezystancja pętli zwarciowej fazy L3 z ziemia (rejestracja)
        float XL3Em; ///< Rezaktancja pętli zwarciowej fazy L3 z ziemia (rejestracja)
        float RL1L2m; ///< Rezystancja pętli zwarciowej fazy L1 z L2 (rejestracja)
        float XL1L2m; ///< Rezaktancja pętli zwarciowej fazy L1 z L2 (rejestracja)
        float RL2L3m; ///< Rezystancja pętli zwarciowej fazy L2 z L3 (rejestracja)
        float XL2L3m; ///< Rezaktancja pętli zwarciowej fazy L2 z L3 (rejestracja)
        float RL3L1m; ///< Rezystancja pętli zwarciowej fazy L3 z L1 (rejestracja)
        float XL3L1m; ///< Rezaktancja pętli zwarciowej fazy L3 z L1 (rejestracja)
		short liczts[6][2]; ///<licznik czasu czas opoznienia dzialania strefy
    
    	short liczt_eldz[6][2]; ///<licznik czasu czas opoznienia dzialania strefy

		short licznik_ZZwa;///< licznik do automatyki załączenia na zwarcie
		short licznik_PIU;///< licznik pobudzeń sprawdzania obecności napiecia i prądu
		
		short licznik_Uecho;
		
		//Wyjscia_rejestratora Rej; ///< dane ostatniego zaklocenia
		//Time czas_; // moment wystapienia zaklocenia (rejestr tymczasowy - przed zapisem)
		u32 dl_; // dlugosc czasu trwania zaklocenia (rejestr tymczasowy - przed zapisem)
		u8 wsk_rej; // nowy zapis rejestracji parametrow zaklocenia (spelnienie kryterium identyfikacji)
		u8 Pf[6][2]; // pobudzenia stref P[nr strefy][fazowe,miedzyfazowe]
		u8 Pzf[6]; //pobudzenie stref
		u8 P;// pobudzenie zbiorcze
		u8 Zf[6][2]; // zadzialanie strefy
		u8 Z[6]; // zadzialanie strefy
		u8 Ws[6]; // wyłaczenie od strefy 
		u8 Zz; // Zadzialanie sygnal zbiorczy
		u8 W; // wylaczenie sygnal zbiorczy
		u8 W1; // wylaczenie faza L1
		u8 W2; // wylaczenie faza L2
		u8 W3; // wylaczenie faza L3
		u8 R;//zwarcie z udziałem fazy L1
		u8 S;//zwarcie z udziałem fazy L2
		u8 T;//zwarcie z udziałem fazy L3
		u8 Rbk;//zwarcie z udziałem fazy L1(bezkierunkowo)
		u8 Sbk;//zwarcie z udziałem fazy L2(bezkierunkowo)
		u8 Tbk;//zwarcie z udziałem fazy L3(bezkierunkowo)
		u8 E;//zwarcie z udziałem ziemi
		u8 jedfaz;//zwarcie jednofazowe
		u8 W_ON;//wyłącznik zamkniety
		u8 W1_ON;//wyłącznik zamkniety faza L1
		u8 W2_ON;//wyłącznik zamkniety faza L2
		u8 W3_ON;//wyłącznik zamkniety faza L3
		u8 W_OFF;//wyłącznik otwarty
		u8 W1_OFF;//wyłącznik otwarty faza L1
		u8 W2_OFF;//wyłącznik otwarty faza L2
		u8 W3_OFF;//wyłącznik otwarty faza L3
		u8 ZZw; //aktywna automatyka załączenia na zwarcie
		u8 ZZw_start; //spełnienie warunków uruchomienia automatyki załączenia na zwarcie
		u8 ZZw_PIU; //pobudzenie kryterium napięcie/prąd zamknięcia wyłącznika
		u8 pob_echo;
		u8 bl_WSPZ;//zezwolenie na wyłącz od SPZ
		u8 R1;
		u8 S1;
		u8 T1;
		u8 ZZwP;//wyłączenie od automatyki załączenia na zwarcie
		u8 wy_blk_lacz;
		
		u8 wy_bl_LRC;
		u8 wy_log_odbl;
        u8 wy_lacze_nad;
        
        u8 wy_zadz_echa;
		u8 wy_zezw_lacz; 
		u8 wy_skr_czas_lacz; 
		u8 wy_wyl_lacz; 
		u8 wy_blok_lacz; 
		u8 wy_wydl_czas_lacz; 
		
		u8 wyl_1f;
		
		u8 Zf_rozwij[6];
		short liczts_rozwij[6];
		short liczt_eldz_rozwij[6];
		short dodaj_rozw[6];

};

struct Nastawy_przeliczone_ZDistL_komp
{
	struct Wyjscie1_zdistl_komp wy;

	struct Wyjscia_ZDistA_komp *ZdistA;
		
	u16 ZZw_st; ///< strefa współpracy z automatyką załączenia na zwarcie
	u16 adr_PZZw;///< adres zmiennej pobudzenia strefy współpracujacej z automatyką ZZw
	u16 adr_ZZZw;///< adres zmiennej zadziałania strefy współpracujacej z automatyką ZZw

	u8 echo_on;
	u8 wyl_od_echa;
	u8 log_odbl_on;
	u8 LCR_on;
	u8 lacze_on;	
	u8 LRC_s[6];
	u8 zgoda_1faz_s[6];

	u8 Bl_PS[6];
	u8 ZZw_ON; ///< włączenie automatyki załączenia na zwarcie
	u8 bl_; ///< wartosc nastawy aktywnosci blokady dzialania 1- blokada aktywna
	
	u8 rozwij;
	u8 kryt_IU_ZZW;
	
	enum _tryb_zezwalajacy tryb_zezw;
    enum _tryb_blokujacy tryb_blok;
    enum _tryb_lacza tryb_lacza;
		
	u8 ktora_strefa;
	u8 ktora_strefa_nad;
    u8 strefa_pradu_wstecznego;
				
	short t_stf[6][2]; ///< czas dzialania strefy
	float ZZw_ta;///< Czas działania funkcji po zamknięciu wyłącznika
	float ZZw_Ir;///< Prąd identyfikacji otwarcia wyłącznika
	float ZZw_Ur;///< Napięcie identyfikacji otwarcia wyłacznika
	short ZZw_to;///< Czas identyfikacji otwarcia wyłącznika

	short t_LRC;///< Czas podtrzymania w logice odwroconego pradu
	short t_pod_odbl;///< Czas podtrzymania odblokowania w logice odblokowania
	short t_lacze_nad;///< Czas przerwy beznapięciowej dla wyłączenia jednofazowego
	short ts_plus;

	short max_t_nadawania;
	short czas_wyl_echa;

	float Uecho_pob;
	float Uecho_odp;
		
	u8 Zbz[6][2]; ///< zadziałanie bezzwloczne strefy
	u8 Stf_ON[6]; ///< wlaczenie/odstawienie strefy
	u8 Stf_W[6]; ///< działanie na wylaczenie/sygnalizacje strefy

};

struct ZDistL_logic_komp
{
 
    struct binary_io stan_bl;
    struct Wyjscia_ZDistA_komp *WE_Zdist;
	struct binary_io Bl_PS;
	struct binary_io lacze_OK;
	struct binary_io lacze_odb;
	struct binary_io W_ON;
	struct binary_io zgoda_1f;
	struct binary_io Z;
	struct binary_io test;
	struct binary_io blok_1;
	struct binary_io blok_1W;
	struct binary_io blok_2;
	struct binary_io blok_3;
	struct binary_io blok_4;
	struct binary_io blok_5;
		
    struct binary_io P;
	struct binary_io P1W;
	struct binary_io P1;
	struct binary_io P2;
	struct binary_io P3;
	struct binary_io P4;
	struct binary_io P5;
	struct binary_io R;
	struct binary_io S;
	struct binary_io T;
	struct binary_io E;
	struct binary_io Z1W;
	struct binary_io Z1;
	struct binary_io Z2;
	struct binary_io Z3;
	struct binary_io Z4;
	struct binary_io Z5;	
	struct binary_io W;
	struct binary_io W1;
	struct binary_io W2;
	struct binary_io W3;
	struct binary_io bl_LRC;
	struct binary_io log_odbl;
	struct binary_io lacze_nad;
	struct binary_io zzw_akt;
	struct binary_io blk_lacz;
	
	struct binary_io deakt;

	//nowe
	struct binary_io zadz_echa;
	struct binary_io zezw_lacz;
	struct binary_io skr_czas_lacz;
	struct binary_io wyl_lacz;
	struct binary_io blok_lacz;
	struct binary_io wydl_czas_lacz;
	struct binary_io z_zwarcie;
	
	struct binary_io PZZw;
	struct binary_io ZZZw;
	
	struct binary_io P_L1; ///< Pobudzenie sfazy L1
	struct binary_io P_L2; ///< Pobudzenie sfazy L1
	struct binary_io P_L3; ///< Pobudzenie sfazy L1
	struct binary_io P_E; ///< Pobudzenie sfazy L1
	
	struct binary_io WS1W;
	struct binary_io WS1;
	struct binary_io WS2;
	struct binary_io WS3;
	struct binary_io WS4;
	struct binary_io WS5;
	
	struct binary_io W_1f;	
	
	struct Nastawy_przeliczone_ZDistL_komp nast_;
	struct dane_wewnetrzne_ZDistL_komp dw;
	u8 pobudzenia[6][6];
	u8 P_L1_lub_L2[6];
	u8 P_L2_lub_L3[6];
	u8 P_L3_lub_L1[6];

	u8 pob1_flt;
	short pob1_flt_cnt;
	u8 pob2_flt;
	short pob2_flt_cnt;
	u8 pob3_flt;
	short pob3_flt_cnt;
	u8 pob4_flt;
	short pob4_flt_cnt;

};

struct ZDistL_io_komp
{
	u32	stan_bl_in;
	u32	 we_zdist_ptr_in;
	u32	Bl_PS_in;
	u32	lacze_OK_in;
	u32	lacze_odb_in;
	u32	W_ON_in;
	u32	zgoda_1f_in;
	u32	Z_in;
	u32	test_in;
	u32 blok_1_in;
	u32 blok_1W_in;
	u32 blok_2_in;
	u32 blok_3_in;
	u32 blok_4_in;
	u32 blok_5_in;
	u32 deakt_in;

	u32	P_out;
	u32	P1W_out;
	u32	P1_out;
	u32	P2_out;
	u32	P3_out;
	u32	P4_out;
	u32	P5_out;
	u32	R_out;
	u32	S_out;
	u32	T_out;
	u32	E_out;
	u32	Z1W_out;
	u32	Z1_out;
	u32	Z2_out;
	u32	Z3_out;
	u32	Z4_out;
	u32	Z5_out;
	u32	W_out;
	u32	W1_out;
	u32	W2_out;
	u32	W3_out;
	u32	bl_LRC_out;
	u32	log_odbl_out;
	u32	lacze_nad_out;
	u32	zzw_akt_out;
	u32 blk_lacz_out;
	
	//nowe
	u32 zadz_echa_out;
	u32 zezw_lacz_out;
	u32 skr_czas_lacz_out;
	u32 wyl_lacz_out;
	u32 blok_lacz_out;
	u32 wydl_czas_lacz_out;
	u32 z_zwarcie_out;	
	
	u32 P_L1_out;
	u32 P_L2_out;
	u32 P_L3_out;
	u32 P_E_out;
	
	u32	WS1W_out;
	u32	WS1_out;
	u32	WS2_out;
	u32	WS3_out;
	u32	WS4_out;
	u32	WS5_out;
	
	u32 W_1f_out;
	
}__attribute__((__packed__));

struct ZDistL_params_komp
{
	long bity; ///< nastawy bitowe;
	long Stf1; ///< Sposób działania strefy 1
	long Stf2; ///< Sposób działania strefy 2
	long Stf3; ///< Sposób działania strefy 3
	long Stf4; ///< Sposób działania strefy 4
	long Stf5; ///< Sposób działania strefy 5
	long tryb_lacza; ///< tryb lacza
	long ZZw_st; ///< strefa współpracy z automatyką załączenia na zwarcie
	long tryb_zezw; ///<tryb zezwalajacy
	long tryb_blokujacy; ///<tryb blokujacy
	long strefa_nad;///<wybor strefy do nadawania
	long strefa_dzial; //<dzia�anie na stref�
	long lrc_strefa; //<strefa logiku pr�du wstecznego

	double ts1LE;///< Czas wyłączenia strefy 1 zwarcia jednofazowe z ziemią
	double ts1LL;///< Czas wyłączenia strefy 1 zwarcia miedzyfazowe
	double ts2LE;///< Czas wyłączenia strefy 2 zwarcia jednofazowe z ziemią
	double ts2LL;///< Czas wyłączenia strefy 2 zwarcia miedzyfazowe
	double ts3LE;///< Czas wyłączenia strefy 3 zwarcia jednofazowe z ziemią
	double ts3LL;///< Czas wyłączenia strefy 3 zwarcia miedzyfazowe
	double ts4LE;///< Czas wyłączenia strefy 4 zwarcia jednofazowe z ziemią
	double ts4LL;///< Czas wyłączenia strefy 4 zwarcia miedzyfazowe
	double ts5LE;///< Czas wyłączenia strefy 5 zwarcia jednofazowe z ziemią
	double ts5LL;///< Czas wyłączenia strefy 5 zwarcia miedzyfazowe
	double t_LRC;///< Czas podtrzymania w logice odwroconego pradu
	double t_pod_odbl;///< Czas podtrzymania odblokowania w logice odblokowania
	double t_lacze_nad;///< Czas przerwy beznapięciowej dla wyłączenia jednofazowego
	double ZZw_ta;///< Czas działania funkcji po zamknięciu wyłącznika
	double ZZw_Ir;///< Prąd identyfikacji otwarcia wyłącznika
	double ZZw_Ur;///< Napięcie identyfikacji otwarcia wyłacznika
	double ZZw_to;///< Czas identyfikacji otwarcia wyłącznika
	double U_echa;
	double ts_plus;
	double max_t_nadawania;
	double czas_wyl_echa;
	
	long Stf0; ///< Sposób działania strefy 1
	double ts0LE;///< Czas wyłączenia strefy 1 zwarcia jednofazowe z ziemią
	double ts0LL;///< Czas wyłączenia strefy 1 zwarcia miedzyfazowe
	
}__attribute__((__packed__));

struct ZDistL_args_komp
{
	struct ZDistL_io_komp io;
	struct ZDistL_params_komp params;
//	u16 crc;
}__attribute__((__packed__));

extern void ZDistL_komp(void *args, void *logic);
extern void ZDistL_100hz_komp(void *args, void *logic);
extern int ZDistL_initlog_komp(void *arguments, void *logic);

#endif /* ZDISTL_H_KOMP_ */
