/*
 * ps2.h
 *
 *  Created on: 08-08-2022
 *      Author: PS
 */

#ifndef PS2_H_
#define PS2_H_

#include "tdefs.h"

#include "ps.h"

struct Nastawy_przeliczone_ps2
    {
	float Imin;///< minimalna wartosc prąadu dzialania
	float Iomin;///< Minimalna wartość rozruchowa prądu zerowego przekaźnika identyfikacji zwarć z udziałem ziemi
	float Iokh;///<Współczynnik stabilizacji charakterystyki przekaźnika identyfikacji zwarć z udziałem ziemi
	float I2min;///<Minimalna wartość rozruchowa prądu zerowego przekaźnika składowej przeciwnej prądu
	float I2kh;///<Współczynnik stabilizacji charakterystyki przekaźnika składowej przeciwnej prądu
	float tanfi1;// wspolczynnik kata prostej
	float tanfi2;// wspolczynnik kata prostej
	float X1f; //wartośc rozruchowa reaktancji do przodu strefa zewnetrzna
	float X1r; //wartośc rozruchowa reaktancji do tyłu strefa zewnetrzna
	float R1f; //wartośc rozruchowa rezystancji do przodu strefa zewnetrzna
	float R1r; //wartośc rozruchowa rezystancji do tyłu strefa zewnetrzna
	float X2f; //wartośc rozruchowa reaktancji do przodu strefa wewnetrzna
	float X2r; //wartośc rozruchowa reaktancji do tyłu strefa wewnetrzna
	float R2f; //wartośc rozruchowa rezystancji do przodu strefa wewnetrzna
	float R2r; //wartośc rozruchowa rezystancji do tyłu strefa wewnetrzna
	float dRl1f;//wartośc rezystancjirozruchowej prostej wynikającej z obszaru obciażenia do przodu strefa zewnetrzna
	float dRl1r;//wartośc rezystancjirozruchowej prostej wynikającej z obszaru obciażenia do tyłu strefa zewnetrzna
	float dRl2f;//wartośc rezystancjirozruchowej prostej wynikającej z obszaru obciażenia do przodu strefa wewnetrzna
	float dRl2r;//wartośc rezystancjirozruchowej prostej wynikającej z obszaru obciażenia do tyłu strefa wewnetrzna
	float dRlf;//nastawa różnicy rezystancji do przodu
	float dRlr;//nastawa różnicy rezystancji do tyłu
	float przekladnia;//wartosc przekladni impedancji
	short tpass;//rozruchowy czas przejscia od strefy 1 do 2

	u32 tdbl; ///< Czas uruchomienia deblokady zabezpieczeń po wykryciu kołysania mocy

	u8 on;///<Przekaźnik aktywny/nieaktywny
	u8 W;///<Dzialanie na wyłączenie
	u8 D3I2;///<Deblokada od poziomu składowej przeciwnej prądu
	u8 D3Io;///<Deblokada od poziomu składowej zerowej prądu
	u8 bl;///<Blokada przekaźnikawłączona/wyłączona
};


struct Wyjscia_binarne_ps2
{
	u8 Bl_PS;///< blokada od kołysań mocy
	u8 PS_syn;///< Sygnalizacja wykrycia synchronicznych kołysań mocy
	u8 PS_asyn;///< Sygnalizacja wykrycia asynchronicznych kołysań mocy

};



struct dane_wewnetrzne_ps2
{
	//Wyjscia_rejestratora Rej; ///< dane ostatniego zaklocenia

	float R;
	float X;
	float absR;
	float absX;
	float Rz;

	short liczIo;
	short liczI2;
	short liczk;
	short liczs1;
	short liczs2;
	int liczdbl;

	enum stan_kolysanie stan_kolysanie;

	u8 Ps1;
	u8 Ps2;
	u8 P_Io;
	u8 P_I2;

	short tpass;// czas przejscia ze strefy 1 do 2
	short t1;// czas przejscia przez strefe 2

	struct Wyjscia_binarne_ps2 b;
};

