/*
 * ZDistL.h
 *
 *
 *  Created on: 16-03-2017
 *      Author: KJ
 */

#ifndef ZDISTS_H_
#define ZDISTS_H_

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

	struct Nastawy_przeliczone_ZDistS
    {
		struct Wyjscia_ZDistA *ZdistA;

		unsigned short ZZw_st; ///< strefa współpracy z automatyką załączenia na zwarcie
		unsigned short adr_PZZw;///< adres zmiennej pobudzenia strefy współpracujacej z automatyką ZZw
		unsigned short adr_ZZZw;///< adres zmiennej zadziałania strefy współpracujacej z automatyką ZZw

		short t_stf[5][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

		u8 Bl_PS[5];
		u8 Zbz[5][2]; ///< zadziałanie bezzwloczne strefy
		u8 Stf_ON[5]; ///< wlaczenie/odstawienie strefy
		u8 Stf_W[5]; ///< działanie na wylaczenie/sygnalizacje strefy
        u8 bl_; ///< wartosc nastawy aktywnosci blokady dzialania 1- blokada aktywna
		u8 ZZw_ON; ///< włączenie automatyki załączenia na zwarcie
    };


	struct dane_wewnetrzne_ZDistS
	{
        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[5][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
		//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[5][2]; // pobudzenia stref P[nr strefy][fazowe,miedzyfazowe]
		u8 Pzf[5]; //pobudzenie stref
		u8 P;// pobudzenie zbiorcze
		u8 Zf[5][2]; // zadzialanie strefy
		u8 Z[5]; // zadzialanie strefy
		u8 Ws[5]; // wyłaczenie od strefy
		u8 Zz; // Zadzialanie sygnal zbiorczy
		u8 W; // wylaczenie sygnal zbiorczy
		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 W_ON;//wyłącznik zamkniety
		u8 W_OFF;//wyłącznik otwarty
		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 ZZwP;//wyłączenie od automatyki załączenia na zwarcie
	};

struct ZDistS_logic
{
    struct binary_io stan_bl;
    struct Wyjscia_ZDistA *WE_Zdist;
	struct binary_io Bl_PS;
	struct binary_io Bl_Ufail;
	struct binary_io Z;
	struct binary_io W_ON;
	struct binary_io W_OFF;
	struct binary_io test;

	struct binary_io P;
    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 Z1;
    struct binary_io Z2;
    struct binary_io Z3;
    struct binary_io Z4;
    struct binary_io Z5;
    struct binary_io W;

    struct binary_io PZZw;
	struct binary_io ZZZw;

	struct Nastawy_przeliczone_ZDistS nast_;
	struct dane_wewnetrzne_ZDistS dw;
};

struct ZDistS_io
{
	u32 stan_bl_in;
	u32 we_zdist_ptr_in;
	u32 bl_ps_in;
	u32 bl_ufail_in;
	u32 z_in;
	u32 w_on_in;
	u32 w_off_in;
	u32 test_in;

	u32 p_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 z1_out;
	u32 z2_out;
	u32 z3_out;
	u32 z4_out;
	u32 z5_out;
	u32 w_out;
}__attribute__((__packed__));

struct ZDistS_params
{
	u32 bity; ///< nastawy bitowe;
	u32 Stf1; ///< Sposób działania strefy 1
	u32 Stf2; ///< Sposób działania strefy 2
	u32 Stf3; ///< Sposób działania strefy 3
	u32 Stf4; ///< Sposób działania strefy 4
	u32 Stf5; ///< Sposób działania strefy 5
	u32 ZZw_st; ///< strefa współpracy z automatyką załączenia na zwarcie

	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 ts6LL;///< Czas wyłączenia strefy 5 zwarcia miedzyfazowe
	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
}__attribute__((__packed__));

struct ZDistS_args
{
	struct ZDistS_io io;
	struct ZDistS_params params;
//	u16 crc;
}__attribute__((__packed__));

extern void ZDistS(void *args, void *logic);
extern void ZDistS_100hz(void *args, void *logic);
extern int ZDistS_initlog(void *arguments, void *logic);

#endif /* ZDISTS_H_ */