struct Wejscie_ps2
{
	float U1_orta; ///< ortogonalna a składowej zgodnej napięcia
	float U1_ortb; ///< ortogonalna b składowej zgodnej napięcia
	float U1; ///<składowa zgodna napięcia
	float I1_orta; ///< ortogonalna a składowej zgodnej prądu
	float I1_ortb; ///< ortogonalna b składowej zgodnej prądu
	float I1; ///<składowa zgodna prądu
	float I2; ///<składowa przeciwna prądu
	float I0; ///<składowa zerowa prądu
};

struct ps2_logic
{
	u8 *stan_bl;
	u8 stan_bl_bit;

	float *U1_orta;
	float *U1_ortb;
	float *U1;
	float *I1_orta;
	float *I1_ortb;
	float *I1;
	float *I2;
	float *I0;

	struct analog_in_params *param_U;
	struct analog_in_params *param_I;

	u8 *test;
	u8 test_bit;

	u8 *Bl_PS;
	u8 Bl_PS_bit;

	u8 *PS_syn;
	u8 PS_syn_bit;

	u8 *PS_asyn;
	u8 PS_asyn_bit;

	struct Wejscie_ps2 w;
	struct dane_wewnetrzne_ps2 dw;
	struct Nastawy_przeliczone_ps2 nast_;// struktura z parametrami
};

struct ps2_io
{
	u32 stan_bl_in;
	u32 U1_orta_float_in;
	u32 U1_ortb_float_in;
	u32 U1_float_in;
	u32 I1_orta_float_in;
	u32 I1_ortb_float_in;
	u32 I1_float_in;
	u32 I2_float_in;
	u32 I0_float_in;
	u32 param_U_ptr_in;
	u32 param_I_ptr_in;
	u32 test_in;
	u32 Bl_PS_out;
	u32 PS_syn_out;
	u32 PS_asyn_out;

}__attribute__((__packed__));

struct ps2_params
{
	u32 bity; ///< nastawy bitowe;
	double Rf;///<Zasięg rezystancyjny do przodu strefy zewnętrznej
	double Xf;///<Zasięg reaktancyjny do przodu strefy zewnętrznej
	double Rr;///<Zasięg rezystancyjny do tyłu strefy zewnętrznej
	double Xr;///<Zasięg reaktancyjny do tyłu strefy zewnętrznej
	double dRf;///<różnica zasięgu rezystancyjnego do przodu strefy wewnętrznej
	double dXf;///<różnica zasięgu reaktancyjnego do przodu strefy wewnętrznej
	double dRr;///<różnica zasięgu rezystancyjnego do tyłu strefy wewnętrznej
	double dXr;///<różnica zasięgu reaktancyjnego do przodu strefy wewnętrznej
	double fi1;///<Kąt nachylenia charakterystyki
	double RLf;///<Zasięg „ do przodu” kryterium blokady działania w zakresie prądów obciążenia
	double RLr;///<Zasięg „ do tyłu” kryterium blokady działania w zakresie prądów obciążenia
	double fi2;///<Kąt kierunkowy blokady działania w zakresie prądów obciążenia
	double Iomin;///< Minimalna wartość rozruchowa prądu zerowego przekaźnika identyfikacji zwarć z udziałem ziemi
	double Iokh;///<Współczynnik stabilizacji charakterystyki przekaźnika identyfikacji zwarć z udziałem ziemi
	double I2min;///<Minimalna wartość rozruchowa prądu zerowego przekaźnika składowej przeciwnej prądu
	double I2kh;///<Współczynnik stabilizacji charakterystyki przekaźnika składowej przeciwnej prądu
	double tpass;///<Minimalny czas przejścia impedancji pomiędzy strefami powodujący rozruch przekaźnika
	double tdbl;///<Czas uruchomienia deblokady zabezpieczeń po wykryciu kołysania mocy
	double Imin;///< minimalna wartosc prąadu dzialania
}__attribute__((__packed__));

struct ps2_args
{
	struct ps2_io io;
	struct ps2_params params;
//	u16 crc;
}__attribute__((__packed__));

extern void ps2(void *args, void *logic);
extern void ps2_100hz(void *args, void *logic);
extern int ps2_initlog(void *arguments, void *logic);

#endif /* PS2_H_ */
