dodany kod c od Krzyska po wielu modyfikacjach przez Gemini zeby usunac zalezność od TI-RTOS
This commit is contained in:
8
ZDistA_dummy.c
Normal file
8
ZDistA_dummy.c
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
void ZDistA_komp_initlog(void *arguments, void *logic) {
|
||||
// Dummy implementation
|
||||
}
|
||||
|
||||
void ZDistA_komp(void *args, void *logic) {
|
||||
// Dummy implementation
|
||||
}
|
||||
@@ -8,8 +8,8 @@
|
||||
#include <math.h>
|
||||
|
||||
|
||||
#include "../tdefs.h"
|
||||
#include "../misc.h"
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
#include "helper.h"
|
||||
#include "analog_in.h"
|
||||
#include "e_phi.h"
|
||||
@@ -1010,17 +1010,17 @@ void ZDistA_komp(void *arguments, void *logic)
|
||||
//#define K_SMALL = 0.03;
|
||||
//energia dla wlasciwej petli >= 0.7...0.9 maksymalnej? Kluczowa w near-end, mniej znaczaca w far-end
|
||||
//mozna dodatkowo sprobowac porownania kata impedancji? max 40..60stopni roznicy?
|
||||
//wykryæ near-end mo¿na przez Z<0.15 Zlinii oraz I1>5...10*Inom
|
||||
//wykry<EFBFBD> near-end mo<EFBFBD>na przez Z<0.15 Zlinii oraz I1>5...10*Inom
|
||||
|
||||
|
||||
if(k0>(0.2f*0.2f) && /*k2<0.12 dodaæ? &&*/ Eratio>2.0f && (Zratio < 0.25f/* || near_end*/)) // 1ph-G... moznaby blokowaæ Pob_G gdy Zratio du¿y?
|
||||
if(k0>(0.2f*0.2f) && /*k2<0.12 doda<EFBFBD>? &&*/ Eratio>2.0f && (Zratio < 0.25f/* || near_end*/)) // 1ph-G... moznaby blokowa<EFBFBD> Pob_G gdy Zratio du<EFBFBD>y?
|
||||
{
|
||||
typ_zw=1; // blokowac miedzyfazowe?
|
||||
// zezwol_L1L2=0;
|
||||
// zezwol_L2L3=0;
|
||||
// zezwol_L1L3=0;
|
||||
}
|
||||
else if(k0<0.05f && k2>0.2f && Eratio>1.85f) // L-L [brak I0 za to pojawia siê I2]
|
||||
else if(k0<0.05f && k2>0.2f && Eratio>1.85f) // L-L [brak I0 za to pojawia si<EFBFBD> I2]
|
||||
{
|
||||
typ_zw=2; // blokowac fazowe?
|
||||
zezwol_L1=0;
|
||||
@@ -1144,7 +1144,7 @@ void ZDistA_komp(void *arguments, void *logic)
|
||||
|
||||
float phi1,phi2;
|
||||
// Kryterium Radka
|
||||
// 4. K¹t (I0-I2) |fiI0_I2|
|
||||
// 4. K<EFBFBD>t (I0-I2) |fiI0_I2|
|
||||
phi1=get_phase(*log->sI0_ortb,*log->sI0_orta);
|
||||
phi2=get_phase(*log->sI2_ortb,*log->sI2_orta);
|
||||
fiI0_I2=get_phase_diff(phi1,phi2);
|
||||
@@ -1178,7 +1178,7 @@ void ZDistA_komp(void *arguments, void *logic)
|
||||
zakr_I0_I2 = *log->sI0 * _rcpsp(*log->sI2);
|
||||
|
||||
//if(Z_Z1<0.9f)
|
||||
//jak sprawdziæ ¿e impedancja Z_L1/2/3 jest w przód lub w ty³
|
||||
//jak sprawdzi<EFBFBD> <20>e impedancja Z_L1/2/3 jest w prz<EFBFBD>d lub w ty<EFBFBD>
|
||||
///???
|
||||
|
||||
if(1/*blok_do_szyn*/)//zwarcie w przod
|
||||
@@ -1225,24 +1225,24 @@ void ZDistA_komp(void *arguments, void *logic)
|
||||
//*log->z[4]=A;
|
||||
}
|
||||
//Kryterium Radka B
|
||||
//Blokada fa³szywych zwaræ doziemnych podczas poprawnego zwarcia doziemnego
|
||||
//Blokada fa<EFBFBD>szywych zwar<EFBFBD> doziemnych podczas poprawnego zwarcia doziemnego
|
||||
/* float fiI0_I2;
|
||||
if((ZDISTA_POPRAWKA_4)&&(ZDISTA_POPRAWKA_5))
|
||||
{
|
||||
float phi3,phi4;
|
||||
// Kryterium Radka
|
||||
// 4. K¹t (I0-I2) |fiI0_I2|
|
||||
// 4. K<EFBFBD>t (I0-I2) |fiI0_I2|
|
||||
phi3=get_phase(*log->sI0_ortb,*log->sI0_orta);
|
||||
phi4=get_phase(*log->sI2_ortb,*log->sI2_orta);
|
||||
fiI0_I2=get_phase_diff(phi3,phi4);
|
||||
//sprzwdzanie BRAK aktywnych pêtli zwaræ miêdzyfazowych LL
|
||||
//sprzwdzanie BRAK aktywnych p<EFBFBD>tli zwar<EFBFBD> mi<EFBFBD>dzyfazowych LL
|
||||
//????????????
|
||||
//czy tylko w 1 strefie, czy we wszystkich trzeba sprawdziæ zwarcia LL
|
||||
//czy tylko w 1 strefie, czy we wszystkich trzeba sprawdzi<EFBFBD> zwarcia LL
|
||||
|
||||
|
||||
|
||||
//sprawdzenie fi
|
||||
// dla ka¿dej fazy
|
||||
// dla ka<EFBFBD>dej fazy
|
||||
if (((fabs(fiI0_I2)>30) && (fabs(fiI0_I2-120)<25)) ||(fabs(fiI0_I2+120)<25))
|
||||
zezwol_L1 =0;
|
||||
if (((fabs(fiI0_I2-120)>30) && (fabs(fiI0_I2)<25)) ||(fabs(fiI0_I2+120)<25))
|
||||
@@ -1260,7 +1260,7 @@ void ZDistA_komp(void *arguments, void *logic)
|
||||
if(ZDISTA_POPRAWKA_4C)
|
||||
{
|
||||
//----------------------------------------------------------------------------------
|
||||
//Blokada fa³szywych zwaræ doziemnych podczas zwarcia miêdzyfazowego
|
||||
//Blokada fa<EFBFBD>szywych zwar<EFBFBD> doziemnych podczas zwarcia mi<EFBFBD>dzyfazowego
|
||||
// 1. |I0/I2|<0.25
|
||||
float kdiff;
|
||||
kdiff = *log->sI0 * _rcpsp(*log->sI2); // |I0|/|I2|
|
||||
@@ -1415,7 +1415,7 @@ void ZDistA_komp(void *arguments, void *logic)
|
||||
);
|
||||
}
|
||||
|
||||
sprawdz_P( // blokada od pradow obcia¿enia
|
||||
sprawdz_P( // blokada od pradow obcia<EFBFBD>enia
|
||||
&log->dw.BL_Load[i],
|
||||
(log->dw.Z.R[i] > local1 || log->dw.Z.R[i] < local2) &&
|
||||
fabs(log->dw.Z.X[i]) < fabs(local3 * log->dw.Z.R[i]),
|
||||
@@ -1531,7 +1531,7 @@ void ZDistA_komp(void *arguments, void *logic)
|
||||
&log->dw.liczps[0][i],
|
||||
l_powt, 5
|
||||
);
|
||||
log->dw.Pbk[0][i] = log->dw.P_s[0][i] && log->dw.Iogr && !(log->nast_.Bl_L[0] && log->dw.BL_Load[i]); // uwzglednienie blokady od pradow obcia¿enia oraz kryterium zwarc z udzialem ziemi
|
||||
log->dw.Pbk[0][i] = log->dw.P_s[0][i] && log->dw.Iogr && !(log->nast_.Bl_L[0] && log->dw.BL_Load[i]); // uwzglednienie blokady od pradow obcia<EFBFBD>enia oraz kryterium zwarc z udzialem ziemi
|
||||
log->dw.P_sss[0][i]= wk1;
|
||||
}
|
||||
|
||||
@@ -1579,7 +1579,7 @@ void ZDistA_komp(void *arguments, void *logic)
|
||||
&log->dw.liczps[1][i],
|
||||
l_powt, 5
|
||||
);
|
||||
log->dw.Pbk[1][i] = log->dw.P_s[1][i] && log->dw.Iogr && !(log->nast_.Bl_L[1] && log->dw.BL_Load[i]); // uwzglednienie blokady od pradow obcia¿enia oraz kryterium zwarc z udzialem ziemi
|
||||
log->dw.Pbk[1][i] = log->dw.P_s[1][i] && log->dw.Iogr && !(log->nast_.Bl_L[1] && log->dw.BL_Load[i]); // uwzglednienie blokady od pradow obcia<EFBFBD>enia oraz kryterium zwarc z udzialem ziemi
|
||||
log->dw.P_sss[1][i]= wk1;
|
||||
}
|
||||
|
||||
@@ -1629,7 +1629,7 @@ void ZDistA_komp(void *arguments, void *logic)
|
||||
l_powt, 5
|
||||
);
|
||||
|
||||
log->dw.Pbk[j][i-3] = log->dw.P_s[j][i-3] && log->dw.Iogr && !(log->nast_.Bl_L[j] && log->dw.BL_Load[i]); // uwzglednienie blokady od pradow obcia¿enia oraz kryterium zwarc z udzialem ziemi
|
||||
log->dw.Pbk[j][i-3] = log->dw.P_s[j][i-3] && log->dw.Iogr && !(log->nast_.Bl_L[j] && log->dw.BL_Load[i]); // uwzglednienie blokady od pradow obcia<EFBFBD>enia oraz kryterium zwarc z udzialem ziemi
|
||||
log->dw.P_sss[j][i-3]= wk1;
|
||||
}
|
||||
|
||||
@@ -1678,7 +1678,7 @@ void ZDistA_komp(void *arguments, void *logic)
|
||||
&log->dw.liczps[j][i-3],
|
||||
l_powt, 5
|
||||
);
|
||||
log->dw.Pbk[j][i-3] = log->dw.P_s[j][i-3] && !(log->nast_.Bl_L[j] && log->dw.BL_Load[i]); // uwzglednienie blokady od pradow obcia¿enia oraz minimalnej wartosci pradu
|
||||
log->dw.Pbk[j][i-3] = log->dw.P_s[j][i-3] && !(log->nast_.Bl_L[j] && log->dw.BL_Load[i]); // uwzglednienie blokady od pradow obcia<EFBFBD>enia oraz minimalnej wartosci pradu
|
||||
log->dw.P_sss[j][i-3]= wk1;
|
||||
}
|
||||
}
|
||||
@@ -1767,7 +1767,7 @@ void ZDistA_komp(void *arguments, void *logic)
|
||||
|
||||
// *log->z[5]=Zm_vect;
|
||||
|
||||
if (!check_struct(&log->Bl_K))//jeœli nie ma blokady kierunku
|
||||
if (!check_struct(&log->Bl_K))//je<EFBFBD>li nie ma blokady kierunku
|
||||
{
|
||||
for(j=0;j<2;j++)
|
||||
{
|
||||
|
||||
BIN
ZDistA_komp.dll
Normal file
BIN
ZDistA_komp.dll
Normal file
Binary file not shown.
@@ -11,7 +11,7 @@
|
||||
|
||||
//#include "pawel_usun_to.h"
|
||||
|
||||
#include "../tdefs.h"
|
||||
#include "tdefs.h"
|
||||
#include "helper.h"
|
||||
#include "ZDistL.h"
|
||||
|
||||
@@ -91,8 +91,8 @@
|
||||
float Xp; // zasieg dla poligonu i srodek okregu dla kolowej wspolrzedna X dla powrotu
|
||||
float Rp; // zasieg dla dla poligonu i srodek okregu dla kolowej wspolrzedna R dla powrotu
|
||||
float Zp; // srednica kola charakterystyki kolowej dla powrotu
|
||||
float Rrtanfi1;// wartość rozruchowa prostej nachylonej kątem linii
|
||||
float Rptanfi1;// wartość powrotowa prostej nachylonej kątem linii
|
||||
float Rrtanfi1;// warto<EFBFBD><EFBFBD> rozruchowa prostej nachylonej k<EFBFBD>tem linii
|
||||
float Rptanfi1;// warto<EFBFBD><EFBFBD> powrotowa prostej nachylonej k<EFBFBD>tem linii
|
||||
};
|
||||
|
||||
struct Wyjscia_ZDistA_komp // struktura wyjsc przekaznika
|
||||
@@ -128,27 +128,27 @@
|
||||
float Igrp; // wartosc kwadratu pradu granicznego warunku dzialania przekaznika (powrot)
|
||||
|
||||
float Zgr;// minimalna wartosc impedancji kryteriunkierunkowego w kwadracie
|
||||
float kp;//współczynnik powrotu dla niedomiarówek
|
||||
float kpp;//współczynnik powrotu dla nadmiarówek
|
||||
float kpk; //kwadrat współczynnika powrotu
|
||||
float kp;//wsp<EFBFBD>czynnik powrotu dla niedomiar<EFBFBD>wek
|
||||
float kpp;//wsp<EFBFBD>czynnik powrotu dla nadmiar<EFBFBD>wek
|
||||
float kpk; //kwadrat wsp<EFBFBD>czynnika powrotu
|
||||
short kierunek[6];
|
||||
|
||||
//A2
|
||||
float XKR; // wspolczynnik prostej R kierunku kryterium impedancyjnego
|
||||
float XKX; // wspolczynnik prostej R kierunku kryterium impedancyjnego
|
||||
float KL;//wspolczynnik prostej dla blokady od obszaru obciażenia
|
||||
float KL;//wspolczynnik prostej dla blokady od obszaru obcia<EFBFBD>enia
|
||||
float RLf; // wartosc rozruchowa blokady Load do przodu
|
||||
float RLr; // wartosc rozruchowa blokady Load do tylu
|
||||
float Iogr; // wartosc graniczna skladowej zerowej identyfikacji zwarc z udzialem ziemi
|
||||
float khio; // wspolczynnik stabilizacji dla przekaznika identyfikacji zwarc z udzialem ziemi
|
||||
float Uomin; ///< minimalna wartość napięcia składowej zerowej
|
||||
float Uomin; ///< minimalna warto<EFBFBD><EFBFBD> napi<EFBFBD>cia sk<EFBFBD>adowej zerowej
|
||||
|
||||
float ReKrown; // skladowa rzeczywista wspolczynnika dla linii rownoleglej
|
||||
float ImKrown;// skladowa urojona wspolczynnika dla linii rownoleglej
|
||||
float Krown_ignac;
|
||||
|
||||
float kp_obc; //wspolczynnik powrotu krzywych obciazenia
|
||||
float kpp_obc; //kwadrat współczynnika powrotu krzywych obciazenia
|
||||
float kpp_obc; //kwadrat wsp<EFBFBD>czynnika powrotu krzywych obciazenia
|
||||
|
||||
};
|
||||
|
||||
@@ -383,64 +383,64 @@ struct ZDistA_komp_params
|
||||
double fi1; ///< Kat linii
|
||||
double fi2; ///< Kat nachylenia prostej korekcji strefy pierwszej dla zwarc jednofazowych z ziemia
|
||||
double R1W_Zf1W_LE; ///< Zasieg rezystancyjny strefy 1 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” wydluzenie strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg <EFBFBD>do przodu<EFBFBD> wydluzenie strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R1W_Zf1W_LL; ///< Zasieg rezystancyjny strefy 1 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” wyduzenie strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
///< Zasieg <EFBFBD>do przodu<EFBFBD> wyduzenie strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R1_Zf1_LE; ///< Zasieg rezystancyjny strefy 1 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg <EFBFBD>do przodu<EFBFBD> strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R1_Zf1_LL; ///< Zasieg rezystancyjny strefy 1 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
///< Zasieg <EFBFBD>do przodu<EFBFBD> strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R2_Zf2_LE; ///< Zasieg rezystancyjny strefy 2 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 2 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg <EFBFBD>do przodu<EFBFBD> strefy 2 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R2_Zf2_LL; ///< Zasieg rezystancyjny strefy 2 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 2 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
///< Zasieg <EFBFBD>do przodu<EFBFBD> strefy 2 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R3_Zf3_LE; ///< Zasieg rezystancyjny strefy 3 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 3 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg <EFBFBD>do przodu<EFBFBD> strefy 3 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R3_Zf3_LL; ///< Zasieg rezystancyjny strefy 3 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 3 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
///< Zasieg <EFBFBD>do przodu<EFBFBD> strefy 3 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R4_Zf4_LE; ///< Zasieg rezystancyjny strefy 4 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 4 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg <EFBFBD>do przodu<EFBFBD> strefy 4 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R4_Zf4_LL; ///< Zasieg rezystancyjny strefy 4 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 4 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
///< Zasieg <EFBFBD>do przodu<EFBFBD> strefy 4 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R5_Zf5_LE; ///< Zasieg rezystancyjny strefy 5 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 5 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg <EFBFBD>do przodu<EFBFBD> strefy 5 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R5_Zf5_LL; ///< Zasieg rezystancyjny strefy 5 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 5 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
///< Zasieg <EFBFBD>do przodu<EFBFBD> strefy 5 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X1W_Zr1W_LE; ///< Zasieg reaktancyjny wydluzenie strefy 1 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” wydluzenie strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg <EFBFBD>do tylu<EFBFBD> wydluzenie strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X1W_Zr1W_LL; ///< Zasieg reaktancyjny wydluzenie strefy 1 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” wydluzenie strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
///< Zasieg <EFBFBD>do tylu<EFBFBD> wydluzenie strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X1_Zr1_LE; ///< Zasieg reaktancyjny strefy 1 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg <EFBFBD>do tylu<EFBFBD> strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X1_Zr1_LL; ///< Zasieg reaktancyjny strefy 1 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
///< Zasieg <EFBFBD>do tylu<EFBFBD> strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X2_Zr2_LE; ///< Zasieg reaktancyjny strefy 2 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 2 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg <EFBFBD>do tylu<EFBFBD> strefy 2 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X2_Zr2_LL; ///< Zasieg reaktancyjny strefy 2 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 2 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
///< Zasieg <EFBFBD>do tylu<EFBFBD> strefy 2 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X3_Zr3_LE; ///< Zasieg reaktancyjny strefy 3 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 3 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg <EFBFBD>do tylu<EFBFBD> strefy 3 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X3_Zr3_LL; ///< Zasieg reaktancyjny strefy 3 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 3 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
///< Zasieg <EFBFBD>do tylu<EFBFBD> strefy 3 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X4_Zr4_LE; ///< Zasieg reaktancyjny strefy 4 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 4 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg <EFBFBD>do tylu<EFBFBD> strefy 4 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X4_Zr4_LL; ///< Zasieg reaktancyjny strefy 4 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 4 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
///< Zasieg <EFBFBD>do tylu<EFBFBD> strefy 4 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X5_Zr5_LE; ///< Zasieg reaktancyjny strefy 5 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 5 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg <EFBFBD>do tylu<EFBFBD> strefy 5 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X5_Zr5_LL; ///< Zasieg reaktancyjny strefy 5 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 5 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
///< Zasieg <EFBFBD>do tylu<EFBFBD> strefy 5 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double kp; ///< wspolczynnik powrotu
|
||||
//A2
|
||||
// double U_min; ///< Minimalna wartosc napiecia
|
||||
double fi3; ///< Kat kierunkowy od osi X impedancyjnego kryterium kierunku
|
||||
double fi4; ///< Kat kierunkowy od osi R impedancyjnego kryterium kierunku
|
||||
double RLf; ///< Zasieg „ do przodu” kryterium blokady dzialania w zakresie pradow obciażenia
|
||||
double RLr; ///< Zasieg „ do tylu” kryterium blokady dzialania w zakresie pradow obciażenia
|
||||
double fi5; ///< Kat kierunkowy blokady dzialania w zakresie pradow obciażenia
|
||||
double RLf; ///< Zasieg <EFBFBD> do przodu<EFBFBD> kryterium blokady dzialania w zakresie pradow obcia<EFBFBD>enia
|
||||
double RLr; ///< Zasieg <EFBFBD> do tylu<EFBFBD> kryterium blokady dzialania w zakresie pradow obcia<EFBFBD>enia
|
||||
double fi5; ///< Kat kierunkowy blokady dzialania w zakresie pradow obcia<EFBFBD>enia
|
||||
double Iomin; ///< Minimalna wartosc rozruchowa pradu zerowego przekaznika identyfikacji zwarc z udzialem ziemi
|
||||
double Iokh; ///< Wspolczynnik stabilizacji charakterystyki przekaznika identyfikacji zwarc z udzialem ziemi
|
||||
double Uomin; ///< minimalna wartość napięcia składowej zerowej
|
||||
double Uomin; ///< minimalna warto<EFBFBD><EFBFBD> napi<EFBFBD>cia sk<EFBFBD>adowej zerowej
|
||||
|
||||
long Typ0; ///< Typ charakterystyki strefa 1W
|
||||
long K0; ///< Kierunek dzialania strefa 1W
|
||||
@@ -448,7 +448,7 @@ struct ZDistA_komp_params
|
||||
double Krown; ///< Wspolczynnik kompensacji linii rown
|
||||
double Krown_kat; ///< Kat wektora kompensacji lnii rown
|
||||
|
||||
double kp_obc; ///< Współczynnik powrotu dla blokady od prądu obciążenia
|
||||
double kp_obc; ///< Wsp<EFBFBD>czynnik powrotu dla blokady od pr<EFBFBD>du obci<EFBFBD><EFBFBD>enia
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
|
||||
202
ZDistA_wrapper.c
Normal file
202
ZDistA_wrapper.c
Normal file
@@ -0,0 +1,202 @@
|
||||
#include "ZDistA_wrapper.h"
|
||||
#include "ZDistA_komp.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
// Definicja "uchwytu". Ta struktura przechowuje wszystko, co jest potrzebne do działania algorytmu.
|
||||
// Jest niewidoczna dla Pythona.
|
||||
struct ZDistA_handle {
|
||||
// Główna struktura logiczna z oryginalnego kodu
|
||||
struct ZDistA_komp_logic logic;
|
||||
|
||||
// Pamięć na dane wejściowe (fazory) - wskaźniki w 'logic' będą wskazywać tutaj
|
||||
float u_re[3], u_im[3];
|
||||
float i_re[3], i_im[3];
|
||||
float u12_re, u12_im, u23_re, u23_im, u31_re, u31_im;
|
||||
float u_mag[3], i_mag[3], u12_mag, u23_mag, u31_mag;
|
||||
|
||||
// Składowe symetryczne
|
||||
float su1_re, su1_im, su1_mag;
|
||||
float su0_re, su0_im, su0_mag;
|
||||
float su2_re, su2_im, su2_mag;
|
||||
float si1_re, si1_im, si1_mag;
|
||||
float si0_re, si0_im, si0_mag;
|
||||
float si2_re, si2_im, si2_mag;
|
||||
|
||||
// Dummy analog_in_params, ponieważ nie mamy pełnego środowiska
|
||||
struct analog_in_params param_i;
|
||||
struct analog_in_params param_u;
|
||||
|
||||
// Struktura z pustymi wskaźnikami, bo nie jest używana w tym trybie
|
||||
struct ZDistA_komp_args args;
|
||||
};
|
||||
|
||||
// Funkcja pomocnicza do ustawiania wskaźników w strukturze 'logic'
|
||||
static void setup_pointers(ZDistA_handle* h) {
|
||||
struct ZDistA_komp_logic* log = &h->logic;
|
||||
|
||||
// Ustawienie wskaźników na dane wejściowe
|
||||
log->U1_orta = &h->u_re[0]; log->U1_ortb = &h->u_im[0]; log->U1 = &h->u_mag[0];
|
||||
log->U2_orta = &h->u_re[1]; log->U2_ortb = &h->u_im[1]; log->U2 = &h->u_mag[1];
|
||||
log->U3_orta = &h->u_re[2]; log->U3_ortb = &h->u_im[2]; log->U3 = &h->u_mag[2];
|
||||
|
||||
log->I1_orta = &h->i_re[0]; log->I1_ortb = &h->i_im[0]; log->I1 = &h->i_mag[0];
|
||||
log->I2_orta = &h->i_re[1]; log->I2_ortb = &h->i_im[1]; log->I2 = &h->i_mag[1];
|
||||
log->I3_orta = &h->i_re[2]; log->I3_ortb = &h->i_im[2]; log->I3 = &h->i_mag[2];
|
||||
|
||||
// Napięcia międzyfazowe
|
||||
log->U12_orta = &h->u12_re; log->U12_ortb = &h->u12_im; log->U12 = &h->u12_mag;
|
||||
log->U23_orta = &h->u23_re; log->U23_ortb = &h->u23_im; log->U23 = &h->u23_mag;
|
||||
log->U31_orta = &h->u31_re; log->U31_ortb = &h->u31_im; log->U31 = &h->u31_mag;
|
||||
|
||||
// Składowe symetryczne
|
||||
log->sU1_orta = &h->su1_re; log->sU1_ortb = &h->su1_im; log->sU1 = &h->su1_mag;
|
||||
log->sU0_orta = &h->su0_re; log->sU0_ortb = &h->su0_im; log->sU0 = &h->su0_mag;
|
||||
log->sU2_orta = &h->su2_re; log->sU2_ortb = &h->su2_im; log->sU2 = &h->su2_mag;
|
||||
|
||||
log->sI1_orta = &h->si1_re; log->sI1_ortb = &h->si1_im; log->sI1 = &h->si1_mag;
|
||||
log->sI0_orta = &h->si0_re; log->sI0_ortb = &h->si0_im; log->sI0 = &h->si0_mag;
|
||||
log->sI2_orta = &h->si2_re; log->sI2_ortb = &h->si2_im; log->sI2 = &h->si2_mag;
|
||||
|
||||
// "Dummy" wskaźniki, aby uniknąć błędów
|
||||
log->param_I = &h->param_i;
|
||||
log->param_U = &h->param_u;
|
||||
|
||||
// Inne wskaźniki, które muszą być zainicjowane
|
||||
log->dw.log_ptr = log;
|
||||
log->nast_.wyjscie.Zdist_dw = &log->dw;
|
||||
log->nast_.wyjscie.on = &log->nast_.on_;
|
||||
}
|
||||
|
||||
DLL_EXPORT ZDistA_handle* ZDistA_init(double z1_r, double z1_x, double line_angle_deg, int kierunek) {
|
||||
ZDistA_handle* h = (ZDistA_handle*)malloc(sizeof(ZDistA_handle));
|
||||
if (!h) return NULL;
|
||||
|
||||
memset(h, 0, sizeof(ZDistA_handle));
|
||||
setup_pointers(h);
|
||||
|
||||
struct Nastawy_przeliczone_ZDistA_komp* nast = &h->logic.nast_;
|
||||
nast->on_ = 1; // Włączamy logikę
|
||||
|
||||
// Ustawiamy parametry przekładni (hardkodowane, jak w tester.py)
|
||||
h->param_u.znam_wtor = 1.0; // Wartości znormalizowane
|
||||
h->param_i.znam_wtor = 1.0;
|
||||
nast->wyjscie.przekladnia = 1.0;
|
||||
|
||||
// Ustawienia charakterystyk - wzorowane na logice z distance_algorithm_zimba.py
|
||||
nast->tanfi1 = tan(line_angle_deg * (3.14159265 / 180.0));
|
||||
nast->tanfi2 = tan(85.0 * (3.14159265 / 180.0)); // Typowa wartość
|
||||
|
||||
// Strefa 1
|
||||
nast->typ[1] = 0; // Poligonalna
|
||||
nast->kierunek[1] = kierunek;
|
||||
nast->n_pol[1][0].Rr = z1_r; // LE
|
||||
nast->n_pol[1][0].Xr = z1_x; // LE
|
||||
nast->n_pol[1][1].Rr = z1_r; // LL
|
||||
nast->n_pol[1][1].Xr = z1_x; // LL
|
||||
|
||||
// Strefy 2-5 z rozsądnymi wartościami domyślnymi
|
||||
for (int i = 2; i < 6; ++i) {
|
||||
nast->typ[i] = 0;
|
||||
nast->kierunek[i] = kierunek;
|
||||
nast->n_pol[i][0].Rr = z1_r * (1.0 + (i-1)*0.5);
|
||||
nast->n_pol[i][0].Xr = z1_x * (1.0 + (i-1)*0.5);
|
||||
nast->n_pol[i][1].Rr = z1_r * (1.0 + (i-1)*0.5);
|
||||
nast->n_pol[i][1].Xr = z1_x * (1.0 + (i-1)*0.5);
|
||||
}
|
||||
|
||||
// Inne ważne parametry
|
||||
nast->Igr = 0.1 * 0.1; // Próg prądowy
|
||||
nast->kp = 1.05; // Współczynnik powrotu
|
||||
nast->kpk = 1.05 * 1.05;
|
||||
nast->Igrp = nast->Igr * nast->kpk;
|
||||
|
||||
// Przeliczenie wartości powrotnych i tangensów
|
||||
for(int i = 0; i<6; ++i) {
|
||||
for(int j=0; j<2; ++j) {
|
||||
nast->n_pol[i][j].Rp = nast->n_pol[i][j].Rr / nast->kp;
|
||||
nast->n_pol[i][j].Xp = nast->n_pol[i][j].Xr / nast->kp;
|
||||
nast->n_pol[i][j].Rrtanfi1 = nast->n_pol[i][j].Rr * nast->tanfi1;
|
||||
nast->n_pol[i][j].Rptanfi1 = nast->n_pol[i][j].Rp * nast->tanfi1;
|
||||
}
|
||||
}
|
||||
nast->Xr1f = nast->n_pol[1][0].Xr * (1 + nast->tanfi2 / nast->tanfi1);
|
||||
nast->Xr1fp = nast->Xr1f / nast->kp;
|
||||
|
||||
return h;
|
||||
}
|
||||
|
||||
DLL_EXPORT int ZDistA_step(
|
||||
ZDistA_handle* handle,
|
||||
const float u_re[3], const float u_im[3],
|
||||
const float i_re[3], const float i_im[3]
|
||||
) {
|
||||
if (!handle) return 0;
|
||||
|
||||
// 1. Skopiuj dane wejściowe do wewnętrznych buforów uchwytu
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
handle->u_re[i] = u_re[i]; handle->u_im[i] = u_im[i];
|
||||
handle->i_re[i] = i_re[i]; handle->i_im[i] = i_im[i];
|
||||
handle->u_mag[i] = sqrtf(u_re[i]*u_re[i] + u_im[i]*u_im[i]);
|
||||
handle->i_mag[i] = sqrtf(i_re[i]*i_re[i] + i_im[i]*i_im[i]);
|
||||
}
|
||||
|
||||
// 2. Oblicz wartości, które w oryginale pochodziły z innych modułów
|
||||
// Napięcia międzyfazowe
|
||||
handle->u12_re = u_re[0] - u_re[1]; handle->u12_im = u_im[0] - u_im[1];
|
||||
handle->u23_re = u_re[1] - u_re[2]; handle->u23_im = u_im[1] - u_im[2];
|
||||
handle->u31_re = u_re[2] - u_re[0]; handle->u31_im = u_im[2] - u_im[0];
|
||||
handle->u12_mag = sqrtf(handle->u12_re*handle->u12_re + handle->u12_im*handle->u12_im);
|
||||
handle->u23_mag = sqrtf(handle->u23_re*handle->u23_re + handle->u23_im*handle->u23_im);
|
||||
handle->u31_mag = sqrtf(handle->u31_re*handle->u31_re + handle->u31_im*handle->u31_im);
|
||||
|
||||
// Składowe symetryczne (stałe 'a' i 'a2' dla uproszczenia)
|
||||
const float a_re = -0.5, a_im = 0.8660254; // sqrt(3)/2
|
||||
|
||||
// I0 = (I1+I2+I3)/3
|
||||
handle->si0_re = (i_re[0] + i_re[1] + i_re[2]) / 3.0f;
|
||||
handle->si0_im = (i_im[0] + i_im[1] + i_im[2]) / 3.0f;
|
||||
|
||||
// I1_zg = (I1 + a*I2 + a2*I3)/3
|
||||
handle->si1_re = (i_re[0] + (i_re[1]*a_re - i_im[1]*a_im) + (i_re[2]*a_re - i_im[2]*-a_im)) / 3.0f;
|
||||
handle->si1_im = (i_im[0] + (i_re[1]*a_im + i_im[1]*a_re) + (i_re[2]*-a_im + i_im[2]*a_re)) / 3.0f;
|
||||
|
||||
// I2_pr = (I1 + a2*I2 + a*I3)/3
|
||||
handle->si2_re = (i_re[0] + (i_re[1]*a_re - i_im[1]*-a_im) + (i_re[2]*a_re - i_im[2]*a_im)) / 3.0f;
|
||||
handle->si2_im = (i_im[0] + (i_re[1]*-a_im + i_im[1]*a_re) + (i_re[2]*a_im + i_im[2]*a_re)) / 3.0f;
|
||||
|
||||
// To samo dla napięć
|
||||
handle->su0_re = (u_re[0] + u_re[1] + u_re[2]) / 3.0f;
|
||||
handle->su0_im = (u_im[0] + u_im[1] + u_im[2]) / 3.0f;
|
||||
handle->su1_re = (u_re[0] + (u_re[1]*a_re - u_im[1]*a_im) + (u_re[2]*a_re - u_im[2]*-a_im)) / 3.0f;
|
||||
handle->su1_im = (u_im[0] + (u_re[1]*a_im + u_im[1]*a_re) + (u_re[2]*-a_im + u_im[2]*a_re)) / 3.0f;
|
||||
handle->su2_re = (u_re[0] + (u_re[1]*a_re - u_im[1]*-a_im) + (u_re[2]*a_re - u_im[2]*a_im)) / 3.0f;
|
||||
handle->su2_im = (u_im[0] + (u_re[1]*-a_im + u_im[1]*a_re) + (u_re[2]*a_im + u_im[2]*a_re)) / 3.0f;
|
||||
|
||||
// Magnitudy składowych symetrycznych
|
||||
handle->si0_mag = sqrtf(handle->si0_re*handle->si0_re + handle->si0_im*handle->si0_im);
|
||||
handle->si1_mag = sqrtf(handle->si1_re*handle->si1_re + handle->si1_im*handle->si1_im);
|
||||
handle->si2_mag = sqrtf(handle->si2_re*handle->si2_re + handle->si2_im*handle->si2_im);
|
||||
handle->su0_mag = sqrtf(handle->su0_re*handle->su0_re + handle->su0_im*handle->su0_im);
|
||||
handle->su1_mag = sqrtf(handle->su1_re*handle->su1_re + handle->su1_im*handle->su1_im);
|
||||
handle->su2_mag = sqrtf(handle->su2_re*handle->su2_re + handle->su2_im*handle->su2_im);
|
||||
|
||||
// 3. Wywołaj główną funkcję logiki
|
||||
ZDistA_komp(NULL, &handle->logic);
|
||||
|
||||
// 4. Sprawdź, czy którekolwiek z wyjść jest aktywne
|
||||
struct ZDistA_komp_logic* log = &handle->logic;
|
||||
if (log->P1_L1E.val || log->P1_L2E.val || log->P1_L3E.val ||
|
||||
log->P1_L1L2.val || log->P1_L2L3.val || log->P1_L3L1.val) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
DLL_EXPORT void ZDistA_cleanup(ZDistA_handle* handle) {
|
||||
if (handle) {
|
||||
free(handle);
|
||||
}
|
||||
}
|
||||
50
ZDistA_wrapper.h
Normal file
50
ZDistA_wrapper.h
Normal file
@@ -0,0 +1,50 @@
|
||||
#ifndef ZDISTA_WRAPPER_H
|
||||
#define ZDISTA_WRAPPER_H
|
||||
|
||||
// Na systemach Windows, musimy jawnie eksportować symbole, aby były widoczne w DLL.
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
#define DLL_EXPORT __declspec(dllexport)
|
||||
#else
|
||||
#define DLL_EXPORT
|
||||
#endif
|
||||
|
||||
// Deklaracja nieprzezroczystej struktury (opaque struct).
|
||||
// Dzięki temu, wewnętrzna budowa naszego "uchwytu" jest ukryta przed kodem Python.
|
||||
struct ZDistA_handle;
|
||||
typedef struct ZDistA_handle ZDistA_handle;
|
||||
|
||||
/**
|
||||
* @brief Inicjalizuje logikę przekaźnika i wszystkie wewnętrzne struktury.
|
||||
*
|
||||
* @param z1_r Rezystancja nastawcza strefy 1.
|
||||
* @param z1_x Reaktancja nastawcza strefy 1.
|
||||
* @param line_angle_deg Kąt linii w stopniach.
|
||||
* @param kierunek Kierunkowość (0: bezkierunkowy, 1: do linii, 2: do szyn).
|
||||
* @return Wskaźnik do "uchwytu" (handle) przechowującego stan przekaźnika, lub NULL w przypadku błędu.
|
||||
*/
|
||||
DLL_EXPORT ZDistA_handle* ZDistA_init(double z1_r, double z1_x, double line_angle_deg, int kierunek);
|
||||
|
||||
/**
|
||||
* @brief Wykonuje jeden krok obliczeniowy algorytmu.
|
||||
*
|
||||
* @param handle Uchwyt zwrócony przez ZDistA_init.
|
||||
* @param u_re Tablica 3 floatów (U1, U2, U3 - części rzeczywiste).
|
||||
* @param u_im Tablica 3 floatów (U1, U2, U3 - części urojone).
|
||||
* @param i_re Tablica 3 floatów (I1, I2, I3 - części rzeczywiste).
|
||||
* @param i_im Tablica 3 floatów (I1, I2, I3 - części urojone).
|
||||
* @return Wartość > 0, jeśli nastąpiło zadziałanie (trip), 0 w przeciwnym razie.
|
||||
*/
|
||||
DLL_EXPORT int ZDistA_step(
|
||||
ZDistA_handle* handle,
|
||||
const float u_re[3], const float u_im[3],
|
||||
const float i_re[3], const float i_im[3]
|
||||
);
|
||||
|
||||
/**
|
||||
* @brief Zwalnia pamięć zaalokowaną dla uchwytu.
|
||||
*
|
||||
* @param handle Uchwyt do zwolnienia.
|
||||
*/
|
||||
DLL_EXPORT void ZDistA_cleanup(ZDistA_handle* handle);
|
||||
|
||||
#endif // ZDISTA_WRAPPER_H
|
||||
@@ -10,14 +10,14 @@
|
||||
#define ZDISTL_H_KOMP_
|
||||
//#include "pawel_usun_to.h"
|
||||
|
||||
#include "../tdefs.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 dbl_Com[7]; ///deblokowanie dzia<EFBFBD>ania stref w zale<EFBFBD>no<EFBFBD>ci od stanu <EFBFBD><EFBFBD>cza
|
||||
u8 PSPZ;//pobudzenie SPZ
|
||||
};
|
||||
|
||||
@@ -368,8 +368,8 @@ struct ZDistL_params_komp
|
||||
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
|
||||
long strefa_dzial; //<dzia<EFBFBD>anie na stref<EFBFBD>
|
||||
long lrc_strefa; //<strefa logiku pr<EFBFBD>du wstecznego
|
||||
|
||||
double ts1LE;///< Czas wyłączenia strefy 1 zwarcia jednofazowe z ziemią
|
||||
double ts1LL;///< Czas wyłączenia strefy 1 zwarcia miedzyfazowe
|
||||
|
||||
29
fix_includes.py
Normal file
29
fix_includes.py
Normal file
@@ -0,0 +1,29 @@
|
||||
import re
|
||||
import os
|
||||
|
||||
def fix_includes_in_file(file_path):
|
||||
try:
|
||||
with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
|
||||
content = f.read()
|
||||
|
||||
new_content = re.sub(r'#include "../(tdefs\.h|config\.h|misc\.h|logman\.h|comm\.h)"', r'#include "\1"', content)
|
||||
|
||||
if new_content != content:
|
||||
with open(file_path, 'w', encoding='utf-8') as f:
|
||||
f.write(new_content)
|
||||
print(f"Fixed includes in {file_path}")
|
||||
except FileNotFoundError:
|
||||
print(f"File not found: {file_path}")
|
||||
except Exception as e:
|
||||
print(f"Error processing {file_path}: {e}")
|
||||
|
||||
if __name__ == '__main__':
|
||||
for root, dirs, files in os.walk('src'):
|
||||
for file in files:
|
||||
if file.endswith(('.c', '.h')):
|
||||
fix_includes_in_file(os.path.join(root, file))
|
||||
|
||||
fix_includes_in_file('ZDistA_komp.c')
|
||||
fix_includes_in_file('ZDistA_komp.h')
|
||||
|
||||
print("Done fixing includes.")
|
||||
@@ -1,37 +1,5 @@
|
||||
@echo off
|
||||
:: --- UZUPELNIJ SWOJE DANE PONIZEJ ---
|
||||
set GIT_USER_NAME=Mirek
|
||||
set GIT_USER_EMAIL=mirek@sic.pl
|
||||
set REPO_URL=https://10.1.1.1:30008/ms/dist_tester.git
|
||||
:: ------------------------------------
|
||||
|
||||
echo [1/6] Konfiguracja tozsamosci...
|
||||
git config --global user.name "%GIT_USER_NAME%"
|
||||
git config --global user.email "%GIT_USER_EMAIL%"
|
||||
|
||||
echo [2/6] Inicjalizacja lokalnego repozytorium...
|
||||
if not exist .git (
|
||||
git init
|
||||
) else (
|
||||
echo Repo juz zainicjalizowane.
|
||||
)
|
||||
|
||||
echo [3/6] Wylaczanie weryfikacji SSL (dla lokalnego Gitea)...
|
||||
git config http.sslVerify false
|
||||
|
||||
echo [4/6] Podlaczanie serwera zdalnego (origin)...
|
||||
:: Usuwamy stary origin na wypadek, gdyby istnial
|
||||
git remote remove origin >nul 2>&1
|
||||
git remote add origin %REPO_URL%
|
||||
|
||||
echo [5/6] Przygotowanie plikow i pierwszy commit...
|
||||
git add .
|
||||
git commit -m "Pierwszy commit - konfiguracja automatyczna"
|
||||
|
||||
echo [6/6] Wysylanie kodu na serwer...
|
||||
git branch -M main
|
||||
git push -u origin main
|
||||
|
||||
echo.
|
||||
echo === GOTOWE! Twoj projekt jest polaczony z Gitea ===
|
||||
pause
|
||||
echo Installing required Python packages...
|
||||
pip install -r requirements.txt
|
||||
echo Done.
|
||||
pause
|
||||
|
||||
359
mocks.c
359
mocks.c
@@ -1,352 +1,11 @@
|
||||
// Symulacja funkcji z helper.h
|
||||
static inline int set_float_ptr(float *src, float **dst)
|
||||
{
|
||||
*dst = src;
|
||||
return 0;
|
||||
#include "mocks.h"
|
||||
|
||||
// Mock implementation of Task_sleep
|
||||
void Task_sleep(unsigned int ticks) {
|
||||
// This is a mock, so we do nothing.
|
||||
// In a real scenario, you might use a platform-specific sleep function.
|
||||
}
|
||||
|
||||
static inline int set_bit_ptr_struct(struct binary_io *src, struct binary_io **dst)
|
||||
{
|
||||
*dst = src;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int set_pointer_in_ptr(u32 *src, u32 **dst)
|
||||
{
|
||||
*dst = src;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int set_pointer_out_ptr(u32 *src, u32 **dst)
|
||||
{
|
||||
*dst = src;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int check_struct(struct binary_io *ptr)
|
||||
{
|
||||
return (ptr && ptr->val) ? 1 : 0;
|
||||
}
|
||||
|
||||
static inline void check_and_set_struct(u8 condition, struct binary_io **ptr)
|
||||
{
|
||||
if (*ptr)
|
||||
(*ptr)->val = condition ? 1 : 0;
|
||||
}
|
||||
|
||||
static inline void clear_struct(struct binary_io **ptr)
|
||||
{
|
||||
if (*ptr)
|
||||
(*ptr)->val = 0;
|
||||
}
|
||||
|
||||
// Funkcja testowa (zwraca 0 w normalnym trybie)
|
||||
static inline int czy_test_R() { return 0; }
|
||||
// Szybka odwrotność pierwiastka (Reciprocal Square Root)
|
||||
static inline float _rcpsp(float x)
|
||||
{
|
||||
if (x <= 1e-9f)
|
||||
return 0.0f; // Zabezpieczenie przed dzieleniem przez zero
|
||||
return 1.0f / sqrtf(x);
|
||||
}
|
||||
|
||||
// Funkcje kątowe (e_phi.h)
|
||||
static inline float get_phase(float y, float x)
|
||||
{
|
||||
return atan2f(y, x) * 180.0f / 3.14159265f;
|
||||
}
|
||||
|
||||
static inline float get_phase_diff(float angle1, float angle2)
|
||||
{
|
||||
float diff = angle1 - angle2;
|
||||
while (diff <= -180.0f)
|
||||
diff += 360.0f;
|
||||
while (diff > 180.0f)
|
||||
diff -= 360.0f;
|
||||
return diff;
|
||||
}
|
||||
|
||||
// Timer / Układ opóźniający (filtr P)
|
||||
// Liczy czas w pętlach programu
|
||||
static inline void sprawdz_P(u8 *out, u8 cond_start, u8 cond_reset, short *counter, int time_set, int time_reset)
|
||||
{
|
||||
if (cond_reset)
|
||||
{
|
||||
*counter = 0;
|
||||
*out = 0;
|
||||
}
|
||||
else if (cond_start)
|
||||
{
|
||||
if (*counter < time_set)
|
||||
(*counter)++;
|
||||
if (*counter >= time_set)
|
||||
*out = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (*counter > 0)
|
||||
(*counter)--;
|
||||
if (*counter == 0)
|
||||
*out = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Struktura dla pojedynczej strefy wielokątnej (poligonalnej)
|
||||
struct n_pol_struct
|
||||
{
|
||||
float Rr, Xr; // Granice Rezystancji i Reaktancji (prawo/góra)
|
||||
float Rp, Xp; // Granice (lewo/dół lub po przesunięciu kp)
|
||||
float Z, Zp; // Impedancja graniczna (moduł)
|
||||
float Rrtanfi1, Rptanfi1; // Granice nachylone
|
||||
};
|
||||
|
||||
// Struktura wyjścia
|
||||
struct wyjscie_struct
|
||||
{
|
||||
float przekladnia;
|
||||
void *Zdist_dw; // Wskaźnik void na log->dw
|
||||
int *on; // Wskaźnik na log->nast_.on_
|
||||
u8 SOTF_zwrotnie;
|
||||
};
|
||||
|
||||
// Struktura obliczonych nastaw (log->nast_)
|
||||
struct nast_struct
|
||||
{
|
||||
int on_;
|
||||
int bl_;
|
||||
int Bl_L[6]; // Blokady Load
|
||||
int z6_kolo;
|
||||
|
||||
float ReK1, ImK1;
|
||||
float ReKr, ImKr;
|
||||
float ReKrown, ImKrown;
|
||||
float Krown_ignac;
|
||||
|
||||
float kp, kpp, kpk;
|
||||
float kp_obc, kpp_obc;
|
||||
|
||||
int typ[6]; // Typy stref
|
||||
float tanfi1, tanfi2;
|
||||
|
||||
struct n_pol_struct n_pol[6][2]; // [strefa][typ pętli: 0=fazowa, 1=miedzyfazowa]
|
||||
|
||||
float Xr1f, Xr1fp;
|
||||
float Xr1Wf, Xr1Wfp;
|
||||
float Igr, Igrp;
|
||||
float Zgr;
|
||||
int kierunek[6];
|
||||
|
||||
float XKR, XKX, KL;
|
||||
float RLf, RLr;
|
||||
float Iogr, khio, Uomin;
|
||||
|
||||
struct wyjscie_struct wyjscie;
|
||||
};
|
||||
|
||||
// Struktura zmiennych wewnętrznych (pomiary, flagi, liczniki) -> log->dw
|
||||
struct Z_measurement
|
||||
{
|
||||
float R[9], X[9], Z[9], E[9]; // 9 pętli pomiarowych
|
||||
float absR[9], absX[9];
|
||||
float XRtanfi1_noabs[9], XRtanfi2[9];
|
||||
};
|
||||
|
||||
struct dw_struct
|
||||
{
|
||||
float I1, I2, I3, U1, U2, U3;
|
||||
struct Z_measurement Z;
|
||||
u8 Igr[6]; // Warunki prądowe
|
||||
|
||||
void *log_ptr; // Wskaźnik zwrotny na logic
|
||||
|
||||
u8 XKp[6][9], XKm[6][9]; // Kierunkowość
|
||||
u8 BL_Load[9]; // Blokada od obciążenia
|
||||
u8 Zm[9]; // Zmienne pomocnicze
|
||||
|
||||
// Liczniki czasu (timery)
|
||||
short liczpIo;
|
||||
short liczp11[6][9], liczp12[6][9], liczp10[9];
|
||||
short liczps[6][9];
|
||||
short liczKdod;
|
||||
|
||||
u8 Iogr; // Przekroczenie I0 granicznego
|
||||
u8 Kp, Km; // Kierunek (+/-)
|
||||
|
||||
u8 P_s[6][9]; // Pobudzenia surowe
|
||||
u8 P_sss[6][9]; // Pobudzenia super surowe?
|
||||
u8 Pbk[6][9]; // Pobudzenia bezkierunkowe
|
||||
u8 P[6][9]; // Pobudzenia finalne (kierunkowe)
|
||||
};
|
||||
|
||||
// Wejścia IO - wskaźniki na zmienne zewnętrzne
|
||||
struct ZDistA_komp_io
|
||||
{
|
||||
struct binary_io *bl_in;
|
||||
struct binary_io *bl_k_in;
|
||||
|
||||
float *i1_orta_float_in, *i1_ortb_float_in, *i1_float_in;
|
||||
float *i2_orta_float_in, *i2_ortb_float_in, *i2_float_in;
|
||||
float *i3_orta_float_in, *i3_ortb_float_in, *i3_float_in;
|
||||
|
||||
float *u1_orta_float_in, *u1_ortb_float_in, *u1_float_in;
|
||||
float *u2_orta_float_in, *u2_ortb_float_in, *u2_float_in;
|
||||
float *u3_orta_float_in, *u3_ortb_float_in, *u3_float_in;
|
||||
|
||||
float *u12_orta_float_in, *u12_ortb_float_in, *u12_float_in;
|
||||
float *u23_orta_float_in, *u23_ortb_float_in, *u23_float_in;
|
||||
float *u31_orta_float_in, *u31_ortb_float_in, *u31_float_in;
|
||||
|
||||
// Składowe symetryczne / dodatkowe
|
||||
float *i1_zg_orta_float_in, *i1_zg_ortb_float_in, *i1_zg_float_in; // I1 (zgodna)
|
||||
float *i2_pr_orta_float_in, *i2_pr_ortb_float_in, *i2_pr_float_in; // I2 (przeciwna)
|
||||
float *io_orta_float_in, *io_ortb_float_in, *io_float_in; // I0 (zerowa)
|
||||
|
||||
float *u1_zg_orta_float_in, *u1_zg_ortb_float_in, *u1_zg_float_in;
|
||||
float *u2_pr_orta_float_in, *u2_pr_ortb_float_in, *u2_pr_float_in;
|
||||
float *uo_orta_float_in, *uo_ortb_float_in, *uo_float_in;
|
||||
|
||||
u32 *i_param_an_ptr_in;
|
||||
u32 *u_param_an_ptr_in;
|
||||
|
||||
struct binary_io *test_in;
|
||||
struct binary_io *deakt_in;
|
||||
|
||||
// Kompensacja linii równoległej
|
||||
float *i_rown_orta_float_in;
|
||||
float *i_rown_ortb_float_in;
|
||||
u32 *i_rown_an_ptr_in;
|
||||
|
||||
struct binary_io *wyl_in;
|
||||
|
||||
// Wyjścia (Pobudzenia) - wskaźniki na struct binary_io
|
||||
struct binary_io *P1W_L1E_out, *P1W_L2E_out, *P1W_L3E_out;
|
||||
struct binary_io *P1W_L1L2_out, *P1W_L2L3_out, *P1W_L3L1_out;
|
||||
|
||||
struct binary_io *P1_L1E_out, *P1_L2E_out, *P1_L3E_out;
|
||||
struct binary_io *P1_L1L2_out, *P1_L2L3_out, *P1_L3L1_out;
|
||||
|
||||
struct binary_io *P2_L1E_out, *P2_L2E_out, *P2_L3E_out;
|
||||
struct binary_io *P2_L1L2_out, *P2_L2L3_out, *P2_L3L1_out;
|
||||
|
||||
struct binary_io *P3_L1E_out, *P3_L2E_out, *P3_L3E_out;
|
||||
struct binary_io *P3_L1L2_out, *P3_L2L3_out, *P3_L3L1_out;
|
||||
|
||||
struct binary_io *P4_L1E_out, *P4_L2E_out, *P4_L3E_out;
|
||||
struct binary_io *P4_L1L2_out, *P4_L2L3_out, *P4_L3L1_out;
|
||||
|
||||
struct binary_io *P5_L1E_out, *P5_L2E_out, *P5_L3E_out;
|
||||
struct binary_io *P5_L1L2_out, *P5_L2L3_out, *P5_L3L1_out;
|
||||
|
||||
u32 *wy_ptr_out;
|
||||
|
||||
// Debug
|
||||
float *z1_float_out, *z2_float_out, *z3_float_out;
|
||||
float *z4_float_out, *z5_float_out, *z6_float_out;
|
||||
};
|
||||
|
||||
// Struktura parametrów (Nastawy)
|
||||
struct ZDistA_komp_params
|
||||
{
|
||||
long bity;
|
||||
float Kk1, Kk1_kat;
|
||||
float KkC, KkC_kat;
|
||||
float kp, kp_obc;
|
||||
int Typ0, Typ1, Typ2, Typ3, Typ4, Typ5;
|
||||
float fi1, fi2, fi3, fi4, fi5;
|
||||
|
||||
// Rezystancje/Reaktancje dla pętli (dużo zmiennych)
|
||||
// Zastępujemy je blokiem lub listą na podstawie kodu init
|
||||
double R1W_Zf1W_LE, R1W_Zf1W_LL;
|
||||
double R1_Zf1_LE, R1_Zf1_LL;
|
||||
double R2_Zf2_LE, R2_Zf2_LL;
|
||||
double R3_Zf3_LE, R3_Zf3_LL;
|
||||
double R4_Zf4_LE, R4_Zf4_LL;
|
||||
double R5_Zf5_LE, R5_Zf5_LL;
|
||||
|
||||
double X1W_Zr1W_LE, X1W_Zr1W_LL;
|
||||
double X1_Zr1_LE, X1_Zr1_LL;
|
||||
double X2_Zr2_LE, X2_Zr2_LL;
|
||||
double X3_Zr3_LE, X3_Zr3_LL;
|
||||
double X4_Zr4_LE, X4_Zr4_LL;
|
||||
double X5_Zr5_LE, X5_Zr5_LL;
|
||||
|
||||
float I_min, Iomin;
|
||||
int K0, K1, K2, K3, K4, K5;
|
||||
|
||||
float RLf, RLr, Iokh, Uomin;
|
||||
float Krown, Krown_kat;
|
||||
};
|
||||
|
||||
struct ZDistA_komp_args
|
||||
{
|
||||
struct ZDistA_komp_io io;
|
||||
struct ZDistA_komp_params params;
|
||||
};
|
||||
|
||||
// Główna struktura stanu logicznego (Instance Data)
|
||||
struct ZDistA_komp_logic
|
||||
{
|
||||
struct binary_io stan_bl;
|
||||
struct binary_io Bl_K;
|
||||
|
||||
// Wskaźniki na pomiary
|
||||
float *I1_orta, *I1_ortb, *I1;
|
||||
float *I2_orta, *I2_ortb, *I2;
|
||||
float *I3_orta, *I3_ortb, *I3;
|
||||
|
||||
float *U1_orta, *U1_ortb, *U1;
|
||||
float *U2_orta, *U2_ortb, *U2;
|
||||
float *U3_orta, *U3_ortb, *U3;
|
||||
|
||||
float *U12_orta, *U12_ortb, *U12;
|
||||
float *U23_orta, *U23_ortb, *U23;
|
||||
float *U31_orta, *U31_ortb, *U31;
|
||||
|
||||
float *sI1_orta, *sI1_ortb, *sI1; // zgodna
|
||||
float *sI2_orta, *sI2_ortb, *sI2; // przeciwna
|
||||
float *sI0_orta, *sI0_ortb, *sI0; // zerowa
|
||||
|
||||
float *sU1_orta, *sU1_ortb, *sU1;
|
||||
float *sU2_orta, *sU2_ortb, *sU2;
|
||||
float *sU0_orta, *sU0_ortb, *sU0;
|
||||
|
||||
struct param_I_struct *param_I;
|
||||
struct param_U_struct *param_U;
|
||||
|
||||
struct binary_io test;
|
||||
struct binary_io deakt;
|
||||
|
||||
float *I_row_orta, *I_row_ortb;
|
||||
struct param_I_struct *param_I_rown;
|
||||
|
||||
struct binary_io wyl;
|
||||
|
||||
// Wyjścia logiczne (wskaźniki na struktury binary_io)
|
||||
// Uwaga: w kodzie init jest: set_bit_ptr_struct(..., &log->P1W_L1E)
|
||||
// To sugeruje, że w strukturze logic te pola to WSKAŹNIKI (struct binary_io*)
|
||||
struct binary_io *P1W_L1E, *P1W_L2E, *P1W_L3E;
|
||||
struct binary_io *P1W_L1L2, *P1W_L2L3, *P1W_L3L1;
|
||||
|
||||
struct binary_io *P1_L1E, *P1_L2E, *P1_L3E;
|
||||
struct binary_io *P1_L1L2, *P1_L2L3, *P1_L3L1;
|
||||
|
||||
struct binary_io *P2_L1E, *P2_L2E, *P2_L3E;
|
||||
struct binary_io *P2_L1L2, *P2_L2L3, *P2_L3L1;
|
||||
|
||||
struct binary_io *P3_L1E, *P3_L2E, *P3_L3E;
|
||||
struct binary_io *P3_L1L2, *P3_L2L3, *P3_L3L1;
|
||||
|
||||
struct binary_io *P4_L1E, *P4_L2E, *P4_L3E;
|
||||
struct binary_io *P4_L1L2, *P4_L2L3, *P4_L3L1;
|
||||
|
||||
struct binary_io *P5_L1E, *P5_L2E, *P5_L3E;
|
||||
struct binary_io *P5_L1L2, *P5_L2L3, *P5_L3L1;
|
||||
|
||||
float *z[6]; // Wyjścia debugowe
|
||||
|
||||
struct nast_struct nast_;
|
||||
struct dw_struct dw;
|
||||
|
||||
int l_nieustalony;
|
||||
};
|
||||
|
||||
// Mock definitions for global variables
|
||||
Semaphore_Handle spi_semaphore;
|
||||
Swi_Handle swi_notify;
|
||||
52
mocks.h
52
mocks.h
@@ -1,28 +1,36 @@
|
||||
#ifndef MOCKS_H_
|
||||
#define MOCKS_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <math.h>
|
||||
#include <string.h> // do memset
|
||||
|
||||
// Definicje typów z tdefs.h
|
||||
typedef uint8_t u8;
|
||||
typedef uint16_t u16;
|
||||
typedef uint32_t u32;
|
||||
// Mock for Semaphore_Handle
|
||||
typedef void* Semaphore_Handle;
|
||||
|
||||
// Prosta struktura dla sygnałów binarnych (wejścia/wyjścia logiczne)
|
||||
struct binary_io
|
||||
{
|
||||
int val; // 0 lub 1
|
||||
};
|
||||
// Mock for Swi_Handle
|
||||
typedef void* Swi_Handle;
|
||||
|
||||
// Struktury parametrów analogowych (np. przekładniki)
|
||||
struct param_I_struct
|
||||
{
|
||||
float znam_wtor; // np. 1.0 lub 5.0 A
|
||||
float znam_pierw; // np. 400.0 A
|
||||
};
|
||||
// Mock for Task_sleep
|
||||
void Task_sleep(unsigned int ticks);
|
||||
|
||||
struct param_U_struct
|
||||
{
|
||||
float znam_wtor; // np. 100.0 V
|
||||
float znam_pierw; // np. 110000.0 V
|
||||
};
|
||||
// Mock for MessageQ
|
||||
typedef struct {
|
||||
int reserved;
|
||||
} MessageQ_MsgHeader;
|
||||
|
||||
// Mock for UInt32
|
||||
typedef uint32_t UInt32;
|
||||
|
||||
// Mock for UInt16
|
||||
typedef uint16_t UInt16;
|
||||
|
||||
// Mock for Timer_Handle
|
||||
typedef void* Timer_Handle;
|
||||
|
||||
// Mock for UArg
|
||||
typedef intptr_t UArg;
|
||||
|
||||
// Mock for Void
|
||||
typedef void Void;
|
||||
|
||||
|
||||
#endif /* MOCKS_H_ */
|
||||
@@ -1,3 +1,3 @@
|
||||
numpy
|
||||
matplotlib
|
||||
comtrade
|
||||
comtrade
|
||||
278
src/21g.c
Normal file
278
src/21g.c
Normal file
@@ -0,0 +1,278 @@
|
||||
/*
|
||||
* 21g.c
|
||||
*
|
||||
* Created on: 07-05-2018
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "21g.h"
|
||||
#include "helper.h"
|
||||
#include "analog_in.h"
|
||||
#include "config.h"
|
||||
#include <math.h>
|
||||
|
||||
int r21g_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct r21g_args *args = (struct r21g_args *)arguments;
|
||||
struct r21g_logic *log = (struct r21g_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.stan_bl_in,&log->stan_bl))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.test_in,&log->test))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.U_esk_float_in,&log->U_esk))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.U_orta_float_in,&log->U_orta))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.U_ortb_float_in,&log->U_ortb))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.I_esk_float_in,&log->I_esk))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.I_orta_float_in,&log->I_orta))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.I_ortb_float_in,&log->I_ortb))
|
||||
return -1;
|
||||
|
||||
if(set_pointer_in_ptr(args->io.U_param_ptr_in,(u32 *)&log->U_param))
|
||||
return -1;
|
||||
|
||||
if(set_pointer_in_ptr(args->io.I_param_ptr_in,(u32 *)&log->I_param))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.p_out,&log->P))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.z_out,&log->Z))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.w_out,&log->W))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.y_float_out,&log->y))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.g_float_out,&log->g))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.b_float_out,&log->b))
|
||||
return -1;
|
||||
|
||||
log->przek = log->I_param->znam_wtor / log->U_param->znam_wtor;
|
||||
log->y_rozr = (float)0.001 * 0.001 * args->params.yr * args->params.yr;// * log->przek * log->przek;
|
||||
log->y_powr = log->y_rozr * args->params.kp * args->params.kp;
|
||||
|
||||
log->g_rozr = (float)0.001 * args->params.gr;// * log->przek;
|
||||
log->g_powr = log->g_rozr * args->params.kp;
|
||||
|
||||
log->b_rozr = (float)0.001 * args->params.br;// * log->przek;
|
||||
log->b_powr = log->b_rozr * args->params.kp;
|
||||
|
||||
log->umin_rozr = args->params.umin * args->params.umin;
|
||||
log->umin_powr = log->umin_rozr * args->params.kp * args->params.kp;
|
||||
|
||||
log->imin_rozr = args->params.imin * args->params.imin;
|
||||
log->imin_powr = log->imin_rozr * args->params.kp * args->params.kp;
|
||||
|
||||
log->td=(u32)(args->params.td*1000);
|
||||
|
||||
|
||||
log->cos_shift = cosf(args->params.phi_corr*PI/180);
|
||||
log->sin_shift = sinf(args->params.phi_corr*PI/180);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void r21g(void *arguments, void *logic)
|
||||
{
|
||||
struct r21g_logic *log = (struct r21g_logic *)logic;
|
||||
struct r21g_args *args = (struct r21g_args *)arguments;
|
||||
float y,g,b,m,g_new;
|
||||
|
||||
if((args->params.bity & 0x00000001) && !((args->params.bity & 0x00000002) && check_struct(&log->stan_bl))) // ON && unblocked
|
||||
{
|
||||
if(!*log->U_esk)
|
||||
y=*log->I_esk / 0.000000001;
|
||||
else
|
||||
y=*log->I_esk / *log->U_esk;
|
||||
|
||||
m=((*log->U_ortb * *log->U_ortb) + (*log->U_orta * *log->U_orta));
|
||||
|
||||
if(!m)
|
||||
m=0.000000001;
|
||||
|
||||
g=((*log->I_ortb * *log->U_ortb) + (*log->I_orta * *log->U_orta))/m;
|
||||
b=((*log->I_orta * *log->U_ortb) - (*log->I_ortb * *log->U_orta))/m;
|
||||
//sprawdzic dzielenie przez zero
|
||||
|
||||
y*=log->przek*log->przek;
|
||||
g*=log->przek;
|
||||
b*=log->przek;
|
||||
|
||||
g_new=(log->cos_shift*g) - (log->sin_shift*b);
|
||||
b=(log->sin_shift*g) + (log->cos_shift*b);
|
||||
g=g_new;
|
||||
|
||||
*log->y=y;
|
||||
*log->g=g;
|
||||
*log->b=b;
|
||||
//g=
|
||||
|
||||
sprawdz_P(&log->pobi,
|
||||
*log->I_esk>log->imin_rozr,
|
||||
*log->I_esk<log->imin_powr,
|
||||
&log->lpi,
|
||||
15,3);
|
||||
sprawdz_P(&log->pobu,
|
||||
*log->U_esk>log->umin_rozr,
|
||||
*log->U_esk<log->umin_powr,
|
||||
&log->lpu,
|
||||
15,3);
|
||||
|
||||
if(log->pobu && log->pobi)
|
||||
{
|
||||
sprawdz_P(&log->poby,
|
||||
y>log->y_rozr,
|
||||
y<log->y_powr,
|
||||
&log->lpy,
|
||||
20,3);
|
||||
|
||||
switch(args->params.g_enum)
|
||||
{
|
||||
case S_FWD:
|
||||
sprawdz_P(&log->pobg,
|
||||
g>log->g_rozr,
|
||||
g<log->g_powr,
|
||||
&log->lpg,
|
||||
20,3);
|
||||
break;
|
||||
case S_BKW:
|
||||
g*=-1;
|
||||
sprawdz_P(&log->pobg,
|
||||
g>log->g_rozr,
|
||||
g<log->g_powr,
|
||||
&log->lpg,
|
||||
20,3);
|
||||
break;
|
||||
case S_BID:
|
||||
if(g<0)
|
||||
g*=-1;
|
||||
sprawdz_P(&log->pobg,
|
||||
g>log->g_rozr,
|
||||
g<log->g_powr,
|
||||
&log->lpg,
|
||||
20,3);
|
||||
break;
|
||||
default:
|
||||
log->pobg=0;
|
||||
break;
|
||||
}
|
||||
|
||||
switch(args->params.b_enum)
|
||||
{
|
||||
case S_FWD:
|
||||
sprawdz_P(&log->pobb,
|
||||
b>log->b_rozr,
|
||||
b<log->b_powr,
|
||||
&log->lpb,
|
||||
20,3);
|
||||
break;
|
||||
case S_BKW:
|
||||
b*=-1;
|
||||
sprawdz_P(&log->pobb,
|
||||
b>log->b_rozr,
|
||||
b<log->b_powr,
|
||||
&log->lpb,
|
||||
20,3);
|
||||
break;
|
||||
case S_BID:
|
||||
if(b<0)
|
||||
b*=-1;
|
||||
sprawdz_P(&log->pobb,
|
||||
b>log->b_rozr,
|
||||
b<log->b_powr,
|
||||
&log->lpb,
|
||||
20,3);
|
||||
break;
|
||||
default:
|
||||
log->pobb=0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->poby=0;
|
||||
log->pobg=0;
|
||||
log->pobb=0;
|
||||
log->lpy=0;
|
||||
log->lpg=0;
|
||||
log->lpb=0;
|
||||
}
|
||||
|
||||
if(!args->params.log_enum)
|
||||
{
|
||||
log->p=1;
|
||||
|
||||
if(args->params.y_enum)
|
||||
log->p&=log->poby;
|
||||
if(args->params.g_enum)
|
||||
log->p&=log->pobg;
|
||||
if(args->params.b_enum)
|
||||
log->p&=log->pobb;
|
||||
}
|
||||
else
|
||||
{
|
||||
log->p=0;
|
||||
|
||||
if(args->params.y_enum)
|
||||
log->p|=log->poby;
|
||||
if(args->params.g_enum)
|
||||
log->p|=log->pobg;
|
||||
if(args->params.b_enum)
|
||||
log->p|=log->pobb;
|
||||
}
|
||||
|
||||
if(!args->params.y_enum&&!args->params.g_enum&&!args->params.b_enum)
|
||||
log->p=0;
|
||||
|
||||
if(log->p)
|
||||
{
|
||||
if(log->td_cnt>log->td)
|
||||
log->z=1;
|
||||
else
|
||||
log->td_cnt+=LOOP_CYCLE_MS;
|
||||
}
|
||||
else
|
||||
{
|
||||
log->td_cnt=0;
|
||||
log->z=0;
|
||||
}
|
||||
|
||||
if(czy_test_R() && check_struct(&log->test))
|
||||
{
|
||||
log->p=1;
|
||||
log->z=1;
|
||||
}
|
||||
|
||||
check_and_set_struct(log->p,&log->P);
|
||||
check_and_set_struct(log->z,&log->Z);
|
||||
|
||||
if(args->params.bity & 0x00000004) // na wylacz
|
||||
{
|
||||
check_and_set_struct(log->z,&log->W);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->poby=0;
|
||||
log->pobg=0;
|
||||
log->pobb=0;
|
||||
log->lpy=0;
|
||||
log->lpg=0;
|
||||
log->lpb=0;
|
||||
|
||||
clear_struct(&log->P);
|
||||
clear_struct(&log->Z);
|
||||
clear_struct(&log->W);
|
||||
}
|
||||
}
|
||||
123
src/21g.h
Normal file
123
src/21g.h
Normal file
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
* 21g.h
|
||||
*
|
||||
* Created on: 07-03-2018
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef R21G_H_
|
||||
#define R21G_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "helper.h"
|
||||
#include "analog_in.h"
|
||||
|
||||
#define S_OFF 0
|
||||
#define S_FWD 1
|
||||
#define S_BKW 2
|
||||
#define S_BID 3
|
||||
|
||||
struct r21g_logic
|
||||
{
|
||||
struct binary_io stan_bl;
|
||||
struct binary_io test;
|
||||
float *U_esk;
|
||||
float *U_orta;
|
||||
float *U_ortb;
|
||||
float *I_esk;
|
||||
float *I_orta;
|
||||
float *I_ortb;
|
||||
|
||||
struct analog_in_params *U_param;
|
||||
struct analog_in_params *I_param;
|
||||
|
||||
struct binary_io P;
|
||||
struct binary_io Z;
|
||||
struct binary_io W;
|
||||
|
||||
float y_rozr;
|
||||
float y_powr;
|
||||
float g_rozr;
|
||||
float g_powr;
|
||||
float b_rozr;
|
||||
float b_powr;
|
||||
float u_rozr;
|
||||
float u_powr;
|
||||
float umin_rozr;
|
||||
float umin_powr;
|
||||
float imin_rozr;
|
||||
float imin_powr;
|
||||
u8 p;
|
||||
u8 z;
|
||||
|
||||
u8 pobi;
|
||||
u8 pobu;
|
||||
u8 poby;
|
||||
u8 pobg;
|
||||
u8 pobb;
|
||||
|
||||
short lpi;
|
||||
short lpu;
|
||||
short lpy;
|
||||
short lpg;
|
||||
short lpb;
|
||||
|
||||
float *y;
|
||||
float *g;
|
||||
float *b;
|
||||
|
||||
float przek;
|
||||
u32 td;
|
||||
u32 td_cnt;
|
||||
float cos_shift;
|
||||
float sin_shift;
|
||||
};
|
||||
|
||||
struct r21g_io
|
||||
{
|
||||
u32 stan_bl_in;
|
||||
u32 test_in;
|
||||
u32 U_esk_float_in;
|
||||
u32 U_orta_float_in;
|
||||
u32 U_ortb_float_in;
|
||||
u32 U_param_ptr_in;
|
||||
u32 I_esk_float_in;
|
||||
u32 I_orta_float_in;
|
||||
u32 I_ortb_float_in;
|
||||
u32 I_param_ptr_in;
|
||||
u32 p_out;
|
||||
u32 z_out;
|
||||
u32 w_out;
|
||||
u32 y_float_out;
|
||||
u32 g_float_out;
|
||||
u32 b_float_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct r21g_params
|
||||
{
|
||||
u32 bity;
|
||||
u32 y_enum;
|
||||
double yr;
|
||||
u32 g_enum;
|
||||
double gr;
|
||||
u32 b_enum;
|
||||
double br;
|
||||
double phi_corr;
|
||||
double kp;
|
||||
double td;
|
||||
double umin;
|
||||
double imin;
|
||||
u32 log_enum;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct r21g_args
|
||||
{
|
||||
struct r21g_io io;
|
||||
struct r21g_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern int r21g_initlog(void *arguments, void *logic);
|
||||
extern void r21g(void *arguments, void *logic);
|
||||
|
||||
#endif /* 21G_H_ */
|
||||
371
src/CBR.c
Normal file
371
src/CBR.c
Normal file
@@ -0,0 +1,371 @@
|
||||
/*
|
||||
* CBR.c
|
||||
*
|
||||
* Created on: 16-02-2017
|
||||
* Author: PS
|
||||
*/
|
||||
|
||||
|
||||
#include "CBR.h"
|
||||
#include "helper.h"
|
||||
#include "config.h"
|
||||
|
||||
int CBR_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct CBR_args *args = (struct CBR_args *)arguments;
|
||||
struct CBR_logic *log = (struct CBR_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.we_W1_ON,&log->we_W1_ON,&log->we_W1_ON_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.we_W2_ON,&log->we_W2_ON,&log->we_W2_ON_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.we_W3_ON,&log->we_W3_ON,&log->we_W3_ON_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.we_W1_OFF,&log->we_W1_OFF,&log->we_W1_OFF_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.we_W2_OFF,&log->we_W2_OFF,&log->we_W2_OFF_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.we_W3_OFF,&log->we_W3_OFF,&log->we_W3_OFF_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.wy_W1_ON,&log->wy_W1_ON,&log->wy_W1_ON_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.wy_W2_ON,&log->wy_W2_ON,&log->wy_W2_ON_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.wy_W3_ON,&log->wy_W3_ON,&log->wy_W3_ON_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.zd_W_ON,&log->zd_W_ON,&log->zd_W_ON_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.zd_W_OFF,&log->zd_W_OFF,&log->zd_W_OFF_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.niezg_L1,&log->niezg_L1,&log->niezg_L1_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.niezg_L2,&log->niezg_L2,&log->niezg_L2_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.niezg_L3,&log->niezg_L3,&log->niezg_L3_bit_mask))
|
||||
return -1;
|
||||
|
||||
log->nast_.licz_p = ((args->params.to) * 1000);
|
||||
log->nast_.rodzaj = args->params.rodzaj;
|
||||
|
||||
log->licz_t1 = 0; // wyzerowanie czasu
|
||||
log->licz_t2 = 0; // wyzerowanie czasu
|
||||
log->licz_t3 = 0; // wyzerowanie czasu
|
||||
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CBR(void *arguments, void *logic)
|
||||
{
|
||||
struct CBR_logic *log = (struct CBR_logic *)logic;
|
||||
|
||||
u8 t_W1_ON = ((*log->we_W1_ON & log->we_W1_ON_bit_mask) != 0) ? 1: 0;
|
||||
u8 t_W2_ON = ((*log->we_W2_ON & log->we_W2_ON_bit_mask) != 0) ? 1: 0;
|
||||
u8 t_W3_ON = ((*log->we_W3_ON & log->we_W3_ON_bit_mask) != 0) ? 1: 0;
|
||||
u8 t_W1_OFF = ((*log->we_W1_OFF & log->we_W1_OFF_bit_mask) != 0) ? 1: 0;
|
||||
u8 t_W2_OFF = ((*log->we_W2_OFF & log->we_W2_OFF_bit_mask) != 0) ? 1: 0;
|
||||
u8 t_W3_OFF = ((*log->we_W3_OFF & log->we_W3_OFF_bit_mask) != 0) ? 1: 0;
|
||||
|
||||
u8 o_W1_ON = ((*log->wy_W1_ON & log->wy_W1_ON_bit_mask) != 0) ? 1: 0;
|
||||
u8 o_W2_ON = ((*log->wy_W2_ON & log->wy_W2_ON_bit_mask) != 0) ? 1: 0;
|
||||
u8 o_W3_ON = ((*log->wy_W3_ON & log->wy_W3_ON_bit_mask) != 0) ? 1: 0;
|
||||
|
||||
u8 o_zd_ON = ((*log->zd_W_ON & log->zd_W_ON_bit_mask) != 0) ? 1: 0;
|
||||
u8 o_zd_OFF = ((*log->zd_W_OFF & log->zd_W_OFF_bit_mask) != 0) ? 1: 0;
|
||||
u8 o_n_L1 = ((*log->niezg_L1 & log->niezg_L1_bit_mask) != 0) ? 1: 0;
|
||||
u8 o_n_L2 = ((*log->niezg_L2 & log->niezg_L2_bit_mask) != 0) ? 1: 0;
|
||||
u8 o_n_L3 = ((*log->niezg_L3 & log->niezg_L3_bit_mask) != 0) ? 1: 0;
|
||||
|
||||
|
||||
switch(log->nast_.rodzaj)
|
||||
{
|
||||
case 0: //jednobitowo
|
||||
|
||||
o_n_L1 = 0;
|
||||
o_n_L2 = 0;
|
||||
o_n_L3 = 0;
|
||||
|
||||
if (t_W1_ON)
|
||||
{
|
||||
o_W1_ON = 1;
|
||||
o_W2_ON = 1;
|
||||
o_W3_ON = 1;
|
||||
o_zd_ON = 1;
|
||||
o_zd_OFF = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
o_W1_ON = 0;
|
||||
o_W2_ON = 0;
|
||||
o_W3_ON = 0;
|
||||
o_zd_ON = 0;
|
||||
o_zd_OFF = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
//*****************************************************************
|
||||
|
||||
case 1: //jednobitowo pofazowo
|
||||
|
||||
o_n_L1 = 0;
|
||||
o_n_L2 = 0;
|
||||
o_n_L3 = 0;
|
||||
|
||||
if (t_W1_ON)
|
||||
o_W1_ON = 1;
|
||||
else
|
||||
o_W1_ON = 0;
|
||||
|
||||
if (t_W2_ON)
|
||||
o_W2_ON = 1;
|
||||
else
|
||||
o_W2_ON = 0;
|
||||
|
||||
if (t_W3_ON)
|
||||
o_W3_ON = 1;
|
||||
else
|
||||
o_W3_ON = 0;
|
||||
|
||||
if (t_W1_ON && t_W2_ON && t_W3_ON)
|
||||
{
|
||||
o_zd_ON = 1;
|
||||
o_zd_OFF = 0;
|
||||
}
|
||||
else if (!t_W1_ON && !t_W2_ON && !t_W3_ON)
|
||||
{
|
||||
o_zd_OFF = 1;
|
||||
o_zd_ON = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
o_zd_ON = 0;
|
||||
o_zd_OFF = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
//*****************************************************************
|
||||
|
||||
case 2: //dwubitowo
|
||||
|
||||
if (t_W1_ON && !t_W1_OFF)
|
||||
{
|
||||
o_W1_ON = 1;
|
||||
o_W2_ON = 1;
|
||||
o_W3_ON = 1;
|
||||
o_zd_ON = 1;
|
||||
o_zd_OFF = 0;
|
||||
o_n_L1 = 0;
|
||||
o_n_L2 = 0;
|
||||
o_n_L3 = 0;
|
||||
log->licz_t1 = 0;
|
||||
}
|
||||
else if (!t_W1_ON && t_W1_OFF)
|
||||
{
|
||||
o_W1_ON = 0;
|
||||
o_W2_ON = 0;
|
||||
o_W3_ON = 0;
|
||||
o_zd_ON = 0;
|
||||
o_zd_OFF = 1;
|
||||
o_n_L1 = 0;
|
||||
o_n_L2 = 0;
|
||||
o_n_L3 = 0;
|
||||
log->licz_t1 = 0;
|
||||
}
|
||||
else if (!t_W1_ON && !t_W1_OFF)
|
||||
{
|
||||
//pamieta stan - nie zmienia
|
||||
log->licz_t1+=LOOP_CYCLE_MS;
|
||||
}
|
||||
else if (t_W1_ON && t_W1_OFF)
|
||||
{
|
||||
o_W1_ON = 1;
|
||||
o_W2_ON = 1;
|
||||
o_W3_ON = 1;
|
||||
o_zd_ON = 1;
|
||||
o_zd_OFF = 0;
|
||||
log->licz_t1+=LOOP_CYCLE_MS;
|
||||
}
|
||||
|
||||
if (log->licz_t1 > log->nast_.licz_p)
|
||||
{
|
||||
o_n_L1 = 1;
|
||||
o_n_L2 = 1;
|
||||
o_n_L3 = 1;
|
||||
log->licz_t1 = log->nast_.licz_p + (5*LOOP_CYCLE_MS);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
//*****************************************************************
|
||||
|
||||
case 3: //dwubitowo pofazowo
|
||||
|
||||
// FAZA L1
|
||||
if (t_W1_ON && !t_W1_OFF)
|
||||
{
|
||||
o_W1_ON = 1;
|
||||
o_n_L1 = 0;
|
||||
log->licz_t1 = 0;
|
||||
}
|
||||
else if (!t_W1_ON && t_W1_OFF)
|
||||
{
|
||||
o_W1_ON = 0;
|
||||
o_n_L1 = 0;
|
||||
log->licz_t1 = 0;
|
||||
}
|
||||
else if (!t_W1_ON && !t_W1_OFF)
|
||||
{
|
||||
//pamieta stan - nie zmienia
|
||||
log->licz_t1+=LOOP_CYCLE_MS;
|
||||
}
|
||||
else if (t_W1_ON && t_W1_OFF)
|
||||
{
|
||||
o_W1_ON = 1;
|
||||
log->licz_t1+=LOOP_CYCLE_MS;
|
||||
}
|
||||
|
||||
if (log->licz_t1 > log->nast_.licz_p)
|
||||
{
|
||||
o_n_L1 = 1;
|
||||
log->licz_t1 = log->nast_.licz_p + (5*LOOP_CYCLE_MS);
|
||||
}
|
||||
|
||||
// FAZA L2
|
||||
if (t_W2_ON && !t_W2_OFF)
|
||||
{
|
||||
o_W2_ON = 1;
|
||||
o_n_L2 = 0;
|
||||
log->licz_t2 = 0;
|
||||
}
|
||||
else if (!t_W2_ON && t_W2_OFF)
|
||||
{
|
||||
o_W2_ON = 0;
|
||||
o_n_L2 = 0;
|
||||
log->licz_t2 = 0;
|
||||
}
|
||||
else if (!t_W2_ON && !t_W2_OFF)
|
||||
{
|
||||
//pamieta stan - nie zmienia
|
||||
log->licz_t2+=LOOP_CYCLE_MS;
|
||||
}
|
||||
else if (t_W2_ON && t_W2_OFF)
|
||||
{
|
||||
o_W2_ON = 1;
|
||||
log->licz_t2+=LOOP_CYCLE_MS;
|
||||
}
|
||||
|
||||
if (log->licz_t2 > log->nast_.licz_p)
|
||||
{
|
||||
o_n_L2 = 1;
|
||||
log->licz_t2 = log->nast_.licz_p + (5*LOOP_CYCLE_MS);
|
||||
}
|
||||
|
||||
// FAZA L3
|
||||
if (t_W3_ON && !t_W3_OFF)
|
||||
{
|
||||
o_W3_ON = 1;
|
||||
o_n_L3 = 0;
|
||||
log->licz_t3 = 0;
|
||||
}
|
||||
else if (!t_W3_ON && t_W3_OFF)
|
||||
{
|
||||
o_W3_ON = 0;
|
||||
o_n_L3 = 0;
|
||||
log->licz_t3 = 0;
|
||||
}
|
||||
else if (!t_W3_ON && !t_W3_OFF)
|
||||
{
|
||||
//pamieta stan - nie zmienia
|
||||
log->licz_t3+=LOOP_CYCLE_MS;
|
||||
}
|
||||
else if (t_W3_ON && t_W3_OFF)
|
||||
{
|
||||
o_W3_ON = 1;
|
||||
log->licz_t3+=LOOP_CYCLE_MS;
|
||||
}
|
||||
|
||||
if (log->licz_t3 > log->nast_.licz_p)
|
||||
{
|
||||
o_n_L3 = 1;
|
||||
log->licz_t3 = log->nast_.licz_p + (5*LOOP_CYCLE_MS);
|
||||
}
|
||||
|
||||
if (o_W1_ON && o_W2_ON && o_W3_ON)
|
||||
{
|
||||
o_zd_ON = 1;
|
||||
o_zd_OFF = 0;
|
||||
}
|
||||
else if (!o_W1_ON && !o_W2_ON && !o_W3_ON)
|
||||
{
|
||||
o_zd_ON = 0;
|
||||
o_zd_OFF = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
o_zd_ON = 0;
|
||||
o_zd_OFF = 0;
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if (o_W1_ON)
|
||||
*log->wy_W1_ON |= log->wy_W1_ON_bit_mask;
|
||||
else
|
||||
*log->wy_W1_ON &= ~log->wy_W1_ON_bit_mask;
|
||||
|
||||
if (o_W2_ON)
|
||||
*log->wy_W2_ON |= log->wy_W2_ON_bit_mask;
|
||||
else
|
||||
*log->wy_W2_ON &= ~log->wy_W2_ON_bit_mask;
|
||||
|
||||
if (o_W3_ON)
|
||||
*log->wy_W3_ON |= log->wy_W3_ON_bit_mask;
|
||||
else
|
||||
*log->wy_W3_ON &= ~log->wy_W3_ON_bit_mask;
|
||||
|
||||
if (o_zd_ON)
|
||||
*log->zd_W_ON |= log->zd_W_ON_bit_mask;
|
||||
else
|
||||
*log->zd_W_ON &= ~log->zd_W_ON_bit_mask;
|
||||
|
||||
if (o_zd_OFF)
|
||||
*log->zd_W_OFF |= log->zd_W_OFF_bit_mask;
|
||||
else
|
||||
*log->zd_W_OFF &= ~log->zd_W_OFF_bit_mask;
|
||||
|
||||
if (o_n_L1)
|
||||
*log->niezg_L1 |= log->niezg_L1_bit_mask;
|
||||
else
|
||||
*log->niezg_L1 &= ~log->niezg_L1_bit_mask;
|
||||
|
||||
if (o_n_L2)
|
||||
*log->niezg_L2 |= log->niezg_L2_bit_mask;
|
||||
else
|
||||
*log->niezg_L2 &= ~log->niezg_L2_bit_mask;
|
||||
|
||||
if (o_n_L3)
|
||||
*log->niezg_L3 |= log->niezg_L3_bit_mask;
|
||||
else
|
||||
*log->niezg_L3 &= ~log->niezg_L3_bit_mask;
|
||||
|
||||
|
||||
}
|
||||
96
src/CBR.h
Normal file
96
src/CBR.h
Normal file
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* CBR.h
|
||||
*
|
||||
* Created on: 16-02-2017
|
||||
* Author: PS
|
||||
*/
|
||||
|
||||
#ifndef CBR_H_
|
||||
#define CBR_H_
|
||||
|
||||
|
||||
//#include <stdint.h>
|
||||
#include "tdefs.h"
|
||||
|
||||
struct Nastawy_przeliczone_CBR
|
||||
{
|
||||
u32 licz_p;
|
||||
u32 rodzaj;
|
||||
};
|
||||
|
||||
struct CBR_logic
|
||||
{
|
||||
u8* we_W1_ON;
|
||||
u8 we_W1_ON_bit_mask;
|
||||
u8* we_W2_ON;
|
||||
u8 we_W2_ON_bit_mask;
|
||||
u8* we_W3_ON;
|
||||
u8 we_W3_ON_bit_mask;
|
||||
u8* we_W1_OFF;
|
||||
u8 we_W1_OFF_bit_mask;
|
||||
u8* we_W2_OFF;
|
||||
u8 we_W2_OFF_bit_mask;
|
||||
u8* we_W3_OFF;
|
||||
u8 we_W3_OFF_bit_mask;
|
||||
|
||||
u8* wy_W1_ON;
|
||||
u8 wy_W1_ON_bit_mask;
|
||||
u8* wy_W2_ON;
|
||||
u8 wy_W2_ON_bit_mask;
|
||||
u8* wy_W3_ON;
|
||||
u8 wy_W3_ON_bit_mask;
|
||||
u8* zd_W_ON;
|
||||
u8 zd_W_ON_bit_mask;
|
||||
u8* zd_W_OFF;
|
||||
u8 zd_W_OFF_bit_mask;
|
||||
u8* niezg_L1;
|
||||
u8 niezg_L1_bit_mask;
|
||||
u8* niezg_L2;
|
||||
u8 niezg_L2_bit_mask;
|
||||
u8* niezg_L3;
|
||||
u8 niezg_L3_bit_mask;
|
||||
|
||||
struct Nastawy_przeliczone_CBR nast_;// struktura z parametramio
|
||||
|
||||
u32 licz_t1;
|
||||
u32 licz_t2;
|
||||
u32 licz_t3;
|
||||
|
||||
};
|
||||
|
||||
|
||||
struct CBR_params
|
||||
{
|
||||
u32 rodzaj;
|
||||
double to; ///< nastawa czasy dzialania
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct CBR_io
|
||||
{
|
||||
u32 we_W1_ON;
|
||||
u32 we_W2_ON;
|
||||
u32 we_W3_ON;
|
||||
u32 we_W1_OFF;
|
||||
u32 we_W2_OFF;
|
||||
u32 we_W3_OFF;
|
||||
|
||||
u32 wy_W1_ON;
|
||||
u32 wy_W2_ON;
|
||||
u32 wy_W3_ON;
|
||||
u32 zd_W_ON;
|
||||
u32 zd_W_OFF;
|
||||
u32 niezg_L1;
|
||||
u32 niezg_L2;
|
||||
u32 niezg_L3;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct CBR_args
|
||||
{
|
||||
struct CBR_io io;
|
||||
struct CBR_params params;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void CBR(void *args, void *logic);
|
||||
extern int CBR_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* CBR_H_ */
|
||||
1465
src/Diff.c
Normal file
1465
src/Diff.c
Normal file
File diff suppressed because it is too large
Load Diff
431
src/Diff.h
Normal file
431
src/Diff.h
Normal file
@@ -0,0 +1,431 @@
|
||||
/*
|
||||
* Diff.h
|
||||
*
|
||||
* Created on: 12-04-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef DIFF_H_
|
||||
#define DIFF_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "analog_in.h"
|
||||
#include "helper.h"
|
||||
#include "config.h"
|
||||
|
||||
extern u16 pY_ZPrAE[25];
|
||||
extern u16 pD_ZPrAE[25];
|
||||
extern struct kom1_zprae Y2w_ZPrAE;
|
||||
extern struct kom2_zprae Y3w_ZPrAE;
|
||||
extern struct kom1_zprae D2w_ZPrAE;
|
||||
extern struct kom1_zprae D3w_ZPrAE;
|
||||
|
||||
#define c1r 5 //ilosc powtorzen zadzialania bezwarunkowego
|
||||
#define c1p 30 //ilosc powtorzen odpadu bezwarunkowego
|
||||
#define c2r 2 //ilosc powtorzen zadzialania blokady 2h
|
||||
#define c2p 7 //ilosc powtorzen odpadu blokady 2h
|
||||
#define c3r 2 //ilosc powtorzen zadzialania blokady 5h
|
||||
#define c3p 10 //ilosc powtorzen odpadu blokady 5h
|
||||
#define c4r 5 //ilosc powtorzen zadzialania czasowej blokady
|
||||
#define c5r 20 //ilosc powtorzen zadzialania stabilizowanej strefy dzialania !!!!!!!!Pawel bylo 2
|
||||
#define c5p 2 //ilosc powtorzen odpadu stabilizowanej strefy dzialania
|
||||
|
||||
struct we_an_diff
|
||||
{
|
||||
u16 *samples_buf;
|
||||
struct analog_in_params_extended *params;
|
||||
};
|
||||
|
||||
struct licz
|
||||
{
|
||||
short l2h1[2];
|
||||
short l2h2[2];
|
||||
short l2h3[2];
|
||||
short l5h1[2];
|
||||
short l5h2[2];
|
||||
short l5h3[2];
|
||||
short Ir1[2];
|
||||
short Ir2[2];
|
||||
short Ir3[2];
|
||||
short sbc1[2];
|
||||
short sbc2[2];
|
||||
short sbc3[2];
|
||||
short chs1[2];
|
||||
short chs2[2];
|
||||
short chs3[2];
|
||||
|
||||
};
|
||||
|
||||
struct pobudzenia_czastkowe
|
||||
{
|
||||
u8 Irr1;
|
||||
u8 Irr2;
|
||||
u8 Irr3;
|
||||
u8 Pb1;
|
||||
u8 Ob1;
|
||||
u8 BlZw1;
|
||||
u8 Pb2;
|
||||
u8 Ob2;
|
||||
u8 BlZw2;
|
||||
u8 Pb3;
|
||||
u8 Ob3;
|
||||
u8 BlZw3;
|
||||
u8 Psf1;
|
||||
u8 Psf2;
|
||||
u8 Psf3;
|
||||
u8 Bl2h_L1;
|
||||
u8 Bl2h_L2;
|
||||
u8 Bl2h_L3;
|
||||
u8 Bl5h_L1;
|
||||
u8 Bl5h_L2;
|
||||
u8 Bl5h_L3;
|
||||
};
|
||||
|
||||
struct wskazniki_prad_do_kompensacji
|
||||
{
|
||||
struct we_an_diff *Ip[4];
|
||||
struct we_an_diff *Im[4];
|
||||
|
||||
float a_p[4][2];
|
||||
float a_m[4][2];
|
||||
};
|
||||
|
||||
struct Nastawy_przeliczone
|
||||
{
|
||||
// Adresy adr;
|
||||
|
||||
float khr_2h;///< wartosc rozruchowa blokady od 2 harmonicznej
|
||||
float khp_2h;///< wartosc powrotowa blokady od 2 harmonicznej
|
||||
float khr_5h;///< wartosc rozruchowa blokady od 5 harmonicznej
|
||||
float khp_5h;///< wartosc powrotowa blokady od 5 harmonicznej
|
||||
float Irr;///< wartosc rozruchowa dzialania bezwarunkowego
|
||||
float Ipr;///< wartosc powrotowa dzialania bezwarunkowego
|
||||
float Ihdr;///<wartosc rozruchowa pradu hamowania zwarcia zewnetrznego
|
||||
float Irdr;///< wartosc rozruchowa pradu roznicowego zwarcia zewnetrznego
|
||||
float kh1r;///<wartosc rozruchowa prosta 2
|
||||
float kh1p;///<wartosc powrotowa prosta 2
|
||||
float kh2r;///<wartosc rozruchowa prosta 3
|
||||
float Ir3c;///< czesc stala nastawy odcinka 3
|
||||
float Ip3c;///< czesc stala nastawy odcinka 3
|
||||
float kh2p;///<wartosc powrotowa prosta 3
|
||||
float kh1r2;///<wartosc rozruchowa prosta 2 (w kwadracie)
|
||||
float kh1p2;///<wartosc powrotowa prosta 2 (w kwadracie)
|
||||
float Iror;///<wartosc rozruchowa pradu prosta 1
|
||||
float Irop;///<wartosc powrotowa pradu prosta 1
|
||||
float Ir4;///< wartosc rozruchowa prosta 4
|
||||
float Ip4;///< wartosc powrotowa prosta 4
|
||||
float Ih1;///< wartosc pradu stabilizacji dla poczatku prostej 2
|
||||
float Ihp;///< wartosc pradu stabilizacji dla poczatku prostej 3
|
||||
float Ihg;///<wartosc pradu stabilizacji dla poczatku prostej 4
|
||||
u16 t_sbc;///< czas blokady po stwierdzeniu zwarcia zewnetrznego
|
||||
u32 tz; ///< opoznienie czasu zadzialania przekaznika
|
||||
u8 on; ///< wartosc nastawy aktywnosci przekaznika 1- aktywny
|
||||
u8 w; ///< wartosc nastawy dzialania na wylaczeniee 1 - wylaczenie 0 - tylko sygnalizacja
|
||||
u8 bl; ///< wartosc nastawy aktywnosci blokady dzialania 1- blokada aktywna
|
||||
u8 bl2h;///< wlaczenie blokady od drugiej harmonicznej
|
||||
u8 bl5h;///< wlaczenie blokady od piatej harmonicznej
|
||||
u8 sbc;///< wlaczenie strefy blokady czasowej
|
||||
u8 h;///< wlaczenie granicznej stabilizacji
|
||||
u8 r; ///< wlaczenie strefy bezwarunkowego wylaczenia
|
||||
u8 cross_block; ///cross block do hrmonicznych
|
||||
struct wskazniki_prad_do_kompensacji L[3]; ///< wskazniki pradow do wyliczenia skompensowanych wejsc faza 1,2,3
|
||||
float a[4];///< wspolczynnik pradu do kompensacji
|
||||
u16 buf_zero[SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS*2];
|
||||
//WA::Nastawa_przeliczona n_zero;
|
||||
//WA::Wyjscie wejscie_zero;
|
||||
struct analog_in_params_extended n_zero;
|
||||
struct we_an_diff wejscie_zero;
|
||||
|
||||
float wsp_filtr_sin_[SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS];
|
||||
float wsp_filtr_cos_[SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS];
|
||||
float wsp_filtr_sin2h_[SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS];
|
||||
float wsp_filtr_cos2h_[SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS];
|
||||
float wsp_filtr_sin5h_[SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS];
|
||||
float wsp_filtr_cos5h_[SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS];
|
||||
u8 p2d;
|
||||
u8 p3d;
|
||||
#ifdef IZAZ600
|
||||
u8 Rej3kHz_adr_wej_OK;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct wejscie_wew
|
||||
{
|
||||
float buf_Lr[SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS*2][6];
|
||||
u8 nr_probki;
|
||||
float orta[6];
|
||||
float ortb[6];
|
||||
float Ir[6];
|
||||
float orta2h[3];
|
||||
float ortb2h[3];
|
||||
float I2h[3];
|
||||
float orta5h[3];
|
||||
float ortb5h[3];
|
||||
float I5h[3];
|
||||
|
||||
float buf_ip[SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS*2][9];
|
||||
float Ip[9];
|
||||
};
|
||||
|
||||
enum typ_kompensacji
|
||||
{
|
||||
zero, ///< brak wejscia
|
||||
A, /// 1,0,0 1
|
||||
B, /// -1,0,0 0,57735
|
||||
C, /// 1,-1,0 0,57735
|
||||
D, /// -1,1,0 0,57735
|
||||
E, /// 1,0,-1 0,57735
|
||||
F, /// -1,0,1 0,57735
|
||||
N, /// 0,1,0 1
|
||||
O, /// 0,-1,0 1
|
||||
U,
|
||||
V,
|
||||
W,
|
||||
X,
|
||||
Y,
|
||||
Z
|
||||
};
|
||||
|
||||
enum jaki_uklad
|
||||
{
|
||||
bez_GT, ///<blad nastaw (nastawy sprzeczne dzialanie jak odstawienie funkcji)
|
||||
tylko_G, ///< tylko generator
|
||||
tylko_T2w_Y, ///< tylko transformator z dwoma uzwojeniami gora w ukladzie Y
|
||||
tylko_T2w_D, ///< tylko transformator z dwoma uzwojeniami gora w ukladzie D
|
||||
tylko_T3w_Y, ///< tylko transformator z trzema uzwojeniami gora w ukladzie Y
|
||||
tylko_T3w_D, ///< tylko transformator z trzema uzwojeniami gora w ukladzie D
|
||||
blokGT_T2w_Y, ///< blok generator transformator z dwoma uzwojeniami gora w ukladzie Y
|
||||
blokGT_T2w_D, ///< blok generator transformator z dwoma uzwojeniami gora w ukladzie D
|
||||
blokGT_T3w_Y, ///< blok generator transformator z trzema uzwojeniami gora w ukladzie Y
|
||||
blokGT_T3w_D ///< blok generator transformator z trzema uzwojeniami gora w ukladzie D
|
||||
};
|
||||
|
||||
struct kompensacja
|
||||
{
|
||||
enum typ_kompensacji Ig; //prad gornej strony trafo
|
||||
enum typ_kompensacji Id; //prad dolnej strony trafo
|
||||
enum typ_kompensacji Io; //prad odczepu
|
||||
|
||||
};
|
||||
|
||||
struct kom1
|
||||
{
|
||||
struct kompensacja k[7];
|
||||
};
|
||||
|
||||
struct kom1_zprae
|
||||
{
|
||||
struct kompensacja k[13];
|
||||
};
|
||||
|
||||
struct kom2
|
||||
{
|
||||
struct kompensacja k[7][7];
|
||||
};
|
||||
|
||||
struct kom2_zprae
|
||||
{
|
||||
struct kompensacja k[13][13];
|
||||
};
|
||||
|
||||
struct nast_trafo
|
||||
{
|
||||
float PT12;///<przekladnia uzwojen 1-2 transformatora
|
||||
float PT13;///<przekladnia uzwojen 1-3 transformatora
|
||||
|
||||
//u16 Tr_zas;///<strona zasilania ukladu zabezpieczenia rożnicowego
|
||||
u16 GrP1; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia GN (1)
|
||||
u16 GrP2; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia SN (2)
|
||||
u16 GrP3; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia SN (3)
|
||||
};
|
||||
|
||||
struct dane_wewnetrzne_Diff
|
||||
{
|
||||
// Wyjscia_rejestratora R; ///< dane ostatniego zaklocenia
|
||||
// Time czas_; // moment wystapienia zaklocenia (rejestr tymczasowy - przed zapisem)
|
||||
u32 dl_; // dlugosc czasu trwania zaklocenia (rejestr tymczasowy - przed zapisem)
|
||||
float maxIr1; // maksymalna watosc pradu rożnicowego wejscia 1 (rejestr tymczasowy - przed zapisem)
|
||||
float maxIr2; // maksymalna watosc pradu rożnicowego wejscia 2 (rejestr tymczasowy - przed zapisem)
|
||||
float maxIr3; // maksymalna watosc pradu rożnicowego wejscia 3 (rejestr tymczasowy - przed zapisem)
|
||||
float maxIh1; // maksymalna watosc pradu stabilizacji wejscia 1 (rejestr tymczasowy - przed zapisem)
|
||||
float maxIh2; // maksymalna watosc pradu stabilizacji wejscia 2 (rejestr tymczasowy - przed zapisem)
|
||||
float maxIh3; // maksymalna watosc pradu stabilizacji wejscia 3 (rejestr tymczasowy - przed zapisem)
|
||||
u32 licz_t; // licznik czasu od pobudzenia dla przekaznika czasowego
|
||||
u8 wsk_rej; // nowy zapis rejestracji parametrow zaklocenia (spelnienie kryterium identyfikacji)
|
||||
u8 sbc_P;
|
||||
};
|
||||
|
||||
|
||||
struct diff_logic
|
||||
{
|
||||
struct binary_io stan_bl;
|
||||
u16 *I1_l1;
|
||||
struct analog_in_params_extended *I1_l1_params;
|
||||
u16 *I1_l2;
|
||||
struct analog_in_params_extended *I1_l2_params;
|
||||
u16 *I1_l3;
|
||||
struct analog_in_params_extended *I1_l3_params;
|
||||
u16 *I2_l1;
|
||||
struct analog_in_params_extended *I2_l1_params;
|
||||
u16 *I2_l2;
|
||||
struct analog_in_params_extended *I2_l2_params;
|
||||
u16 *I2_l3;
|
||||
struct analog_in_params_extended *I2_l3_params;
|
||||
u16 *I3_l1;
|
||||
struct analog_in_params_extended *I3_l1_params;
|
||||
u16 *I3_l2;
|
||||
struct analog_in_params_extended *I3_l2_params;
|
||||
u16 *I3_l3;
|
||||
struct analog_in_params_extended *I3_l3_params;
|
||||
u16 *I4_l1;
|
||||
struct analog_in_params_extended *I4_l1_params;
|
||||
u16 *I4_l2;
|
||||
struct analog_in_params_extended *I4_l2_params;
|
||||
u16 *I4_l3;
|
||||
struct analog_in_params_extended *I4_l3_params;
|
||||
|
||||
struct binary_io test;
|
||||
|
||||
struct binary_io W;
|
||||
struct binary_io Z;
|
||||
struct binary_io P;
|
||||
struct binary_io Pf1;
|
||||
struct binary_io Pf2;
|
||||
struct binary_io Pf3;
|
||||
struct binary_io BL2h1;
|
||||
struct binary_io BL2h2;
|
||||
struct binary_io BL2h3;
|
||||
struct binary_io BL5h1;
|
||||
struct binary_io BL5h2;
|
||||
struct binary_io BL5h3;
|
||||
struct binary_io Zw1;
|
||||
struct binary_io Zw2;
|
||||
struct binary_io Zw3;
|
||||
struct binary_io nieobs;
|
||||
float *Ir1;
|
||||
float *Ir2;
|
||||
float *Ir3;
|
||||
float *Ih1;
|
||||
float *Ih2;
|
||||
float *Ih3;
|
||||
float *I2h1;
|
||||
float *I2h2;
|
||||
float *I2h3;
|
||||
float *I5h1;
|
||||
float *I5h2;
|
||||
float *I5h3;
|
||||
float *Ir_L1_ortb;
|
||||
float *Ir_L2_ortb;
|
||||
float *Ir_L3_ortb;
|
||||
// float *Ih_L1_ortb;
|
||||
// float *Ih_L2_ortb;
|
||||
// float *Ih_L3_ortb;
|
||||
|
||||
enum jaki_uklad jaki_uklad;
|
||||
struct dane_wewnetrzne_Diff dw;
|
||||
struct licz l;
|
||||
struct pobudzenia_czastkowe P_;
|
||||
struct wejscie_wew w;
|
||||
struct Nastawy_przeliczone nast_; // struktura z parametrami rozruchowymi
|
||||
float Ir1_;
|
||||
float Ir2_;
|
||||
float Ir3_;
|
||||
float Ih1_;
|
||||
float Ih2_;
|
||||
float Ih3_;
|
||||
|
||||
struct we_an_diff an_struct_i1_l1;
|
||||
struct we_an_diff an_struct_i1_l2;
|
||||
struct we_an_diff an_struct_i1_l3;
|
||||
struct we_an_diff an_struct_i2_l1;
|
||||
struct we_an_diff an_struct_i2_l2;
|
||||
struct we_an_diff an_struct_i2_l3;
|
||||
struct we_an_diff an_struct_i3_l1;
|
||||
struct we_an_diff an_struct_i3_l2;
|
||||
struct we_an_diff an_struct_i3_l3;
|
||||
struct we_an_diff an_struct_i4_l1;
|
||||
struct we_an_diff an_struct_i4_l2;
|
||||
struct we_an_diff an_struct_i4_l3;
|
||||
|
||||
// float mul_I1[3];
|
||||
// float mul_I2[3];
|
||||
// float mul_I3[3];
|
||||
// struct Nastawy_przeliczone_Diff_1 nast_;
|
||||
};
|
||||
|
||||
struct diff_io
|
||||
{
|
||||
u32 stan_bl_in;
|
||||
u32 ia_l1_ptr_in;
|
||||
u32 ia_l1_params_ptr_in;
|
||||
u32 ia_l2_ptr_in;
|
||||
u32 ia_l2_params_ptr_in;
|
||||
u32 ia_l3_ptr_in;
|
||||
u32 ia_l3_params_ptr_in;
|
||||
u32 ib_l1_ptr_in;
|
||||
u32 ib_l1_params_ptr_in;
|
||||
u32 ib_l2_ptr_in;
|
||||
u32 ib_l2_params_ptr_in;
|
||||
u32 ib_l3_ptr_in;
|
||||
u32 ib_l3_params_ptr_in;
|
||||
u32 ic_l1_ptr_in;
|
||||
u32 ic_l1_params_ptr_in;
|
||||
u32 ic_l2_ptr_in;
|
||||
u32 ic_l2_params_ptr_in;
|
||||
u32 ic_l3_ptr_in;
|
||||
u32 ic_l3_params_ptr_in;
|
||||
u32 id_l1_ptr_in;
|
||||
u32 id_l1_params_ptr_in;
|
||||
u32 id_l2_ptr_in;
|
||||
u32 id_l2_params_ptr_in;
|
||||
u32 id_l3_ptr_in;
|
||||
u32 id_l3_params_ptr_in;
|
||||
u32 test_in;
|
||||
|
||||
u32 w_out;
|
||||
u32 z_out;
|
||||
u32 p_out;
|
||||
u32 pl1_out;
|
||||
u32 pl2_out;
|
||||
u32 pl3_out;
|
||||
u32 bl_2h_L1_out;
|
||||
u32 bl_2h_L2_out;
|
||||
u32 bl_2h_L3_out;
|
||||
u32 bl_5h_L1_out;
|
||||
u32 bl_5h_L2_out;
|
||||
u32 bl_5h_L3_out;
|
||||
u32 zzew1_out;
|
||||
u32 zzew2_out;
|
||||
u32 zzew3_out;
|
||||
u32 di_l1_float_out;
|
||||
u32 di_l2_float_out;
|
||||
u32 di_l3_float_out;
|
||||
u32 ih_l1_float_out;
|
||||
u32 ih_l2_float_out;
|
||||
u32 ih_l3_float_out;
|
||||
u32 i2h_l1_float_out;
|
||||
u32 i2h_l2_float_out;
|
||||
u32 i2h_l3_float_out;
|
||||
u32 i5h_l1_float_out;
|
||||
u32 i5h_l2_float_out;
|
||||
u32 i5h_l3_float_out;
|
||||
u32 ir_l1_ch_float_out;
|
||||
u32 ir_l2_ch_float_out;
|
||||
u32 ir_l3_ch_float_out;
|
||||
u32 nieobs_out;
|
||||
// u32 ih_l1_ch_float_out;
|
||||
// u32 ih_l2_ch_float_out;
|
||||
// u32 ih_l3_ch_float_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
|
||||
extern int diff_init_io(struct diff_io *io, struct diff_logic *log);
|
||||
extern void kryterium2(struct diff_logic *log,float Ir, float Ih, u8 *pob);
|
||||
extern void kryterium3(struct diff_logic *log,float Ir, float Ih, u8 *pob);
|
||||
extern u8 kryterium1(short *licz, u8 pobudzenie, u8 powrot, u8 st, u16 powz, u16 powp);
|
||||
extern void przelicz_nastawy1(struct diff_logic *log,struct nast_trafo n);
|
||||
extern void przelicz_1200Hz_1(struct diff_logic *log);
|
||||
extern void przelicz_1200Hz_2(struct diff_logic *log);
|
||||
|
||||
|
||||
#endif /* DIFF_H_ */
|
||||
126
src/Diff_1.c
Normal file
126
src/Diff_1.c
Normal file
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* Diff_1.c
|
||||
*
|
||||
* Created on: 01-03-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "helper.h"
|
||||
#include "Diff.h"
|
||||
#include "Diff_1.h"
|
||||
|
||||
int diff_1_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct diff_1_args *args = (struct diff_1_args *)arguments;
|
||||
struct diff_logic *log = (struct diff_logic *)logic;
|
||||
|
||||
if(diff_init_io(&args->io,log))
|
||||
return -1;
|
||||
|
||||
log->nast_.on = (args->params.bity & 0x0001)?1:0;
|
||||
log->nast_.w = (args->params.bity & 0x0002)?1:0;
|
||||
log->nast_.bl = (args->params.bity & 0x0004)?1:0;
|
||||
log->nast_.bl2h = (args->params.bity & 0x0008)?1:0;
|
||||
log->nast_.bl5h = (args->params.bity & 0x0010)?1:0;
|
||||
log->nast_.sbc = (args->params.bity & 0x0020)?1:0;
|
||||
log->nast_.h = (args->params.bity & 0x0040)?1:0;
|
||||
log->nast_.r = (args->params.bity & 0x0080)?1:0;
|
||||
log->nast_.cross_block = (args->params.bity & 0x0100)?1:0;
|
||||
|
||||
//ustawienie wartosci rozruchowych
|
||||
log->nast_.khr_2h = args->params.k_2h * args->params.k_2h;
|
||||
log->nast_.khp_2h = log->nast_.khr_2h * 0.98;//args->params.kp *args->params.kp;
|
||||
log->nast_.khr_5h = args->params.k_5h * args->params.k_5h;
|
||||
log->nast_.khp_5h = log->nast_.khr_5h * 0.98;//args->params.kp *args->params.kp;
|
||||
log->nast_.Irr = args->params.Ir * 1.3577f;
|
||||
log->nast_.Ipr = args->params.Ir * args->params.kp;
|
||||
log->nast_.Ihdr = args->params.Ihd;
|
||||
log->nast_.Irdr = args->params.rd;
|
||||
log->nast_.kh1r = args->params.kh1;
|
||||
log->nast_.kh1p = args->params.kh1 * args->params.kp;
|
||||
log->nast_.kh2r = args->params.kh2;
|
||||
log->nast_.kh2p = args->params.kh2 * args->params.kp;
|
||||
log->nast_.Ir3c = args->params.Ihp * (args->params.kh1 - args->params.kh2);
|
||||
log->nast_.Ip3c = log->nast_.Ir3c * args->params.kp;
|
||||
log->nast_.Iror = args->params.Iro;
|
||||
log->nast_.Irop = args->params.Iro * args->params.kp;
|
||||
log->nast_.Ir4 = args->params.Ihg * args->params.kh2 + args->params.Ihp * (args->params.kh1 - args->params.kh2);
|
||||
log->nast_.Ip4 = log->nast_.Ir4 * args->params.kp;
|
||||
log->nast_.t_sbc = args->params.tbld * 1000;
|
||||
log->nast_.Ih1 = args->params.Iro / args->params.kh1;
|
||||
log->nast_.Ihp = args->params.Ihp;
|
||||
log->nast_.Ihg = args->params.Ihg;
|
||||
|
||||
log->nast_.tz = args->params.t * 1000;
|
||||
|
||||
// log->nast_.ih_siemens = (args->params.Ih_typ == IH_SUM_IP) ? 1 : 0;
|
||||
//--------
|
||||
|
||||
struct nast_trafo n1;
|
||||
n1.GrP1 = args->params.GrP1;
|
||||
n1.GrP2 = args->params.GrP2;
|
||||
n1.GrP3 = args->params.GrP3;
|
||||
n1.PT12 = args->params.PT12;
|
||||
n1.PT13 = args->params.PT13;
|
||||
// n1.Tr_zas = args->params.Tr_zas;
|
||||
|
||||
przelicz_nastawy1(log,n1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void diff_1(void *arguments, void *logic)
|
||||
{
|
||||
struct diff_logic *log = (struct diff_logic *)logic;
|
||||
|
||||
if(log->nast_.on) // jesli zabezpieczenie aktywne
|
||||
{
|
||||
przelicz_1200Hz_1(log);
|
||||
|
||||
//Sprawdzenie pobudzenia w stabilizowanej strefie dzialania
|
||||
kryterium2(log,log->Ir1_,log->Ih1_,&log->P_.Pb1);
|
||||
kryterium2(log,log->Ir2_,log->Ih2_,&log->P_.Pb2);
|
||||
kryterium2(log,log->Ir3_,log->Ih3_,&log->P_.Pb3);
|
||||
|
||||
przelicz_1200Hz_2(log);
|
||||
} else {
|
||||
*log->Ir1=0;
|
||||
*log->Ir2=0;
|
||||
*log->Ir3=0;
|
||||
*log->Ih1=0;
|
||||
*log->Ih2=0;
|
||||
*log->Ih3=0;
|
||||
*log->Ir_L1_ortb=0;
|
||||
*log->Ir_L2_ortb=0;
|
||||
*log->Ir_L3_ortb=0;
|
||||
// *log->Ih_L1_ortb=0;
|
||||
//*log->Ih_L2_ortb=0;
|
||||
//*log->Ih_L3_ortb=0;
|
||||
*log->I2h1=0;
|
||||
*log->I2h2=0;
|
||||
*log->I2h3=0;
|
||||
*log->I5h1=0;
|
||||
*log->I5h2=0;
|
||||
*log->I5h3=0;
|
||||
clear_struct(&log->P);
|
||||
clear_struct(&log->Pf1);
|
||||
clear_struct(&log->Pf2);
|
||||
clear_struct(&log->Pf3);
|
||||
clear_struct(&log->W);
|
||||
clear_struct(&log->Z);
|
||||
clear_struct(&log->Zw1);
|
||||
clear_struct(&log->Zw2);
|
||||
clear_struct(&log->Zw3);
|
||||
clear_struct(&log->BL2h1);
|
||||
clear_struct(&log->BL2h2);
|
||||
clear_struct(&log->BL2h3);
|
||||
clear_struct(&log->BL5h1);
|
||||
clear_struct(&log->BL5h2);
|
||||
clear_struct(&log->BL5h3);
|
||||
}
|
||||
}
|
||||
52
src/Diff_1.h
Normal file
52
src/Diff_1.h
Normal file
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Diff_1.h
|
||||
*
|
||||
* Created on: 01-03-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef DIFF_1_H_
|
||||
#define DIFF_1_H_
|
||||
|
||||
#include "Diff.h"
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
struct diff_1_params
|
||||
{
|
||||
u32 bity; ///< nastawy bitowe;
|
||||
|
||||
// u32 Tr_zas;///<strona zasilania ukladu zabezpieczenia rożnicowego
|
||||
u32 GrP1; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia GN (1)
|
||||
u32 GrP2; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia SN (2)
|
||||
u32 GrP3; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia SN (3)
|
||||
|
||||
double Iro;///< poczatkowy prad rozruchowy
|
||||
double Ir;///< graniczny prad rozruchowy
|
||||
double Ihg; ///< graniczny prad stabilizacji
|
||||
double Ihp;///< prad hamujacy przegiecia
|
||||
double Ihd;///< prad rozruchowy blokady czasowej pradu stabilizujacego
|
||||
double tbld; ///< czas blokady dzialania po opuszczeniu strefy blokady czasowej
|
||||
double rd; ///< przesuniecie strefy blokady czasowej od strefy dzialania
|
||||
double kh1;///< wspolczynnik stabilizacji prosta 2
|
||||
double kh2; ///< wspolczynnik stabilizacji prosta 3
|
||||
double t;///< czas opoznienia dzialania
|
||||
double kp;///< wspolczynnik powrotu
|
||||
double k_2h;///< wspolczynnik blokowania druga harmoniczna
|
||||
double k_5h;///< wspolczynnik blokowania piata harmoniczna
|
||||
double PT12;///<przekladnia uzwojen 1-2 transformatora
|
||||
double PT13;///<przekladnia uzwojen 1-3 transformatora
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct diff_1_args
|
||||
{
|
||||
struct diff_io io;
|
||||
struct diff_1_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void diff_1(void *args, void *logic);
|
||||
extern int diff_1_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* DIFF_1_H_ */
|
||||
1287
src/Diff_1_bis.c
Normal file
1287
src/Diff_1_bis.c
Normal file
File diff suppressed because it is too large
Load Diff
249
src/Diff_1_bis.h
Normal file
249
src/Diff_1_bis.h
Normal file
@@ -0,0 +1,249 @@
|
||||
/*
|
||||
* Diff_1.h
|
||||
*
|
||||
* Created on: 01-03-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef DIFF_1_BIS_H_
|
||||
#define DIFF_1_BIS_H_
|
||||
|
||||
#include "Diff.h"
|
||||
|
||||
//#include "pawel_usun_to.h"
|
||||
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
|
||||
extern u16 pY_ZPrAE[25];
|
||||
extern u16 pD_ZPrAE[25];
|
||||
extern struct kom1_zprae Y2w_ZPrAE;
|
||||
extern struct kom2_zprae Y3w_ZPrAE;
|
||||
extern struct kom1_zprae D2w_ZPrAE;
|
||||
extern struct kom1_zprae D3w_ZPrAE;
|
||||
|
||||
#define c1r 5 //ilosc powtorzen zadzialania bezwarunkowego
|
||||
#define c1p 30 //ilosc powtorzen odpadu bezwarunkowego
|
||||
#define c2r 2 //ilosc powtorzen zadzialania blokady 2h
|
||||
#define c2p 7 //ilosc powtorzen odpadu blokady 2h
|
||||
#define c3r 2 //ilosc powtorzen zadzialania blokady 5h
|
||||
#define c3p 10 //ilosc powtorzen odpadu blokady 5h
|
||||
#define c4r 5 //ilosc powtorzen zadzialania czasowej blokady
|
||||
#define c5r 20 //ilosc powtorzen zadzialania stabilizowanej strefy dzialania !!!!!!!!Pawel bylo 2
|
||||
#define c5p 2 //ilosc powtorzen odpadu stabilizowanej strefy dzialania
|
||||
|
||||
struct diff_1_bis_io
|
||||
{
|
||||
u32 stan_bl_in;
|
||||
u32 ia_l1_ptr_in;
|
||||
u32 ia_l1_params_ptr_in;
|
||||
u32 ia_l2_ptr_in;
|
||||
u32 ia_l2_params_ptr_in;
|
||||
u32 ia_l3_ptr_in;
|
||||
u32 ia_l3_params_ptr_in;
|
||||
u32 ib_l1_ptr_in;
|
||||
u32 ib_l1_params_ptr_in;
|
||||
u32 ib_l2_ptr_in;
|
||||
u32 ib_l2_params_ptr_in;
|
||||
u32 ib_l3_ptr_in;
|
||||
u32 ib_l3_params_ptr_in;
|
||||
u32 ic_l1_ptr_in;
|
||||
u32 ic_l1_params_ptr_in;
|
||||
u32 ic_l2_ptr_in;
|
||||
u32 ic_l2_params_ptr_in;
|
||||
u32 ic_l3_ptr_in;
|
||||
u32 ic_l3_params_ptr_in;
|
||||
|
||||
/*
|
||||
u32 id_l1_ptr_in;
|
||||
u32 id_l1_params_ptr_in;
|
||||
u32 id_l2_ptr_in;
|
||||
u32 id_l2_params_ptr_in;
|
||||
u32 id_l3_ptr_in;
|
||||
u32 id_l3_params_ptr_in;
|
||||
*/
|
||||
|
||||
u32 test_in;
|
||||
|
||||
u32 w_out;
|
||||
u32 z_out;
|
||||
u32 p_out;
|
||||
u32 pl1_out;
|
||||
u32 pl2_out;
|
||||
u32 pl3_out;
|
||||
u32 bl_2h_L1_out;
|
||||
u32 bl_2h_L2_out;
|
||||
u32 bl_2h_L3_out;
|
||||
u32 bl_5h_L1_out;
|
||||
u32 bl_5h_L2_out;
|
||||
u32 bl_5h_L3_out;
|
||||
u32 zzew1_out;
|
||||
u32 zzew2_out;
|
||||
u32 zzew3_out;
|
||||
u32 di_l1_float_out;
|
||||
u32 di_l2_float_out;
|
||||
u32 di_l3_float_out;
|
||||
u32 ih_l1_float_out;
|
||||
u32 ih_l2_float_out;
|
||||
u32 ih_l3_float_out;
|
||||
u32 i2h_l1_float_out;
|
||||
u32 i2h_l2_float_out;
|
||||
u32 i2h_l3_float_out;
|
||||
u32 i5h_l1_float_out;
|
||||
u32 i5h_l2_float_out;
|
||||
u32 i5h_l3_float_out;
|
||||
u32 ir_l1_ch_float_out;
|
||||
u32 ir_l2_ch_float_out;
|
||||
u32 ir_l3_ch_float_out;
|
||||
u32 nieobs_out;
|
||||
u32 pob_bezwar_out;
|
||||
// u32 ih_l1_ch_float_out;
|
||||
// u32 ih_l2_ch_float_out;
|
||||
// u32 ih_l3_ch_float_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct diff_1_bis_logic
|
||||
{
|
||||
struct binary_io stan_bl;
|
||||
u16 *I1_l1;
|
||||
struct analog_in_params_extended *I1_l1_params;
|
||||
u16 *I1_l2;
|
||||
struct analog_in_params_extended *I1_l2_params;
|
||||
u16 *I1_l3;
|
||||
struct analog_in_params_extended *I1_l3_params;
|
||||
u16 *I2_l1;
|
||||
struct analog_in_params_extended *I2_l1_params;
|
||||
u16 *I2_l2;
|
||||
struct analog_in_params_extended *I2_l2_params;
|
||||
u16 *I2_l3;
|
||||
struct analog_in_params_extended *I2_l3_params;
|
||||
u16 *I3_l1;
|
||||
struct analog_in_params_extended *I3_l1_params;
|
||||
u16 *I3_l2;
|
||||
struct analog_in_params_extended *I3_l2_params;
|
||||
u16 *I3_l3;
|
||||
struct analog_in_params_extended *I3_l3_params;
|
||||
/*
|
||||
u16 *I4_l1;
|
||||
struct analog_in_params_extended *I4_l1_params;
|
||||
u16 *I4_l2;
|
||||
struct analog_in_params_extended *I4_l2_params;
|
||||
u16 *I4_l3;
|
||||
struct analog_in_params_extended *I4_l3_params;
|
||||
*/
|
||||
struct binary_io test;
|
||||
|
||||
struct binary_io W;
|
||||
struct binary_io Z;
|
||||
struct binary_io P;
|
||||
struct binary_io Pf1;
|
||||
struct binary_io Pf2;
|
||||
struct binary_io Pf3;
|
||||
struct binary_io BL2h1;
|
||||
struct binary_io BL2h2;
|
||||
struct binary_io BL2h3;
|
||||
struct binary_io BL5h1;
|
||||
struct binary_io BL5h2;
|
||||
struct binary_io BL5h3;
|
||||
struct binary_io Zw1;
|
||||
struct binary_io Zw2;
|
||||
struct binary_io Zw3;
|
||||
struct binary_io nieobs;
|
||||
struct binary_io pob_bezwar;
|
||||
float *Ir1;
|
||||
float *Ir2;
|
||||
float *Ir3;
|
||||
float *Ih1;
|
||||
float *Ih2;
|
||||
float *Ih3;
|
||||
float *I2h1;
|
||||
float *I2h2;
|
||||
float *I2h3;
|
||||
float *I5h1;
|
||||
float *I5h2;
|
||||
float *I5h3;
|
||||
float *Ir_L1_ortb;
|
||||
float *Ir_L2_ortb;
|
||||
float *Ir_L3_ortb;
|
||||
// float *Ih_L1_ortb;
|
||||
// float *Ih_L2_ortb;
|
||||
// float *Ih_L3_ortb;
|
||||
|
||||
enum jaki_uklad jaki_uklad;
|
||||
struct dane_wewnetrzne_Diff dw;
|
||||
struct licz l;
|
||||
struct pobudzenia_czastkowe P_;
|
||||
struct wejscie_wew w;
|
||||
struct Nastawy_przeliczone nast_; // struktura z parametrami rozruchowymi
|
||||
|
||||
float Irr2;
|
||||
float Irr2_p;
|
||||
float Ir1_;
|
||||
float Ir2_;
|
||||
float Ir3_;
|
||||
float Ih1_;
|
||||
float Ih2_;
|
||||
float Ih3_;
|
||||
|
||||
u8 algorytm;
|
||||
|
||||
struct we_an_diff an_struct_i1_l1;
|
||||
struct we_an_diff an_struct_i1_l2;
|
||||
struct we_an_diff an_struct_i1_l3;
|
||||
struct we_an_diff an_struct_i2_l1;
|
||||
struct we_an_diff an_struct_i2_l2;
|
||||
struct we_an_diff an_struct_i2_l3;
|
||||
struct we_an_diff an_struct_i3_l1;
|
||||
struct we_an_diff an_struct_i3_l2;
|
||||
struct we_an_diff an_struct_i3_l3;
|
||||
struct we_an_diff an_struct_i4_l1;
|
||||
struct we_an_diff an_struct_i4_l2;
|
||||
struct we_an_diff an_struct_i4_l3;
|
||||
|
||||
// float mul_I1[3];
|
||||
// float mul_I2[3];
|
||||
// float mul_I3[3];
|
||||
// struct Nastawy_przeliczone_Diff_1 nast_;
|
||||
};
|
||||
|
||||
|
||||
struct diff_1_bis_params
|
||||
{
|
||||
u32 bity; ///< nastawy bitowe;
|
||||
|
||||
// u32 Tr_zas;///<strona zasilania ukladu zabezpieczenia ro¿nicowego
|
||||
u32 GrP1; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia GN (1)
|
||||
u32 GrP2; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia SN (2)
|
||||
u32 GrP3; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia SN (3)
|
||||
|
||||
double Iro;///< poczatkowy prad rozruchowy
|
||||
double Ir;///< graniczny prad rozruchowy
|
||||
double Ihg; ///< graniczny prad stabilizacji
|
||||
double Ihp;///< prad hamujacy przegiecia
|
||||
double Ihd;///< prad rozruchowy blokady czasowej pradu stabilizujacego
|
||||
double tbld; ///< czas blokady dzialania po opuszczeniu strefy blokady czasowej
|
||||
double rd; ///< przesuniecie strefy blokady czasowej od strefy dzialania
|
||||
double kh1;///< wspolczynnik stabilizacji prosta 2
|
||||
double kh2; ///< wspolczynnik stabilizacji prosta 3
|
||||
double t;///< czas opoznienia dzialania
|
||||
double kp;///< wspolczynnik powrotu
|
||||
double k_2h;///< wspolczynnik blokowania druga harmoniczna
|
||||
double k_5h;///< wspolczynnik blokowania piata harmoniczna
|
||||
double PT12;///<przekladnia uzwojen 1-2 transformatora
|
||||
double PT13;///<przekladnia uzwojen 1-3 transformatora
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct diff_1_bis_args
|
||||
{
|
||||
struct diff_1_bis_io io;
|
||||
struct diff_1_bis_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
|
||||
extern void diff_1_bis(void *args, void *logic);
|
||||
extern int diff_1_bis_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* DIFF_1_BIS_H_ */
|
||||
124
src/Diff_2.c
Normal file
124
src/Diff_2.c
Normal file
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* Diff_2.c
|
||||
*
|
||||
* Created on: 08-05-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "helper.h"
|
||||
#include "Diff.h"
|
||||
#include "Diff_2.h"
|
||||
|
||||
int diff_2_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct diff_2_args *args = (struct diff_2_args *)arguments;
|
||||
struct diff_logic *log = (struct diff_logic *)logic;
|
||||
|
||||
if(diff_init_io(&args->io,log))
|
||||
return -1;
|
||||
|
||||
log->nast_.on = (args->params.bity & 0x0001)?1:0;
|
||||
log->nast_.w = (args->params.bity & 0x0002)?1:0;
|
||||
log->nast_.bl = (args->params.bity & 0x0004)?1:0;
|
||||
log->nast_.bl2h = (args->params.bity & 0x0008)?1:0;
|
||||
log->nast_.bl5h = (args->params.bity & 0x0010)?1:0;
|
||||
log->nast_.sbc = (args->params.bity & 0x0020)?1:0;
|
||||
log->nast_.h = (args->params.bity & 0x0040)?1:0;
|
||||
log->nast_.r = (args->params.bity & 0x0080)?1:0;
|
||||
|
||||
//ustawienie wartosci rozruchowych
|
||||
log->nast_.khr_2h = args->params.k_2h * args->params.k_2h;
|
||||
log->nast_.khp_2h = log->nast_.khr_2h * args->params.kp *args->params.kp;
|
||||
log->nast_.khr_5h = args->params.k_5h * args->params.k_5h;
|
||||
log->nast_.khp_5h = log->nast_.khr_5h * args->params.kp *args->params.kp;
|
||||
log->nast_.Irr = args->params.Ir * 1.3577f;
|
||||
log->nast_.Ipr = args->params.Ir * args->params.kp;
|
||||
log->nast_.Ihdr = args->params.Ihd;
|
||||
log->nast_.Irdr = args->params.rd;
|
||||
log->nast_.kh1r = args->params.kh1;
|
||||
log->nast_.kh1p = log->nast_.kh1r * args->params.kp;
|
||||
|
||||
log->nast_.kh1r2 = args->params.kh1 * args->params.kh1;
|
||||
log->nast_.kh1p2 = log->nast_.kh1r2 * args->params.kp * args->params.kp;
|
||||
log->nast_.Ir4 = args->params.Ihg * args->params.kh1 * args->params.Ihg * args->params.kh1 + args->params.Iro * args->params.Iro;
|
||||
log->nast_.Ip4 = log->nast_.Ir4 * args->params.kp * args->params.kp;
|
||||
log->nast_.Iror = args->params.Iro * args->params.Iro;
|
||||
log->nast_.Irop = log->nast_.Iror * args->params.kp * args->params.kp;
|
||||
log->nast_.t_sbc = args->params.tbld * 1000;
|
||||
log->nast_.Ihg = args->params.Ihg * args->params.Ihg;
|
||||
|
||||
log->nast_.tz = args->params.t * 1000;
|
||||
|
||||
|
||||
//--------
|
||||
|
||||
struct nast_trafo n1;
|
||||
n1.GrP1 = args->params.GrP1;
|
||||
n1.GrP2 = args->params.GrP2;
|
||||
n1.GrP3 = args->params.GrP3;
|
||||
n1.PT12 = args->params.PT12;
|
||||
n1.PT13 = args->params.PT13;
|
||||
//n1.Tr_zas = args->params.Tr_zas;
|
||||
|
||||
przelicz_nastawy1(log,n1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void diff_2(void *arguments, void *logic)
|
||||
{
|
||||
struct diff_logic *log = (struct diff_logic *)logic;
|
||||
|
||||
if(log->nast_.on) // jesli zabezpieczenie aktywne
|
||||
{
|
||||
przelicz_1200Hz_1(log);
|
||||
|
||||
//Sprawdzenie pobudzenia w stabilizowanej strefie dzialania
|
||||
|
||||
|
||||
kryterium3(log,log->Ir1_,log->Ih1_,&log->P_.Pb1);
|
||||
kryterium3(log,log->Ir2_,log->Ih2_,&log->P_.Pb2);
|
||||
kryterium3(log,log->Ir3_,log->Ih3_,&log->P_.Pb3);
|
||||
|
||||
przelicz_1200Hz_2(log);
|
||||
} else {
|
||||
*log->Ir1=0;
|
||||
*log->Ir2=0;
|
||||
*log->Ir3=0;
|
||||
*log->Ih1=0;
|
||||
*log->Ih2=0;
|
||||
*log->Ih3=0;
|
||||
*log->Ir_L1_ortb=0;
|
||||
*log->Ir_L2_ortb=0;
|
||||
*log->Ir_L3_ortb=0;
|
||||
//*log->Ih_L1_ortb=0;
|
||||
//*log->Ih_L2_ortb=0;
|
||||
//*log->Ih_L3_ortb=0;
|
||||
*log->I2h1=0;
|
||||
*log->I2h2=0;
|
||||
*log->I2h3=0;
|
||||
*log->I5h1=0;
|
||||
*log->I5h2=0;
|
||||
*log->I5h3=0;
|
||||
clear_struct(&log->P);
|
||||
clear_struct(&log->Pf1);
|
||||
clear_struct(&log->Pf2);
|
||||
clear_struct(&log->Pf3);
|
||||
clear_struct(&log->W);
|
||||
clear_struct(&log->Z);
|
||||
clear_struct(&log->Zw1);
|
||||
clear_struct(&log->Zw2);
|
||||
clear_struct(&log->Zw3);
|
||||
clear_struct(&log->BL2h1);
|
||||
clear_struct(&log->BL2h2);
|
||||
clear_struct(&log->BL2h3);
|
||||
clear_struct(&log->BL5h1);
|
||||
clear_struct(&log->BL5h2);
|
||||
clear_struct(&log->BL5h3);
|
||||
}
|
||||
}
|
||||
49
src/Diff_2.h
Normal file
49
src/Diff_2.h
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Diff_2.h
|
||||
*
|
||||
* Created on: 08-05-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef DIFF_2_H_
|
||||
#define DIFF_2_H_
|
||||
|
||||
#include "Diff.h"
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
struct diff_2_params
|
||||
{
|
||||
u32 bity; ///< nastawy bitowe;
|
||||
|
||||
u32 Tr_zas;///<strona zasilania ukladu zabezpieczenia rożnicowego
|
||||
u32 GrP1; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia GN (1)
|
||||
u32 GrP2; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia SN (2)
|
||||
u32 GrP3; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia SN (3)
|
||||
|
||||
double Iro;///< poczatkowy prad rozruchowy
|
||||
double Ir;///< graniczny prad rozruchowy
|
||||
double Ihg; ///< graniczny prad stabilizacji
|
||||
double Ihd;///< prad rozruchowy blokady czasowej pradu stabilizujacego
|
||||
double tbld; ///< czas blokady dzialania po opuszczeniu strefy blokady czasowej
|
||||
double rd; ///< przesuniecie strefy blokady czasowej od strefy dzialania
|
||||
double kh1;///< wspolczynnik stabilizacji prosta 2
|
||||
double t;///< czas opoznienia dzialania
|
||||
double kp;///< wspolczynnik powrotu
|
||||
double k_2h;///< wspolczynnik blokowania druga harmoniczna
|
||||
double k_5h;///< wspolczynnik blokowania piata harmoniczna
|
||||
double PT12;///<przekladnia uzwojen 1-2 transformatora
|
||||
double PT13;///<przekladnia uzwojen 1-3 transformatora
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct diff_2_args
|
||||
{
|
||||
struct diff_io io;
|
||||
struct diff_2_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void diff_2(void *args, void *logic);
|
||||
extern int diff_2_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* DIFF_1_H_ */
|
||||
791
src/LMZ.c
Normal file
791
src/LMZ.c
Normal file
@@ -0,0 +1,791 @@
|
||||
/*
|
||||
* LMZ.c
|
||||
*
|
||||
* Created on: 23-05-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "helper.h"
|
||||
#include "LMZ.h"
|
||||
|
||||
|
||||
int LMZ_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct LMZ_args *args = (struct LMZ_args *)arguments;
|
||||
struct LMZ_logic *log = (struct LMZ_logic *)logic;
|
||||
struct analog_in_params *pwi,*pwu,*pwio2;
|
||||
|
||||
if(set_pointer_in_ptr(args->io.we_zdist_ptr_in,(u32 *)&log->nast_.WYA))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.we_zdistl_p1_in,&log->WE_ZDistL_Pzf[0]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.we_zdistl_p1w_in,&log->WE_ZDistL_Pzf[1]))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.ioii_orta_float_in,&log->IoII_orta))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.ioii_ortb_float_in,&log->IoII_ortb))
|
||||
return -1;
|
||||
if(set_pointer_in_ptr(args->io.ioii_params_ptr_in,(u32 *)&log->IoII_params))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.clr_in,&log->clr))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.p_out,&log->P))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.distance_float_out,&log->distance))
|
||||
return -1;
|
||||
|
||||
#ifdef LMZ_DEBUG
|
||||
if(set_float_ptr(args->io.debug_out,&log->debug))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.debug1_out,&log->debug1))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.debug2_out,&log->debug2))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.debug3_out,&log->debug3))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.debug4_out,&log->debug4))
|
||||
return -1;
|
||||
#endif
|
||||
log->nast_.on_ = (args->params.bity & 0x0001) ? 1 : 0;
|
||||
log->nast_.L2t = (args->params.bity & 0x0002) ? 1 : 0;
|
||||
|
||||
|
||||
pwu = log->nast_.WYA->Zdist_dw->log_ptr->param_U;
|
||||
pwi = log->nast_.WYA->Zdist_dw->log_ptr->param_I;
|
||||
pwio2 = log->IoII_params;
|
||||
|
||||
|
||||
log->nast_.a.r = args->params.R1 * pwi->znam_pierw / pwu->znam_pierw;
|
||||
log->nast_.a.i = -args->params.X1 * pwi->znam_pierw / pwu->znam_pierw;
|
||||
log->nast_.b.r = (args->params.R0 - args->params.R1) * pwi->znam_pierw / pwu->znam_pierw;
|
||||
log->nast_.b.i = -(args->params.X0 - args->params.X1) * pwi->znam_pierw / pwu->znam_pierw;
|
||||
log->nast_.c.r = args->params.Rm * pwio2->znam_pierw / pwu->znam_pierw;
|
||||
log->nast_.c.i = -args->params.Xm * pwio2->znam_pierw / pwu->znam_pierw;
|
||||
|
||||
log->nast_.kziem.r = ((args->params.R0 / args->params.R1)-1)/3;
|
||||
log->nast_.kziem.i = -((args->params.X0 / args->params.X1)-1)/3;
|
||||
|
||||
if(log->nast_.L2t==0)
|
||||
{
|
||||
log->nast_.c.r = 0;
|
||||
log->nast_.c.i = 0;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
Wylicza iloczyn dwoch liczb zespolonych
|
||||
*/
|
||||
struct zespolona p_z(struct zespolona *a,
|
||||
struct zespolona *b)
|
||||
{
|
||||
struct zespolona result;
|
||||
result.r = a->r * b->r - a->i * b->i;
|
||||
result.i = a->r * b->i + a->i * b->r;
|
||||
return(result);
|
||||
}
|
||||
|
||||
/**
|
||||
Wylicza iloczyn dwoch liczb zespolonych
|
||||
*/
|
||||
struct zespolona dziel(struct zespolona *a,
|
||||
struct zespolona *b)
|
||||
{
|
||||
struct zespolona result;
|
||||
result.r = ((a->r * b->r) + (a->i * b->i))/((b->r * b->r) +(b->i * b->i));
|
||||
result.i = ((a->i * b->r) - (a->r * b->i))/((b->r * b->r) +(b->i * b->i));
|
||||
return(result);
|
||||
}
|
||||
|
||||
/**
|
||||
Wylicza dane dla odlegoci w ptli jednofazowej
|
||||
*/
|
||||
float
|
||||
wylicz_dane_1f(struct LMZ_logic *log,
|
||||
u16 nr_pr, //indeks pooenia wektora wyliczanych danych w buforze
|
||||
u16 nr_I //numer prdu wejciowego
|
||||
)
|
||||
{
|
||||
struct zespolona temp;
|
||||
struct zespolona loc1,loc2,loc3;
|
||||
struct zespolona *i1,*ip;
|
||||
float loc4;
|
||||
|
||||
struct zespolona imped;
|
||||
struct zespolona k3io;
|
||||
|
||||
|
||||
i1 = &log->dw.dp[nr_pr].IL1 + nr_I;
|
||||
ip = &log->dw.Im[nr_pr % (MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS)].IL1 + nr_I;
|
||||
|
||||
loc4 = (float)1.0 / (i1->r * i1->r + i1->i * i1->i);
|
||||
loc1.r = i1->r * loc4;
|
||||
loc1.i = (-i1->i) * loc4;
|
||||
|
||||
loc2 = p_z(&log->dw.dp[nr_pr].Io,&log->nast_.b);
|
||||
loc3 = p_z(&log->dw.dp[nr_pr].Io2,&log->nast_.c);
|
||||
loc2.r += loc3.r;
|
||||
loc2.i += loc3.i;
|
||||
loc3 = p_z(&loc2,&loc1);
|
||||
log->dw.zz.r = log->nast_.a.r - loc3.r;
|
||||
log->dw.zz.i = log->nast_.a.i - loc3.i;
|
||||
|
||||
log->dw.zi = *i1;
|
||||
|
||||
log->dw.zibis.r = i1->r - ip->r;
|
||||
log->dw.zibis.i = i1->i - ip->i;
|
||||
|
||||
float ignac = 1;
|
||||
|
||||
temp = p_z(&log->dw.zz,&log->dw.zi);
|
||||
|
||||
float wynik = ( ignac * (log->dw.zu.i * log->dw.zibis.r - log->dw.zu.r * log->dw.zibis.i )
|
||||
/ (temp.i * log->dw.zibis.r - temp.r * log->dw.zibis.i ));
|
||||
|
||||
return wynik;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Wylicza dane dla odlegoci w ptli midzyfazowej
|
||||
*/
|
||||
float wylicz_dane_mf(struct LMZ_logic *log,
|
||||
u16 nr_pr, //indeks pooenia wektora wyliczanych danych w buforze
|
||||
u16 nr_I1, //numer prdu wejciowego 1
|
||||
u16 nr_I2 //numer prdu wejciowego 2
|
||||
)
|
||||
{
|
||||
struct zespolona temp;
|
||||
struct zespolona *i1,*ip1;
|
||||
struct zespolona *i2,*ip2;
|
||||
|
||||
i1 = &log->dw.dp[nr_pr].IL1 + nr_I1;
|
||||
ip1 = &log->dw.Im[nr_pr % (MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS)].IL1 + nr_I1;
|
||||
i2 = &log->dw.dp[nr_pr].IL1 + nr_I2;
|
||||
ip2 = &log->dw.Im[nr_pr % (MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS)].IL1 + nr_I2;
|
||||
|
||||
log->dw.zz = log->nast_.a;
|
||||
|
||||
log->dw.zi.r = i1->r - i2->r;
|
||||
log->dw.zi.i = i1->i - i2->i;
|
||||
|
||||
log->dw.zibis.r = i1->r - i2->r - ip1->r + ip2->r;
|
||||
log->dw.zibis.i = i1->i - i2->i - ip1->i + ip2->i;
|
||||
|
||||
temp = p_z(&log->dw.zz,&log->dw.zi);
|
||||
|
||||
return( (log->dw.zu.i * log->dw.zibis.r - log->dw.zu.r * log->dw.zibis.i )
|
||||
/ (temp.i * log->dw.zibis.r - temp.r * log->dw.zibis.i ));
|
||||
|
||||
}
|
||||
|
||||
void zapisz_p(struct LMZ_logic *log)
|
||||
{
|
||||
float *wsk;
|
||||
int i;
|
||||
|
||||
log->dw.wsk_buf++;
|
||||
|
||||
for(i=0;i<6;i++)
|
||||
{
|
||||
log->dw.P[log->dw.wsk_buf][i] = (log->nast_.WYA->Zdist_dw->P[0][i] || log->nast_.WYA->Zdist_dw->P[1][i])?1:0;
|
||||
}
|
||||
|
||||
wsk = &log->dw.dp[log->dw.wsk_buf].IL1.r;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->I1_orta;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->I1_ortb;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->I2_orta;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->I2_ortb;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->I3_orta;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->I3_ortb;
|
||||
wsk++;
|
||||
*wsk = -*log->nast_.WYA->Zdist_dw->log_ptr->sI0_orta;//poprawiono
|
||||
wsk++;
|
||||
*wsk = -*log->nast_.WYA->Zdist_dw->log_ptr->sI0_ortb;//poprawiono
|
||||
wsk++;
|
||||
*wsk = *log->IoII_orta;
|
||||
wsk++;
|
||||
*wsk = *log->IoII_ortb;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->U1_orta;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->U1_ortb;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->U2_orta;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->U2_ortb;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->U3_orta;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->U3_ortb;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->U12_orta;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->U12_ortb;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->U23_orta;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->U23_ortb;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->U31_orta;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->U31_ortb;
|
||||
}
|
||||
|
||||
void zapisz_pre(struct LMZ_logic *log)
|
||||
{
|
||||
float *wsk;
|
||||
|
||||
wsk = &log->dw.Ip[log->dw.wsk_buf_pre].IL1.r;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->I1_orta;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->I1_ortb;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->I2_orta;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->I2_ortb;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->I3_orta;
|
||||
wsk++;
|
||||
*wsk = *log->nast_.WYA->Zdist_dw->log_ptr->I3_ortb;
|
||||
|
||||
log->dw.wsk_buf_pre++;
|
||||
if(log->dw.wsk_buf_pre>MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS*3-1) log->dw.wsk_buf_pre = 0;
|
||||
}
|
||||
|
||||
|
||||
void LMZ(void *arguments, void *logic)
|
||||
{
|
||||
struct LMZ_logic *log = (struct LMZ_logic *)logic;
|
||||
u16 local;
|
||||
int k;
|
||||
|
||||
if(log->nast_.on_) // jesli zabezpieczenie aktywne
|
||||
{
|
||||
zapisz_pre(log);
|
||||
switch(log->status_rej_LMZ)
|
||||
{
|
||||
case oczekiwanie:
|
||||
|
||||
if(check_struct(&log->WE_ZDistL_Pzf[0]) || check_struct(&log->WE_ZDistL_Pzf[1]))
|
||||
{
|
||||
log->status_rej_LMZ = sledzenie;// stan_nieustalony;
|
||||
log->dw.wsk_buf = 0; //dodane
|
||||
zapisz_p(log);//dodane
|
||||
|
||||
//dw.czas_ = time;
|
||||
log->dw.licz1 = 10;//20;
|
||||
|
||||
if (log->dw.wsk_buf_pre == 0)
|
||||
local = MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS*3-2;
|
||||
else if (log->dw.wsk_buf_pre == 1)
|
||||
local = MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS*3-1;
|
||||
else
|
||||
local = log->dw.wsk_buf_pre - 2 ;
|
||||
|
||||
|
||||
for(k=0;k<MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS;k++)
|
||||
{
|
||||
if (local>MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS*3-1) local -= MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS*3;
|
||||
log->dw.Im[k] = log->dw.Ip[local];
|
||||
local++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case stan_nieustalony:
|
||||
if(log->dw.licz1>LOOP_CYCLE_MS)
|
||||
log->dw.licz1-=LOOP_CYCLE_MS;
|
||||
else
|
||||
log->dw.licz1=0;
|
||||
|
||||
if(!log->dw.licz1)
|
||||
{
|
||||
if(check_struct(&log->WE_ZDistL_Pzf[0]) || check_struct(&log->WE_ZDistL_Pzf[1]))
|
||||
{
|
||||
log->status_rej_LMZ = sledzenie;
|
||||
log->dw.wsk_buf = 0;
|
||||
zapisz_p(log);
|
||||
log->dw.licz1 = 10;
|
||||
} else {
|
||||
log->status_rej_LMZ = oczekiwanie;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case sledzenie:
|
||||
|
||||
zapisz_p(log);
|
||||
|
||||
|
||||
if (log->dw.wsk_buf==MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS*5-1)
|
||||
{
|
||||
log->status_rej_LMZ = blokada;
|
||||
log->dw.wsk_rej = 1;
|
||||
} else {
|
||||
if(!check_struct(&log->WE_ZDistL_Pzf[0]) && !check_struct(&log->WE_ZDistL_Pzf[1]))
|
||||
{
|
||||
if(log->dw.licz1>LOOP_CYCLE_MS)
|
||||
log->dw.licz1-=LOOP_CYCLE_MS;
|
||||
else
|
||||
log->dw.licz1=0;
|
||||
} else {
|
||||
log->dw.licz1 = 10;
|
||||
}
|
||||
if(!log->dw.licz1)
|
||||
{
|
||||
if (log->dw.wsk_buf<MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS)
|
||||
{
|
||||
log->status_rej_LMZ = oczekiwanie;
|
||||
} else {
|
||||
log->status_rej_LMZ = blokada;
|
||||
log->dw.wsk_rej = 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case blokada:
|
||||
if (!log->dw.wsk_rej && !(check_struct(&log->WE_ZDistL_Pzf[0]) || check_struct(&log->WE_ZDistL_Pzf[1])))
|
||||
{
|
||||
log->status_rej_LMZ = oczekiwanie;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LMZ_20hz(void *arguments, void *logic)
|
||||
{
|
||||
struct LMZ_logic *log = (struct LMZ_logic *)logic;
|
||||
u16 licz[6], temp, temp1;
|
||||
u16 czas_mf, czas_1f, zwarcie_mf, zwarcie_1f, roznica;
|
||||
u16 czas_4, czas_5, czas_6;
|
||||
float local;
|
||||
u16 k;
|
||||
int i;
|
||||
u8 startbuf = 0;
|
||||
float sr1, sr2, sr3, iloraz;
|
||||
|
||||
if(log->dw.wsk_rej) // przypisanie parametrow zaklocenia jesli zebra dostatecznie wielk ilo danych
|
||||
{
|
||||
//wyliczanie petli dla strefy 1
|
||||
|
||||
licz[0]=0;
|
||||
licz[1]=0;
|
||||
licz[2]=0;
|
||||
licz[3]=0;
|
||||
licz[4]=0;
|
||||
licz[5]=0;
|
||||
|
||||
for(i=0;i<log->dw.wsk_buf;i++)
|
||||
{
|
||||
//okrelenie ktra ptla bya pobudzona najduej (kryterium wyboru)
|
||||
for(k=0;k<6;k++)
|
||||
{
|
||||
if(log->dw.P[i][k]) licz[k]++;
|
||||
}
|
||||
}
|
||||
temp = 0;
|
||||
temp1 = 0;
|
||||
czas_1f = 0;
|
||||
czas_mf = 0;
|
||||
zwarcie_mf = 0;
|
||||
zwarcie_1f = 0;
|
||||
|
||||
//zwarcia miedzyfazowe
|
||||
for(k=3;k<6;k++)
|
||||
{
|
||||
if(licz[k]>temp1)
|
||||
{
|
||||
temp1 = licz[k];
|
||||
temp = k+1;
|
||||
czas_mf = temp1;
|
||||
zwarcie_mf = k+1;
|
||||
}
|
||||
}
|
||||
|
||||
czas_4 = licz[3];
|
||||
czas_5 = licz[4];
|
||||
czas_6 = licz[5];
|
||||
|
||||
//zwarcia jednofazowe
|
||||
for(k=0;k<3;k++)
|
||||
{
|
||||
if(licz[k]>czas_1f)
|
||||
{
|
||||
czas_1f = licz[k];
|
||||
zwarcie_1f = k+1;
|
||||
}
|
||||
}
|
||||
|
||||
for(k=0;k<3;k++)
|
||||
{
|
||||
if(licz[k]>temp1)
|
||||
{
|
||||
temp1 = licz[k];
|
||||
temp = k+1;
|
||||
}
|
||||
}
|
||||
|
||||
if (czas_1f > czas_mf)
|
||||
{
|
||||
roznica = czas_1f - czas_mf;
|
||||
}
|
||||
else
|
||||
{
|
||||
roznica = czas_mf - czas_1f;
|
||||
}
|
||||
|
||||
//wyznaczanie przedzialu z ktorego beda wyioczane dane
|
||||
if(log->dw.wsk_buf<25)
|
||||
{
|
||||
startbuf=0;
|
||||
log->dw.wsk_buf-=(log->dw.wsk_buf-20);
|
||||
}
|
||||
else if(log->dw.wsk_buf>=25 && log->dw.wsk_buf<35)
|
||||
{
|
||||
startbuf=(log->dw.wsk_buf-25);
|
||||
log->dw.wsk_buf-=5;
|
||||
}
|
||||
else if(log->dw.wsk_buf>=35 && log->dw.wsk_buf<40)
|
||||
{
|
||||
startbuf=5;
|
||||
log->dw.wsk_buf-=10;
|
||||
}
|
||||
else if(log->dw.wsk_buf>=40 && log->dw.wsk_buf<50)
|
||||
{
|
||||
startbuf=10;
|
||||
log->dw.wsk_buf-=10;
|
||||
}
|
||||
else if(log->dw.wsk_buf>=50 && log->dw.wsk_buf<=60)
|
||||
{
|
||||
startbuf=15;
|
||||
log->dw.wsk_buf-=15;
|
||||
}
|
||||
else
|
||||
{
|
||||
startbuf=20;
|
||||
log->dw.wsk_buf-=20;
|
||||
}
|
||||
|
||||
sr1 = 0;
|
||||
sr2 = 0;
|
||||
sr3 = 0;
|
||||
|
||||
//wyliczenie sredniej wartosci pradow w oknie zwarcia
|
||||
for(i=0;i<(log->dw.wsk_buf - startbuf);i++)
|
||||
{
|
||||
float r = log->dw.dp[i+startbuf].IL1.r;
|
||||
float ii = log->dw.dp[i+startbuf].IL1.i;
|
||||
float esk = sqrt((r * r + ii * ii) * 0.5);
|
||||
sr1 +=esk;
|
||||
|
||||
r = log->dw.dp[i+startbuf].IL2.r;
|
||||
ii = log->dw.dp[i+startbuf].IL2.i;
|
||||
esk = sqrt((r * r + ii * ii) * 0.5);
|
||||
sr2 +=esk;
|
||||
|
||||
r = log->dw.dp[i+startbuf].IL3.r;
|
||||
ii = log->dw.dp[i+startbuf].IL3.i;
|
||||
esk = sqrt((r * r + ii * ii) * 0.5);
|
||||
sr3 +=esk;
|
||||
}
|
||||
sr1 = sr1 / (log->dw.wsk_buf - startbuf);
|
||||
sr2 = sr2 / (log->dw.wsk_buf - startbuf);
|
||||
sr3 = sr3 / (log->dw.wsk_buf - startbuf);
|
||||
|
||||
float procent = 1;
|
||||
|
||||
#ifdef LMZ_DEBUG
|
||||
*log->debug1 = (float)czas_1f;
|
||||
*log->debug2 = (float)czas_4;
|
||||
*log->debug3 = (float)czas_5;
|
||||
*log->debug4 = (float)czas_6;
|
||||
#endif
|
||||
|
||||
float d1 = 1;
|
||||
float d2 = 1;
|
||||
|
||||
//gdy zwarcie jest miedzyfazowe i sa pobudzone jednoczesnie dwie petle, wybierz wlasciwa
|
||||
//na podstawie pradow
|
||||
if (czas_mf > 20/LOOP_CYCLE_MS) //zwarcie miedzyfazowe
|
||||
{
|
||||
if ((czas_4 > 20/LOOP_CYCLE_MS) && (czas_5 > 20/LOOP_CYCLE_MS) && (czas_6 > 20/LOOP_CYCLE_MS))
|
||||
{
|
||||
//zwarcie 3 fazowe nic nie rob
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((czas_4 > 20/LOOP_CYCLE_MS) && (czas_5 > 20/LOOP_CYCLE_MS)) //L1L2 i L2L3
|
||||
{
|
||||
if (czas_4 > czas_5)
|
||||
procent = (float)czas_5 / (float)czas_4;
|
||||
else
|
||||
procent = (float)czas_4 / (float)czas_5;
|
||||
|
||||
if (procent > 0.7)
|
||||
{
|
||||
float iloraz12 = 1;
|
||||
float iloraz23 = 1;
|
||||
d1 = sr1;
|
||||
d2 = sr2;
|
||||
if (d1 > d2)
|
||||
iloraz12 = d1 / d2;
|
||||
else
|
||||
iloraz12 = d2 / d1;
|
||||
|
||||
d1 = sr2;
|
||||
d2 = sr3;
|
||||
if (d1 > d2)
|
||||
iloraz23 = d1 / d2;
|
||||
else
|
||||
iloraz23 = d2 / d1;
|
||||
|
||||
if (iloraz12 > iloraz23)
|
||||
{
|
||||
temp = 5;
|
||||
zwarcie_mf = 5;
|
||||
}
|
||||
else
|
||||
{
|
||||
temp = 4;
|
||||
zwarcie_mf = 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((czas_4 > 20/LOOP_CYCLE_MS) && (czas_6 > 20/LOOP_CYCLE_MS)) //L1L2 i L3L1
|
||||
{
|
||||
if (czas_4 > czas_6)
|
||||
procent = (float)czas_6 / (float)czas_4;
|
||||
else
|
||||
procent = (float)czas_4 / (float)czas_6;
|
||||
|
||||
if (procent > 0.7)
|
||||
{
|
||||
float iloraz12 = 1;
|
||||
float iloraz31 = 1;
|
||||
d1 = sr1;
|
||||
d2 = sr2;
|
||||
if (d1 > d2)
|
||||
iloraz12 = d1 / d2;
|
||||
else
|
||||
iloraz12 = d2 / d1;
|
||||
|
||||
d1 = sr3;
|
||||
d2 = sr1;
|
||||
if (d1 > d2)
|
||||
iloraz31 = d1 / d2;
|
||||
else
|
||||
iloraz31 = d2 / d1;
|
||||
|
||||
if (iloraz12 > iloraz31)
|
||||
{
|
||||
temp = 6;
|
||||
zwarcie_mf = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
temp = 4;
|
||||
zwarcie_mf = 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((czas_5 > 20/LOOP_CYCLE_MS) && (czas_6 > 20/LOOP_CYCLE_MS)) //L2L3 i L3L1
|
||||
{
|
||||
if (czas_5 > czas_6)
|
||||
procent = (float)czas_6 / (float)czas_5;
|
||||
else
|
||||
procent = (float)czas_5 / (float)czas_6;
|
||||
|
||||
if (procent > 0.7)
|
||||
{
|
||||
float iloraz23 = 1;
|
||||
float iloraz31 = 1;
|
||||
|
||||
d1 = sr2;
|
||||
d2 = sr3;
|
||||
|
||||
if (d1 > d2)
|
||||
iloraz23 = d1 / d2;
|
||||
else
|
||||
iloraz23 = d2 / d1;
|
||||
|
||||
d1 = sr3;
|
||||
d2 = sr1;
|
||||
|
||||
if (d1 > d2)
|
||||
iloraz31 = d1 / d2;
|
||||
else
|
||||
iloraz31 = d2 / d1;
|
||||
|
||||
if (iloraz23 > iloraz31)
|
||||
{
|
||||
temp = 6;
|
||||
zwarcie_mf = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
temp = 5;
|
||||
zwarcie_mf = 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (zwarcie_mf == 4)
|
||||
{
|
||||
d1 = sr1;
|
||||
d2 = sr2;
|
||||
}
|
||||
else if (zwarcie_mf == 5)
|
||||
{
|
||||
d1 = sr2;
|
||||
d2 = sr3;
|
||||
}
|
||||
if (zwarcie_mf == 6)
|
||||
{
|
||||
d1 = sr3;
|
||||
d2 = sr1;
|
||||
}
|
||||
|
||||
if (d1 > d2)
|
||||
iloraz = d1 / d2;
|
||||
else
|
||||
iloraz = d2 / d1;
|
||||
|
||||
procent = 1;
|
||||
|
||||
if (czas_1f != 0)
|
||||
procent = (float)czas_mf / (float)czas_1f;
|
||||
|
||||
if ((czas_mf > 20/LOOP_CYCLE_MS) && (czas_1f > 20/LOOP_CYCLE_MS) && (procent > 0.5) && (zwarcie_mf != 0))
|
||||
{
|
||||
if (iloraz < 3)
|
||||
temp = zwarcie_mf;
|
||||
else
|
||||
temp = zwarcie_1f;
|
||||
}
|
||||
|
||||
#ifdef LMZ_DEBUG
|
||||
*log->debug = temp;
|
||||
#endif
|
||||
|
||||
switch(temp)
|
||||
{
|
||||
case 1://zwarcie RE
|
||||
for(i=0;i<(log->dw.wsk_buf - startbuf);i++)
|
||||
{
|
||||
log->dw.zu = log->dw.dp[i+startbuf].UL1;
|
||||
log->dw.odl_b[i] = wylicz_dane_1f(log,i+startbuf,0);
|
||||
}
|
||||
break;
|
||||
case 2://zwarcie SE
|
||||
for(i=0;i<(log->dw.wsk_buf - startbuf);i++)
|
||||
{
|
||||
log->dw.zu = log->dw.dp[i+startbuf].UL2;
|
||||
log->dw.odl_b[i] = wylicz_dane_1f(log,i+startbuf,1);
|
||||
}
|
||||
break;
|
||||
case 3://zwarcie TE
|
||||
for(i=0;i<(log->dw.wsk_buf-startbuf);i++)
|
||||
{
|
||||
log->dw.zu = log->dw.dp[i+startbuf].UL3;
|
||||
log->dw.odl_b[i] = wylicz_dane_1f(log,i+startbuf,2);
|
||||
}
|
||||
break;
|
||||
case 4://zwarcie RS
|
||||
for(i=0;i<(log->dw.wsk_buf-startbuf);i++)
|
||||
{
|
||||
log->dw.zu = log->dw.dp[i+startbuf].UL12;
|
||||
log->dw.odl_b[i] = wylicz_dane_mf(log,i+startbuf,0,1);
|
||||
}
|
||||
break;
|
||||
case 5://zwarcie ST
|
||||
for(i=0;i<(log->dw.wsk_buf-startbuf);i++)
|
||||
{
|
||||
log->dw.zu = log->dw.dp[i+startbuf].UL23;
|
||||
log->dw.odl_b[i] = wylicz_dane_mf(log,i+startbuf,1,2);
|
||||
}
|
||||
break;
|
||||
case 6://zwarcie TE
|
||||
for(i=0;i<(log->dw.wsk_buf-startbuf);i++)
|
||||
{
|
||||
log->dw.zu = log->dw.dp[i+startbuf].UL31;
|
||||
log->dw.odl_b[i] = wylicz_dane_mf(log,i+startbuf,2,0);
|
||||
}
|
||||
break;
|
||||
case 0: //error
|
||||
break;
|
||||
}
|
||||
|
||||
////---------------------------
|
||||
|
||||
//szukanie wyniku - mediana z wyliczonych wartoci
|
||||
for(i=0;i<(log->dw.wsk_buf-startbuf);i++)
|
||||
{
|
||||
temp1 = i+1;
|
||||
while(temp1)
|
||||
{
|
||||
temp1--;
|
||||
if(log->dw.odl_b[temp1+1]>log->dw.odl_b[temp1])
|
||||
{
|
||||
local = log->dw.odl_b[temp1];
|
||||
log->dw.odl_b[temp1] = log->dw.odl_b[temp1+1];
|
||||
log->dw.odl_b[temp1+1] = local;
|
||||
}
|
||||
else
|
||||
{
|
||||
temp1 = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(temp)
|
||||
{
|
||||
set_struct(&log->P);
|
||||
if((log->dw.wsk_buf-startbuf) % 2)
|
||||
{
|
||||
*log->distance=log->dw.odl_b[(log->dw.wsk_buf-startbuf)/2 + 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
*log->distance=(log->dw.odl_b[(log->dw.wsk_buf-startbuf)/2 + 1] + log->dw.odl_b[(log->dw.wsk_buf-startbuf)/2]) / 2;
|
||||
}
|
||||
//------------------------------------------------
|
||||
}
|
||||
|
||||
log->dw.wsk_rej = 0; // zerowanie wskaznika powstania nowego zaklocenia
|
||||
}
|
||||
|
||||
if(check_struct(&log->clr))
|
||||
{
|
||||
*log->distance=0;
|
||||
clear_struct(&log->P);
|
||||
|
||||
}
|
||||
}
|
||||
143
src/LMZ.h
Normal file
143
src/LMZ.h
Normal file
@@ -0,0 +1,143 @@
|
||||
/*
|
||||
* LMZ.h
|
||||
*
|
||||
* Created on: 23-05-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef LMZ_H_
|
||||
#define LMZ_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "ZDistA.h"
|
||||
#include "analog_in.h"
|
||||
|
||||
struct zespolona
|
||||
{
|
||||
float r;
|
||||
float i;
|
||||
};
|
||||
|
||||
struct Nastawy_przeliczone_LMZ
|
||||
{
|
||||
struct Wyjscia_ZDistA *WYA;
|
||||
//R_ZDistL::dane_wewnetrzne *WYL;
|
||||
struct zespolona a; //wsp鏊czynnik
|
||||
struct zespolona b; //wsp鏊czynnik
|
||||
struct zespolona c; //wsp鏊czynnik
|
||||
struct zespolona kziem; //wsp鏊czynnik
|
||||
u8 on_; ///< wartosc nastawy aktywnosci przekaznika 1- aktywny
|
||||
u8 L2t; ///< linia dwutorowa
|
||||
};
|
||||
|
||||
struct dane_probek
|
||||
{
|
||||
struct zespolona IL1; // dane pr鉅u faza 1
|
||||
struct zespolona IL2; // dane pr鉅u faza 2
|
||||
struct zespolona IL3; // dane pr鉅u faza 3
|
||||
struct zespolona Io; // dane pr鉅u zerpwego
|
||||
struct zespolona Io2; // dane pr鉅u zerowego toru r闚noleg貫go
|
||||
struct zespolona UL1; //napi璚ie faza 1
|
||||
struct zespolona UL2; //napi璚ie faza 2
|
||||
struct zespolona UL3; //napi璚ie faza 3
|
||||
struct zespolona UL12; //napi璚ie miedzyfazowe 1-2
|
||||
struct zespolona UL23; //napi璚ie mi璠zyfazowe 2-3
|
||||
struct zespolona UL31; //napi璚ie miedzyfazowe 3-1
|
||||
};
|
||||
|
||||
struct prad_pz
|
||||
{
|
||||
struct zespolona IL1;//bufor pradu z przed zwarcia faza 1
|
||||
struct zespolona IL2;//bufor pradu z przed zwarcia faza 2
|
||||
struct zespolona IL3;//bufor pradu z przed zwarcia faza 3
|
||||
};
|
||||
|
||||
struct dane_wewnetrzne
|
||||
{
|
||||
// Wyjscia_rejestratora R; ///< dane ostatniego zak堯cenia
|
||||
// Time czas_; // moment wystapienia zaklocenia (rejestr tymczasowy - przed zapisem)
|
||||
short wsk_buf;//aktualne polozenie w buforze pr鏏ek (w trakcie rejestracji)
|
||||
short wsk_buf_pre;//aktualne polozenie w buforze pr鏏ek z przed zwarcia
|
||||
short licz1;
|
||||
u16 wsk_p; //wskaznik do okreslenia pradu
|
||||
float dl_; // dlugosc czasu trwania zaklocenia (rejestr tymczasowy - przed zapisem)
|
||||
float odl_b[MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS*5];//odleg這𨀣 pojedynczej iteracji
|
||||
struct dane_probek dp[MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS*5]; // ortogonalne kana這w wejsciowych
|
||||
struct prad_pz Ip[MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS*3]; //bufor biezacy pamietania probek z przed zwarcia
|
||||
struct prad_pz Im[MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS]; //bufor pamietania probek z przed zwarcia "zatrza𦨭i皻a"
|
||||
u8 P[MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS*5][6];
|
||||
struct zespolona zz;
|
||||
struct zespolona zi;
|
||||
struct zespolona zu;
|
||||
struct zespolona zibis;
|
||||
u8 wsk_rej;
|
||||
};
|
||||
|
||||
struct LMZ_logic
|
||||
{
|
||||
struct binary_io WE_ZDistL_Pzf[2];
|
||||
float *IoII_orta;
|
||||
float *IoII_ortb;
|
||||
struct analog_in_params *IoII_params;
|
||||
struct binary_io clr;
|
||||
struct binary_io P;
|
||||
float *distance;
|
||||
|
||||
#ifdef LMZ_DEBUG
|
||||
float *debug;
|
||||
float *debug1;
|
||||
float *debug2;
|
||||
float *debug3;
|
||||
float *debug4;
|
||||
#endif
|
||||
|
||||
struct dane_wewnetrzne dw;
|
||||
struct Nastawy_przeliczone_LMZ nast_;// struktura z parametrami
|
||||
enum rej_ost status_rej_LMZ;
|
||||
};
|
||||
|
||||
struct LMZ_io
|
||||
{
|
||||
u32 we_zdist_ptr_in;
|
||||
u32 we_zdistl_p1_in;
|
||||
u32 we_zdistl_p1w_in;
|
||||
u32 ioii_orta_float_in;
|
||||
u32 ioii_ortb_float_in;
|
||||
u32 ioii_params_ptr_in;
|
||||
u32 clr_in;
|
||||
u32 p_out;
|
||||
u32 distance_float_out;
|
||||
|
||||
#ifdef LMZ_DEBUG
|
||||
u32 debug_out;
|
||||
u32 debug1_out;
|
||||
u32 debug2_out;
|
||||
u32 debug3_out;
|
||||
u32 debug4_out;
|
||||
#endif
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct LMZ_params
|
||||
{
|
||||
u32 bity; ///< nastawy bitowe;
|
||||
double R1;///< Rezystancja jednostkowa dla sk豉dowej zgodnej
|
||||
double X1;///<Reaktancja jednostkowa dla sk豉dowej zgodnej
|
||||
double R0;///<Rezystancja jednostkowa dla sk豉dowej zerowej
|
||||
double X0;///<Reaktancja jednostkowa dla sk豉dowej zerowej
|
||||
double Rm;///<Rezystancja jednostkowa dla sk豉dowej wzajemnej
|
||||
double Xm;///<Reaktancja jednostkowa dla sk豉dowej wzajemnej
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct LMZ_args
|
||||
{
|
||||
struct LMZ_io io;
|
||||
struct LMZ_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void LMZ(void *args, void *logic);
|
||||
extern void LMZ_20hz(void *args, void *logic);
|
||||
extern int LMZ_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* LMZ_H_ */
|
||||
410
src/LRW.c
Normal file
410
src/LRW.c
Normal file
@@ -0,0 +1,410 @@
|
||||
/*
|
||||
* LRW.c
|
||||
*
|
||||
* Created on: 15-03-2022
|
||||
* Author:
|
||||
* Pawe Skoczykoda
|
||||
*/
|
||||
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
#include "helper.h"
|
||||
|
||||
|
||||
#include "LRW.h"
|
||||
|
||||
void set_default(void *logic)
|
||||
{
|
||||
struct LRW_logic *log = (struct LRW_logic *)logic;
|
||||
|
||||
log->ret_I_L1 = 0;
|
||||
log->ret_I_L2 = 0;
|
||||
log->ret_I_L3 = 0;
|
||||
log->ret_W_L1 = 0;
|
||||
log->ret_W_L2 = 0;
|
||||
log->ret_W_L3 = 0;
|
||||
log->ret_I_3f = 0;
|
||||
log->ret_W_3f = 0;
|
||||
log->wy_T1 = 0;
|
||||
log->wy_T2 = 0;
|
||||
log->wy_T2_I = 0;
|
||||
log->wy_T2_W = 0;
|
||||
|
||||
log->pob_I_L1 = 0;
|
||||
log->pob_I_L2 = 0;
|
||||
log->pob_I_L3 = 0;
|
||||
log->pob_W_L1 = 0;
|
||||
log->pob_W_L2 = 0;
|
||||
log->pob_W_L3 = 0;
|
||||
log->pob_I_3f = 0;
|
||||
log->pob_W_3f = 0;
|
||||
log->pob_T2_I = 0;
|
||||
log->pob_T2_W = 0;
|
||||
log->wy_pob = 0;
|
||||
|
||||
log->t_I_L1 = 0;
|
||||
log->t_I_L2 = 0;
|
||||
log->t_I_L3 = 0;
|
||||
log->t_W_L1 = 0;
|
||||
log->t_W_L2 = 0;
|
||||
log->t_W_L3 = 0;
|
||||
log->t_I_3f = 0;
|
||||
log->t_W_3f = 0;
|
||||
log->t_I_2 = 0;
|
||||
log->t_W_2 = 0;
|
||||
|
||||
}
|
||||
|
||||
int LRW_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct LRW_args *args = (struct LRW_args *)arguments;
|
||||
struct LRW_logic *log = (struct LRW_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.stan_bl,&log->stan_bl))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.w_on_L1_in,&log->w_on_L1))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.w_on_L2_in,&log->w_on_L2))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.w_on_L3_in,&log->w_on_L3))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.wyl_L1_in,&log->wyl_L1))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.wyl_L2_in,&log->wyl_L2))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.wyl_L3_in,&log->wyl_L3))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.test_in,&log->test))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.retrip_I_L1_out,&log->retrip_I_L1))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.retrip_I_L2_out,&log->retrip_I_L2))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.retrip_I_L3_out,&log->retrip_I_L3))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.retrip_W_L1_out,&log->retrip_W_L1))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.retrip_W_L2_out,&log->retrip_W_L2))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.retrip_W_L3_out,&log->retrip_W_L3))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.retrip_I_3f_out,&log->retrip_I_3f))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.retrip_W_3f_out,&log->retrip_W_3f))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.T2_I_out,&log->T2_I))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.T2_W_out,&log->T2_W))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.T1_out,&log->T1))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.T2_out,&log->T2))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.pob_out,&log->pob))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.I1_float_in,&log->I1))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.I2_float_in,&log->I2))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.I3_float_in,&log->I3))
|
||||
return -1;
|
||||
|
||||
log->nast_.on_ = (args->params.bity & 0x0001)?1:0;
|
||||
log->kryt_pr = (args->params.bity & 0x0002)?1:0;
|
||||
log->kryt_wyl = (args->params.bity & 0x0004)?1:0;
|
||||
log->nast_.full_period = (args->params.bity & 0x0008)?1:0;
|
||||
log->nast_.limit1_ = args->params.Wr_ * args->params.Wr_; // wyliczenie wartosci rozruchowej algorytmu
|
||||
log->nast_.limit2_ = log->nast_.limit1_ * args->params.kp_ * args->params.kp_; // wyliczenie wartosci powrotowej algorytmu
|
||||
|
||||
log->t1_limit = (u32)((args->params.t1_) * 1000 / LOOP_CYCLE_MS);
|
||||
log->t2_limit = (u32)((args->params.t2_) * 1000 / LOOP_CYCLE_MS);
|
||||
|
||||
set_default(log);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void LRW(void *arguments, void *logic)
|
||||
{
|
||||
struct LRW_logic *log = (struct LRW_logic *)logic;
|
||||
|
||||
|
||||
if(log->nast_.on_) // jesli zabezpieczenie aktywne
|
||||
{
|
||||
u8 blokada = check_struct(&log->stan_bl)?1:0;
|
||||
u8 w_on_L1 = check_struct(&log->w_on_L1)?1:0;
|
||||
u8 w_on_L2 = check_struct(&log->w_on_L2)?1:0;
|
||||
u8 w_on_L3 = check_struct(&log->w_on_L3)?1:0;
|
||||
u8 wyl_L1 = check_struct(&log->wyl_L1)?1:0;
|
||||
u8 wyl_L2 = check_struct(&log->wyl_L2)?1:0;
|
||||
u8 wyl_L3 = check_struct(&log->wyl_L3)?1:0;
|
||||
u8 test = check_struct(&log->test)?1:0;
|
||||
|
||||
|
||||
sprawdz_P(&log->dw.pob1,
|
||||
*log->I1>log->nast_.limit1_,
|
||||
*log->I1<log->nast_.limit2_,
|
||||
&log->dw.lp1,
|
||||
log->nast_.full_period?20:3,3); //realizacja przekaznika faza 1
|
||||
|
||||
sprawdz_P(&log->dw.pob2,
|
||||
*log->I2>log->nast_.limit1_,
|
||||
*log->I2<log->nast_.limit2_,
|
||||
&log->dw.lp2,
|
||||
log->nast_.full_period?20:3,3); //realizacja przekaznika faza 2
|
||||
|
||||
sprawdz_P(&log->dw.pob3,
|
||||
*log->I3>log->nast_.limit1_,
|
||||
*log->I3<log->nast_.limit2_,
|
||||
&log->dw.lp3,
|
||||
log->nast_.full_period?20:3,3); //realizacja przekaznika faza 3
|
||||
|
||||
|
||||
log->dw.pob = log->dw.pob1 || log->dw.pob2 || log->dw.pob3;
|
||||
|
||||
log->pob_I_L1 = wyl_L1 && !wyl_L2 && !wyl_L3 && log->dw.pob1 && log->kryt_pr;
|
||||
log->pob_I_L2 = !wyl_L1 && wyl_L2 && !wyl_L3 && log->dw.pob2 && log->kryt_pr;
|
||||
log->pob_I_L3 = !wyl_L1 && !wyl_L2 && wyl_L3 && log->dw.pob3 && log->kryt_pr;
|
||||
|
||||
log->pob_W_L1 = wyl_L1 && !wyl_L2 && !wyl_L3 && w_on_L1 && log->kryt_wyl;
|
||||
log->pob_W_L2 = !wyl_L1 && wyl_L2 && !wyl_L3 && w_on_L2 && log->kryt_wyl;
|
||||
log->pob_W_L3 = !wyl_L1 && !wyl_L2 && wyl_L3 && w_on_L3 && log->kryt_wyl;
|
||||
|
||||
u8 min_2faz = (wyl_L1 && wyl_L2) || (wyl_L2 && wyl_L3) || (wyl_L1 && wyl_L3);
|
||||
u8 suma_on = w_on_L1 || w_on_L2 || w_on_L3;
|
||||
|
||||
log->pob_I_3f = min_2faz && log->dw.pob && log->kryt_pr;
|
||||
log->pob_W_3f = min_2faz && suma_on && log->kryt_wyl;
|
||||
|
||||
log->pob_T2_I = log->pob_I_L1 || log->pob_I_L2 || log->pob_I_L3 || log->pob_I_3f;
|
||||
log->pob_T2_W = log->pob_W_L1 || log->pob_W_L2 || log->pob_W_L3 || log->pob_W_3f;
|
||||
|
||||
//obsluga wejscia testu przekaznika
|
||||
if (czy_test_R() && test)
|
||||
{
|
||||
log->pob_I_L1 = 1;
|
||||
log->pob_I_L2 = 1;
|
||||
log->pob_I_L3 = 1;
|
||||
log->pob_W_L1 = 1;
|
||||
log->pob_W_L2 = 1;
|
||||
log->pob_W_L3 = 1;
|
||||
|
||||
log->pob_I_3f = 1;
|
||||
log->pob_W_3f = 1;
|
||||
|
||||
log->pob_T2_I = 1;
|
||||
log->pob_T2_W = 1;
|
||||
}
|
||||
|
||||
//realizacja blokady dzialania przekaznika
|
||||
if(blokada)
|
||||
{
|
||||
log->dw.pob1 = log->dw.pob2 = log->dw.pob3 = 0;
|
||||
log->pob_I_L1 = 0;
|
||||
log->pob_I_L2 = 0;
|
||||
log->pob_I_L3 = 0;
|
||||
log->pob_W_L1 = 0;
|
||||
log->pob_W_L2 = 0;
|
||||
log->pob_W_L3 = 0;
|
||||
|
||||
log->pob_I_3f = 0;
|
||||
log->pob_W_3f = 0;
|
||||
|
||||
log->pob_T2_I = 0;
|
||||
log->pob_T2_W = 0;
|
||||
}
|
||||
|
||||
log->wy_pob = log->pob_T2_I || log->pob_T2_W;
|
||||
//sekcja timerow
|
||||
|
||||
if (log->pob_I_L1)
|
||||
{
|
||||
if (++log->t_I_L1 > log->t1_limit)
|
||||
{
|
||||
log->ret_I_L1 = 1;
|
||||
log->t_I_L1 = log->t1_limit + 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->t_I_L1 = 0;
|
||||
log->ret_I_L1 = 0;
|
||||
}
|
||||
|
||||
if (log->pob_I_L2)
|
||||
{
|
||||
if (++log->t_I_L2 > log->t1_limit)
|
||||
{
|
||||
log->ret_I_L2 = 1;
|
||||
log->t_I_L2 = log->t1_limit + 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->t_I_L2 = 0;
|
||||
log->ret_I_L2 = 0;
|
||||
}
|
||||
|
||||
if (log->pob_I_L3)
|
||||
{
|
||||
if (++log->t_I_L3 > log->t1_limit)
|
||||
{
|
||||
log->ret_I_L3 = 1;
|
||||
log->t_I_L3 = log->t1_limit + 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->t_I_L3 = 0;
|
||||
log->ret_I_L3 = 0;
|
||||
}
|
||||
|
||||
if (log->pob_W_L1)
|
||||
{
|
||||
if (++log->t_W_L1 > log->t1_limit)
|
||||
{
|
||||
log->ret_W_L1 = 1;
|
||||
log->t_W_L1 = log->t1_limit + 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->t_W_L1 = 0;
|
||||
log->ret_W_L1 = 0;
|
||||
}
|
||||
|
||||
if (log->pob_W_L2)
|
||||
{
|
||||
if (++log->t_W_L2 > log->t1_limit)
|
||||
{
|
||||
log->ret_W_L2 = 1;
|
||||
log->t_W_L2 = log->t1_limit + 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->t_W_L2 = 0;
|
||||
log->ret_W_L2 = 0;
|
||||
}
|
||||
|
||||
if (log->pob_W_L3)
|
||||
{
|
||||
if (++log->t_W_L3 > log->t1_limit)
|
||||
{
|
||||
log->ret_W_L3 = 1;
|
||||
log->t_W_L3 = log->t1_limit + 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->t_W_L3 = 0;
|
||||
log->ret_W_L3 = 0;
|
||||
}
|
||||
|
||||
if (log->pob_I_3f)
|
||||
{
|
||||
if (++log->t_I_3f > log->t1_limit)
|
||||
{
|
||||
log->ret_I_3f = 1;
|
||||
log->t_I_3f = log->t1_limit + 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->t_I_3f = 0;
|
||||
log->ret_I_3f = 0;
|
||||
}
|
||||
|
||||
if (log->pob_W_3f)
|
||||
{
|
||||
if (++log->t_W_3f > log->t1_limit)
|
||||
{
|
||||
log->ret_W_3f = 1;
|
||||
log->t_W_3f = log->t1_limit + 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->t_W_3f = 0;
|
||||
log->ret_W_3f = 0;
|
||||
}
|
||||
|
||||
if (log->pob_T2_I)
|
||||
{
|
||||
if (++log->t_I_2 > log->t2_limit)
|
||||
{
|
||||
log->wy_T2_I = 1;
|
||||
log->t_I_2 = log->t2_limit + 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->wy_T2_I = 0;
|
||||
log->t_I_2 = 0;
|
||||
}
|
||||
|
||||
if (log->pob_T2_W)
|
||||
{
|
||||
if (++log->t_W_2 > log->t2_limit)
|
||||
{
|
||||
log->wy_T2_W = 1;
|
||||
log->t_W_2 = log->t2_limit + 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->wy_T2_W = 0;
|
||||
log->t_W_2 = 0;
|
||||
}
|
||||
|
||||
log->wy_T1 = log->ret_I_L1 || log->ret_I_L2 || log->ret_I_L3 || log->ret_W_L1 || log->ret_W_L2 ||
|
||||
log->ret_W_L3 || log->ret_I_3f || log->ret_W_3f;
|
||||
|
||||
log->wy_T2 = log->wy_T2_I || log->wy_T2_W;
|
||||
|
||||
check_and_set_struct(log->ret_I_L1,&log->retrip_I_L1);
|
||||
check_and_set_struct(log->ret_I_L2,&log->retrip_I_L2);
|
||||
check_and_set_struct(log->ret_I_L3,&log->retrip_I_L3);
|
||||
check_and_set_struct(log->ret_W_L1,&log->retrip_W_L1);
|
||||
check_and_set_struct(log->ret_W_L2,&log->retrip_W_L2);
|
||||
check_and_set_struct(log->ret_W_L3,&log->retrip_W_L3);
|
||||
check_and_set_struct(log->ret_I_3f,&log->retrip_I_3f);
|
||||
check_and_set_struct(log->ret_W_3f,&log->retrip_W_3f);
|
||||
check_and_set_struct(log->wy_T2_I,&log->T2_I);
|
||||
check_and_set_struct(log->wy_T2_W,&log->T2_W);
|
||||
check_and_set_struct(log->wy_T1,&log->T1);
|
||||
check_and_set_struct(log->wy_T2,&log->T2);
|
||||
check_and_set_struct(log->wy_pob,&log->pob);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
set_default(log);
|
||||
|
||||
clear_struct(&log->retrip_I_L1);
|
||||
clear_struct(&log->retrip_I_L2);
|
||||
clear_struct(&log->retrip_I_L3);
|
||||
clear_struct(&log->retrip_W_L1);
|
||||
clear_struct(&log->retrip_W_L2);
|
||||
clear_struct(&log->retrip_W_L3);
|
||||
clear_struct(&log->retrip_I_3f);
|
||||
clear_struct(&log->retrip_W_3f);
|
||||
clear_struct(&log->T1);
|
||||
clear_struct(&log->T2);
|
||||
clear_struct(&log->T2_I);
|
||||
clear_struct(&log->T2_W);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
167
src/LRW.h
Normal file
167
src/LRW.h
Normal file
@@ -0,0 +1,167 @@
|
||||
/*
|
||||
* LRW.h
|
||||
*
|
||||
* Created on: 29-11-2014
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef LRW_H__
|
||||
#define LRW_H__
|
||||
|
||||
//#include "pawel_usun_to.h"
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
struct Nastawy_przeliczone_lrw
|
||||
{
|
||||
float limit1_; ///< wartosc rozruchowa
|
||||
float limit2_; ///< wartosc powrotu
|
||||
u32 t_; ///< opoznienie czasu zadzialania przekaznika
|
||||
u8 on_; ///< wartosc nastawy aktywnosci przekaznika 1- aktywny
|
||||
u8 full_period;
|
||||
};
|
||||
|
||||
struct dane_wewnetrzne_lrw
|
||||
{
|
||||
// Wyjscia_rejestratora R; ///< dane ostatniego zaklocenia
|
||||
// Time czas_; // moment wystapienia zaklocenia (rejestr tymczasowy - przed zapisem)
|
||||
short lp1; ///<licznik filtracji pobudzen faza 1
|
||||
short lp2; ///<licznik filtracji pobudzen faza 2
|
||||
short lp3; ///<licznik filtracji pobudzen faza 3
|
||||
u32 licz_t_; // licznik czasu od pobudzenia dla przekaznika czasowego
|
||||
u8 wsk_rej; // nowy zapis rejestracji parametrow zaklocenia (spelnienie kryterium identyfikacji)
|
||||
u8 pob;///< pobudzenie przekaznika
|
||||
u8 pob1;///< pobudzenie przekaznika faza 1
|
||||
u8 pob2;///< pobudzenie przekaznika faza 2
|
||||
u8 pob3;///< pobudzenie przekaznika faza 3
|
||||
u8 zad;///< zadzialanie przekaznika
|
||||
};
|
||||
|
||||
struct LRW_logic
|
||||
{
|
||||
struct binary_io stan_bl;
|
||||
float *I1;
|
||||
float *I2;
|
||||
float *I3;
|
||||
|
||||
struct binary_io w_on_L1;
|
||||
struct binary_io w_on_L2;
|
||||
struct binary_io w_on_L3;
|
||||
struct binary_io wyl_L1;
|
||||
struct binary_io wyl_L2;
|
||||
struct binary_io wyl_L3;
|
||||
struct binary_io test;
|
||||
|
||||
struct binary_io retrip_I_L1;
|
||||
struct binary_io retrip_I_L2;
|
||||
struct binary_io retrip_I_L3;
|
||||
struct binary_io retrip_W_L1;
|
||||
struct binary_io retrip_W_L2;
|
||||
struct binary_io retrip_W_L3;
|
||||
struct binary_io retrip_I_3f;
|
||||
struct binary_io retrip_W_3f;
|
||||
struct binary_io T2_I;
|
||||
struct binary_io T2_W;
|
||||
struct binary_io T1;
|
||||
struct binary_io T2;
|
||||
struct binary_io pob;
|
||||
|
||||
u8 kryt_pr;
|
||||
u8 kryt_wyl;
|
||||
|
||||
u8 ret_I_L1;
|
||||
u8 ret_I_L2;
|
||||
u8 ret_I_L3;
|
||||
u8 ret_W_L1;
|
||||
u8 ret_W_L2;
|
||||
u8 ret_W_L3;
|
||||
u8 ret_I_3f;
|
||||
u8 ret_W_3f;
|
||||
u8 wy_T2_I;
|
||||
u8 wy_T2_W;
|
||||
u8 wy_T1;
|
||||
u8 wy_T2;
|
||||
|
||||
u8 pob_I_L1;
|
||||
u8 pob_I_L2;
|
||||
u8 pob_I_L3;
|
||||
u8 pob_W_L1;
|
||||
u8 pob_W_L2;
|
||||
u8 pob_W_L3;
|
||||
u8 pob_I_3f;
|
||||
u8 pob_W_3f;
|
||||
u8 pob_T2_I;
|
||||
u8 pob_T2_W;
|
||||
u8 wy_pob;
|
||||
|
||||
u32 t1_limit;
|
||||
u32 t2_limit;
|
||||
|
||||
u32 t_I_L1;
|
||||
u32 t_I_L2;
|
||||
u32 t_I_L3;
|
||||
u32 t_W_L1;
|
||||
u32 t_W_L2;
|
||||
u32 t_W_L3;
|
||||
u32 t_I_3f;
|
||||
u32 t_W_3f;
|
||||
u32 t_I_2;
|
||||
u32 t_W_2;
|
||||
|
||||
struct dane_wewnetrzne_lrw dw;
|
||||
struct Nastawy_przeliczone_lrw nast_;// struktura z parametrami
|
||||
};
|
||||
|
||||
struct LRW_io
|
||||
{
|
||||
u32 stan_bl;
|
||||
u32 I1_float_in;
|
||||
u32 I2_float_in;
|
||||
u32 I3_float_in;
|
||||
u32 w_on_L1_in;
|
||||
u32 w_on_L2_in;
|
||||
u32 w_on_L3_in;
|
||||
u32 wyl_L1_in;
|
||||
u32 wyl_L2_in;
|
||||
u32 wyl_L3_in;
|
||||
u32 test_in;
|
||||
|
||||
u32 retrip_I_L1_out;
|
||||
u32 retrip_I_L2_out;
|
||||
u32 retrip_I_L3_out;
|
||||
u32 retrip_W_L1_out;
|
||||
u32 retrip_W_L2_out;
|
||||
u32 retrip_W_L3_out;
|
||||
|
||||
u32 retrip_I_3f_out;
|
||||
u32 retrip_W_3f_out;
|
||||
|
||||
u32 T2_I_out;
|
||||
u32 T2_W_out;
|
||||
u32 T1_out;
|
||||
u32 T2_out;
|
||||
u32 pob_out;
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct LRW_params
|
||||
{
|
||||
u32 bity; ///< nastawy bitowe;
|
||||
double Wr_; ///< wartosc nastawy rozruchowej przekaznika w krotnosciach wartosci znamionowej
|
||||
double kp_; ///< wartosc nastawy wspolczynnika powrotu
|
||||
double t1_; ///< wartosc nastawy czasu T1 w sekundach
|
||||
double t2_; ///< wartosc nastawy czasu T2 w sekundach
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct LRW_args
|
||||
{
|
||||
struct LRW_io io;
|
||||
struct LRW_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void LRW(void *args, void *logic);
|
||||
extern int LRW_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* LRW_H__ */
|
||||
1726
src/R87L.c
Normal file
1726
src/R87L.c
Normal file
File diff suppressed because it is too large
Load Diff
289
src/R87L.h
Normal file
289
src/R87L.h
Normal file
@@ -0,0 +1,289 @@
|
||||
/*
|
||||
* R87L.h
|
||||
*
|
||||
* Created on: 20-05-2019
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef R87L_H_
|
||||
#define R87L_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "analog_in.h"
|
||||
#include "mkstream.h"
|
||||
#include "Diff.h"
|
||||
|
||||
#define R87L_START_DELAY 100
|
||||
#define R87L_NO_STREAM_BLOK_WYL_TIME 10000 // 10s
|
||||
|
||||
#define R87L_COMM_W_L1 (1<<0)
|
||||
#define R87L_COMM_W_L2 (1<<1)
|
||||
#define R87L_COMM_W_L3 (1<<2)
|
||||
#define R87L_COMM_BLOK (1<<3)
|
||||
#define R87L_COMM_PRZEGLAD (1<<4)
|
||||
#define R87L_COMM_BLOK_WYL (1<<5)
|
||||
|
||||
|
||||
struct wskazniki_prad_do_kompensacji_87l
|
||||
{
|
||||
float /*struct we_an_diff*/ *Ip[4];
|
||||
float /*struct we_an_diff*/ *Im[4];
|
||||
float /*struct we_an_diff*/ *Ip_prev[4];
|
||||
float /*struct we_an_diff*/ *Im_prev[4];
|
||||
|
||||
float a_p[4][2];
|
||||
float a_m[4][2];
|
||||
float a_pi0[3];
|
||||
};
|
||||
|
||||
struct Nastawy_przeliczone_87
|
||||
{
|
||||
float khr_2h;///< wartosc rozruchowa blokady od 2 harmonicznej
|
||||
float khp_2h;///< wartosc powrotowa blokady od 2 harmonicznej
|
||||
float khr_5h;///< wartosc rozruchowa blokady od 5 harmonicznej
|
||||
float khp_5h;///< wartosc powrotowa blokady od 5 harmonicznej
|
||||
float Irr;///< wartosc rozruchowa dzialania bezwarunkowego
|
||||
float Ipr;///< wartosc powrotowa dzialania bezwarunkowego
|
||||
float Ihdr;///<wartosc rozruchowa pradu hamowania zwarcia zewnetrznego
|
||||
float Irdr;///< wartosc rozruchowa pradu roznicowego zwarcia zewnetrznego
|
||||
float kh1r;///<wartosc rozruchowa prosta 2
|
||||
float kh1p;///<wartosc powrotowa prosta 2
|
||||
float kh2r;///<wartosc rozruchowa prosta 3
|
||||
float Ir3c;///< czesc stala nastawy odcinka 3
|
||||
float Ip3c;///< czesc stala nastawy odcinka 3
|
||||
float kh2p;///<wartosc powrotowa prosta 3
|
||||
float kh1r2;///<wartosc rozruchowa prosta 2 (w kwadracie)
|
||||
float kh1p2;///<wartosc powrotowa prosta 2 (w kwadracie)
|
||||
float Iror;///<wartosc rozruchowa pradu prosta 1
|
||||
float Irop;///<wartosc powrotowa pradu prosta 1
|
||||
float Ir4;///< wartosc rozruchowa prosta 4
|
||||
float Ip4;///< wartosc powrotowa prosta 4
|
||||
float Ih1;///< wartosc pradu stabilizacji dla poczatku prostej 2
|
||||
float Ihp;///< wartosc pradu stabilizacji dla poczatku prostej 3
|
||||
float Ihg;///<wartosc pradu stabilizacji dla poczatku prostej 4
|
||||
float I2h_min;
|
||||
float I5h_min;
|
||||
u16 t_sbc;///< czas blokady po stwierdzeniu zwarcia zewnetrznego
|
||||
u32 tz; ///< opoznienie czasu zadzialania przekaznika
|
||||
u8 on; ///< wartosc nastawy aktywnosci przekaznika 1- aktywny
|
||||
u8 w; ///< wartosc nastawy dzialania na wylaczeniee 1 - wylaczenie 0 - tylko sygnalizacja
|
||||
u8 bl; ///< wartosc nastawy aktywnosci blokady dzialania 1- blokada aktywna
|
||||
u8 bl2h;///< wlaczenie blokady od drugiej harmonicznej
|
||||
u8 bl5h;///< wlaczenie blokady od piatej harmonicznej
|
||||
u8 sbc;///< wlaczenie strefy blokady czasowej
|
||||
u8 h;///< wlaczenie granicznej stabilizacji
|
||||
u8 r; ///< wlaczenie strefy bezwarunkowego wylaczenia
|
||||
u8 cross_block; ///cross block do hrmonicznych
|
||||
u8 przyspiesz_dzialanie;
|
||||
u8 przyjmuj_zadzialania;
|
||||
u8 rozwijajace;
|
||||
// u8 test_1str;
|
||||
struct wskazniki_prad_do_kompensacji_87l L[3]; ///< wskazniki pradow do wyliczenia skompensowanych wejsc faza 1,2,3
|
||||
float a[4];///< wspolczynnik pradu do kompensacji
|
||||
struct stream_frame zero_frame;
|
||||
float zero;
|
||||
float wsp_filtr_sin_[20*2];
|
||||
float wsp_filtr_cos_[20*2];
|
||||
float wsp_filtr_sin2h_[20*2];
|
||||
float wsp_filtr_cos2h_[20*2];
|
||||
float wsp_filtr_sin5h_[20*2];
|
||||
float wsp_filtr_cos5h_[20*2];
|
||||
u8 p2d;
|
||||
u8 p3d;
|
||||
u8 stream_cnt;
|
||||
};
|
||||
|
||||
struct wejscie_wew_87
|
||||
{
|
||||
float buf_Lr[(MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS)*2*2][6];
|
||||
u8 nr_probki;
|
||||
float orta[6];
|
||||
float ortb[6];
|
||||
float Ir[6];
|
||||
float orta2h[3];
|
||||
float ortb2h[3];
|
||||
float I2h[3];
|
||||
float orta5h[3];
|
||||
float ortb5h[3];
|
||||
float I5h[3];
|
||||
|
||||
float buf_ip[(MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS)*2*2][9];
|
||||
float Ip[9];
|
||||
};
|
||||
|
||||
|
||||
struct r87l_logic
|
||||
{
|
||||
struct stream_frame *stream[3];
|
||||
struct binary_io streams_ok;
|
||||
struct binary_io test;
|
||||
struct binary_io stan_bl;
|
||||
struct binary_io test_1str;
|
||||
struct binary_io W;
|
||||
struct binary_io Wf[3];
|
||||
struct binary_io Z;
|
||||
struct binary_io Zf[3];
|
||||
struct binary_io P;
|
||||
struct binary_io Pf[3];
|
||||
|
||||
struct Nastawy_przeliczone_87 nast_; // struktura z parametrami rozruchowymi
|
||||
|
||||
struct binary_io BL2h1;
|
||||
struct binary_io BL2h2;
|
||||
struct binary_io BL2h3;
|
||||
struct binary_io BL5h1;
|
||||
struct binary_io BL5h2;
|
||||
struct binary_io BL5h3;
|
||||
struct binary_io Zw1;
|
||||
struct binary_io Zw2;
|
||||
struct binary_io Zw3;
|
||||
struct binary_io nieobs;
|
||||
struct binary_io blok;
|
||||
struct binary_io zezw_w1f;
|
||||
struct binary_io przeglad;
|
||||
struct binary_io blok_w;
|
||||
float *Ir1;
|
||||
float *Ir2;
|
||||
float *Ir3;
|
||||
float *Ih1;
|
||||
float *Ih2;
|
||||
float *Ih3;
|
||||
float *I2h1;
|
||||
float *I2h2;
|
||||
float *I2h3;
|
||||
float *I5h1;
|
||||
float *I5h2;
|
||||
float *I5h3;
|
||||
float *Ir_L1_ortb;
|
||||
float *Ir_L2_ortb;
|
||||
float *Ir_L3_ortb;
|
||||
|
||||
struct licz l;
|
||||
struct pobudzenia_czastkowe P_;
|
||||
struct dane_wewnetrzne_Diff dw;
|
||||
enum jaki_uklad jaki_uklad;
|
||||
// struct pobudzenia_czastkowe P_;
|
||||
struct wejscie_wew_87 w;
|
||||
float Ir1_;
|
||||
float Ir2_;
|
||||
float Ir3_;
|
||||
float Ih1_;
|
||||
float Ih2_;
|
||||
float Ih3_;
|
||||
|
||||
float A[3][3];
|
||||
float A_prev[3][3];
|
||||
u32 *comm_bits;
|
||||
|
||||
u8 n[3];
|
||||
u32 licz_t[3];
|
||||
u8 my_addr;
|
||||
u16 startup_timer;
|
||||
u16 przegl_prev[3];
|
||||
u16 bits_prev[3];
|
||||
u16 no_stream_timer;
|
||||
u8 blok_z_zew_prev;
|
||||
|
||||
struct stream_frame *ownstream;
|
||||
struct stream_frame *original_stream;
|
||||
};
|
||||
|
||||
struct r87l_io
|
||||
{
|
||||
u32 stan_bl_in;
|
||||
u32 test_in;
|
||||
u32 stream1_ptr_in;
|
||||
u32 stream2_ptr_in;
|
||||
u32 stream3_ptr_in;
|
||||
u32 streams_ok_in;
|
||||
u32 zezw_w1f_in;
|
||||
u32 przeglad_in;
|
||||
//u32 test_1str_in;
|
||||
//u32 ownstream_ptr_in;
|
||||
|
||||
u32 W_out;
|
||||
u32 WL1_out;
|
||||
u32 WL2_out;
|
||||
u32 WL3_out;
|
||||
u32 Z_out;
|
||||
u32 ZL1_out;
|
||||
u32 ZL2_out;
|
||||
u32 ZL3_out;
|
||||
u32 P_out;
|
||||
u32 PL1_out;
|
||||
u32 PL2_out;
|
||||
u32 PL3_out;
|
||||
u32 bl_2h_L1_out;
|
||||
u32 bl_2h_L2_out;
|
||||
u32 bl_2h_L3_out;
|
||||
u32 bl_5h_L1_out;
|
||||
u32 bl_5h_L2_out;
|
||||
u32 bl_5h_L3_out;
|
||||
u32 zzew1_out;
|
||||
u32 zzew2_out;
|
||||
u32 zzew3_out;
|
||||
u32 di_l1_float_out;
|
||||
u32 di_l2_float_out;
|
||||
u32 di_l3_float_out;
|
||||
u32 ih_l1_float_out;
|
||||
u32 ih_l2_float_out;
|
||||
u32 ih_l3_float_out;
|
||||
u32 i2h_l1_float_out;
|
||||
u32 i2h_l2_float_out;
|
||||
u32 i2h_l3_float_out;
|
||||
u32 i5h_l1_float_out;
|
||||
u32 i5h_l2_float_out;
|
||||
u32 i5h_l3_float_out;
|
||||
u32 ir_l1_ch_float_out;
|
||||
u32 ir_l2_ch_float_out;
|
||||
u32 ir_l3_ch_float_out;
|
||||
u32 nieobs_out;
|
||||
u32 blok_out;
|
||||
u32 comm_bits_float_out;
|
||||
u32 blok_w_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
|
||||
struct r87l_params
|
||||
{
|
||||
u32 bity;
|
||||
u32 GrP1; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia GN (1)
|
||||
u32 GrP2; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia SN (2)
|
||||
u32 GrP3; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia SN (3)
|
||||
|
||||
double Iro;///< poczatkowy prad rozruchowy
|
||||
double Ir;///< graniczny prad rozruchowy
|
||||
double Ihg; ///< graniczny prad stabilizacji
|
||||
double Ihp;///< prad hamujacy przegiecia
|
||||
double Ihd;///< prad rozruchowy blokady czasowej pradu stabilizujacego
|
||||
double tbld; ///< czas blokady dzialania po opuszczeniu strefy blokady czasowej
|
||||
double rd; ///< przesuniecie strefy blokady czasowej od strefy dzialania
|
||||
double kh1;///< wspolczynnik stabilizacji prosta 2
|
||||
double kh2; ///< wspolczynnik stabilizacji prosta 3
|
||||
double t;///< czas opoznienia dzialania
|
||||
double kp;///< wspolczynnik powrotu
|
||||
double k_2h;///< wspolczynnik blokowania druga harmoniczna
|
||||
double k_5h;///< wspolczynnik blokowania piata harmoniczna
|
||||
double PT12;///<przekladnia uzwojen 1-2 transformatora
|
||||
double PT13;///<przekladnia uzwojen 1-3 transformatora
|
||||
u32 adres; //adres wlasnego strumienia danych
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct r87l_args
|
||||
{
|
||||
struct r87l_io io;
|
||||
struct r87l_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void R87L(void *args, void *logic);
|
||||
extern int R87L_initlog(void *arguments, void *logic);
|
||||
extern u8 r87l_kryterium1(short *licz, u8 pobudzenie, u8 powrot, u8 st, unsigned short powz, unsigned short powp);
|
||||
extern void r87l_kryterium2(struct r87l_logic *log,float Ir, float Ih, u8 *pob, u8 idx);
|
||||
extern void r87l_przelicz_5h(struct r87l_logic *log,uint16_t Lnr);
|
||||
extern void r87l_przelicz_2h(struct r87l_logic *log,uint16_t Lnr);
|
||||
extern void r87l_przelicz_1h(struct r87l_logic *log, uint16_t Lnr);
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
1698
src/R87L_8.c
Normal file
1698
src/R87L_8.c
Normal file
File diff suppressed because it is too large
Load Diff
269
src/R87L_8.h
Normal file
269
src/R87L_8.h
Normal file
@@ -0,0 +1,269 @@
|
||||
/*
|
||||
* R87L_8.h
|
||||
*
|
||||
* Created on: 24-05-2024
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef R87L_8_H_
|
||||
#define R87L_8_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "analog_in.h"
|
||||
#include "mkstream.h"
|
||||
#include "Diff.h"
|
||||
|
||||
struct wskazniki_prad_do_kompensacji_87l_8
|
||||
{
|
||||
float /*struct we_an_diff*/ *Ip[8];
|
||||
float /*struct we_an_diff*/ *Im[8];
|
||||
float /*struct we_an_diff*/ *Ip_prev[8];
|
||||
float /*struct we_an_diff*/ *Im_prev[8];
|
||||
|
||||
float a_p[8][2];
|
||||
float a_m[8][2];
|
||||
float a_pi0[8];
|
||||
};
|
||||
|
||||
struct Nastawy_przeliczone_87_8
|
||||
{
|
||||
float khr_2h;///< wartosc rozruchowa blokady od 2 harmonicznej
|
||||
float khp_2h;///< wartosc powrotowa blokady od 2 harmonicznej
|
||||
float khr_5h;///< wartosc rozruchowa blokady od 5 harmonicznej
|
||||
float khp_5h;///< wartosc powrotowa blokady od 5 harmonicznej
|
||||
float Irr;///< wartosc rozruchowa dzialania bezwarunkowego
|
||||
float Ipr;///< wartosc powrotowa dzialania bezwarunkowego
|
||||
float Ihdr;///<wartosc rozruchowa pradu hamowania zwarcia zewnetrznego
|
||||
float Irdr;///< wartosc rozruchowa pradu roznicowego zwarcia zewnetrznego
|
||||
float kh1r;///<wartosc rozruchowa prosta 2
|
||||
float kh1p;///<wartosc powrotowa prosta 2
|
||||
float kh2r;///<wartosc rozruchowa prosta 3
|
||||
float Ir3c;///< czesc stala nastawy odcinka 3
|
||||
float Ip3c;///< czesc stala nastawy odcinka 3
|
||||
float kh2p;///<wartosc powrotowa prosta 3
|
||||
float kh1r2;///<wartosc rozruchowa prosta 2 (w kwadracie)
|
||||
float kh1p2;///<wartosc powrotowa prosta 2 (w kwadracie)
|
||||
float Iror;///<wartosc rozruchowa pradu prosta 1
|
||||
float Irop;///<wartosc powrotowa pradu prosta 1
|
||||
float Ir4;///< wartosc rozruchowa prosta 4
|
||||
float Ip4;///< wartosc powrotowa prosta 4
|
||||
float Ih1;///< wartosc pradu stabilizacji dla poczatku prostej 2
|
||||
float Ihp;///< wartosc pradu stabilizacji dla poczatku prostej 3
|
||||
float Ihg;///<wartosc pradu stabilizacji dla poczatku prostej 4
|
||||
float I2h_min;
|
||||
float I5h_min;
|
||||
u16 t_sbc;///< czas blokady po stwierdzeniu zwarcia zewnetrznego
|
||||
u32 tz; ///< opoznienie czasu zadzialania przekaznika
|
||||
u8 on; ///< wartosc nastawy aktywnosci przekaznika 1- aktywny
|
||||
u8 w; ///< wartosc nastawy dzialania na wylaczeniee 1 - wylaczenie 0 - tylko sygnalizacja
|
||||
u8 bl; ///< wartosc nastawy aktywnosci blokady dzialania 1- blokada aktywna
|
||||
u8 bl2h;///< wlaczenie blokady od drugiej harmonicznej
|
||||
u8 bl5h;///< wlaczenie blokady od piatej harmonicznej
|
||||
u8 sbc;///< wlaczenie strefy blokady czasowej
|
||||
u8 h;///< wlaczenie granicznej stabilizacji
|
||||
u8 r; ///< wlaczenie strefy bezwarunkowego wylaczenia
|
||||
u8 cross_block; ///cross block do hrmonicznych
|
||||
u8 przyspiesz_dzialanie;
|
||||
u8 przyjmuj_zadzialania;
|
||||
u8 rozwijajace;
|
||||
// u8 test_1str;
|
||||
struct wskazniki_prad_do_kompensacji_87l_8 L[3]; ///< wskazniki pradow do wyliczenia skompensowanych wejsc faza 1,2,3
|
||||
float a[8];///< wspolczynnik pradu do kompensacji
|
||||
struct stream_frame zero_frame;
|
||||
float zero;
|
||||
float wsp_filtr_sin_[20*2];
|
||||
float wsp_filtr_cos_[20*2];
|
||||
float wsp_filtr_sin2h_[20*2];
|
||||
float wsp_filtr_cos2h_[20*2];
|
||||
float wsp_filtr_sin5h_[20*2];
|
||||
float wsp_filtr_cos5h_[20*2];
|
||||
u8 p2d;
|
||||
u8 p3d;
|
||||
u8 stream_cnt;
|
||||
};
|
||||
|
||||
struct wejscie_wew_87_8
|
||||
{
|
||||
float buf_Lr[(MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS)*2*2][6];
|
||||
u8 nr_probki;
|
||||
float orta[6];
|
||||
float ortb[6];
|
||||
float Ir[6];
|
||||
float orta2h[3];
|
||||
float ortb2h[3];
|
||||
float I2h[3];
|
||||
float orta5h[3];
|
||||
float ortb5h[3];
|
||||
float I5h[3];
|
||||
|
||||
float buf_ip[(MAIN_FREQ_PERIOD_MS/LOOP_CYCLE_MS)*2*2][24];
|
||||
float Ip[9];
|
||||
};
|
||||
|
||||
struct r87l_8_logic
|
||||
{
|
||||
struct stream_frame *stream[8];
|
||||
struct binary_io streams_ok;
|
||||
struct binary_io test;
|
||||
struct binary_io stan_bl;
|
||||
struct binary_io test_1str;
|
||||
struct binary_io W;
|
||||
struct binary_io Wf[3];
|
||||
struct binary_io Z;
|
||||
struct binary_io Zf[3];
|
||||
struct binary_io P;
|
||||
struct binary_io Pf[3];
|
||||
|
||||
struct Nastawy_przeliczone_87_8 nast_; // struktura z parametrami rozruchowymi
|
||||
|
||||
struct binary_io BL2h1;
|
||||
struct binary_io BL2h2;
|
||||
struct binary_io BL2h3;
|
||||
struct binary_io BL5h1;
|
||||
struct binary_io BL5h2;
|
||||
struct binary_io BL5h3;
|
||||
struct binary_io Zw1;
|
||||
struct binary_io Zw2;
|
||||
struct binary_io Zw3;
|
||||
struct binary_io nieobs;
|
||||
struct binary_io blok;
|
||||
struct binary_io zezw_w1f;
|
||||
struct binary_io przeglad;
|
||||
struct binary_io blok_w;
|
||||
float *Ir1;
|
||||
float *Ir2;
|
||||
float *Ir3;
|
||||
float *Ih1;
|
||||
float *Ih2;
|
||||
float *Ih3;
|
||||
float *I2h1;
|
||||
float *I2h2;
|
||||
float *I2h3;
|
||||
float *I5h1;
|
||||
float *I5h2;
|
||||
float *I5h3;
|
||||
float *Ir_L1_ortb;
|
||||
float *Ir_L2_ortb;
|
||||
float *Ir_L3_ortb;
|
||||
|
||||
struct licz l;
|
||||
struct pobudzenia_czastkowe P_;
|
||||
struct dane_wewnetrzne_Diff dw;
|
||||
enum jaki_uklad jaki_uklad;
|
||||
// struct pobudzenia_czastkowe P_;
|
||||
struct wejscie_wew_87_8 w;
|
||||
float Ir1_;
|
||||
float Ir2_;
|
||||
float Ir3_;
|
||||
float Ih1_;
|
||||
float Ih2_;
|
||||
float Ih3_;
|
||||
|
||||
float A[8][3];
|
||||
float A_prev[8][3];
|
||||
u32 *comm_bits;
|
||||
|
||||
u8 n[3];
|
||||
u32 licz_t[3];
|
||||
u8 my_addr;
|
||||
u16 startup_timer;
|
||||
u16 przegl_prev[8];
|
||||
u16 bits_prev[8];
|
||||
u16 no_stream_timer;
|
||||
u8 blok_z_zew_prev;
|
||||
|
||||
struct stream_frame *ownstream;
|
||||
struct stream_frame *original_stream;
|
||||
};
|
||||
|
||||
struct r87l_8_io
|
||||
{
|
||||
u32 stan_bl_in;
|
||||
u32 test_in;
|
||||
u32 stream1_ptr_in;
|
||||
u32 stream2_ptr_in;
|
||||
u32 stream3_ptr_in;
|
||||
u32 stream4_ptr_in;
|
||||
u32 stream5_ptr_in;
|
||||
u32 stream6_ptr_in;
|
||||
u32 stream7_ptr_in;
|
||||
u32 stream8_ptr_in;
|
||||
u32 streams_ok_in;
|
||||
u32 zezw_w1f_in;
|
||||
u32 przeglad_in;
|
||||
u32 test_1str_in;
|
||||
u32 ownstream_ptr_in;
|
||||
u32 W_out;
|
||||
u32 WL1_out;
|
||||
u32 WL2_out;
|
||||
u32 WL3_out;
|
||||
u32 Z_out;
|
||||
u32 ZL1_out;
|
||||
u32 ZL2_out;
|
||||
u32 ZL3_out;
|
||||
u32 P_out;
|
||||
u32 PL1_out;
|
||||
u32 PL2_out;
|
||||
u32 PL3_out;
|
||||
u32 bl_2h_L1_out;
|
||||
u32 bl_2h_L2_out;
|
||||
u32 bl_2h_L3_out;
|
||||
u32 bl_5h_L1_out;
|
||||
u32 bl_5h_L2_out;
|
||||
u32 bl_5h_L3_out;
|
||||
u32 zzew1_out;
|
||||
u32 zzew2_out;
|
||||
u32 zzew3_out;
|
||||
u32 di_l1_float_out;
|
||||
u32 di_l2_float_out;
|
||||
u32 di_l3_float_out;
|
||||
u32 ih_l1_float_out;
|
||||
u32 ih_l2_float_out;
|
||||
u32 ih_l3_float_out;
|
||||
u32 i2h_l1_float_out;
|
||||
u32 i2h_l2_float_out;
|
||||
u32 i2h_l3_float_out;
|
||||
u32 i5h_l1_float_out;
|
||||
u32 i5h_l2_float_out;
|
||||
u32 i5h_l3_float_out;
|
||||
u32 ir_l1_ch_float_out;
|
||||
u32 ir_l2_ch_float_out;
|
||||
u32 ir_l3_ch_float_out;
|
||||
u32 nieobs_out;
|
||||
u32 blok_out;
|
||||
u32 comm_bits_float_out;
|
||||
u32 blok_w_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
|
||||
struct r87l_8_params
|
||||
{
|
||||
u32 bity;
|
||||
long liczba_jednostek;
|
||||
double Iro;///< poczatkowy prad rozruchowy
|
||||
double Ir;///< graniczny prad rozruchowy
|
||||
double Ihg; ///< graniczny prad stabilizacji
|
||||
double Ihp;///< prad hamujacy przegiecia
|
||||
double Ihd;///< prad rozruchowy blokady czasowej pradu stabilizujacego
|
||||
double tbld; ///< czas blokady dzialania po opuszczeniu strefy blokady czasowej
|
||||
double rd; ///< przesuniecie strefy blokady czasowej od strefy dzialania
|
||||
double kh1;///< wspolczynnik stabilizacji prosta 2
|
||||
double kh2; ///< wspolczynnik stabilizacji prosta 3
|
||||
double t;///< czas opoznienia dzialania
|
||||
double kp;///< wspolczynnik powrotu
|
||||
double k_2h;///< wspolczynnik blokowania druga harmoniczna
|
||||
double k_5h;///< wspolczynnik blokowania piata harmoniczna
|
||||
u32 adres; //adres wlasnego strumienia danych
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct r87l_8_args
|
||||
{
|
||||
struct r87l_8_io io;
|
||||
struct r87l_8_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void R87L_8(void *args, void *logic);
|
||||
extern int R87L_8_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif
|
||||
837
src/RNT.c
Normal file
837
src/RNT.c
Normal file
@@ -0,0 +1,837 @@
|
||||
/*
|
||||
* RNT.c
|
||||
*
|
||||
* Created on: 14-11-2018
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "RNT.h"
|
||||
#include "analog_in.h"
|
||||
/*#include "helper.h"
|
||||
#include "ZDistL.h"
|
||||
*/
|
||||
#include <math.h>
|
||||
|
||||
|
||||
int rnt_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct rnt_args *args = (struct rnt_args *)arguments;
|
||||
struct rnt_logic *log = (struct rnt_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.stan_bl_in,&log->stan_bl_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.man_in,&log->man_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.auto_in,&log->auto_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.orta_U1_float_in,&log->orta_U1_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.ortb_U1_float_in,&log->ortb_U1_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.kwampl_U1_float_in,&log->kwampl_U1_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.kon_U1_in,&log->kon_U1_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.orta_I1_float_in,&log->orta_I1_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.ortb_I1_float_in,&log->ortb_I1_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.kwampl_I1_float_in,&log->kwampl_I1_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.orta_U2_float_in,&log->orta_U2_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.ortb_U2_float_in,&log->ortb_U2_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.kwampl_U2_float_in,&log->kwampl_U2_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.kon_U2_in,&log->kon_U2_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.orta_I2_float_in,&log->orta_I2_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.ortb_I2_float_in,&log->ortb_I2_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.kwampl_I2_float_in,&log->kwampl_I2_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.nr_zacz_in,&log->nr_zacz_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.zo_zacz_in,&log->zo_zacz_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.kon_u_nr_zacz_in,&log->kon_u_nr_zacz_))
|
||||
return -1;
|
||||
|
||||
|
||||
if(set_bit_ptr_struct(args->io.bieg_in,&log->bieg_))
|
||||
return -1;
|
||||
|
||||
|
||||
if(set_bit_ptr_struct(args->io.gora_in,&log->gora_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.dol_in,&log->dol_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.aktU1z_in,&log->aktU1z_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.aktU2z_in,&log->aktU2z_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.aktU3z_in,&log->aktU3z_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.aktU4z_in,&log->aktU4z_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.bl_gora_in,&log->bl_gora_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.bl_dol_in,&log->bl_dol_))
|
||||
return -1;
|
||||
|
||||
|
||||
if(set_bit_ptr_struct(args->io.test_in,&log->test_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.kas_in,&log->kas_))
|
||||
return -1;
|
||||
|
||||
|
||||
if(set_bit_ptr_struct(args->io.gora_out,&log->gora_out_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.dol_out,&log->dol_out_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.e_bieg_out,&log->e_bieg_out_))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.e_poz_out,&log->e_poz_out_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.pob_G_out,&log->pob_G))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.pob_D_out,&log->pob_D))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.blok_out,&log->blok_out_))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.blok_trw_out,&log->blok_trw_out_))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.ster_poz_in,&log->ster_poz_))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.zad_zacz_in,&log->nr_zacz_zad))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.blok_trw_in,&log->blok_trw_))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.blad_trybu_out,&log->blad_trybu_out_))
|
||||
return -1;
|
||||
|
||||
|
||||
|
||||
if(set_float_ptr(args->io.Uodn_float_out,&log->U_odn))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.tg_out,&log->tg_out))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.td_out,&log->td_out))
|
||||
return -1;
|
||||
|
||||
|
||||
if(set_pointer_in_ptr(args->io.I1_params_ptr_in,(u32 *)&log->I_params[0]))
|
||||
return -1;
|
||||
if(set_pointer_in_ptr(args->io.I2_params_ptr_in,(u32 *)&log->I_params[1]))
|
||||
return -1;
|
||||
if(set_pointer_in_ptr(args->io.U1_params_ptr_in,(u32 *)&log->U_params[0]))
|
||||
return -1;
|
||||
if(set_pointer_in_ptr(args->io.U2_params_ptr_in,(u32 *)&log->U_params[1]))
|
||||
return -1;
|
||||
|
||||
|
||||
////
|
||||
//status_rej = oczekiwanie;
|
||||
|
||||
|
||||
log->nast_.tryb = args->params.tryb;
|
||||
|
||||
|
||||
log->nast_.t1 = ((args->params.t1) * 1000); //czas dzialania t1
|
||||
log->nast_.t2 = ((args->params.t2) * 1000); //czas dzialania t2
|
||||
|
||||
log->nast_.dUzr = args->params.dUz; //napicie nieczuoci
|
||||
log->nast_.dUzp = log->nast_.dUzr * args->params.kp; //napicie nieczuoci
|
||||
|
||||
log->nast_.Uz1 = args->params.Uz1 ; //napicie zadane nr 1
|
||||
log->nast_.Uz2 = args->params.Uz2 ; //napicie zadane nr 2
|
||||
log->nast_.Uz3 = args->params.Uz3 ; //napicie zadane nr 3
|
||||
log->nast_.Uz4 = args->params.Uz4 ; //napicie zadane nr 4
|
||||
|
||||
|
||||
log->nast_.t_ster_zacz = ((args->params.t_ster_zacz) * 1000); //czas sterowania przecznikiem zaczepw
|
||||
log->nast_.t_poz_zacz = ((args->params.t_poz_zacz) * 1000); //czas odpowiedzi pozycji przecznika zaczepw
|
||||
log->nast_.t_imp_ster = ((args->params.t_imp_ster) * 1000);// czas impulsu gra/d
|
||||
log->nast_.on = ((args->params.akt & 0x0001)!=0) ? 1:0;
|
||||
log->nast_.kon_biegu = ((args->params.akt & 0x0002)!=0) ? 1:0;
|
||||
log->nast_.kon_poz_ster = ((args->params.akt & 0x0004)!=0) ? 1:0;
|
||||
log->nast_.akt_kon_U1 = ((args->params.akt & 0x0008)!=0) ? 1:0;
|
||||
log->nast_.akt_kon_U2 = ((args->params.akt & 0x0010)!=0) ? 1:0;
|
||||
log->nast_.akt_kon_Uzacz = ((args->params.akt & 0x0020)!=0) ? 1:0;
|
||||
log->nast_.akt_blok_biegu = ((args->params.akt & 0x0040)!=0) ? 1:0;
|
||||
log->nast_.akt_blok_pozycja = ((args->params.akt & 0x0080)!=0) ? 1:0;
|
||||
log->nast_.akt_mfazowe = ((args->params.akt & 0x0100)!=0) ? 1:0;
|
||||
|
||||
log->nast_.akt_komp1 = ((args->params.akt_komp1 & 0x0001)!=0) ? 1:0;
|
||||
log->nast_.akt_komp2 = ((args->params.akt_komp2 & 0x0001)!=0) ? 1:0;
|
||||
|
||||
|
||||
log->_stan_man = CZEKANIE_NA_STEROWANIE_MANUAL;
|
||||
log->dw.blokada_trw = 0;
|
||||
log->dw.timer_blokad_pod_nap1 = 0;
|
||||
log->dw.timer_blokad_pod_nap2 = 0;
|
||||
|
||||
log->mul[0]=(log->I_params[0]->znam_pierw / log->U_params[0]->znam_pierw);
|
||||
log->mul[1]=(log->I_params[1]->znam_pierw / log->U_params[1]->znam_pierw);
|
||||
|
||||
log->nast_.R1 = args->params.R1 * log->mul[0];
|
||||
log->nast_.X1 = - (args->params.X1 * log->mul[0]);
|
||||
|
||||
log->nast_.R2 = args->params.R2 * log->mul[1];
|
||||
log->nast_.X2 = - (args->params.X2 * log->mul[1]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void rnt(void *arguments, void *logic)
|
||||
{
|
||||
//struct rnt_args *args = (struct rnt_args *)arguments;
|
||||
struct rnt_logic *log = (struct rnt_logic *)logic;
|
||||
float local_orta_U1_ ,local_ortb_U1_,local_orta_U2_ ,local_ortb_U2_, local_kwa_U_, local_Uz;
|
||||
float local_U_;
|
||||
|
||||
//u8 wk,wk2,l_nrl;
|
||||
u8 blok; //blokada
|
||||
|
||||
|
||||
//check_struct(&log->stan_bl_) - sprawdzenie blokady
|
||||
//check_and_set_struct(log->dw.,&log->gora_out_);
|
||||
//set_struct(&log->gora_out_);
|
||||
//log->dw.go
|
||||
|
||||
if(log->nast_.on) // jesli zabezpieczenie aktywne
|
||||
{
|
||||
log->w.kwampl_U1_ = *log->kwampl_U1_;
|
||||
log->w.kwampl_U2_ = *log->kwampl_U2_;
|
||||
log->w.kwampl_I1_ = *log->kwampl_I1_;
|
||||
log->w.kwampl_I2_ = *log->kwampl_I2_;
|
||||
if (log->nast_.akt_mfazowe)
|
||||
{
|
||||
log->w.orta_U1_ = *log->ortb_U1_;
|
||||
log->w.orta_U2_ = *log->ortb_U2_;
|
||||
log->w.ortb_U1_ = -*log->orta_U1_;
|
||||
log->w.ortb_U2_ = -*log->orta_U2_;
|
||||
log->w.orta_I1_ = *log->orta_I1_ * 1.73f;
|
||||
log->w.orta_I2_ = *log->orta_I2_ * 1.73f;
|
||||
log->w.ortb_I1_ = *log->ortb_I1_ * 1.73f;
|
||||
log->w.ortb_I2_ = *log->ortb_I2_ * 1.73f;
|
||||
}
|
||||
else
|
||||
{
|
||||
log->w.orta_U1_ = *log->orta_U1_;
|
||||
log->w.orta_U2_ = *log->orta_U2_;
|
||||
log->w.ortb_U1_ = *log->ortb_U1_;
|
||||
log->w.ortb_U2_ = *log->ortb_U2_;
|
||||
log->w.orta_I1_ = *log->orta_I1_;
|
||||
log->w.orta_I2_ = *log->orta_I2_;
|
||||
log->w.ortb_I1_ = *log->ortb_I1_;
|
||||
log->w.ortb_I2_ = *log->ortb_I2_;
|
||||
}
|
||||
log->w.nr_zacz_ = *log->nr_zacz_;
|
||||
log->w.nr_zacz_zad = *log->nr_zacz_zad;
|
||||
|
||||
//sprawdzenie czy mona sterowa w dol
|
||||
log->dw.blokada_ster_dol = (check_struct(&log->bl_dol_))!=0 ? 1:0;
|
||||
//sprawdzenie czy mona sterowa w gore
|
||||
log->dw.blokada_ster_gora = (check_struct(&log->bl_gora_))!=0 ? 1:0;
|
||||
|
||||
if (check_struct(&log->kas_))
|
||||
{
|
||||
//kasowanie
|
||||
clear_struct(&log->e_bieg_out_);
|
||||
clear_struct(&log->e_poz_out_);
|
||||
}
|
||||
|
||||
if (check_struct(&log->kas_))
|
||||
{
|
||||
if (!check_struct(&log->blok_trw_))
|
||||
{
|
||||
log->dw.blokada_trw = 0;
|
||||
}
|
||||
|
||||
}
|
||||
if (check_struct(&log->blok_trw_))
|
||||
{
|
||||
log->dw.blokada_trw = 1;
|
||||
|
||||
}
|
||||
check_and_set_struct(log->dw.blokada_trw, &log->blok_trw_out_);
|
||||
|
||||
|
||||
if (check_struct(&log->man_) && (!check_struct(&log->ster_poz_)) && (!check_struct(&log->auto_)))
|
||||
{
|
||||
//tryb rczny
|
||||
clear_struct(&log->blad_trybu_out_);
|
||||
blok = check_struct(&log->stan_bl_);
|
||||
check_and_set_struct( blok, &log->blok_out_);
|
||||
//sprawdzenie blokady trwalej
|
||||
blok |= check_struct(&log->blok_trw_out_);
|
||||
|
||||
clear_struct(&log->pob_G);
|
||||
clear_struct(&log->pob_D);
|
||||
*log->U_odn = 0;
|
||||
*log->tg_out = 0;
|
||||
*log->td_out = 0;
|
||||
}
|
||||
else
|
||||
if (!check_struct(&log->man_)&&(!check_struct(&log->ster_poz_))&&(check_struct(&log->auto_)))
|
||||
{
|
||||
//tryb automatyczny
|
||||
clear_struct(&log->blad_trybu_out_);
|
||||
|
||||
//sprawdzanie kompensacji linii 1
|
||||
if (log->nast_.akt_komp1)
|
||||
{
|
||||
local_orta_U1_ = log->w.orta_U1_ - ((log->w.orta_I1_ * log->nast_.R1 - log->w.ortb_I1_ * log->nast_.X1));
|
||||
local_ortb_U1_ = log->w.ortb_U1_ - ((log->w.orta_I1_ * log->nast_.X1 + log->w.ortb_I1_ * log->nast_.R1));
|
||||
}
|
||||
else
|
||||
{
|
||||
local_orta_U1_ = log->w.orta_U1_;
|
||||
local_ortb_U1_ = log->w.ortb_U1_;
|
||||
}
|
||||
//sprawdzanie kompensacji linii 2
|
||||
if (log->nast_.akt_komp2)
|
||||
{
|
||||
local_orta_U2_ = log->w.orta_U2_ - ((log->w.orta_I2_ * log->nast_.R2 - log->w.ortb_I2_ * log->nast_.X2));
|
||||
local_ortb_U2_ = log->w.ortb_U2_ - ((log->w.orta_I2_ * log->nast_.X2 + log->w.ortb_I2_ * log->nast_.R2));
|
||||
}
|
||||
else
|
||||
{
|
||||
local_orta_U2_ = log->w.orta_U2_;
|
||||
local_ortb_U2_ = log->w.ortb_U2_;
|
||||
}
|
||||
|
||||
blok = check_struct(&log->stan_bl_);
|
||||
//sprawdzenie blokady trwalej
|
||||
blok |= check_struct(&log->blok_trw_out_);
|
||||
|
||||
switch(log->nast_.tryb) ///< nastawa trybu dziaania 0-U1 1-U2 2-redniaU1/U2 3-maxU1/U2
|
||||
{
|
||||
case U1:
|
||||
//U1
|
||||
local_kwa_U_= (local_orta_U1_ * local_orta_U1_ + local_ortb_U1_* local_ortb_U1_);
|
||||
if (check_struct(&log->kon_U1_) && log->nast_.akt_kon_U1)
|
||||
log->dw.timer_blokad_pod_nap1 = 0;
|
||||
log->dw.timer_blokad_pod_nap1 +=LOOP_CYCLE_MS;;
|
||||
//blok |= (check_struct(&log->kon_U1_) && log->nast_.akt_kon_U1);
|
||||
blok |=(log->dw.timer_blokad_pod_nap1 < TP_OP_BLOKADY_NAP);
|
||||
break;
|
||||
case U2:
|
||||
//U2
|
||||
local_kwa_U_= (local_orta_U2_ * local_orta_U2_ + local_ortb_U2_* local_ortb_U2_);
|
||||
if (check_struct(&log->kon_U2_) && log->nast_.akt_kon_U2)
|
||||
log->dw.timer_blokad_pod_nap2 = 0;
|
||||
log->dw.timer_blokad_pod_nap2 +=LOOP_CYCLE_MS;;
|
||||
//blok |= (check_struct(&log->kon_U1_) && log->nast_.akt_kon_U1);
|
||||
blok |=(log->dw.timer_blokad_pod_nap2 < TP_OP_BLOKADY_NAP);
|
||||
//blok |= (check_struct(&log->kon_U2_) && log->nast_.akt_kon_U2);
|
||||
break;
|
||||
case sredniaU1U2:
|
||||
//redniaU1/U2
|
||||
local_kwa_U_ = (local_orta_U1_ * local_orta_U1_ + local_ortb_U1_* local_ortb_U1_);
|
||||
local_kwa_U_ += (local_orta_U2_ * local_orta_U2_ + local_ortb_U2_* local_ortb_U2_);
|
||||
local_kwa_U_ *= 0.5f;
|
||||
//blok |= (check_struct(&log->kon_U1_) && log->nast_.akt_kon_U1);
|
||||
//blok |= (check_struct(&log->kon_U2_) && log->nast_.akt_kon_U2);
|
||||
|
||||
if (check_struct(&log->kon_U1_) && log->nast_.akt_kon_U1)
|
||||
log->dw.timer_blokad_pod_nap1 = 0;
|
||||
log->dw.timer_blokad_pod_nap1 +=LOOP_CYCLE_MS;;
|
||||
blok |=(log->dw.timer_blokad_pod_nap1 < TP_OP_BLOKADY_NAP);
|
||||
|
||||
|
||||
if (check_struct(&log->kon_U2_) && log->nast_.akt_kon_U2)
|
||||
log->dw.timer_blokad_pod_nap2 = 0;
|
||||
log->dw.timer_blokad_pod_nap2 +=LOOP_CYCLE_MS;;
|
||||
blok |=(log->dw.timer_blokad_pod_nap2 < TP_OP_BLOKADY_NAP);
|
||||
|
||||
break;
|
||||
case maxU1U2:
|
||||
//max U1/U2
|
||||
//blok |= (check_struct(&log->kon_U1_) && log->nast_.akt_kon_U1);
|
||||
//blok |= (check_struct(&log->kon_U2_) && log->nast_.akt_kon_U2);
|
||||
if (check_struct(&log->kon_U1_) && log->nast_.akt_kon_U1)
|
||||
log->dw.timer_blokad_pod_nap1 = 0;
|
||||
log->dw.timer_blokad_pod_nap1 +=LOOP_CYCLE_MS;;
|
||||
blok |=(log->dw.timer_blokad_pod_nap1 < TP_OP_BLOKADY_NAP);
|
||||
|
||||
|
||||
if (check_struct(&log->kon_U2_) && log->nast_.akt_kon_U2)
|
||||
log->dw.timer_blokad_pod_nap2 = 0;
|
||||
log->dw.timer_blokad_pod_nap2 +=LOOP_CYCLE_MS;;
|
||||
blok |=(log->dw.timer_blokad_pod_nap2 < TP_OP_BLOKADY_NAP);
|
||||
|
||||
if ((log->w.kwampl_U1_)>(log->w.kwampl_U2_))
|
||||
{
|
||||
local_kwa_U_= (local_orta_U1_ * local_orta_U1_ + local_ortb_U1_* local_ortb_U1_);
|
||||
}
|
||||
else
|
||||
{
|
||||
local_kwa_U_= (local_orta_U2_ * local_orta_U2_ + local_ortb_U2_* local_ortb_U2_);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
//
|
||||
blok |= (check_struct(&log->kon_u_nr_zacz_) && log->nast_.akt_kon_Uzacz);
|
||||
check_and_set_struct( blok, &log->blok_out_);
|
||||
|
||||
//w local_kwa_U_ - kwadrat napicia odniesienia
|
||||
local_kwa_U_ *= 0.5f;
|
||||
local_U_ = sqrtf (local_kwa_U_);
|
||||
*log->U_odn = local_kwa_U_;
|
||||
|
||||
//Wybr napicia Uz - napicie zadane
|
||||
if (check_struct(&log->aktU1z_))
|
||||
local_Uz = log->nast_.Uz1;
|
||||
else
|
||||
if (check_struct(&log->aktU2z_))
|
||||
local_Uz = log->nast_.Uz2;
|
||||
else
|
||||
if (check_struct(&log->aktU3z_))
|
||||
local_Uz = log->nast_.Uz3;
|
||||
else
|
||||
if (check_struct(&log->aktU4z_))
|
||||
local_Uz = log->nast_.Uz4;
|
||||
else
|
||||
local_Uz = log->nast_.Uz1;
|
||||
//porownanie war pobudzenia
|
||||
//local_Uz - local_kwa_U_ ;
|
||||
sprawdz_P(&log->dw.pob_D,
|
||||
((local_Uz - local_U_ ) < (- log->nast_.dUzr)),
|
||||
((local_Uz - local_U_ ) > (- log->nast_.dUzp)),
|
||||
&log->dw.lp_D,
|
||||
100,100
|
||||
);
|
||||
sprawdz_P(&log->dw.pob_G,
|
||||
((local_Uz - local_U_ ) > log->nast_.dUzr),
|
||||
((local_Uz - local_U_ ) < log->nast_.dUzp),
|
||||
&log->dw.lp_G,
|
||||
100,100
|
||||
);
|
||||
check_and_set_struct((log->dw.pob_G > 0)&&(!blok)&&(!log->dw.blokada_ster_gora),&log->pob_G);
|
||||
check_and_set_struct((log->dw.pob_D > 0)&&(!blok)&&(!log->dw.blokada_ster_dol),&log->pob_D);
|
||||
}
|
||||
else
|
||||
if (!check_struct(&log->man_)&&(check_struct(&log->ster_poz_))&&(!check_struct(&log->auto_)))
|
||||
{
|
||||
//tryb nr zaczepu
|
||||
clear_struct(&log->blad_trybu_out_);
|
||||
//jesli zadany jest nr zaczepu
|
||||
blok = check_struct(&log->stan_bl_);
|
||||
blok |= (check_struct(&log->kon_u_nr_zacz_) && log->nast_.akt_kon_Uzacz);
|
||||
check_and_set_struct( blok, &log->blok_out_);
|
||||
//sprawdzenie blokady trwalej
|
||||
blok |= check_struct(&log->blok_trw_out_);
|
||||
|
||||
//(check_struct(&log->ster_poz_)) == 1
|
||||
if (((log->w.nr_zacz_zad) < (log->w.nr_zacz_)) && (!log->dw.blokada_ster_dol) && (!blok))
|
||||
{
|
||||
log->dw.pob_D = 1;
|
||||
log->dw.pob_G = 0;
|
||||
}
|
||||
else
|
||||
if (((log->w.nr_zacz_zad) > (log->w.nr_zacz_)) && (!log->dw.blokada_ster_gora) && (!blok))
|
||||
{
|
||||
log->dw.pob_D = 0;
|
||||
log->dw.pob_G = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
log->dw.pob_D = 0;
|
||||
log->dw.pob_G = 0;
|
||||
}
|
||||
|
||||
check_and_set_struct((log->dw.pob_G > 0)&&(!blok)&&(!log->dw.blokada_ster_gora) ,&log->pob_G);
|
||||
check_and_set_struct((log->dw.pob_D > 0)&&(!blok)&&(!log->dw.blokada_ster_dol) ,&log->pob_D);
|
||||
}
|
||||
else
|
||||
{
|
||||
//blad wyboru rodzaju pracy
|
||||
clear_struct(&log->pob_D);
|
||||
clear_struct(&log->pob_G);
|
||||
set_struct( &log->blok_out_);
|
||||
set_struct(&log->blad_trybu_out_);
|
||||
|
||||
}
|
||||
//
|
||||
|
||||
switch (log->_stan_man)
|
||||
{
|
||||
case CZEKANIE_NA_STEROWANIE_MANUAL:
|
||||
if (!check_struct(&log->man_))
|
||||
{
|
||||
//sprawdzenie czy nie przeczy na AUTO
|
||||
log->_stan_man = CZEKANIE_NA_STEROWANIE_AUTO;
|
||||
log->licz_t1G = log->licz_t2G = 0;
|
||||
log->licz_t1D = log->licz_t2D = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(check_struct(&log->gora_) && (!check_struct(&log->dol_)) && (!log->dw.blokada_ster_gora) && (!blok))
|
||||
{
|
||||
*log->tg_out = 0;
|
||||
*log->td_out = 0;
|
||||
log->licznik_ster_gora+=LOOP_CYCLE_MS;
|
||||
if (log->licznik_ster_gora > T_STER_RECZNEGO)
|
||||
{
|
||||
log->_stan_man = STEROWANIE_W_GORE;
|
||||
log->licznik_ster_gora =0;
|
||||
}
|
||||
log->licznik_ster_dol =0;
|
||||
}
|
||||
else
|
||||
//log->dw.pob_G;
|
||||
if(check_struct(&log->dol_) && (!check_struct(&log->gora_)) && (!log->dw.blokada_ster_dol) && (!blok))
|
||||
{
|
||||
log->licznik_ster_dol+=LOOP_CYCLE_MS;
|
||||
if (log->licznik_ster_dol > T_STER_RECZNEGO)
|
||||
{
|
||||
log->_stan_man = STEROWANIE_W_DOL;
|
||||
log->licznik_ster_dol =0;
|
||||
}
|
||||
log->licznik_ster_gora =0;
|
||||
}
|
||||
else
|
||||
{
|
||||
log->licznik_ster_dol = 0;
|
||||
log->licznik_ster_gora = 0;
|
||||
clear_struct(&log->gora_out_);
|
||||
clear_struct(&log->dol_out_);
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CZEKANIE_NA_STEROWANIE_NR_POZYCJI:
|
||||
if (!check_struct(&log->ster_poz_))
|
||||
{
|
||||
//sprawdzenie czy nie przeczy na AUTO
|
||||
log->_stan_man = CZEKANIE_NA_STEROWANIE_AUTO;
|
||||
log->licz_t1G = log->licz_t2G = 0;
|
||||
log->licz_t1D = log->licz_t2D = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(log->dw.pob_G && (!log->dw.pob_D) && (!log->dw.blokada_ster_gora) && (!blok))
|
||||
{
|
||||
//(check_struct(&log->ster_poz_)) == 1
|
||||
//gora nr pozycji
|
||||
if (log->licz_t2G < log->nast_.t2)
|
||||
{
|
||||
log->licz_t2G += LOOP_CYCLE_MS;
|
||||
}
|
||||
else
|
||||
{
|
||||
log->_stan_man = STEROWANIE_W_GORE;
|
||||
log->licz_t2G = 0;
|
||||
}
|
||||
|
||||
*log->tg_out = (float)(log->nast_.t2 - log->licz_t2G) * 0.001f;
|
||||
*log->td_out = 0;
|
||||
|
||||
}
|
||||
else
|
||||
if((log->dw.pob_D) && (!log->dw.pob_G) && (!log->dw.blokada_ster_dol) && (!blok))
|
||||
{
|
||||
//dol nr pozycji
|
||||
if (log->licz_t2D < log->nast_.t2)
|
||||
{
|
||||
log->licz_t2D += LOOP_CYCLE_MS;
|
||||
}
|
||||
else
|
||||
{
|
||||
log->_stan_man = STEROWANIE_W_DOL;
|
||||
log->licz_t2D = 0;
|
||||
}
|
||||
*log->td_out = (float)(log->nast_.t2 - log->licz_t2D) * 0.001f;
|
||||
*log->tg_out = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CZEKANIE_NA_STEROWANIE_AUTO:
|
||||
if (check_struct(&log->man_))
|
||||
{
|
||||
//sprawdzenie czy nie przeczy na MANUAL
|
||||
log->_stan_man = CZEKANIE_NA_STEROWANIE_MANUAL;
|
||||
}
|
||||
else
|
||||
if (check_struct(&log->ster_poz_))
|
||||
{
|
||||
//sprawdzenie czy nie przeczy na NR_POZ
|
||||
log->_stan_man = CZEKANIE_NA_STEROWANIE_NR_POZYCJI;
|
||||
}
|
||||
else
|
||||
if (log->dw.pob_G && (!log->dw.pob_D) && (!log->dw.blokada_ster_gora)&& (!blok))
|
||||
{
|
||||
//gora auto
|
||||
if (log->licz_t1G < log->nast_.t1)
|
||||
{
|
||||
log->licz_t1G += LOOP_CYCLE_MS * ((local_Uz - local_U_ ) / log->nast_.dUzr);
|
||||
}
|
||||
else
|
||||
if (log->licz_t2G < log->nast_.t2)
|
||||
{
|
||||
log->licz_t2G += LOOP_CYCLE_MS;
|
||||
}
|
||||
else
|
||||
{
|
||||
log->_stan_man = STEROWANIE_W_GORE;
|
||||
log->licz_t1G = log->licz_t2G = 0;
|
||||
}
|
||||
*log->tg_out = (float)((log->nast_.t1 + log->nast_.t2 - log->licz_t1G - log->licz_t2G) * 0.001f);
|
||||
*log->td_out = 0;
|
||||
}
|
||||
else
|
||||
if(log->dw.pob_D && (!log->dw.pob_G) && (!log->dw.blokada_ster_dol)&& (!blok))
|
||||
{
|
||||
//dol auto
|
||||
if (log->licz_t1D < log->nast_.t1)
|
||||
{
|
||||
log->licz_t1D += LOOP_CYCLE_MS *((local_Uz - local_U_ ) / -log->nast_.dUzr);
|
||||
}
|
||||
else
|
||||
if (log->licz_t2D < log->nast_.t2)
|
||||
{
|
||||
log->licz_t2D += LOOP_CYCLE_MS;
|
||||
}
|
||||
else
|
||||
{
|
||||
log->_stan_man = STEROWANIE_W_DOL;
|
||||
log->licz_t1D = log->licz_t2D = 0;
|
||||
}
|
||||
*log->td_out = (log->nast_.t1 + log->nast_.t2 - log->licz_t1D - log->licz_t2D) * 0.001f;
|
||||
*log->tg_out = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
*log->td_out = 0;
|
||||
*log->tg_out = 0;
|
||||
log->licz_t1G = log->licz_t2G = 0;
|
||||
log->licz_t1D = log->licz_t2D = 0;
|
||||
clear_struct(&log->gora_out_);
|
||||
clear_struct(&log->dol_out_);
|
||||
}
|
||||
break;
|
||||
//gora
|
||||
case STEROWANIE_W_GORE:
|
||||
*log->td_out = 0;
|
||||
*log->tg_out = 0;
|
||||
set_struct(&log->gora_out_);
|
||||
log->_stan_man = IMPULS_W_GORE;
|
||||
log->licznik_ster_biegu = 0;
|
||||
log->licznik_ster_gora = 0;
|
||||
log->nr_zaczepu_przed_ster = log->w.nr_zacz_;
|
||||
clear_struct(&log->e_bieg_out_);
|
||||
clear_struct(&log->e_poz_out_);
|
||||
log->dw.byl_bieg = 0;
|
||||
|
||||
break;
|
||||
case IMPULS_W_GORE:
|
||||
log->licznik_ster_gora+=LOOP_CYCLE_MS;
|
||||
if ((log->licznik_ster_gora > log->nast_.t_imp_ster))
|
||||
{
|
||||
log->licznik_ster_gora = 0;
|
||||
log->licznik_poz_gora = 0;
|
||||
log->_stan_man = SPRAWDZENIE_ODP_PRZE_ZACZEPOW_GORA;
|
||||
clear_struct(&log->gora_out_);
|
||||
if ((log->nast_.kon_biegu) && (!(log->dw.byl_bieg & 0x1 >0) ))
|
||||
set_struct(&log->e_bieg_out_);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((log->nast_.kon_biegu) && (check_struct(&log->bieg_)))
|
||||
{
|
||||
log->dw.byl_bieg |=1;
|
||||
log->licznik_ster_biegu+=LOOP_CYCLE_MS;
|
||||
if (((log->licznik_ster_biegu > log->nast_.t_ster_zacz)))
|
||||
{
|
||||
set_struct(&log->e_bieg_out_);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
case SPRAWDZENIE_ODP_PRZE_ZACZEPOW_GORA:
|
||||
//sprawdzenie odpowiedzi przecznika zaczepw tj. czas max, zmiana nr +1, itp
|
||||
//trzeba si zastanowic jak kontrolowa sygna BIEG_PRZE_ZACZ??
|
||||
if ((((log->nast_.kon_biegu)&&((!check_struct(&log->bieg_))&&(log->dw.byl_bieg & 0x01))||(check_struct(&log->e_bieg_out_))||(!(log->nast_.kon_biegu)))) && (!check_struct(&log->zo_zacz_)))
|
||||
{
|
||||
log->_stan_man = KONIEC_STEROWANIA;
|
||||
if ((log->nast_.kon_poz_ster)&&(log->w.nr_zacz_ <= log->nr_zaczepu_przed_ster))
|
||||
{
|
||||
set_struct(&log->e_poz_out_);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->licznik_ster_biegu+=LOOP_CYCLE_MS;
|
||||
if (((log->licznik_ster_biegu > log->nast_.t_ster_zacz))&&(check_struct(&log->bieg_))&&(log->nast_.kon_biegu))
|
||||
{
|
||||
log->_stan_man = KONIEC_STEROWANIA;
|
||||
set_struct(&log->e_bieg_out_);
|
||||
}
|
||||
}
|
||||
break;
|
||||
//dol
|
||||
case STEROWANIE_W_DOL:
|
||||
*log->td_out = 0;
|
||||
*log->tg_out = 0;
|
||||
set_struct(&log->dol_out_);
|
||||
log->_stan_man = IMPULS_W_DOL;
|
||||
log->licznik_ster_dol = 0;
|
||||
log->licznik_ster_biegu = 0;
|
||||
log->nr_zaczepu_przed_ster = log->w.nr_zacz_;
|
||||
clear_struct(&log->e_bieg_out_);
|
||||
clear_struct(&log->e_poz_out_);
|
||||
log->dw.byl_bieg =0;
|
||||
break;
|
||||
case IMPULS_W_DOL:
|
||||
{
|
||||
log->licznik_ster_dol+=LOOP_CYCLE_MS;
|
||||
if ((log->licznik_ster_dol > log->nast_.t_imp_ster))
|
||||
{
|
||||
log->licznik_ster_gora = 0;
|
||||
log->licznik_poz_gora = 0;
|
||||
log->_stan_man = SPRAWDZENIE_ODP_PRZE_ZACZEPOW_DOL;
|
||||
clear_struct(&log->dol_out_);
|
||||
if ((log->nast_.kon_biegu) && (!(log->dw.byl_bieg & 0x1 > 0)))
|
||||
set_struct(&log->e_bieg_out_);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((log->nast_.kon_biegu) && (check_struct(&log->bieg_)))
|
||||
{
|
||||
log->dw.byl_bieg |=1;
|
||||
log->licznik_ster_biegu+=LOOP_CYCLE_MS;
|
||||
if (((log->licznik_ster_biegu > log->nast_.t_ster_zacz)))
|
||||
{
|
||||
set_struct(&log->e_bieg_out_);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case SPRAWDZENIE_ODP_PRZE_ZACZEPOW_DOL:
|
||||
//sprawdzenie odpowiedzi przecznika zaczepw tj. czas max, zmiana nr +1, itp
|
||||
if ((((log->nast_.kon_biegu)&&((!check_struct(&log->bieg_))&&(log->dw.byl_bieg & 0x01))||(check_struct(&log->e_bieg_out_))||(!(log->nast_.kon_biegu)))) && (!check_struct(&log->zo_zacz_)))
|
||||
//if ((log->nast_.kon_biegu)&&(!check_struct(&log->bieg_))||(!(log->nast_.kon_biegu)))
|
||||
{
|
||||
log->_stan_man = KONIEC_STEROWANIA;
|
||||
if ((log->nast_.kon_poz_ster)&&(log->w.nr_zacz_ >= log->nr_zaczepu_przed_ster))
|
||||
{
|
||||
set_struct(&log->e_poz_out_);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->licznik_ster_biegu+=LOOP_CYCLE_MS;
|
||||
if (((log->licznik_ster_biegu > log->nast_.t_ster_zacz))&&(check_struct(&log->bieg_))&&(log->nast_.kon_biegu))
|
||||
{
|
||||
log->_stan_man = KONIEC_STEROWANIA;
|
||||
set_struct(&log->e_bieg_out_);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case KONIEC_STEROWANIA:
|
||||
if (check_struct(&log->man_))
|
||||
{
|
||||
//sprawdzenie czy nie przeczy na MANUAL
|
||||
log->_stan_man = CZEKANIE_NA_STEROWANIE_MANUAL;
|
||||
}
|
||||
else
|
||||
if (check_struct(&log->ster_poz_))
|
||||
{
|
||||
//sprawdzenie czy nie przeczy na NR_POZ
|
||||
log->_stan_man = CZEKANIE_NA_STEROWANIE_NR_POZYCJI;
|
||||
}
|
||||
else
|
||||
{
|
||||
//sprawdzenie czy nie przeczy na AUTO
|
||||
log->_stan_man = CZEKANIE_NA_STEROWANIE_AUTO;
|
||||
log->licz_t1G = log->licz_t2G = 0;
|
||||
log->licz_t1D = log->licz_t2D = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
log->_stan_man = CZEKANIE_NA_STEROWANIE_MANUAL;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
clear_struct(&log->gora_out_);
|
||||
clear_struct(&log->dol_out_);
|
||||
clear_struct(&log->e_bieg_out_);
|
||||
clear_struct(&log->e_poz_out_);
|
||||
clear_struct(&log->pob_G);
|
||||
clear_struct(&log->pob_D);
|
||||
*log->U_odn = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void rnt_100hz(void *arguments, void *logic)
|
||||
{
|
||||
struct rnt_logic *log = (struct rnt_logic *)logic;
|
||||
// int t;
|
||||
|
||||
if(log->nast_.on) // jesli zabezpieczenie aktywne
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
void rnt_20hz(void *arguments, void *logic)
|
||||
{
|
||||
//struct rnt_logic *log = (struct rnt_logic *)logic;
|
||||
|
||||
}
|
||||
324
src/RNT.h
Normal file
324
src/RNT.h
Normal file
@@ -0,0 +1,324 @@
|
||||
/*
|
||||
* RNT.h
|
||||
*
|
||||
* Created on: 14-11-2018
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef RNT_H_
|
||||
#define RNT_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "helper.h"
|
||||
|
||||
#define T_STER_RECZNEGO 1
|
||||
#define TP_OP_BLOKADY_NAP 500
|
||||
|
||||
enum _stan_man_rnt
|
||||
{
|
||||
CZEKANIE_NA_STEROWANIE_MANUAL = 0,
|
||||
CZEKANIE_NA_STEROWANIE_NR_POZYCJI = 1,
|
||||
CZEKANIE_NA_STEROWANIE_AUTO = 2,
|
||||
|
||||
STEROWANIE_W_GORE = 5,
|
||||
IMPULS_W_GORE = 6,
|
||||
SPRAWDZENIE_ODP_PRZE_ZACZEPOW_GORA = 7,
|
||||
|
||||
STEROWANIE_W_DOL = 11,
|
||||
IMPULS_W_DOL = 12,
|
||||
SPRAWDZENIE_ODP_PRZE_ZACZEPOW_DOL = 13,
|
||||
|
||||
KONIEC_STEROWANIA = 20
|
||||
};
|
||||
|
||||
|
||||
struct Nastawy_przeliczone_rnt
|
||||
{
|
||||
float R1; ///< wartosc rezystancji linii po str. pierwotnej
|
||||
float X1; ///< wartosc reaktancji linii po str. pierwotnej
|
||||
float R2; ///< wartosc rezystancji linii po str. pierwotnej
|
||||
float X2; ///< wartosc reaktancji linii po str. pierwotnej
|
||||
short tryb; ///< nastawa trybu działania 0-U1 1-U2 2-średniaU1/U2 3-maxU1/U2
|
||||
int t1; ///< opoznienie czasu zadzialania przekaznika
|
||||
int t2; ///< opoznienie czasu zadzialania przekaznika
|
||||
|
||||
float dUzr; ///< wartosc rozruchowa do napięcia nieczułości
|
||||
float dUzp; ///< wartosc powrotu do napięcia nieczułości
|
||||
|
||||
float Uz1; ///< wartosc napięcia zadanego nr 1
|
||||
float Uz2; ///< wartosc napięcia zadanego nr 2
|
||||
float Uz3; ///< wartosc napięcia zadanego nr 3
|
||||
float Uz4; ///< wartosc napięcia zadanego nr 4
|
||||
|
||||
int t_imp_ster; /// czas implusu sterującego gora/doł
|
||||
int t_ster_zacz; ///< czas maks sterowania
|
||||
int t_poz_zacz; /// czas odpowiedzi pozycji zaczepu
|
||||
|
||||
float kp; ///< wspolczynnik powrotu dla Uz
|
||||
|
||||
u8 on; ///< wartosc nastawy aktywnosci przekaznika 1- aktywny
|
||||
u8 kon_biegu; /// kontrola biegu sterowania przełącznikiem zaczepów (wg dodatkowego wejscia BIEG)
|
||||
u8 kon_poz_ster; /// kontrola pozycji zaczepu przy sterowaniu (porównanie nr zaczepu przed i po sterowaniu)
|
||||
u8 akt_kon_U1; /// kontrola zabezpieczenia pomiaru U1
|
||||
u8 akt_kon_U2; /// kontrola zabezpieczenia pomiaru U2
|
||||
u8 akt_kon_Uzacz; /// kontrola zabezpieczenia napięcia zaczepu
|
||||
u8 akt_blok_biegu; /// aktywnosc blokady od biegu przełącznika zaczepów
|
||||
u8 akt_blok_pozycja; /// aktywnosc blokady od niewlasciwej pozycji zaczepu po sterowaniu
|
||||
u8 akt_mfazowe; /// aktywne pomiary między fazowe
|
||||
|
||||
u8 akt_komp1; ///< czy kompensacja 1 jest aktywana 1-aktywana
|
||||
u8 akt_komp2; ///< czy kompensacja 2 jest aktywana 1-aktywana
|
||||
|
||||
u8 bl; ///< wartosc nastawy aktywnosci blokady dzialania 1- blokada aktywna
|
||||
};
|
||||
|
||||
struct Wejscie_rnt
|
||||
{
|
||||
float orta_U1_; ///< ortogonalna a napięcia wejsciowego U1
|
||||
float ortb_U1_; ///< ortogonalna b napięcia wejsciowego U1
|
||||
float kwampl_U1_; ///< kwadrat amplitudy prądu
|
||||
float orta_I1_;///< ortogonalna a prądu wejsciowego I1
|
||||
float ortb_I1_;///< ortogonalna b prądu wejsciowego I1
|
||||
float kwampl_I1_;///< kwadrat amplitudy prądu
|
||||
float orta_U2_; ///< ortogonalna a napięcia wejsciowego U2
|
||||
float ortb_U2_; ///< ortogonalna b napięcia wejsciowego U2
|
||||
float kwampl_U2_; ///< kwadrat amplitudy napięcia
|
||||
float orta_I2_;///< ortogonalna a prądu wejsciowego I1
|
||||
float ortb_I2_;///< ortogonalna b prądu wejsciowego I1
|
||||
float kwampl_I2_;///< kwadrat amplitudy prądu
|
||||
|
||||
float nr_zacz_;///nr zaczepu z przełącznika trafo
|
||||
float nr_zacz_zad;///nr zaczepu z przełącznika trafo
|
||||
|
||||
};
|
||||
|
||||
struct dane_wewnetrzne_rnt
|
||||
{
|
||||
|
||||
u8 zacz_w_gore;
|
||||
u8 zacz_w_dol;
|
||||
u8 blokada_trw;
|
||||
u8 blokada_ster_gora;
|
||||
u8 blokada_ster_dol;
|
||||
u8 pob_G; //pobudzenie automatyki G
|
||||
u8 pob_D; //pobudzenie automatyki D
|
||||
short lp_G; //licznik pobudzenia G
|
||||
short lp_D; //licznik pobudzenia D
|
||||
u8 byl_bieg;
|
||||
int timer_blokad_pod_nap1;
|
||||
int timer_blokad_pod_nap2;
|
||||
};
|
||||
|
||||
struct rnt_logic
|
||||
{
|
||||
struct binary_io stan_bl_;
|
||||
struct binary_io man_;
|
||||
struct binary_io auto_;
|
||||
|
||||
float *orta_U1_;
|
||||
float *ortb_U1_;
|
||||
float *kwampl_U1_;
|
||||
struct binary_io kon_U1_;
|
||||
|
||||
float *orta_I1_;
|
||||
float *ortb_I1_;
|
||||
float *kwampl_I1_;
|
||||
|
||||
|
||||
float *orta_U2_;
|
||||
float *ortb_U2_;
|
||||
float *kwampl_U2_;
|
||||
struct binary_io kon_U2_;
|
||||
|
||||
float *orta_I2_;
|
||||
float *ortb_I2_;
|
||||
float *kwampl_I2_;
|
||||
|
||||
float *nr_zacz_;
|
||||
struct binary_io kon_u_nr_zacz_;
|
||||
struct binary_io zo_zacz_;
|
||||
|
||||
struct binary_io gora_;
|
||||
struct binary_io dol_;
|
||||
struct binary_io bieg_;
|
||||
struct binary_io aktU1z_;
|
||||
struct binary_io aktU2z_;
|
||||
struct binary_io aktU3z_;
|
||||
struct binary_io aktU4z_;
|
||||
|
||||
struct binary_io bl_gora_;
|
||||
struct binary_io bl_dol_;
|
||||
|
||||
struct binary_io test_;
|
||||
struct binary_io kas_;
|
||||
|
||||
struct binary_io blok_trw_;
|
||||
|
||||
|
||||
|
||||
struct binary_io gora_out_;
|
||||
struct binary_io dol_out_;
|
||||
|
||||
struct binary_io e_bieg_out_;
|
||||
struct binary_io e_poz_out_;
|
||||
struct binary_io zaczep_min;
|
||||
struct binary_io zaczep_max;
|
||||
|
||||
struct binary_io pob_G;
|
||||
struct binary_io pob_D;
|
||||
|
||||
struct binary_io blok_out_;
|
||||
struct binary_io blok_trw_out_;
|
||||
struct binary_io blad_trybu_out_;
|
||||
|
||||
struct binary_io ster_poz_;
|
||||
|
||||
float *nr_zacz_zad;
|
||||
|
||||
float *U_odn;//napięcie odniesienia
|
||||
float *tg_out;//czas do przełączenia w górę
|
||||
float *td_out;//czas do przełączenia w dół
|
||||
|
||||
struct Nastawy_przeliczone_rnt nast_;
|
||||
struct dane_wewnetrzne_rnt dw;
|
||||
struct Wejscie_rnt w;
|
||||
|
||||
enum _stan_man_rnt _stan_man;
|
||||
u32 licznik_ster_gora;
|
||||
u32 licznik_ster_dol;
|
||||
u32 licznik_poz_gora;
|
||||
u32 licznik_poz_dol;
|
||||
u32 licznik_ster_biegu;
|
||||
|
||||
u8 nr_zaczepu_przed_ster; //nr zaczepu przed sterowaniem
|
||||
float licz_t1G;
|
||||
int licz_t2G;
|
||||
float licz_t1D;
|
||||
int licz_t2D;
|
||||
|
||||
struct analog_in_params *I_params[2];
|
||||
struct analog_in_params *U_params[2];
|
||||
|
||||
float mul[2];
|
||||
|
||||
|
||||
};
|
||||
|
||||
struct rnt_io
|
||||
{
|
||||
u32 stan_bl_in;
|
||||
u32 man_in;
|
||||
u32 auto_in;
|
||||
|
||||
u32 orta_U1_float_in;
|
||||
u32 ortb_U1_float_in;
|
||||
u32 kwampl_U1_float_in;
|
||||
u32 U1_params_ptr_in;
|
||||
u32 kon_U1_in;
|
||||
u32 orta_I1_float_in;
|
||||
u32 ortb_I1_float_in;
|
||||
u32 kwampl_I1_float_in;
|
||||
u32 I1_params_ptr_in;
|
||||
|
||||
u32 orta_U2_float_in;
|
||||
u32 ortb_U2_float_in;
|
||||
u32 kwampl_U2_float_in;
|
||||
u32 U2_params_ptr_in;
|
||||
u32 kon_U2_in;
|
||||
u32 orta_I2_float_in;
|
||||
u32 ortb_I2_float_in;
|
||||
u32 kwampl_I2_float_in;
|
||||
u32 I2_params_ptr_in;
|
||||
|
||||
u32 nr_zacz_in;
|
||||
u32 zo_zacz_in;
|
||||
u32 kon_u_nr_zacz_in;
|
||||
|
||||
u32 bieg_in;
|
||||
|
||||
u32 gora_in;
|
||||
u32 dol_in;
|
||||
|
||||
u32 aktU1z_in;
|
||||
u32 aktU2z_in;
|
||||
u32 aktU3z_in;
|
||||
u32 aktU4z_in;
|
||||
|
||||
u32 bl_gora_in;
|
||||
u32 bl_dol_in;
|
||||
|
||||
u32 test_in;
|
||||
u32 kas_in;
|
||||
|
||||
u32 ster_poz_in;
|
||||
u32 zad_zacz_in;
|
||||
u32 blok_trw_in;
|
||||
|
||||
u32 gora_out;
|
||||
u32 dol_out;
|
||||
u32 e_bieg_out;
|
||||
u32 e_poz_out;
|
||||
|
||||
u32 pob_G_out;
|
||||
u32 pob_D_out;
|
||||
u32 Uodn_float_out;
|
||||
u32 tg_out;
|
||||
u32 td_out;
|
||||
u32 blok_out;
|
||||
u32 blok_trw_out;
|
||||
u32 blad_trybu_out;
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct rnt_params
|
||||
{
|
||||
u32 akt; ///< nastawy bitowe;
|
||||
u32 tryb; ///< wybór trybu regulacji (0=U1/1=U2/2=średnia U1 z U2/3=maksymalna U1 lub U2)
|
||||
u32 akt_komp1; ///< nastawy bitowe;
|
||||
double R1; ///< rezystancja linii 1 w wart. pier
|
||||
double X1; ///< reaktanacja linii 1 w wart. pier
|
||||
u32 akt_komp2; ///< nastawy bitowe;
|
||||
double R2; ///< rezystancja linii 2 w wart. pier
|
||||
double X2; ///< reaktanacja linii 2 w wart. pier
|
||||
|
||||
double t1; ///< wartosc nastawy czasu dzialania ch-ki zależnej w sekundach stopień 1
|
||||
double t2; ///< wartosc nastawy czasu dzialania ch-ki niezależnej w sekundach stopień 2
|
||||
double dUz; ///< dopuszczalne napięcie nieczułości
|
||||
double kp; ///< współczynnik powrotu dla dUz
|
||||
|
||||
double Uz1; ///< zadane napięcie nr 1
|
||||
double Uz2; ///< zadane napięcie nr 2
|
||||
double Uz3; ///< zadane napięcie nr 3
|
||||
double Uz4; ///< zadane napięcie nr 4
|
||||
|
||||
double t_imp_ster; ///< wartosc nastawy impulsu sterującego
|
||||
double t_ster_zacz; ///< wartosc nastawy max. czasu sterowania zaczepu
|
||||
double t_poz_zacz; ///< wartosc nastawy max. czasu rekacji nr zaczepu
|
||||
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct rnt_args
|
||||
{
|
||||
struct rnt_io io;
|
||||
struct rnt_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void rnt(void *args, void *logic);
|
||||
extern void rnt_100hz(void *args, void *logic);
|
||||
extern void rnt_20hz(void *args, void *logic);
|
||||
extern int rnt_initlog(void *arguments, void *logic);
|
||||
|
||||
|
||||
|
||||
enum _tryb_pracy_rnt
|
||||
{
|
||||
U1 = 0,
|
||||
U2 = 1,
|
||||
sredniaU1U2 = 2,
|
||||
maxU1U2 = 3
|
||||
};
|
||||
|
||||
|
||||
#endif /* RNT_H_ */
|
||||
507
src/R_67N_LWN.c
Normal file
507
src/R_67N_LWN.c
Normal file
@@ -0,0 +1,507 @@
|
||||
/*
|
||||
* R_67N_LWN.c
|
||||
*
|
||||
* Created on: 20-07-2016
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "r_67n_lwn.h"
|
||||
#include "analog_in.h"
|
||||
#include "helper.h"
|
||||
#include "ZDistL.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
int r_67n_lwn_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct r_67n_lwn_args *args = (struct r_67n_lwn_args *)arguments;
|
||||
struct r_67n_lwn_logic *log = (struct r_67n_lwn_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.stan_bl_in,&log->stan_bl_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.orta_I_float_in,&log->orta_I_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.ortb_I_float_in,&log->ortb_I_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.kwampl_I_float_in,&log->kwampl_I_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.orta_U_float_in,&log->orta_U_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.ortb_U_float_in,&log->ortb_U_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.kwampl_U_float_in,&log->kwampl_U_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.IL1_float_in,&log->IL1))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.IL2_float_in,&log->IL2))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.IL3_float_in,&log->IL3))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.Io2h_float_in,&log->Io2h))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.test_in,&log->test))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.l_odb_in,&log->l_odb))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.l_ok_in,&log->l_ok))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.w_out,&log->W))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.z1_out,&log->Z1))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.z2_out,&log->Z2))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.p1_out,&log->P1))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.p2_out,&log->P2))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.kier_out,&log->kier))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.NRL_out,&log->NRL))
|
||||
return -1;
|
||||
|
||||
|
||||
////
|
||||
//status_rej = oczekiwanie;
|
||||
|
||||
log->nast_.on_ = args->params.bity & 0x0001;
|
||||
log->nast_.w1 = args->params.bity & 0x0002;
|
||||
log->nast_.w2 = args->params.bity & 0x0004;
|
||||
log->nast_.Bl_2h1_ON = (args->params.bity & 0x0008)?1:0;
|
||||
log->nast_.Bl_2h2_ON = (args->params.bity & 0x0010)?1:0;
|
||||
log->nast_.bl_ = args->params.bity & 0x0020;
|
||||
|
||||
|
||||
log->nast_.dir = args->params.dir;
|
||||
|
||||
log->nast_.Ir1 = args->params.I1 * args->params.I1; // wyliczenie wartosci rozruchowej pradu
|
||||
log->nast_.Ir2 = args->params.I2 * args->params.I2; // wyliczenie wartosci rozruchowej pradu
|
||||
|
||||
log->nast_.Ip1 = log->nast_.Ir1 * args->params.kp * args->params.kp; // wyliczenie wartoci powrotu algorytmu
|
||||
log->nast_.Ip2 = log->nast_.Ir2 * args->params.kp * args->params.kp; // wyliczenie wartoci powrotu algorytmu
|
||||
|
||||
log->nast_.kh1 = args->params.kh1 * args->params.kh1;
|
||||
log->nast_.khp1 = log->nast_.kh1 * args->params.kp * args->params.kp;
|
||||
log->nast_.kh2 = args->params.kh2 * args->params.kh2;
|
||||
log->nast_.khp2 = log->nast_.kh2 * args->params.kp * args->params.kp;
|
||||
|
||||
log->nast_.U_echo = args->params.L_U_echo * args->params.L_U_echo; // wyliczenie wartosci rozruchowej blokady napieciowej
|
||||
log->nast_.Ur = args->params.U * args->params.U; // wyliczenie wartosci rozruchowej blokady napieciowej
|
||||
log->nast_.Up = log->nast_.Ur * args->params.kp * args->params.kp; // wyliczenie wartosci powrotu blokady napieciowej
|
||||
log->nast_.orta = cos(args->params.kat * (3.14159f / 180)); // wartosc ortogonalnej a wektora przesuniecia dla kata charakterystycznego
|
||||
log->nast_.ortb = sin(args->params.kat * (3.14159f / 180)); // wartosc ortogonalnej b wektora przesuniecia dla kata charakterystycznego
|
||||
|
||||
log->nast_.I1_2hr = args->params.Io2h1 * args->params.Io2h1;
|
||||
log->nast_.I1_2hr_powr = (0.95 * args->params.Io2h1) * (0.95 * args->params.Io2h1);
|
||||
|
||||
|
||||
log->nast_.t1 = ((args->params.t1 - 0.005f) * 100); //czas dzialania
|
||||
if (log->nast_.t1) log->nast_.t0_1 = 0; else log->nast_.t0_1 = 1;
|
||||
log->nast_.t2 = ((args->params.t2 - 0.005f) * 100); //czas dzialania
|
||||
if (log->nast_.t2) log->nast_.t0_2 = 0; else log->nast_.t0_2 = 1;
|
||||
|
||||
log->nast_.l_nad_time=(u32)(args->params.L_t_nad * 1000);
|
||||
log->nast_.l_t_blok=(u32)(args->params.L_T_odwr * 1000);
|
||||
log->nast_.t1_min=(u32)((args->params.t1_min - 0.005f) * 100);
|
||||
log->nast_.t2_min=(u32)((args->params.t2_min - 0.005f) * 100);
|
||||
// *((uint8_t *)REG_FUNCTION_ON_OFF + id - 0x2400) = log->nast_.on_;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void r_67n_lwn(void *arguments, void *logic)
|
||||
{
|
||||
struct r_67n_lwn_args *args = (struct r_67n_lwn_args *)arguments;
|
||||
struct r_67n_lwn_logic *log = (struct r_67n_lwn_logic *)logic;
|
||||
float local_orta_U_ ,local_ortb_U_, ILmax;
|
||||
u8 wk,l_nrl;
|
||||
|
||||
if(log->nast_.on_) // jesli zabezpieczenie aktywne
|
||||
{
|
||||
log->w.kwampl_U_ = *log->kwampl_U_;
|
||||
log->w.kwampl_I_ = *log->kwampl_I_;
|
||||
log->w.orta_I_ = *log->orta_I_;
|
||||
log->w.orta_U_ = *log->orta_U_;
|
||||
log->w.ortb_I_ = *log->ortb_I_;
|
||||
log->w.ortb_U_ = *log->ortb_U_;
|
||||
log->w.IL1 = *log->IL1;
|
||||
log->w.IL2 = *log->IL2;
|
||||
log->w.IL3 = *log->IL3;
|
||||
log->w.Io2h = *log->Io2h;
|
||||
|
||||
// przesuniecie napiecia o wektor kata nastawy
|
||||
local_orta_U_ = log->w.orta_U_ * log->nast_.orta - log->w.ortb_U_ * log->nast_.ortb;
|
||||
local_ortb_U_ = log->w.orta_U_ * log->nast_.ortb + log->w.ortb_U_ * log->nast_.orta;
|
||||
|
||||
// okreslenie kierunku
|
||||
log->dw.kierunek = (log->w.orta_I_ * local_orta_U_ + log->w.ortb_I_ * local_ortb_U_) > 0;
|
||||
if(!czy_test_R()) // w tescie nie uzywaj kierunku
|
||||
check_and_set_struct(log->dw.kierunek,&log->kier);
|
||||
|
||||
switch(log->nast_.dir) //okeslenie kierunku stopnia 1
|
||||
{
|
||||
case 0:
|
||||
wk = log->dw.kierunek;
|
||||
break;
|
||||
case 1:
|
||||
wk = !log->dw.kierunek;
|
||||
break;
|
||||
case 2:
|
||||
wk = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
//sprawdzenie warunku napiciowego
|
||||
log->dw.P_U |= log->w.kwampl_U_ > log->nast_.Ur;
|
||||
log->dw.P_U &= log->w.kwampl_U_ > log->nast_.Up;
|
||||
|
||||
if(log->dw.Bl_2h1)
|
||||
log->dw.Bl_2h1 = log->w.Io2h > log->nast_.I1_2hr_powr * log->w.kwampl_I_;
|
||||
else
|
||||
log->dw.Bl_2h1 = log->w.Io2h > log->nast_.I1_2hr * log->w.kwampl_I_;
|
||||
|
||||
if(log->dw.Bl_2h2)
|
||||
log->dw.Bl_2h2 = log->w.Io2h > log->nast_.I1_2hr_powr * log->w.kwampl_I_;
|
||||
else
|
||||
log->dw.Bl_2h2 = log->w.Io2h > log->nast_.I1_2hr * log->w.kwampl_I_;
|
||||
|
||||
log->dw.Bl_2h1 &= log->nast_.Bl_2h1_ON;
|
||||
log->dw.Bl_2h2 &= log->nast_.Bl_2h2_ON;
|
||||
|
||||
//Sprawdzenie przekaznikw pradowych
|
||||
//szukanie maksymalnego pradu
|
||||
ILmax = log->w.IL1;
|
||||
if (ILmax < log->w.IL2) ILmax = log->w.IL2;
|
||||
if (ILmax < log->w.IL3) ILmax = log->w.IL3;
|
||||
|
||||
//sprawdzenie pobudzenia stopnia 1
|
||||
sprawdz_P(&log->dw.P1,
|
||||
wk && log->dw.P_U && !log->dw.Bl_2h1 && log->w.kwampl_I_ > log->nast_.Ir1 && log->w.kwampl_I_ > (log->nast_.kh1 * ILmax),
|
||||
!wk || !log->dw.P_U || log->dw.Bl_2h1 || log->w.kwampl_I_ < log->nast_.Ip1 || log->w.kwampl_I_ < (log->nast_.khp1 * ILmax),
|
||||
&log->dw.lp1,
|
||||
11,3
|
||||
);
|
||||
|
||||
//sprawdzenie pobudzenia stopnia 2
|
||||
sprawdz_P(&log->dw.P2,
|
||||
wk && log->dw.P_U && !log->dw.Bl_2h2 && log->w.kwampl_I_ > log->nast_.Ir2 && log->w.kwampl_I_ > log->nast_.kh2 * ILmax,
|
||||
!wk || !log->dw.P_U || log->dw.Bl_2h2 || log->w.kwampl_I_ < log->nast_.Ip2 || log->w.kwampl_I_ < log->nast_.khp2 * ILmax,
|
||||
&log->dw.lp2,
|
||||
11,3
|
||||
);
|
||||
|
||||
//obsluga wejscia testu przekaznika
|
||||
if (czy_test_R())
|
||||
{
|
||||
log->dw.P1 = log->dw.P2 = check_struct(&log->test)?1:0;
|
||||
}
|
||||
//
|
||||
|
||||
// realizacja blokady dzialania przekaznika
|
||||
if(log->nast_.bl_ && check_struct(&log->stan_bl_) /*| czy_start()*/)
|
||||
log->dw.P1 = log->dw.P2 = 0;
|
||||
//
|
||||
|
||||
log->dw.Z1 |= (log->dw.P1 && log->nast_.t0_1); // jesli dziaanie bezzwoczne stopnia 1
|
||||
log->dw.Z2 |= log->dw.P2 && log->nast_.t0_2; // jesli dziaanie bezzwoczne stopnia 2
|
||||
log->dw.Z = log->dw.Z1 || log->dw.Z2;
|
||||
|
||||
if (log->dw.Z && !log->dw.Z_last) //zapisanie momentu zadziaania
|
||||
{
|
||||
log->dw.Z_last = 1;
|
||||
// log->dw.czas_ = time;
|
||||
}
|
||||
|
||||
check_and_set_struct(log->dw.P1,&log->P1);
|
||||
check_and_set_struct(log->dw.P2,&log->P2);
|
||||
check_and_set_struct(log->dw.Z1,&log->Z1);
|
||||
check_and_set_struct(log->dw.Z2,&log->Z2);
|
||||
|
||||
check_and_set_struct(((log->dw.Z1 && log->nast_.w1) || (log->dw.Z2 && log->nast_.w2) || (log->l_echo && (args->params.bity & R67N_L_ECHO_WYL))) && !log->l_blok_wyl && !log->dw.Podwr,&log->W);
|
||||
|
||||
if(args->params.bity & R67N_L_AKT)
|
||||
{
|
||||
//nadawanie
|
||||
l_nrl=0;
|
||||
|
||||
if(log->dw.P1 && args->params.bity & R67N_L_NADP1)
|
||||
{
|
||||
l_nrl=1;
|
||||
log->l_nad_cnt=0;
|
||||
}
|
||||
|
||||
if(log->dw.P2 && args->params.bity & R67N_L_NADP2)
|
||||
{
|
||||
l_nrl=1;
|
||||
log->l_nad_cnt=0;
|
||||
}
|
||||
//odbior
|
||||
if(!(args->params.bity & R67N_L_BLOK)) // gdy tryb zezwalajacy
|
||||
{
|
||||
if(check_struct(&log->l_odb) && check_struct(&log->l_ok) && !log->dw.Podwr)
|
||||
{
|
||||
if(log->dw.P1)
|
||||
log->skr_t1=1;
|
||||
else
|
||||
log->skr_t1=0;
|
||||
|
||||
if(log->dw.P2)
|
||||
log->skr_t2=1;
|
||||
else
|
||||
log->skr_t2=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
log->skr_t1=0;
|
||||
log->skr_t2=0;
|
||||
}
|
||||
}
|
||||
else // tryb blokujacy
|
||||
{
|
||||
if(check_struct(&log->l_odb) && check_struct(&log->l_ok) && !log->dw.Podwr)
|
||||
log->l_blok_wyl=1;
|
||||
else
|
||||
log->l_blok_wyl=0;
|
||||
}
|
||||
//
|
||||
|
||||
// echo
|
||||
if(args->params.bity & R67N_L_ECHO)
|
||||
{
|
||||
sprawdz_P(&log->dw.PI0,
|
||||
(log->w.kwampl_I_ > log->nast_.Ir1 && log->w.kwampl_I_ > log->nast_.kh1 * ILmax)||(log->w.kwampl_I_ > log->nast_.Ir2 && log->w.kwampl_I_ > log->nast_.kh2 * ILmax),
|
||||
(log->w.kwampl_I_ < log->nast_.Ip1 || log->w.kwampl_I_ < log->nast_.khp1 * ILmax)&&(log->w.kwampl_I_ < log->nast_.Ip2 || log->w.kwampl_I_ < log->nast_.khp2 * ILmax),
|
||||
&log->dw.lp3,
|
||||
5,200
|
||||
);
|
||||
|
||||
if(check_struct(&log->l_odb) && check_struct(&log->l_ok) && !log->dw.PI0 && log->w.kwampl_U_ > log->nast_.U_echo && !log->dw.Podwr)
|
||||
{
|
||||
l_nrl=1;
|
||||
log->l_nad_cnt=0;
|
||||
log->l_echo=1;
|
||||
}
|
||||
else
|
||||
log->l_echo=0;
|
||||
}
|
||||
|
||||
|
||||
// LRC
|
||||
if(args->params.bity & R67N_L_ODWR_PR)
|
||||
{
|
||||
sprawdz_P(&log->dw.Podwr,
|
||||
!wk && log->dw.P_U && ((!log->dw.Bl_2h1 && log->w.kwampl_I_ > log->nast_.Ir1 && log->w.kwampl_I_ > (log->nast_.kh1 * ILmax))||(!log->dw.Bl_2h2 && log->w.kwampl_I_ > log->nast_.Ir2 && log->w.kwampl_I_ > (log->nast_.kh2 * ILmax))),
|
||||
wk || !log->dw.P_U || ((log->dw.Bl_2h1 || log->w.kwampl_I_ < log->nast_.Ip1 || log->w.kwampl_I_ < (log->nast_.khp1 * ILmax))&&(log->dw.Bl_2h2 || log->w.kwampl_I_ < log->nast_.Ip2 || log->w.kwampl_I_ < (log->nast_.khp2 * ILmax))),
|
||||
&log->dw.lp4,
|
||||
40,log->nast_.l_t_blok
|
||||
);
|
||||
|
||||
if(log->dw.Podwr)
|
||||
{
|
||||
l_nrl=0;
|
||||
clear_struct(&log->NRL);
|
||||
log->l_nad_cnt=0;
|
||||
}
|
||||
}
|
||||
|
||||
// wyslanie impulsu nadawania
|
||||
if(l_nrl && !log->l_nad_cnt)
|
||||
set_struct(&log->NRL);
|
||||
|
||||
if(log->l_nad_cnt>=log->nast_.l_nad_time)
|
||||
{
|
||||
clear_struct(&log->NRL);
|
||||
if(!l_nrl)
|
||||
log->l_nad_cnt=0;
|
||||
}
|
||||
else if(check_struct(&log->NRL))
|
||||
log->l_nad_cnt++;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
clear_struct(&log->Z1);
|
||||
clear_struct(&log->Z2);
|
||||
clear_struct(&log->W);
|
||||
clear_struct(&log->P1);
|
||||
clear_struct(&log->P2);
|
||||
|
||||
clear_struct(&log->NRL);
|
||||
}
|
||||
}
|
||||
|
||||
void r_67n_lwn_100hz(void *arguments, void *logic)
|
||||
{
|
||||
struct r_67n_lwn_logic *log = (struct r_67n_lwn_logic *)logic;
|
||||
int t;
|
||||
|
||||
if(log->nast_.on_) // jesli zabezpieczenie aktywne
|
||||
{
|
||||
// realizacja przekaznika czasowego
|
||||
if (log->dw.P1) log->dw.lt1++; else log->dw.lt1 = 0;
|
||||
if (log->dw.P2) log->dw.lt2++; else log->dw.lt2 = 0;
|
||||
|
||||
if(log->skr_t1 && log->nast_.t1_min<log->nast_.t1)
|
||||
t=log->nast_.t1_min;
|
||||
else
|
||||
t=log->nast_.t1;
|
||||
|
||||
if (log->dw.lt1 > t)
|
||||
{
|
||||
log->dw.Z1 = 1;
|
||||
log->dw.lt1--;
|
||||
}
|
||||
|
||||
if(log->skr_t2 && log->nast_.t2_min<log->nast_.t2)
|
||||
t=log->nast_.t2_min;
|
||||
else
|
||||
t=log->nast_.t2;
|
||||
|
||||
if (log->dw.lt2 > t)
|
||||
{
|
||||
log->dw.Z2 = 1;
|
||||
log->dw.lt2--;
|
||||
}
|
||||
|
||||
//
|
||||
//kasowanie zadziaa po odpadniciu pobudze
|
||||
log->dw.P = log->dw.P1 || log->dw.P2;
|
||||
|
||||
if(!log->dw.P1)
|
||||
log->dw.Z1=0;
|
||||
if(!log->dw.P2)
|
||||
log->dw.Z2=0;
|
||||
if(!log->dw.P)
|
||||
log->dw.Z=0;
|
||||
|
||||
log->dw.Z_last = log->dw.Z;
|
||||
|
||||
// realizacja rejestratora parametrow ostatniego zaklocenia
|
||||
switch(status_rej)
|
||||
{
|
||||
case oczekiwanie:
|
||||
if (log->dw.P)
|
||||
{
|
||||
log->dw.dl_ = 0; // start odliczania czasu dlugosci trwania zaklocenia
|
||||
status_rej = sledzenie;
|
||||
log->dw.max_orta_I = log->w.orta_I_;
|
||||
log->dw.max_ortb_I = log->w.ortb_I_;
|
||||
log->dw.max_orta_U = log->w.orta_U_;
|
||||
log->dw.max_ortb_U = log->w.ortb_U_;
|
||||
log->dw.max_I = log->w.kwampl_I_;
|
||||
log->dw.max_U = log->w.kwampl_U_;
|
||||
log->dw.I1 = log->w.IL1;
|
||||
log->dw.I2 = log->w.IL2;
|
||||
log->dw.I3 = log->w.IL3;
|
||||
}
|
||||
break;
|
||||
case sledzenie:
|
||||
if (log->dw.Z)
|
||||
{
|
||||
status_rej = sledzenie_zad;
|
||||
//log->dw.czas_ = time; // zapisanie do bufora tymczasowego czasu wyslania impulsu wylacz dla rejestracji
|
||||
}
|
||||
if (log->dw.P)
|
||||
{
|
||||
if(log->w.kwampl_I_>log->dw.max_I)
|
||||
{
|
||||
log->dw.max_orta_I = log->w.orta_I_;
|
||||
log->dw.max_ortb_I = log->w.ortb_I_;
|
||||
log->dw.max_orta_U = log->w.orta_U_;
|
||||
log->dw.max_ortb_U = log->w.ortb_U_;
|
||||
log->dw.max_I = log->w.kwampl_I_;
|
||||
log->dw.max_U = log->w.kwampl_U_;
|
||||
log->dw.I1 = log->w.IL1;
|
||||
log->dw.I2 = log->w.IL2;
|
||||
log->dw.I3 = log->w.IL3;
|
||||
log->dw.Io2h = log->w.Io2h;
|
||||
}
|
||||
|
||||
log->dw.dl_++;
|
||||
} else {
|
||||
status_rej = oczekiwanie;
|
||||
}
|
||||
break;
|
||||
case sledzenie_zad:
|
||||
if (!log->dw.P)
|
||||
{
|
||||
log->dw.wsk_rej = 1; // zapamietanie faktu powstania zaklocenia z wylaczeniem
|
||||
status_rej = zapis;
|
||||
} else {
|
||||
|
||||
if(log->w.kwampl_I_>log->dw.max_I)
|
||||
{
|
||||
log->dw.max_orta_I = log->w.orta_I_;
|
||||
log->dw.max_ortb_I = log->w.ortb_I_;
|
||||
log->dw.max_orta_U = log->w.orta_U_;
|
||||
log->dw.max_ortb_U = log->w.ortb_U_;
|
||||
log->dw.max_I = log->w.kwampl_I_;
|
||||
log->dw.max_U = log->w.kwampl_U_;
|
||||
log->dw.I1 = log->w.IL1;
|
||||
log->dw.I2 = log->w.IL2;
|
||||
log->dw.I3 = log->w.IL3;
|
||||
log->dw.Io2h = log->w.Io2h;
|
||||
}
|
||||
|
||||
|
||||
log->dw.dl_++;
|
||||
}
|
||||
break;
|
||||
case zapis:
|
||||
if (!log->dw.wsk_rej)
|
||||
{
|
||||
status_rej = oczekiwanie;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void r_67n_lwn_20hz(void *arguments, void *logic)
|
||||
{
|
||||
struct r_67n_lwn_logic *log = (struct r_67n_lwn_logic *)logic;
|
||||
|
||||
// czesc ktora miala byc wykonywana max co 1s w wolnym czasie
|
||||
if(log->dw.wsk_rej) // przypisanie parametrow zaklocenia jesli bylo zadzialanie i zabezpieczenie sie odwzbudzilo
|
||||
{
|
||||
log->dw.R.max_I_ = sqrt(log->dw.max_I); // wyliczenie maksymalnej wartosci pradu
|
||||
log->dw.R.max_U_ = sqrt(log->dw.max_U); // wyliczenie wartosci napiecia
|
||||
log->dw.R.I1 = sqrt(log->dw.I1);
|
||||
log->dw.R.I2 = sqrt(log->dw.I2);
|
||||
log->dw.R.I3 = sqrt(log->dw.I3);
|
||||
log->dw.R.Io2h = sqrt(log->dw.Io2h);
|
||||
log->dw.R.max_kat_ = (180 / 3.14159f) * (atan2(log->dw.max_ortb_I,log->dw.max_orta_I) - atan2(log->dw.max_ortb_U,log->dw.max_orta_U));// wyliczenie kata
|
||||
// log->dw.R.moment_wystapienia = log->dw.czas_; // wpisanie czasu chwili zadzialania zabezpieczenia
|
||||
// log->dw.R.dlugosc = (float)log->dw.dl_ * 0.01f; // / 100; // wpisanie czasu trwania zwarcia
|
||||
// log->dw.R.czy_nowa = true; // sygnalizacja powstania nowej rejestracji
|
||||
log->dw.wsk_rej = 0; // zerowanie wskaznika powstania nowego zaklocenia
|
||||
}
|
||||
|
||||
}
|
||||
220
src/R_67N_LWN.h
Normal file
220
src/R_67N_LWN.h
Normal file
@@ -0,0 +1,220 @@
|
||||
/*
|
||||
* R_67N_LWN.h
|
||||
*
|
||||
* Created on: 19-07-2016
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef R_67N_LWN_H_
|
||||
#define R_67N_LWN_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "helper.h"
|
||||
|
||||
#define R67N_L_AKT 0x0040
|
||||
#define R67N_L_NADP1 0x0080
|
||||
#define R67N_L_NADP2 0x0100
|
||||
#define R67N_L_ECHO 0x0200
|
||||
#define R67N_L_ECHO_WYL 0x0400
|
||||
#define R67N_L_BLOK 0x0800
|
||||
#define R67N_L_ODWR_PR 0x1000
|
||||
|
||||
struct Wyjscia_rejestratora_lwn
|
||||
{
|
||||
float max_I_;///< maksymalna watosc pradu w czasie zaklocenia w krotnosciach warotosci znamionowej
|
||||
float max_U_;///< watosc napiecia w czasie zaklocenia w krotnosciach warotosci znamionowej
|
||||
float max_kat_; ///< watosc kata w czasie zaklocenia w stopniach
|
||||
float I1; ///< prad fazy L1
|
||||
float I2; ///< prad fazy L2
|
||||
float I3; ///< prad fazy L3
|
||||
float Io2h; ///< prąd drugiej harmonicznej
|
||||
};
|
||||
|
||||
|
||||
struct Nastawy_przeliczone_lwn
|
||||
{
|
||||
float Ir1; ///< wartosc rozruchowa pradu stopień 1
|
||||
float Ip1; ///< wartosc powrotu pradu rozruchowego stopień 1
|
||||
float Ir2; ///< wartosc rozruchowa pradu stopień 2
|
||||
float Ip2; ///< wartosc powrotu pradu rozruchowego stopień 2
|
||||
float kh1; ///< wspólczynnik stabilizacji zadziałania stopień 1
|
||||
float kh2; ///< wspólczynnik stabilizacji zadziałania stopień 2
|
||||
float khp1; ///< wspolczynnik stabilizacji dla powrotu stopień 1
|
||||
float khp2; ///< wspolczynnik stabilizacji dla powrotu stopień 2
|
||||
float I1_2hr; ///< wartość rozruchowa blokady drugiej harmonicznej stopień 1
|
||||
float I1_2hr_powr; ///< wartość rozruchowa blokady drugiej harmonicznej stopień 1
|
||||
float U_echo; ///< wartosc rozruchowa echa
|
||||
float Ur; ///< wartosc rozruchowa napiecia blokady
|
||||
float Up; ///< wartosc powrotu napiecia blokady
|
||||
float orta; ///< ortogonalna a dla wektora nasatwy kata charakterystycznego
|
||||
float ortb; ///< ortogonalna b dla wektora nasatwy kata charakterystycznego
|
||||
short dir; ///< nastawa kierunku 2 - do przodu; 1 - w obu kierunkach; 0 - do tylu
|
||||
int t1; ///< opoznienie czasu zadzialania przekaznika
|
||||
int t2; ///< opoznienie czasu zadzialania przekaznika
|
||||
u8 on_; ///< wartosc nastawy aktywnosci przekaznika 1- aktywny
|
||||
u8 w1; ///< wartosc nastawy dzialania na wylaczeniee 1 - wylaczenie 0 - tylko sygnalizacja
|
||||
u8 w2; ///< wartosc nastawy dzialania na wylaczeniee 1 - wylaczenie 0 - tylko sygnalizacja
|
||||
u8 bl_; ///< wartosc nastawy aktywnosci blokady dzialania 1- blokada aktywna
|
||||
u8 t0_1; ///< przekaźnik bezzwłoczny stopień 1
|
||||
u8 t0_2; ///< przekaźnik bezzwłoczny stopień 2
|
||||
u8 Bl_2h1_ON; ///< Włączenie blokady od drugiej harmonicznej w stopniu 1
|
||||
u8 Bl_2h2_ON; ///< Włączenie blokady od drugiej harmonicznej w stopniu 2
|
||||
u32 l_nad_time;
|
||||
u32 t1_min;
|
||||
u32 t2_min;
|
||||
u32 l_t_blok;
|
||||
};
|
||||
|
||||
struct Wejscie_lwn
|
||||
{
|
||||
float orta_I_; ///< ortogonalna a pradu wejsciowego Io
|
||||
float ortb_I_; ///< ortogonalna b pradu wejsciowego Io
|
||||
float kwampl_I_; ///< kwadrat amplitudy prądu
|
||||
float orta_U_; ///< ortogonalna b napiecia wejsciowego Uo
|
||||
float ortb_U_; ///< ortogonalna b napiecia wejsciowego Uo
|
||||
float kwampl_U_; ///< kwadrat amplitudy napiecia
|
||||
float IL1; ///< kwadrat amplitudy prądu faza L1
|
||||
float IL2; ///< kwadrat amplitudy prądu faza L2
|
||||
float IL3; ///< kwadrat amplitudy prądu faza L3
|
||||
float Io2h;///< kwadrat amplitudy drugiej harmonicznej składowej zerowej prądu
|
||||
};
|
||||
|
||||
struct dane_wewnetrzne_lwn
|
||||
{
|
||||
struct Wyjscia_rejestratora_lwn R; ///< dane ostatniego zaklocenia
|
||||
long long 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)
|
||||
|
||||
float max_I;///< maksymalna watosc pradu w czasie zaklocenia w krotnosciach warotosci znamionowej
|
||||
float max_U;///< watosc napiecia w czasie zaklocenia w krotnosciach warotosci znamionowej
|
||||
float max_kat; ///< watosc kata w czasie zaklocenia w stopniach
|
||||
float I1; ///< prad fazy L1
|
||||
float I2; ///< prad fazy L2
|
||||
float I3; ///< prad fazy L3
|
||||
float Io2h;///< prad drugiej harmonicznej
|
||||
|
||||
float max_orta_I;
|
||||
float max_ortb_I;
|
||||
float max_orta_U;
|
||||
float max_ortb_U;
|
||||
|
||||
short lp1;///< licznikpobudzen stopień 1
|
||||
short lp2;///< licznikpobudzen stopień 2
|
||||
short lp3;///< licznikpobudzen I0 do echa
|
||||
short lp4;///< licznikpobudzen w LRC
|
||||
int lt1;
|
||||
int lt2;
|
||||
u8 Podwr;
|
||||
u8 PI0; // pobudzenie i0 do echa
|
||||
u8 P; // pobudzenie i0 do echa
|
||||
u8 P1;
|
||||
u8 P2;
|
||||
u8 Z;
|
||||
u8 Z1;
|
||||
u8 Z2;
|
||||
u8 P_U;
|
||||
u8 Bl_2h1;
|
||||
u8 Bl_2h2;
|
||||
u8 kierunek;
|
||||
u8 Z_last;
|
||||
};
|
||||
|
||||
struct r_67n_lwn_logic
|
||||
{
|
||||
struct binary_io stan_bl_;
|
||||
|
||||
float *orta_I_;
|
||||
float *ortb_I_;
|
||||
float *kwampl_I_;
|
||||
|
||||
float *orta_U_;
|
||||
float *ortb_U_;
|
||||
float *kwampl_U_;
|
||||
|
||||
float *IL1;
|
||||
float *IL2;
|
||||
float *IL3;
|
||||
float *Io2h;
|
||||
|
||||
struct binary_io test;
|
||||
struct binary_io l_odb;
|
||||
struct binary_io l_ok;
|
||||
struct binary_io W;
|
||||
struct binary_io Z1;
|
||||
struct binary_io Z2;
|
||||
struct binary_io P1;
|
||||
struct binary_io P2;
|
||||
struct binary_io kier;
|
||||
struct binary_io NRL;
|
||||
|
||||
struct Nastawy_przeliczone_lwn nast_;
|
||||
struct dane_wewnetrzne_lwn dw;
|
||||
struct Wejscie_lwn w;
|
||||
|
||||
u8 l_echo;
|
||||
u8 skr_t1;
|
||||
u8 skr_t2;
|
||||
u8 l_blok_wyl;
|
||||
u32 l_nad_cnt;
|
||||
};
|
||||
|
||||
struct r_67n_lwn_io
|
||||
{
|
||||
u32 stan_bl_in;
|
||||
u32 orta_I_float_in;
|
||||
u32 ortb_I_float_in;
|
||||
u32 kwampl_I_float_in;
|
||||
u32 orta_U_float_in;
|
||||
u32 ortb_U_float_in;
|
||||
u32 kwampl_U_float_in;
|
||||
u32 IL1_float_in;
|
||||
u32 IL2_float_in;
|
||||
u32 IL3_float_in;
|
||||
u32 Io2h_float_in;
|
||||
u32 test_in;
|
||||
u32 l_odb_in;
|
||||
u32 l_ok_in;
|
||||
u32 w_out;
|
||||
u32 z1_out;
|
||||
u32 z2_out;
|
||||
u32 p1_out;
|
||||
u32 p2_out;
|
||||
u32 kier_out;
|
||||
u32 NRL_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct r_67n_lwn_params
|
||||
{
|
||||
u32 bity; ///< nastawy bitowe;
|
||||
u32 dir; ///< nastawa kierunku dzialania przekaznika
|
||||
double U; ///< napiecie rozruchowe przekaznika w krotnosciach wartosci znamionowej
|
||||
double kat; ///< wartosc nastawy kata charakterystycznego w stopniach
|
||||
double I1; ///< prad rozruchowy przekaznika stopien 1
|
||||
double I2; ///< prad rozruchowy przekaznika stopien 2
|
||||
double kh1; ///< współczynnik stabilizacji stopień 1
|
||||
double kh2; ///< współczynnik stabilizacji stopień 2
|
||||
double t1; ///< wartosc nastawy czasu dzialania w sekundach stopiń 1
|
||||
double t2; ///< wartosc nastawy czasu dzialania w sekundach stopiń 2
|
||||
double t1_min; // czas t1 przy skróceniu
|
||||
double t2_min; // czas t1 przy skróceniu
|
||||
double Io2h1; ///<Prąd blokady drugiej harmonicznej
|
||||
double kp; ///< wartosc nastawy wspolczynnika
|
||||
double L_t_nad;
|
||||
double L_U_echo;
|
||||
double L_T_odwr;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct r_67n_lwn_args
|
||||
{
|
||||
struct r_67n_lwn_io io;
|
||||
struct r_67n_lwn_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void r_67n_lwn(void *args, void *logic);
|
||||
extern void r_67n_lwn_100hz(void *args, void *logic);
|
||||
extern void r_67n_lwn_20hz(void *args, void *logic);
|
||||
extern int r_67n_lwn_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* R_67N_LWN_H_ */
|
||||
691
src/R_67N_LWN2.c
Normal file
691
src/R_67N_LWN2.c
Normal file
@@ -0,0 +1,691 @@
|
||||
/*
|
||||
* R_67N_LWN2.c
|
||||
*
|
||||
* Created on: 14-11-2018
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "r_67n_lwn2.h"
|
||||
#include "analog_in.h"
|
||||
#include "helper.h"
|
||||
#include "ZDistL.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
int r_67n_lwn2_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct r_67n_lwn2_args *args = (struct r_67n_lwn2_args *)arguments;
|
||||
struct r_67n_lwn2_logic *log = (struct r_67n_lwn2_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.stan_bl_in,&log->stan_bl_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.orta_I_float_in,&log->orta_I_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.ortb_I_float_in,&log->ortb_I_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.kwampl_I_float_in,&log->kwampl_I_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.orta_U_float_in,&log->orta_U_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.ortb_U_float_in,&log->ortb_U_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.kwampl_U_float_in,&log->kwampl_U_))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.IL1_float_in,&log->IL1))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.IL2_float_in,&log->IL2))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.IL3_float_in,&log->IL3))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.Io2h_float_in,&log->Io2h))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.test_in,&log->test))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.l_odb_in,&log->l_odb))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.l_ok_in,&log->l_ok))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.bl_st1_in,&log->bl_st1))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.bl_st2_in,&log->bl_st2))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.w_out,&log->W))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.z1_out,&log->Z1))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.z2_out,&log->Z2))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.p1_out,&log->P1))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.p2_out,&log->P2))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.kier_out,&log->kier))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.NRL_out,&log->NRL))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.bl_st1_out,&log->bl_st1_wy))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.bl_st2_out,&log->bl_st2_wy))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.bl_2h_st1_out,&log->bl_2h_st1_wy))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.bl_2h_st2_out,&log->bl_2h_st2_wy))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.l_blok_out,&log->l_blok))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.l_zezw_out,&log->l_zezw))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.l_echo_out,&log->l_echo_wy))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.l_rc_out,&log->l_rc))
|
||||
return -1;
|
||||
|
||||
////
|
||||
//status_rej = oczekiwanie;
|
||||
|
||||
log->nast_.on_ = args->params.bity & 0x0001;
|
||||
log->nast_.w1 = args->params.bity & 0x0002;
|
||||
log->nast_.w2 = args->params.bity & 0x0004;
|
||||
log->nast_.Bl_2h1_ON = (args->params.bity & 0x0008)?1:0;
|
||||
log->nast_.Bl_2h2_ON = (args->params.bity & 0x0010)?1:0;
|
||||
log->nast_.bl_ = args->params.bity & 0x0020;
|
||||
|
||||
|
||||
log->nast_.dir = args->params.dir;
|
||||
log->nast_.dir2 = args->params.dir2;
|
||||
|
||||
log->nast_.Ir1 = args->params.I1 * args->params.I1; // wyliczenie wartosci rozruchowej pradu
|
||||
log->nast_.Ir2 = args->params.I2 * args->params.I2; // wyliczenie wartosci rozruchowej pradu
|
||||
|
||||
log->nast_.Ip1 = log->nast_.Ir1 * args->params.kp * args->params.kp; // wyliczenie wartoci powrotu algorytmu
|
||||
log->nast_.Ip2 = log->nast_.Ir2 * args->params.kp * args->params.kp; // wyliczenie wartoci powrotu algorytmu
|
||||
|
||||
log->nast_.kh1 = args->params.kh1 * args->params.kh1;
|
||||
log->nast_.khp1 = log->nast_.kh1 * args->params.kp * args->params.kp;
|
||||
log->nast_.kh2 = args->params.kh2 * args->params.kh2;
|
||||
log->nast_.khp2 = log->nast_.kh2 * args->params.kp * args->params.kp;
|
||||
|
||||
log->nast_.U_echo = args->params.L_U_echo * args->params.L_U_echo; // wyliczenie wartosci rozruchowej blokady napieciowej
|
||||
log->nast_.Ur = args->params.U * args->params.U; // wyliczenie wartosci rozruchowej blokady napieciowej
|
||||
log->nast_.Up = log->nast_.Ur * args->params.kp * args->params.kp; // wyliczenie wartosci powrotu blokady napieciowej
|
||||
log->nast_.orta = cos(args->params.kat * (3.14159f / 180)); // wartosc ortogonalnej a wektora przesuniecia dla kata charakterystycznego
|
||||
log->nast_.ortb = sin(args->params.kat * (3.14159f / 180)); // wartosc ortogonalnej b wektora przesuniecia dla kata charakterystycznego
|
||||
|
||||
log->nast_.I1_2hr = args->params.Io2h1 * args->params.Io2h1;
|
||||
log->nast_.I1_2hr_powr = (0.95 * args->params.Io2h1) * (0.95 * args->params.Io2h1);
|
||||
|
||||
log->nast_.I2h_min1 = log->nast_.I1_2hr * log->nast_.Ir1;
|
||||
log->nast_.I2h_min2 = log->nast_.I1_2hr * log->nast_.Ir2;
|
||||
|
||||
log->nast_.t1 = ((args->params.t1 - 0.005f) * 100); //czas dzialania
|
||||
if (log->nast_.t1) log->nast_.t0_1 = 0; else log->nast_.t0_1 = 1;
|
||||
log->nast_.t2 = ((args->params.t2 - 0.005f) * 100); //czas dzialania
|
||||
if (log->nast_.t2) log->nast_.t0_2 = 0; else log->nast_.t0_2 = 1;
|
||||
|
||||
log->nast_.l_nad_time=(u32)(args->params.L_t_nad * 1000);
|
||||
log->nast_.l_nad_time_max=(u32)(args->params.L_t_nad_max * 1000);
|
||||
log->nast_.l_t_blok=(u32)(args->params.L_T_odwr * 1000);
|
||||
log->nast_.t1_min=(u32)((args->params.t1_min - 0.005f) * 100);
|
||||
log->nast_.t2_min=(u32)((args->params.t2_min - 0.005f) * 100);
|
||||
// *((uint8_t *)REG_FUNCTION_ON_OFF + id - 0x2400) = log->nast_.on_;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void r_67n_lwn2(void *arguments, void *logic)
|
||||
{
|
||||
struct r_67n_lwn2_args *args = (struct r_67n_lwn2_args *)arguments;
|
||||
struct r_67n_lwn2_logic *log = (struct r_67n_lwn2_logic *)logic;
|
||||
float local_orta_U_ ,local_ortb_U_, ILmax;
|
||||
u8 wk,wk2,l_nrl;
|
||||
|
||||
if(log->nast_.on_) // jesli zabezpieczenie aktywne
|
||||
{
|
||||
log->w.kwampl_U_ = *log->kwampl_U_;
|
||||
log->w.kwampl_I_ = *log->kwampl_I_;
|
||||
log->w.orta_I_ = *log->orta_I_;
|
||||
log->w.orta_U_ = *log->orta_U_;
|
||||
log->w.ortb_I_ = *log->ortb_I_;
|
||||
log->w.ortb_U_ = *log->ortb_U_;
|
||||
log->w.IL1 = *log->IL1;
|
||||
log->w.IL2 = *log->IL2;
|
||||
log->w.IL3 = *log->IL3;
|
||||
log->w.Io2h = *log->Io2h;
|
||||
|
||||
// przesuniecie napiecia o wektor kata nastawy
|
||||
local_orta_U_ = log->w.orta_U_ * log->nast_.orta - log->w.ortb_U_ * log->nast_.ortb;
|
||||
local_ortb_U_ = log->w.orta_U_ * log->nast_.ortb + log->w.ortb_U_ * log->nast_.orta;
|
||||
|
||||
// okreslenie kierunku
|
||||
log->dw.kierunek = ((log->w.orta_I_ * local_orta_U_ + log->w.ortb_I_ * local_ortb_U_) > 0) ? 1 : 0;
|
||||
if(!czy_test_R()) // w tescie nie uzywaj kierunku
|
||||
check_and_set_struct(log->dw.kierunek,&log->kier);
|
||||
|
||||
switch(log->nast_.dir) //okeslenie kierunku stopnia 1
|
||||
{
|
||||
case 0:
|
||||
wk = log->dw.kierunek;
|
||||
break;
|
||||
case 1:
|
||||
wk = !log->dw.kierunek;
|
||||
break;
|
||||
case 2:
|
||||
wk = 1;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch(log->nast_.dir2) //okeslenie kierunku stopnia 2
|
||||
{
|
||||
case 0:
|
||||
wk2 = log->dw.kierunek;
|
||||
break;
|
||||
case 1:
|
||||
wk2 = !log->dw.kierunek;
|
||||
break;
|
||||
case 2:
|
||||
wk2 = 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
check_and_set_struct(check_struct(&log->bl_st1)||log->nast_.dir==3,&log->bl_st1_wy);
|
||||
check_and_set_struct(check_struct(&log->bl_st2)||log->nast_.dir2==3,&log->bl_st2_wy);
|
||||
|
||||
//sprawdzenie warunku napiciowego
|
||||
log->dw.P_U |= log->w.kwampl_U_ > log->nast_.Ur;
|
||||
log->dw.P_U &= log->w.kwampl_U_ > log->nast_.Up;
|
||||
|
||||
u8 war1 = log->w.Io2h > log->nast_.I2h_min1;
|
||||
u8 war2 = log->w.Io2h > log->nast_.I2h_min2;
|
||||
|
||||
sprawdz_P(&log->dw.P2h1,
|
||||
(log->w.Io2h > log->nast_.I1_2hr * log->w.kwampl_I_) && war1,
|
||||
(log->w.Io2h < log->nast_.I1_2hr_powr * log->w.kwampl_I_) || !war1,
|
||||
&log->dw.lp2h1,2,10);
|
||||
|
||||
sprawdz_P(&log->dw.P2h2,
|
||||
(log->w.Io2h > log->nast_.I1_2hr * log->w.kwampl_I_ && war2),
|
||||
(log->w.Io2h < log->nast_.I1_2hr_powr * log->w.kwampl_I_) || !war2,
|
||||
&log->dw.lp2h2,2,10);
|
||||
/*
|
||||
if(log->dw.Bl_2h1)
|
||||
log->dw.Bl_2h1 = log->w.Io2h > log->nast_.I1_2hr_powr * log->w.kwampl_I_;
|
||||
else
|
||||
log->dw.Bl_2h1 = log->w.Io2h > log->nast_.I1_2hr * log->w.kwampl_I_;
|
||||
|
||||
|
||||
if(log->dw.Bl_2h2)
|
||||
log->dw.Bl_2h2 = log->w.Io2h > log->nast_.I1_2hr_powr * log->w.kwampl_I_;
|
||||
else
|
||||
log->dw.Bl_2h2 = log->w.Io2h > log->nast_.I1_2hr * log->w.kwampl_I_;
|
||||
|
||||
|
||||
log->dw.Bl_2h1 &= log->nast_.Bl_2h1_ON;
|
||||
log->dw.Bl_2h2 &= log->nast_.Bl_2h2_ON;
|
||||
*/
|
||||
log->dw.Bl_2h1 = log->dw.P2h1 && log->nast_.Bl_2h1_ON;
|
||||
log->dw.Bl_2h2 = log->dw.P2h2 && log->nast_.Bl_2h2_ON;
|
||||
|
||||
|
||||
//Sprawdzenie przekaznikw pradowych
|
||||
//szukanie maksymalnego pradu
|
||||
ILmax = log->w.IL1;
|
||||
if (ILmax < log->w.IL2) ILmax = log->w.IL2;
|
||||
if (ILmax < log->w.IL3) ILmax = log->w.IL3;
|
||||
|
||||
//sprawdzenie pobudzenia stopnia 1
|
||||
sprawdz_P(&log->dw.P1_pre,
|
||||
!check_struct(&log->bl_st1) && wk && log->dw.P_U && /*!log->dw.Bl_2h1 &&*/ log->w.kwampl_I_ > log->nast_.Ir1 && log->w.kwampl_I_ > (log->nast_.kh1 * ILmax),
|
||||
check_struct(&log->bl_st1) || !wk || !log->dw.P_U ||/* log->dw.Bl_2h1 ||*/ log->w.kwampl_I_ < log->nast_.Ip1 || log->w.kwampl_I_ < (log->nast_.khp1 * ILmax),
|
||||
&log->dw.lp1_pre,
|
||||
20,3
|
||||
);
|
||||
|
||||
//sprawdzenie pobudzenia stopnia 2
|
||||
sprawdz_P(&log->dw.P2_pre,
|
||||
!check_struct(&log->bl_st2) && wk2 && log->dw.P_U && /*!log->dw.Bl_2h2 &&*/ log->w.kwampl_I_ > log->nast_.Ir2 && log->w.kwampl_I_ > log->nast_.kh2 * ILmax,
|
||||
check_struct(&log->bl_st2) || !wk2 || !log->dw.P_U ||/* log->dw.Bl_2h2 ||*/ log->w.kwampl_I_ < log->nast_.Ip2 || log->w.kwampl_I_ < log->nast_.khp2 * ILmax,
|
||||
&log->dw.lp2_pre,
|
||||
20,3
|
||||
);
|
||||
|
||||
sprawdz_P(&log->dw.P1,
|
||||
log->dw.P1_pre && !log->dw.Bl_2h1,
|
||||
!log->dw.P1_pre || log->dw.Bl_2h1,
|
||||
&log->dw.lp1,
|
||||
1,1
|
||||
);
|
||||
|
||||
sprawdz_P(&log->dw.P2,
|
||||
log->dw.P2_pre && !log->dw.Bl_2h2,
|
||||
!log->dw.P2_pre || log->dw.Bl_2h2,
|
||||
&log->dw.lp2,
|
||||
1,1
|
||||
);
|
||||
|
||||
check_and_set_struct(log->dw.P1_pre && log->dw.Bl_2h1, &log->bl_2h_st1_wy);
|
||||
check_and_set_struct(log->dw.P2_pre && log->dw.Bl_2h2, &log->bl_2h_st2_wy);
|
||||
|
||||
////
|
||||
// blokady 2h po pobudzeniach
|
||||
////
|
||||
//obsluga wejscia testu przekaznika
|
||||
if (czy_test_R())
|
||||
{
|
||||
log->dw.P1 = log->dw.P2 = check_struct(&log->test)?1:0;
|
||||
}
|
||||
//
|
||||
|
||||
// realizacja blokady dzialania przekaznika
|
||||
if(log->nast_.bl_ && check_struct(&log->stan_bl_) /*| czy_start()*/)
|
||||
log->dw.P1 = log->dw.P2 = 0;
|
||||
//
|
||||
|
||||
sprawdz_P(&log->dw.Ptyl1,
|
||||
!wk && log->dw.P_U && ((!log->dw.Bl_2h1 && log->w.kwampl_I_ > log->nast_.Ir1 && log->w.kwampl_I_ > (log->nast_.kh1 * ILmax))),
|
||||
wk || !log->dw.P_U || ((log->dw.Bl_2h1 || log->w.kwampl_I_ < log->nast_.Ip1 || log->w.kwampl_I_ < (log->nast_.khp1 * ILmax))),
|
||||
&log->dw.lp5,
|
||||
20,3
|
||||
);
|
||||
sprawdz_P(&log->dw.Ptyl2,
|
||||
!wk2 && log->dw.P_U && ((!log->dw.Bl_2h2 && log->w.kwampl_I_ > log->nast_.Ir2 && log->w.kwampl_I_ > (log->nast_.kh2 * ILmax))),
|
||||
wk2 || !log->dw.P_U || ((log->dw.Bl_2h2 || log->w.kwampl_I_ < log->nast_.Ip2 || log->w.kwampl_I_ < (log->nast_.khp2 * ILmax))),
|
||||
&log->dw.lp6,
|
||||
20,3
|
||||
);
|
||||
|
||||
if(log->nast_.dir == 3 || check_struct(&log->bl_st1))
|
||||
{
|
||||
log->dw.P1=0;
|
||||
log->dw.Ptyl1=0;
|
||||
log->dw.P1_pre=0;
|
||||
}
|
||||
|
||||
if(log->nast_.dir2 == 3 || check_struct(&log->bl_st2))
|
||||
{
|
||||
log->dw.P2=0;
|
||||
log->dw.Ptyl2=0;
|
||||
log->dw.P2_pre=0;
|
||||
}
|
||||
|
||||
log->dw.Z1 |= (log->dw.P1 && log->nast_.t0_1); // jesli dziaanie bezzwoczne stopnia 1
|
||||
log->dw.Z2 |= log->dw.P2 && log->nast_.t0_2; // jesli dziaanie bezzwoczne stopnia 2
|
||||
log->dw.Z = log->dw.Z1 || log->dw.Z2;
|
||||
|
||||
if (log->dw.Z && !log->dw.Z_last) //zapisanie momentu zadziaania
|
||||
{
|
||||
log->dw.Z_last = 1;
|
||||
// log->dw.czas_ = time;
|
||||
}
|
||||
|
||||
check_and_set_struct(log->dw.P1,&log->P1);
|
||||
check_and_set_struct(log->dw.P2,&log->P2);
|
||||
check_and_set_struct(log->dw.Z1,&log->Z1);
|
||||
check_and_set_struct(log->dw.Z2,&log->Z2);
|
||||
|
||||
check_and_set_struct(((log->dw.Z1 && log->nast_.w1) || (log->dw.Z2 && log->nast_.w2) || (log->l_echo && (args->params.bity & R67N_L_ECHO_WYL))) && !log->l_blok_wyl && !log->dw.Podwr,&log->W);
|
||||
|
||||
if(args->params.bity & R67N_L_AKT)
|
||||
{
|
||||
//nadawanie
|
||||
l_nrl=0;
|
||||
|
||||
//odbior
|
||||
if(!(args->params.bity & R67N_L_BLOK)) // gdy tryb zezwalajacy
|
||||
{
|
||||
if(log->dw.P1 && args->params.bity & R67N_L_NADP1)
|
||||
{
|
||||
l_nrl=1;
|
||||
//log->l_nad_cnt=0;
|
||||
}
|
||||
|
||||
if(log->dw.P2 && args->params.bity & R67N_L_NADP2)
|
||||
{
|
||||
l_nrl=1;
|
||||
//log->l_nad_cnt=0;
|
||||
}
|
||||
|
||||
if(check_struct(&log->l_odb) && check_struct(&log->l_ok) && !log->dw.Podwr)
|
||||
{
|
||||
if(log->dw.P1)
|
||||
log->skr_t1=1;
|
||||
else
|
||||
log->skr_t1=0;
|
||||
|
||||
if(log->dw.P2)
|
||||
log->skr_t2=1;
|
||||
else
|
||||
log->skr_t2=0;
|
||||
|
||||
set_struct(&log->l_zezw);
|
||||
}
|
||||
else
|
||||
{
|
||||
clear_struct(&log->l_zezw);
|
||||
if(!log->dw.P1 && !log->dw.P2)
|
||||
{
|
||||
log->skr_t1=0;
|
||||
log->skr_t2=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else // tryb blokujacy
|
||||
{
|
||||
if(log->dw.P1 && !log->dw.P1_prev)
|
||||
log->skr_t1=1;
|
||||
|
||||
if(log->dw.P2 && !log->dw.P2_prev)
|
||||
log->skr_t2=1;
|
||||
|
||||
log->dw.P1_prev=log->dw.P1;
|
||||
log->dw.P2_prev=log->dw.P2;
|
||||
|
||||
if(log->dw.Ptyl1 && args->params.bity & R67N_L_NADP1)
|
||||
{
|
||||
l_nrl=1;
|
||||
//log->l_nad_cnt=0;
|
||||
}
|
||||
|
||||
if(log->dw.Ptyl2 && args->params.bity & R67N_L_NADP2)
|
||||
{
|
||||
l_nrl=1;
|
||||
//log->l_nad_cnt=0;
|
||||
}
|
||||
|
||||
if(check_struct(&log->l_odb) && check_struct(&log->l_ok) && !log->dw.Podwr)
|
||||
{
|
||||
set_struct(&log->l_blok);
|
||||
//log->l_blok_wyl=1;
|
||||
|
||||
//dodane ponizej
|
||||
log->skr_t1=0;
|
||||
log->skr_t2=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!check_struct(&log->l_ok))
|
||||
{
|
||||
log->skr_t1=0;
|
||||
log->skr_t2=0;
|
||||
}
|
||||
clear_struct(&log->l_blok);
|
||||
//log->l_blok_wyl=0;
|
||||
}
|
||||
}
|
||||
//
|
||||
|
||||
// echo
|
||||
if(args->params.bity & R67N_L_ECHO)
|
||||
{
|
||||
if(!check_struct(&log->stan_bl_))
|
||||
{
|
||||
sprawdz_P(&log->dw.PI0,
|
||||
(log->w.kwampl_I_ > log->nast_.Ir1 && log->w.kwampl_I_ > log->nast_.kh1 * ILmax)||(log->w.kwampl_I_ > log->nast_.Ir2 && log->w.kwampl_I_ > log->nast_.kh2 * ILmax),
|
||||
(log->w.kwampl_I_ < log->nast_.Ip1 || log->w.kwampl_I_ < log->nast_.khp1 * ILmax)&&(log->w.kwampl_I_ < log->nast_.Ip2 || log->w.kwampl_I_ < log->nast_.khp2 * ILmax),
|
||||
&log->dw.lp3,
|
||||
5,200
|
||||
);
|
||||
|
||||
sprawdz_P(&log->dw.PU0,
|
||||
(log->w.kwampl_U_ > log->nast_.U_echo),
|
||||
(log->w.kwampl_U_ < (0.99 * log->nast_.U_echo)),
|
||||
&log->dw.lp7,
|
||||
25,3
|
||||
);
|
||||
|
||||
|
||||
if(check_struct(&log->l_odb) && check_struct(&log->l_ok) && !log->dw.PI0 && log->dw.PU0 && !log->dw.Podwr)
|
||||
{
|
||||
l_nrl=1;
|
||||
//log->l_nad_cnt=0;
|
||||
log->l_echo=1;
|
||||
set_struct(&log->l_echo_wy);
|
||||
}
|
||||
else
|
||||
{
|
||||
clear_struct(&log->l_echo_wy);
|
||||
log->l_echo=0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log->l_echo=0;
|
||||
clear_struct(&log->l_echo_wy);
|
||||
}
|
||||
}
|
||||
|
||||
// LRC
|
||||
if(args->params.bity & R67N_L_ODWR_PR)
|
||||
{
|
||||
sprawdz_P(&log->dw.Podwr,
|
||||
!wk && log->dw.P_U && ((!log->dw.Bl_2h1 && log->w.kwampl_I_ > log->nast_.Ir1 && log->w.kwampl_I_ > (log->nast_.kh1 * ILmax))||(!log->dw.Bl_2h2 && log->w.kwampl_I_ > log->nast_.Ir2 && log->w.kwampl_I_ > (log->nast_.kh2 * ILmax))),
|
||||
wk || !log->dw.P_U || ((log->dw.Bl_2h1 || log->w.kwampl_I_ < log->nast_.Ip1 || log->w.kwampl_I_ < (log->nast_.khp1 * ILmax))&&(log->dw.Bl_2h2 || log->w.kwampl_I_ < log->nast_.Ip2 || log->w.kwampl_I_ < (log->nast_.khp2 * ILmax))),
|
||||
&log->dw.lp4,
|
||||
40,log->nast_.l_t_blok
|
||||
);
|
||||
|
||||
if(log->dw.Podwr)
|
||||
{
|
||||
set_struct(&log->l_rc);
|
||||
l_nrl=0;
|
||||
clear_struct(&log->NRL);
|
||||
//log->l_nad_cnt=0;
|
||||
}
|
||||
else
|
||||
clear_struct(&log->l_rc);
|
||||
}
|
||||
|
||||
// wyslanie impulsu nadawania
|
||||
if(l_nrl && !log->l_nad_cnt)
|
||||
set_struct(&log->NRL);
|
||||
|
||||
if((log->l_nad_cnt>=log->nast_.l_nad_time && !l_nrl)|| log->l_nad_cnt>=log->nast_.l_nad_time_max)
|
||||
{
|
||||
clear_struct(&log->NRL);
|
||||
|
||||
if(!l_nrl)
|
||||
log->l_nad_cnt=0;
|
||||
}
|
||||
else if(check_struct(&log->NRL))
|
||||
log->l_nad_cnt+=LOOP_CYCLE_MS;
|
||||
//
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
clear_struct(&log->Z1);
|
||||
clear_struct(&log->Z2);
|
||||
clear_struct(&log->W);
|
||||
clear_struct(&log->P1);
|
||||
clear_struct(&log->P2);
|
||||
|
||||
clear_struct(&log->NRL);
|
||||
clear_struct(&log->bl_2h_st1_wy);
|
||||
clear_struct(&log->bl_2h_st2_wy);
|
||||
}
|
||||
}
|
||||
|
||||
void r_67n_lwn2_100hz(void *arguments, void *logic)
|
||||
{
|
||||
struct r_67n_lwn2_logic *log = (struct r_67n_lwn2_logic *)logic;
|
||||
int t;
|
||||
|
||||
if(log->nast_.on_) // jesli zabezpieczenie aktywne
|
||||
{
|
||||
// realizacja przekaznika czasowego
|
||||
if (log->dw.P1) log->dw.lt1++; else log->dw.lt1 = 0;
|
||||
if (log->dw.P2) log->dw.lt2++; else log->dw.lt2 = 0;
|
||||
|
||||
if(log->skr_t1 && log->nast_.t1_min<log->nast_.t1)
|
||||
t=log->nast_.t1_min;
|
||||
else
|
||||
t=log->nast_.t1;
|
||||
|
||||
if (log->dw.lt1 > t)
|
||||
{
|
||||
log->dw.Z1 = 1;
|
||||
log->dw.lt1--;
|
||||
}
|
||||
|
||||
if(log->skr_t2 && log->nast_.t2_min<log->nast_.t2)
|
||||
t=log->nast_.t2_min;
|
||||
else
|
||||
t=log->nast_.t2;
|
||||
|
||||
if (log->dw.lt2 > t)
|
||||
{
|
||||
log->dw.Z2 = 1;
|
||||
log->dw.lt2--;
|
||||
}
|
||||
|
||||
//
|
||||
//kasowanie zadziaa po odpadniciu pobudze
|
||||
log->dw.P = log->dw.P1 || log->dw.P2;
|
||||
|
||||
if(!log->dw.P1)
|
||||
log->dw.Z1=0;
|
||||
if(!log->dw.P2)
|
||||
log->dw.Z2=0;
|
||||
if(!log->dw.P)
|
||||
log->dw.Z=0;
|
||||
|
||||
log->dw.Z_last = log->dw.Z;
|
||||
|
||||
// realizacja rejestratora parametrow ostatniego zaklocenia
|
||||
switch(status_rej)
|
||||
{
|
||||
case oczekiwanie:
|
||||
if (log->dw.P)
|
||||
{
|
||||
log->dw.dl_ = 0; // start odliczania czasu dlugosci trwania zaklocenia
|
||||
status_rej = sledzenie;
|
||||
log->dw.max_orta_I = log->w.orta_I_;
|
||||
log->dw.max_ortb_I = log->w.ortb_I_;
|
||||
log->dw.max_orta_U = log->w.orta_U_;
|
||||
log->dw.max_ortb_U = log->w.ortb_U_;
|
||||
log->dw.max_I = log->w.kwampl_I_;
|
||||
log->dw.max_U = log->w.kwampl_U_;
|
||||
log->dw.I1 = log->w.IL1;
|
||||
log->dw.I2 = log->w.IL2;
|
||||
log->dw.I3 = log->w.IL3;
|
||||
}
|
||||
break;
|
||||
case sledzenie:
|
||||
if (log->dw.Z)
|
||||
{
|
||||
status_rej = sledzenie_zad;
|
||||
//log->dw.czas_ = time; // zapisanie do bufora tymczasowego czasu wyslania impulsu wylacz dla rejestracji
|
||||
}
|
||||
if (log->dw.P)
|
||||
{
|
||||
if(log->w.kwampl_I_>log->dw.max_I)
|
||||
{
|
||||
log->dw.max_orta_I = log->w.orta_I_;
|
||||
log->dw.max_ortb_I = log->w.ortb_I_;
|
||||
log->dw.max_orta_U = log->w.orta_U_;
|
||||
log->dw.max_ortb_U = log->w.ortb_U_;
|
||||
log->dw.max_I = log->w.kwampl_I_;
|
||||
log->dw.max_U = log->w.kwampl_U_;
|
||||
log->dw.I1 = log->w.IL1;
|
||||
log->dw.I2 = log->w.IL2;
|
||||
log->dw.I3 = log->w.IL3;
|
||||
log->dw.Io2h = log->w.Io2h;
|
||||
}
|
||||
|
||||
log->dw.dl_++;
|
||||
} else {
|
||||
status_rej = oczekiwanie;
|
||||
}
|
||||
break;
|
||||
case sledzenie_zad:
|
||||
if (!log->dw.P)
|
||||
{
|
||||
log->dw.wsk_rej = 1; // zapamietanie faktu powstania zaklocenia z wylaczeniem
|
||||
status_rej = zapis;
|
||||
} else {
|
||||
|
||||
if(log->w.kwampl_I_>log->dw.max_I)
|
||||
{
|
||||
log->dw.max_orta_I = log->w.orta_I_;
|
||||
log->dw.max_ortb_I = log->w.ortb_I_;
|
||||
log->dw.max_orta_U = log->w.orta_U_;
|
||||
log->dw.max_ortb_U = log->w.ortb_U_;
|
||||
log->dw.max_I = log->w.kwampl_I_;
|
||||
log->dw.max_U = log->w.kwampl_U_;
|
||||
log->dw.I1 = log->w.IL1;
|
||||
log->dw.I2 = log->w.IL2;
|
||||
log->dw.I3 = log->w.IL3;
|
||||
log->dw.Io2h = log->w.Io2h;
|
||||
}
|
||||
|
||||
|
||||
log->dw.dl_++;
|
||||
}
|
||||
break;
|
||||
case zapis:
|
||||
if (!log->dw.wsk_rej)
|
||||
{
|
||||
status_rej = oczekiwanie;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void r_67n_lwn2_20hz(void *arguments, void *logic)
|
||||
{
|
||||
struct r_67n_lwn2_logic *log = (struct r_67n_lwn2_logic *)logic;
|
||||
|
||||
// czesc ktora miala byc wykonywana max co 1s w wolnym czasie
|
||||
if(log->dw.wsk_rej) // przypisanie parametrow zaklocenia jesli bylo zadzialanie i zabezpieczenie sie odwzbudzilo
|
||||
{
|
||||
log->dw.R.max_I_ = sqrt(log->dw.max_I); // wyliczenie maksymalnej wartosci pradu
|
||||
log->dw.R.max_U_ = sqrt(log->dw.max_U); // wyliczenie wartosci napiecia
|
||||
log->dw.R.I1 = sqrt(log->dw.I1);
|
||||
log->dw.R.I2 = sqrt(log->dw.I2);
|
||||
log->dw.R.I3 = sqrt(log->dw.I3);
|
||||
log->dw.R.Io2h = sqrt(log->dw.Io2h);
|
||||
log->dw.R.max_kat_ = (180 / 3.14159f) * (atan2(log->dw.max_ortb_I,log->dw.max_orta_I) - atan2(log->dw.max_ortb_U,log->dw.max_orta_U));// wyliczenie kata
|
||||
// log->dw.R.moment_wystapienia = log->dw.czas_; // wpisanie czasu chwili zadzialania zabezpieczenia
|
||||
// log->dw.R.dlugosc = (float)log->dw.dl_ * 0.01f; // / 100; // wpisanie czasu trwania zwarcia
|
||||
// log->dw.R.czy_nowa = true; // sygnalizacja powstania nowej rejestracji
|
||||
log->dw.wsk_rej = 0; // zerowanie wskaznika powstania nowego zaklocenia
|
||||
}
|
||||
|
||||
}
|
||||
262
src/R_67N_LWN2.h
Normal file
262
src/R_67N_LWN2.h
Normal file
@@ -0,0 +1,262 @@
|
||||
/*
|
||||
* R_67N_LWN2.h
|
||||
*
|
||||
* Created on: 14-11-2018
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef R_67N_LWN2_H_
|
||||
#define R_67N_LWN2_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "helper.h"
|
||||
|
||||
#define R67N_L_AKT 0x0040
|
||||
#define R67N_L_NADP1 0x0080
|
||||
#define R67N_L_NADP2 0x0100
|
||||
#define R67N_L_ECHO 0x0200
|
||||
#define R67N_L_ECHO_WYL 0x0400
|
||||
#define R67N_L_BLOK 0x0800
|
||||
#define R67N_L_ODWR_PR 0x1000
|
||||
|
||||
struct Wyjscia_rejestratora_lwn2
|
||||
{
|
||||
float max_I_;///< maksymalna watosc pradu w czasie zaklocenia w krotnosciach warotosci znamionowej
|
||||
float max_U_;///< watosc napiecia w czasie zaklocenia w krotnosciach warotosci znamionowej
|
||||
float max_kat_; ///< watosc kata w czasie zaklocenia w stopniach
|
||||
float I1; ///< prad fazy L1
|
||||
float I2; ///< prad fazy L2
|
||||
float I3; ///< prad fazy L3
|
||||
float Io2h; ///< prąd drugiej harmonicznej
|
||||
};
|
||||
|
||||
|
||||
struct Nastawy_przeliczone_lwn2
|
||||
{
|
||||
float Ir1; ///< wartosc rozruchowa pradu stopień 1
|
||||
float Ip1; ///< wartosc powrotu pradu rozruchowego stopień 1
|
||||
float Ir2; ///< wartosc rozruchowa pradu stopień 2
|
||||
float Ip2; ///< wartosc powrotu pradu rozruchowego stopień 2
|
||||
float kh1; ///< wspólczynnik stabilizacji zadziałania stopień 1
|
||||
float kh2; ///< wspólczynnik stabilizacji zadziałania stopień 2
|
||||
float khp1; ///< wspolczynnik stabilizacji dla powrotu stopień 1
|
||||
float khp2; ///< wspolczynnik stabilizacji dla powrotu stopień 2
|
||||
float I1_2hr; ///< wartość rozruchowa blokady drugiej harmonicznej stopień 1
|
||||
float I1_2hr_powr; ///< wartość rozruchowa blokady drugiej harmonicznej stopień 1
|
||||
float U_echo; ///< wartosc rozruchowa echa
|
||||
float Ur; ///< wartosc rozruchowa napiecia blokady
|
||||
float Up; ///< wartosc powrotu napiecia blokady
|
||||
float orta; ///< ortogonalna a dla wektora nasatwy kata charakterystycznego
|
||||
float ortb; ///< ortogonalna b dla wektora nasatwy kata charakterystycznego
|
||||
short dir; ///< nastawa kierunku 2 - do przodu; 1 - w obu kierunkach; 0 - do tylu
|
||||
int t1; ///< opoznienie czasu zadzialania przekaznika
|
||||
int t2; ///< opoznienie czasu zadzialania przekaznika
|
||||
u8 on_; ///< wartosc nastawy aktywnosci przekaznika 1- aktywny
|
||||
u8 w1; ///< wartosc nastawy dzialania na wylaczeniee 1 - wylaczenie 0 - tylko sygnalizacja
|
||||
u8 w2; ///< wartosc nastawy dzialania na wylaczeniee 1 - wylaczenie 0 - tylko sygnalizacja
|
||||
u8 bl_; ///< wartosc nastawy aktywnosci blokady dzialania 1- blokada aktywna
|
||||
u8 t0_1; ///< przekaźnik bezzwłoczny stopień 1
|
||||
u8 t0_2; ///< przekaźnik bezzwłoczny stopień 2
|
||||
u8 Bl_2h1_ON; ///< Włączenie blokady od drugiej harmonicznej w stopniu 1
|
||||
u8 Bl_2h2_ON; ///< Włączenie blokady od drugiej harmonicznej w stopniu 2
|
||||
u32 l_nad_time;
|
||||
u32 l_nad_time_max;
|
||||
u32 t1_min;
|
||||
u32 t2_min;
|
||||
u32 l_t_blok;
|
||||
short dir2; ///< nastawa kierunku stop. 2, 2 - do przodu; 1 - w obu kierunkach; 0 - do tylu
|
||||
float I2h_min1;
|
||||
float I2h_min2;
|
||||
};
|
||||
|
||||
struct Wejscie_lwn2
|
||||
{
|
||||
float orta_I_; ///< ortogonalna a pradu wejsciowego Io
|
||||
float ortb_I_; ///< ortogonalna b pradu wejsciowego Io
|
||||
float kwampl_I_; ///< kwadrat amplitudy prądu
|
||||
float orta_U_; ///< ortogonalna b napiecia wejsciowego Uo
|
||||
float ortb_U_; ///< ortogonalna b napiecia wejsciowego Uo
|
||||
float kwampl_U_; ///< kwadrat amplitudy napiecia
|
||||
float IL1; ///< kwadrat amplitudy prądu faza L1
|
||||
float IL2; ///< kwadrat amplitudy prądu faza L2
|
||||
float IL3; ///< kwadrat amplitudy prądu faza L3
|
||||
float Io2h;///< kwadrat amplitudy drugiej harmonicznej składowej zerowej prądu
|
||||
};
|
||||
|
||||
struct dane_wewnetrzne_lwn2
|
||||
{
|
||||
struct Wyjscia_rejestratora_lwn2 R; ///< dane ostatniego zaklocenia
|
||||
long long 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)
|
||||
|
||||
float max_I;///< maksymalna watosc pradu w czasie zaklocenia w krotnosciach warotosci znamionowej
|
||||
float max_U;///< watosc napiecia w czasie zaklocenia w krotnosciach warotosci znamionowej
|
||||
float max_kat; ///< watosc kata w czasie zaklocenia w stopniach
|
||||
float I1; ///< prad fazy L1
|
||||
float I2; ///< prad fazy L2
|
||||
float I3; ///< prad fazy L3
|
||||
float Io2h;///< prad drugiej harmonicznej
|
||||
|
||||
float max_orta_I;
|
||||
float max_ortb_I;
|
||||
float max_orta_U;
|
||||
float max_ortb_U;
|
||||
|
||||
short lp1;///< licznikpobudzen stopień 1
|
||||
short lp2;///< licznikpobudzen stopień 2
|
||||
short lp1_pre;///< licznikpobudzen stopień 1
|
||||
short lp2_pre;///< licznikpobudzen stopień 2
|
||||
short lp3;///< licznikpobudzen I0 do echa
|
||||
short lp4;///< licznikpobudzen w LRC
|
||||
short lp5;///
|
||||
short lp6;///
|
||||
short lp7;
|
||||
int lt1;
|
||||
int lt2;
|
||||
u8 Podwr;
|
||||
u8 Ptyl1;
|
||||
u8 P1_prev;
|
||||
u8 Ptyl2;
|
||||
u8 P2_prev;
|
||||
u8 PI0; // pobudzenie i0 do echa
|
||||
u8 P; // pobudzenie i0 do echa
|
||||
u8 P1;
|
||||
u8 P2;
|
||||
u8 P1_pre;
|
||||
u8 P2_pre;
|
||||
u8 Z;
|
||||
u8 Z1;
|
||||
u8 Z2;
|
||||
u8 P_U;
|
||||
u8 Bl_2h1;
|
||||
u8 Bl_2h2;
|
||||
u8 kierunek;
|
||||
u8 Z_last;
|
||||
u8 P2h1;
|
||||
u8 P2h2;
|
||||
u8 PU0; //pobudzenie dla echa
|
||||
short lp2h1;
|
||||
short lp2h2;
|
||||
};
|
||||
|
||||
struct r_67n_lwn2_logic
|
||||
{
|
||||
struct binary_io stan_bl_;
|
||||
|
||||
float *orta_I_;
|
||||
float *ortb_I_;
|
||||
float *kwampl_I_;
|
||||
|
||||
float *orta_U_;
|
||||
float *ortb_U_;
|
||||
float *kwampl_U_;
|
||||
|
||||
float *IL1;
|
||||
float *IL2;
|
||||
float *IL3;
|
||||
float *Io2h;
|
||||
|
||||
struct binary_io test;
|
||||
struct binary_io l_odb;
|
||||
struct binary_io l_ok;
|
||||
struct binary_io W;
|
||||
struct binary_io Z1;
|
||||
struct binary_io Z2;
|
||||
struct binary_io P1;
|
||||
struct binary_io P2;
|
||||
struct binary_io kier;
|
||||
struct binary_io NRL;
|
||||
struct binary_io bl_st1;
|
||||
struct binary_io bl_st2;
|
||||
struct binary_io bl_st1_wy;
|
||||
struct binary_io bl_st2_wy;
|
||||
struct binary_io bl_2h_st1_wy;
|
||||
struct binary_io bl_2h_st2_wy;
|
||||
struct binary_io l_blok;
|
||||
struct binary_io l_zezw;
|
||||
struct binary_io l_echo_wy;
|
||||
struct binary_io l_rc;
|
||||
|
||||
struct Nastawy_przeliczone_lwn2 nast_;
|
||||
struct dane_wewnetrzne_lwn2 dw;
|
||||
struct Wejscie_lwn2 w;
|
||||
|
||||
u8 l_echo;
|
||||
u8 skr_t1;
|
||||
u8 skr_t2;
|
||||
u8 l_blok_wyl;
|
||||
u32 l_nad_cnt;
|
||||
};
|
||||
|
||||
struct r_67n_lwn2_io
|
||||
{
|
||||
u32 stan_bl_in;
|
||||
u32 orta_I_float_in;
|
||||
u32 ortb_I_float_in;
|
||||
u32 kwampl_I_float_in;
|
||||
u32 orta_U_float_in;
|
||||
u32 ortb_U_float_in;
|
||||
u32 kwampl_U_float_in;
|
||||
u32 IL1_float_in;
|
||||
u32 IL2_float_in;
|
||||
u32 IL3_float_in;
|
||||
u32 Io2h_float_in;
|
||||
u32 test_in;
|
||||
u32 l_odb_in;
|
||||
u32 l_ok_in;
|
||||
u32 bl_st1_in;
|
||||
u32 bl_st2_in;
|
||||
u32 w_out;
|
||||
u32 z1_out;
|
||||
u32 z2_out;
|
||||
u32 p1_out;
|
||||
u32 p2_out;
|
||||
u32 kier_out;
|
||||
u32 NRL_out;
|
||||
u32 bl_st1_out;
|
||||
u32 bl_st2_out;
|
||||
u32 bl_2h_st1_out;
|
||||
u32 bl_2h_st2_out;
|
||||
u32 l_blok_out;
|
||||
u32 l_zezw_out;
|
||||
u32 l_echo_out;
|
||||
u32 l_rc_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct r_67n_lwn2_params
|
||||
{
|
||||
u32 bity; ///< nastawy bitowe;
|
||||
u32 dir; ///< nastawa kierunku dzialania przekaznika
|
||||
double U; ///< napiecie rozruchowe przekaznika w krotnosciach wartosci znamionowej
|
||||
double kat; ///< wartosc nastawy kata charakterystycznego w stopniach
|
||||
double I1; ///< prad rozruchowy przekaznika stopien 1
|
||||
double I2; ///< prad rozruchowy przekaznika stopien 2
|
||||
double kh1; ///< współczynnik stabilizacji stopień 1
|
||||
double kh2; ///< współczynnik stabilizacji stopień 2
|
||||
double t1; ///< wartosc nastawy czasu dzialania w sekundach stopiń 1
|
||||
double t2; ///< wartosc nastawy czasu dzialania w sekundach stopiń 2
|
||||
double t1_min; // czas t1 przy skróceniu
|
||||
double t2_min; // czas t1 przy skróceniu
|
||||
double Io2h1; ///<Prąd blokady drugiej harmonicznej
|
||||
double kp; ///< wartosc nastawy wspolczynnika
|
||||
double L_t_nad;
|
||||
double L_U_echo;
|
||||
double L_T_odwr;
|
||||
u32 dir2; ///< nastawa kierunku dzialania przekaznika stop. 2
|
||||
double L_t_nad_max;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct r_67n_lwn2_args
|
||||
{
|
||||
struct r_67n_lwn2_io io;
|
||||
struct r_67n_lwn2_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void r_67n_lwn2(void *args, void *logic);
|
||||
extern void r_67n_lwn2_100hz(void *args, void *logic);
|
||||
extern void r_67n_lwn2_20hz(void *args, void *logic);
|
||||
extern int r_67n_lwn2_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* R_67N_LWN2_H_ */
|
||||
1189
src/ZDistA.c
Normal file
1189
src/ZDistA.c
Normal file
File diff suppressed because it is too large
Load Diff
444
src/ZDistA.h
Normal file
444
src/ZDistA.h
Normal file
@@ -0,0 +1,444 @@
|
||||
/*
|
||||
* ZDistA.h
|
||||
*
|
||||
*
|
||||
* Created on: 09-03-2017
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
#ifndef ZDISTA_H_
|
||||
#define ZDISTA_H_
|
||||
|
||||
/*
|
||||
#include <stdint.h>
|
||||
#define u8 uint8_t
|
||||
#define u16 uint16_t
|
||||
#define u32 uint32_t
|
||||
|
||||
struct binary_io
|
||||
{
|
||||
int yyyy;
|
||||
};
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "helper.h"
|
||||
|
||||
struct impedancja_ZDistA
|
||||
{
|
||||
float R[9]; // czesc rzeczywista impedancji
|
||||
float X[9]; // czesc urojona impedancji
|
||||
float Z[9]; //kwadrat impedancji
|
||||
float absR[9]; // wartosc bezwzgledna impedancji czesc rzeczywista
|
||||
float absX[9]; // wartosc bezwzgledna impedancji czesc urojona
|
||||
float XRtanfi2[9]; // abs(X+R*tan(fi2))
|
||||
// float XRtanfi1[9]; // abs(X-R*tan(fi1))
|
||||
//[0] petla L1-E strefa 1
|
||||
//[1] petla L2-E strefa 1
|
||||
//[2] petla L3-E strefa 1
|
||||
//[3] petla L1-E strefa 2,3,4,5
|
||||
//[4] petla L2-E strefa 2,3,4,5
|
||||
//[5] petla L3-E strefa 2,3,4,5
|
||||
//[6] petla L1-L2
|
||||
//[7] petla L2-L3
|
||||
//[8] petla L3-L1
|
||||
float XRtanfi1_noabs[9];
|
||||
};
|
||||
|
||||
struct dane_wewnetrzne_ZDistA
|
||||
{
|
||||
struct impedancja_ZDistA Z;
|
||||
u8 Km;
|
||||
u8 Kp;
|
||||
u8 Igr[6]; // przekroczenie wartosci granicznej pradu
|
||||
u8 Iogr; // zwarcie z udzialem ziemi
|
||||
u8 P_s[6][6];//pobudzenie kryterium impedacyjnego (obszar) [numer strefy][L1E,L2E,L3E,L1L2,L2L3,L3L1]
|
||||
u8 P_sss[6][6];
|
||||
u8 Pbk[6][6];//pobudzenie w strefie [numer strefy][L1E,L2E,L3E,L1L2,L2L3,L3L1] bezkierunkowe
|
||||
u8 P[6][6];//pobudzenie w strefie [numer strefy][L1E,L2E,L3E,L1L2,L2L3,L3L1]
|
||||
u8 BL_Load[9]; ///< impedancja w obszrze pradow roboczych
|
||||
u8 XKp[6][9]; ///< impedancyjne kryterium kierunku "do przodu"
|
||||
u8 XKm[6][9]; ///< impedancyjne kryterium kierunku "do tylu"
|
||||
u8 Zm[9];///< impedancyjne kryterium bardzo bliskiego zwarcia
|
||||
short liczp10[9]; /// licznik pobudzen
|
||||
short liczp11[6][9]; /// licznik pobudzen
|
||||
short liczp12[6][9]; /// licznik pobudzen
|
||||
//[0] petla L1-E strefa 1
|
||||
//[1] petla L2-E strefa 1
|
||||
//[2] petla L3-E strefa 1
|
||||
//[3] petla L1-E strefa 2,3,4,5
|
||||
//[4] petla L2-E strefa 2,3,4,5
|
||||
//[5] petla L3-E strefa 2,3,4,5
|
||||
//[6] petla L1-L2
|
||||
//[7] petla L2-L3
|
||||
//[8] petla L3-L1
|
||||
short liczps[6][6]; //liczniki pobudzen dla pobudzen stref [numer strefy][L1E,L2E,L3E,L1L2,L2L3,L3L1]
|
||||
short liczpIo; //licznik pobudzen dla identyfikacji zwarc z udzialem ziemi
|
||||
short liczKdod;
|
||||
float U1;
|
||||
float U2;
|
||||
float U3;
|
||||
float I1;
|
||||
float I2;
|
||||
float I3;
|
||||
struct ZDistA_logic *log_ptr;
|
||||
};
|
||||
|
||||
struct nast_w_poligon
|
||||
{
|
||||
float Xr; // zasieg dla poligonu i srodek okregu dla kolowej wspolrzedna X
|
||||
float Rr; // zasieg dla dla poligonu i srodek okregu dla kolowej wspolrzedna R
|
||||
float Z; // srednica kola charakterystyki kolowej
|
||||
float Xp; // zasieg dla poligonu i srodek okregu dla kolowej wspolrzedna X dla powrotu
|
||||
float Rp; // zasieg dla dla poligonu i srodek okregu dla kolowej wspolrzedna R dla powrotu
|
||||
float Zp; // srednica kola charakterystyki kolowej dla powrotu
|
||||
float Rrtanfi1;// wartość rozruchowa prostej nachylonej kątem linii
|
||||
float Rptanfi1;// wartość powrotowa prostej nachylonej kątem linii
|
||||
};
|
||||
|
||||
struct Wyjscia_ZDistA // struktura wyjsc przekaznika
|
||||
{
|
||||
struct dane_wewnetrzne_ZDistA *Zdist_dw;
|
||||
float przekladnia;
|
||||
u8 *on;
|
||||
u8 SOTF_zwrotnie;
|
||||
};
|
||||
|
||||
|
||||
struct Nastawy_przeliczone_ZDistA
|
||||
{
|
||||
struct Wyjscia_ZDistA wyjscie;
|
||||
u8 on_;
|
||||
u8 bl_;
|
||||
u8 Bl_L[6];
|
||||
u8 typ[6];// typ charakterystyki 0 - poligonalna, 1- kolowa
|
||||
float ReK1; // skladowa rzeczywista wspolczynnika kompensacji ziemnozwarciowej dla strefy 1
|
||||
float ImK1;// skladowa urojona wspolczynnika kompensacji ziemnozwarciowej dla strefy 1
|
||||
float ReKr;// skladowa rzeczywista wspolczynnika kompensacji ziemnozwarciowej dla stref 2,3,4,5
|
||||
float ImKr;// skladowa urojona wspolczynnika kompensacji ziemnozwarciowej dla stref 2,3,4,5
|
||||
|
||||
struct nast_w_poligon n_pol[6][2]; // nastawy stref dla charakterystyki poligonalnej [numer strefy][LE/LL]
|
||||
float tanfi1; // tangens kata linii
|
||||
float tanfi2; //tangens kata dodatkowej prostej dla charakterystyki poligonalnej strefa 1
|
||||
float Xr1f; // wartosc rozruchowa dodatkowej prostej dla charakterystyki poligonalnej
|
||||
float Xr1fp; // wartosc powrotowa dodatkowej prostej dla charakterystyki poligonalnej
|
||||
float Xr1Wf; // wartosc rozruchowa dodatkowej prostej dla charakterystyki poligonalnej
|
||||
float Xr1Wfp; // wartosc powrotowa dodatkowej prostej dla charakterystyki poligonalnej
|
||||
float Igr; // wartosc kwadratu pradu granicznego warunku dzialania przekaznika
|
||||
float Igrp; // wartosc kwadratu pradu granicznego warunku dzialania przekaznika (powrot)
|
||||
|
||||
float Zgr;// minimalna wartosc impedancji kryteriunkierunkowego w kwadracie
|
||||
float kp;//współczynnik powrotu dla niedomiarówek
|
||||
float kpp;//współczynnik powrotu dla nadmiarówek
|
||||
float kpk; //kwadrat współczynnika powrotu
|
||||
short kierunek[6];
|
||||
|
||||
//A2
|
||||
float XKR; // wspolczynnik prostej R kierunku kryterium impedancyjnego
|
||||
float XKX; // wspolczynnik prostej R kierunku kryterium impedancyjnego
|
||||
float KL;//wspolczynnik prostej dla blokady od obszaru obciażenia
|
||||
float RLf; // wartosc rozruchowa blokady Load do przodu
|
||||
float RLr; // wartosc rozruchowa blokady Load do tylu
|
||||
float Iogr; // wartosc graniczna skladowej zerowej identyfikacji zwarc z udzialem ziemi
|
||||
float khio; // wspolczynnik stabilizacji dla przekaznika identyfikacji zwarc z udzialem ziemi
|
||||
float Uomin; ///< minimalna wartość napięcia składowej zerowej
|
||||
|
||||
};
|
||||
|
||||
struct ZDistA_logic
|
||||
{
|
||||
struct binary_io stan_bl;
|
||||
struct binary_io Bl_K;
|
||||
float *I1_orta; ///< Skladowa ortogonalna a pradu faza L1
|
||||
float *I1_ortb; ///< Skladowa ortogonalna b pradu faza L1
|
||||
float *I1; ///< Prad mierzony faza 1
|
||||
float *I2_orta; ///< Skladowa ortogonalna a pradu faza L2
|
||||
float *I2_ortb; ///< Skladowa ortogonalna b pradu faza L2
|
||||
float *I2; ///< Prad mierzony faza 2
|
||||
float *I3_orta; ///< Skladowa ortogonalna a pradu faza L3
|
||||
float *I3_ortb; ///< Skladowa ortogonalna b pradu faza L3
|
||||
float *I3; ///< Prad mierzony faza 3
|
||||
float *U1_orta; ///< Skladowa ortogonalna a napiecia faza L1
|
||||
float *U1_ortb; ///< Skladowa ortogonalna b napiecia faza L1
|
||||
float *U1; ///< Napiecie mierzone faza 1
|
||||
float *U2_orta; ///< Skladowa ortogonalna a napiecia faza L2
|
||||
float *U2_ortb; ///< Skladowa ortogonalna b napiecia faza L2
|
||||
float *U2; ///< Napiecie mierzone faza 2
|
||||
float *U3_orta; ///< Skladowa ortogonalna a napiecia faza L3
|
||||
float *U3_ortb; ///< Skladowa ortogonalna b napiecia faza L3
|
||||
float *U3; ///< Napiecie mierzone faza 3
|
||||
float *U12_orta; ///< Skladowa ortogonalna a napiecia L1-L2
|
||||
float *U12_ortb; ///< Skladowa ortogonalna b napiecia L1-L2
|
||||
float *U12; ///< Napiecie mierzone L1-L2
|
||||
float *U23_orta; ///< Skladowa ortogonalna a napiecia L2-L3
|
||||
float *U23_ortb; ///< Skladowa ortogonalna b napiecia L2-L3
|
||||
float *U23; ///< Napiecie mierzone L2-L3
|
||||
float *U31_orta; ///< Skladowa ortogonalna a napiecia L3-L1
|
||||
float *U31_ortb; ///< Skladowa ortogonalna b napiecia L3-L1
|
||||
float *U31; ///< Napiecie mierzone L3-L1
|
||||
float *sI1_orta; ///< Skladowa ortogonalna a skladowej zgodnej pradu
|
||||
float *sI1_ortb; ///< Skladowa ortogonalna b skladowej zgodnej pradu
|
||||
float *sI1; ///< Skladowa zgodna pradu
|
||||
float *sI2_orta; ///< Skladowa ortogonalna a skladowej przeciwnej pradu
|
||||
float *sI2_ortb; ///< Skladowa ortogonalna b skladowej przeciwnej pradu
|
||||
float *sI2; ///< Skladowa przeciwna pradu
|
||||
float *sI0_orta; ///< Skladowa ortogonalna a skladowej zerowej pradu
|
||||
float *sI0_ortb; ///< Skladowa ortogonalna b skladowej zerowej pradu
|
||||
float *sI0; ///< Skladowa zerowa pradu
|
||||
float *sU1_orta; ///< Skladowa ortogonalna a skladowej zgodnej napiecia
|
||||
float *sU1_ortb; ///< Skladowa ortogonalna b skladowej zgodnej napiecia
|
||||
float *sU1; ///< Skladowa zgodna napiecia
|
||||
float *sU2_orta; ///< Skladowa ortogonalna a skladowej przeciwnej napiecia
|
||||
float *sU2_ortb; ///< Skladowa ortogonalna b skladowej przeciwnej napiecia
|
||||
float *sU2; ///< Skladowa przeciwna napiecia
|
||||
float *sU0_orta; ///< Skladowa ortogonalna a skladowej zerowej napiecia
|
||||
float *sU0_ortb; ///< Skladowa ortogonalna b skladowej zerowej napiecia
|
||||
float *sU0; ///< Skladowa zerowa napiecia
|
||||
struct analog_in_params *param_I; ///< Parametry wejscia pradowego
|
||||
struct analog_in_params *param_U; /// < Parametry kanalu napieciowego
|
||||
struct binary_io test;
|
||||
struct binary_io P1W_L1E; ///< Pobudzenie strefy 1W zwarcie L1-E
|
||||
struct binary_io P1W_L2E; ///< Pobudzenie strefy 1W zwarcie L2-E
|
||||
struct binary_io P1W_L3E; ///< Pobudzenie strefy 1W zwarcie L3-E
|
||||
struct binary_io P1W_L1L2; ///< Pobudzenie strefy 1W zwarcie L1-L2
|
||||
struct binary_io P1W_L2L3; ///< Pobudzenie strefy 1W zwarcie L2-L3
|
||||
struct binary_io P1W_L3L1; ///< Pobudzenie strefy 1W zwarcie L3-L1
|
||||
struct binary_io P1_L1E; ///< Pobudzenie strefy 1 zwarcie L1-E
|
||||
struct binary_io P1_L2E; ///< Pobudzenie strefy 1 zwarcie L2-E
|
||||
struct binary_io P1_L3E; ///< Pobudzenie strefy 1 zwarcie L3-E
|
||||
struct binary_io P1_L1L2; ///< Pobudzenie strefy 1 zwarcie L1-L2
|
||||
struct binary_io P1_L2L3; ///< Pobudzenie strefy 1 zwarcie L2-L3
|
||||
struct binary_io P1_L3L1; ///< Pobudzenie strefy 1 zwarcie L3-L1
|
||||
struct binary_io P2_L1E; ///< Pobudzenie strefy 2 zwarcie L1-E
|
||||
struct binary_io P2_L2E; ///< Pobudzenie strefy 2 zwarcie L2-E
|
||||
struct binary_io P2_L3E; ///< Pobudzenie strefy 2 zwarcie L3-E
|
||||
struct binary_io P2_L1L2; ///< Pobudzenie strefy 2 zwarcie L1-L2
|
||||
struct binary_io P2_L2L3; ///< Pobudzenie strefy 2 zwarcie L2-L3
|
||||
struct binary_io P2_L3L1; ///< Pobudzenie strefy 2 zwarcie L3-L1
|
||||
struct binary_io P3_L1E; ///< Pobudzenie strefy 3 zwarcie L1-E
|
||||
struct binary_io P3_L2E; ///< Pobudzenie strefy 3 zwarcie L2-E
|
||||
struct binary_io P3_L3E; ///< Pobudzenie strefy 3 zwarcie L3-E
|
||||
struct binary_io P3_L1L2; ///< Pobudzenie strefy 3 zwarcie L1-L2
|
||||
struct binary_io P3_L2L3; ///< Pobudzenie strefy 3 zwarcie L2-L3
|
||||
struct binary_io P3_L3L1; ///< Pobudzenie strefy 3 zwarcie L3-L1
|
||||
struct binary_io P4_L1E; ///< Pobudzenie strefy 4 zwarcie L1-E
|
||||
struct binary_io P4_L2E; ///< Pobudzenie strefy 4 zwarcie L2-E
|
||||
struct binary_io P4_L3E; ///< Pobudzenie strefy 4 zwarcie L3-E
|
||||
struct binary_io P4_L1L2; ///< Pobudzenie strefy 4 zwarcie L1-L2
|
||||
struct binary_io P4_L2L3; ///< Pobudzenie strefy 4 zwarcie L2-L3
|
||||
struct binary_io P4_L3L1; ///< Pobudzenie strefy 4 zwarcie L3-L1
|
||||
struct binary_io P5_L1E; ///< Pobudzenie strefy 5 zwarcie L1-E
|
||||
struct binary_io P5_L2E; ///< Pobudzenie strefy 5 zwarcie L2-E
|
||||
struct binary_io P5_L3E; ///< Pobudzenie strefy 5 zwarcie L3-E
|
||||
struct binary_io P5_L1L2; ///< Pobudzenie strefy 5 zwarcie L1-L2
|
||||
struct binary_io P5_L2L3; ///< Pobudzenie strefy 5 zwarcie L2-L3
|
||||
struct binary_io P5_L3L1; ///< Pobudzenie strefy 5 zwarcie L3-L1
|
||||
struct binary_io deakt; /// deaktywacja
|
||||
|
||||
struct dane_wewnetrzne_ZDistA dw;
|
||||
struct Nastawy_przeliczone_ZDistA nast_;// struktura z parametrami
|
||||
|
||||
u8 l_nieustalony;
|
||||
|
||||
float *z[6]; /// debug
|
||||
};
|
||||
|
||||
struct ZDistA_io
|
||||
{
|
||||
u32 bl_in;
|
||||
u32 bl_k_in;
|
||||
u32 i1_orta_float_in;
|
||||
u32 i1_ortb_float_in;
|
||||
u32 i1_float_in;
|
||||
u32 i2_orta_float_in;
|
||||
u32 i2_ortb_float_in;
|
||||
u32 i2_float_in;
|
||||
u32 i3_orta_float_in;
|
||||
u32 i3_ortb_float_in;
|
||||
u32 i3_float_in;
|
||||
u32 u1_orta_float_in;
|
||||
u32 u1_ortb_float_in;
|
||||
u32 u1_float_in;
|
||||
u32 u2_orta_float_in;
|
||||
u32 u2_ortb_float_in;
|
||||
u32 u2_float_in;
|
||||
u32 u3_orta_float_in;
|
||||
u32 u3_ortb_float_in;
|
||||
u32 u3_float_in;
|
||||
u32 u12_orta_float_in;
|
||||
u32 u12_ortb_float_in;
|
||||
u32 u12_float_in;
|
||||
u32 u23_orta_float_in;
|
||||
u32 u23_ortb_float_in;
|
||||
u32 u23_float_in;
|
||||
u32 u31_orta_float_in;
|
||||
u32 u31_ortb_float_in;
|
||||
u32 u31_float_in;
|
||||
u32 i1_zg_orta_float_in;
|
||||
u32 i1_zg_ortb_float_in;
|
||||
u32 i1_zg_float_in;
|
||||
u32 i2_pr_orta_float_in;
|
||||
u32 i2_pr_ortb_float_in;
|
||||
u32 i2_pr_float_in;
|
||||
u32 io_orta_float_in;
|
||||
u32 io_ortb_float_in;
|
||||
u32 io_float_in;
|
||||
u32 u1_zg_orta_float_in;
|
||||
u32 u1_zg_ortb_float_in;
|
||||
u32 u1_zg_float_in;
|
||||
u32 u2_pr_orta_float_in;
|
||||
u32 u2_pr_ortb_float_in;
|
||||
u32 u2_pr_float_in;
|
||||
u32 uo_orta_float_in;
|
||||
u32 uo_ortb_float_in;
|
||||
u32 uo_float_in;
|
||||
u32 i_param_an_ptr_in;
|
||||
u32 u_param_an_ptr_in;
|
||||
u32 test_in;
|
||||
u32 deakt_in;
|
||||
u32 wy_ptr_out; //zainicjowac
|
||||
u32 P1W_L1E_out;
|
||||
u32 P1W_L2E_out;
|
||||
u32 P1W_L3E_out;
|
||||
u32 P1W_L1L2_out;
|
||||
u32 P1W_L2L3_out;
|
||||
u32 P1W_L3L1_out;
|
||||
u32 P1_L1E_out;
|
||||
u32 P1_L2E_out;
|
||||
u32 P1_L3E_out;
|
||||
u32 P1_L1L2_out;
|
||||
u32 P1_L2L3_out;
|
||||
u32 P1_L3L1_out;
|
||||
u32 P2_L1E_out;
|
||||
u32 P2_L2E_out;
|
||||
u32 P2_L3E_out;
|
||||
u32 P2_L1L2_out;
|
||||
u32 P2_L2L3_out;
|
||||
u32 P2_L3L1_out;
|
||||
u32 P3_L1E_out;
|
||||
u32 P3_L2E_out;
|
||||
u32 P3_L3E_out;
|
||||
u32 P3_L1L2_out;
|
||||
u32 P3_L2L3_out;
|
||||
u32 P3_L3L1_out;
|
||||
u32 P4_L1E_out;
|
||||
u32 P4_L2E_out;
|
||||
u32 P4_L3E_out;
|
||||
u32 P4_L1L2_out;
|
||||
u32 P4_L2L3_out;
|
||||
u32 P4_L3L1_out;
|
||||
u32 P5_L1E_out;
|
||||
u32 P5_L2E_out;
|
||||
u32 P5_L3E_out;
|
||||
u32 P5_L1L2_out;
|
||||
u32 P5_L2L3_out;
|
||||
u32 P5_L3L1_out;
|
||||
|
||||
//debug
|
||||
u32 z1_float_out;
|
||||
u32 z2_float_out;
|
||||
u32 z3_float_out;
|
||||
u32 z4_float_out;
|
||||
u32 z5_float_out;
|
||||
u32 z6_float_out;
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct ZDistA_params
|
||||
{
|
||||
u32 bity; ///< nastawy bitowe;
|
||||
|
||||
long Typ1; ///< Typ charakterystyki strefa 1
|
||||
long Typ2; ///< Typ charakterystyki strefa 2
|
||||
long Typ3; ///< Typ charakterystyki strefa 3
|
||||
long Typ4; ///< Typ charakterystyki strefa 4
|
||||
long Typ5; ///< Typ charakterystyki strefa 5
|
||||
long K1; ///< Kierunek dzialania strefa 1
|
||||
long K2; ///< Kierunek dzialania strefa 2
|
||||
long K3; ///< Kierunek dzialania strefa 3
|
||||
long K4; ///< Kierunek dzialania strefa 4
|
||||
long K5; ///< Kierunek dzialania strefa 5
|
||||
|
||||
double I_min; ///< Graniczna wartosc pradu
|
||||
double Kk1; ///< Wspolczynnik kompensacji ziemnozwarciowej strefa 1
|
||||
double Kk1_kat; ///< Kat wektora kompensacji ziemnozwarciowej strefa 1
|
||||
double KkC; ///< Wspolczynnik kompensacji ziemnozwarciowej stref 2,3,4,5
|
||||
double KkC_kat; ///< Kat wektora kompensacji ziemnozwarciowej stref 2,3,4,5
|
||||
double fi1; ///< Kat linii
|
||||
double fi2; ///< Kat nachylenia prostej korekcji strefy pierwszej dla zwarc jednofazowych z ziemia
|
||||
double R1W_Zf1W_LE; ///< Zasieg rezystancyjny strefy 1 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” wydluzenie strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R1W_Zf1W_LL; ///< Zasieg rezystancyjny strefy 1 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” wyduzenie strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R1_Zf1_LE; ///< Zasieg rezystancyjny strefy 1 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R1_Zf1_LL; ///< Zasieg rezystancyjny strefy 1 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R2_Zf2_LE; ///< Zasieg rezystancyjny strefy 2 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 2 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R2_Zf2_LL; ///< Zasieg rezystancyjny strefy 2 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 2 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R3_Zf3_LE; ///< Zasieg rezystancyjny strefy 3 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 3 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R3_Zf3_LL; ///< Zasieg rezystancyjny strefy 3 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 3 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R4_Zf4_LE; ///< Zasieg rezystancyjny strefy 4 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 4 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R4_Zf4_LL; ///< Zasieg rezystancyjny strefy 4 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 4 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R5_Zf5_LE; ///< Zasieg rezystancyjny strefy 5 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 5 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R5_Zf5_LL; ///< Zasieg rezystancyjny strefy 5 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 5 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X1W_Zr1W_LE; ///< Zasieg reaktancyjny wydluzenie strefy 1 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” wydluzenie strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X1W_Zr1W_LL; ///< Zasieg reaktancyjny wydluzenie strefy 1 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” wydluzenie strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X1_Zr1_LE; ///< Zasieg reaktancyjny strefy 1 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X1_Zr1_LL; ///< Zasieg reaktancyjny strefy 1 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X2_Zr2_LE; ///< Zasieg reaktancyjny strefy 2 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 2 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X2_Zr2_LL; ///< Zasieg reaktancyjny strefy 2 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 2 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X3_Zr3_LE; ///< Zasieg reaktancyjny strefy 3 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 3 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X3_Zr3_LL; ///< Zasieg reaktancyjny strefy 3 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 3 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X4_Zr4_LE; ///< Zasieg reaktancyjny strefy 4 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 4 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X4_Zr4_LL; ///< Zasieg reaktancyjny strefy 4 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 4 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X5_Zr5_LE; ///< Zasieg reaktancyjny strefy 5 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 5 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X5_Zr5_LL; ///< Zasieg reaktancyjny strefy 5 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 5 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double kp; ///< wspolczynnik powrotu
|
||||
//A2
|
||||
// double U_min; ///< Minimalna wartosc napiecia
|
||||
double fi3; ///< Kat kierunkowy od osi X impedancyjnego kryterium kierunku
|
||||
double fi4; ///< Kat kierunkowy od osi R impedancyjnego kryterium kierunku
|
||||
double RLf; ///< Zasieg „ do przodu” kryterium blokady dzialania w zakresie pradow obciażenia
|
||||
double RLr; ///< Zasieg „ do tylu” kryterium blokady dzialania w zakresie pradow obciażenia
|
||||
double fi5; ///< Kat kierunkowy blokady dzialania w zakresie pradow obciażenia
|
||||
double Iomin; ///< Minimalna wartosc rozruchowa pradu zerowego przekaznika identyfikacji zwarc z udzialem ziemi
|
||||
double Iokh; ///< Wspolczynnik stabilizacji charakterystyki przekaznika identyfikacji zwarc z udzialem ziemi
|
||||
double Uomin; ///< minimalna wartość napięcia składowej zerowej
|
||||
|
||||
long Typ0; ///< Typ charakterystyki strefa 1W
|
||||
long K0; ///< Kierunek dzialania strefa 1W
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct ZDistA_args
|
||||
{
|
||||
struct ZDistA_io io;
|
||||
struct ZDistA_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void ZDistA(void *args, void *logic);
|
||||
extern int ZDistA_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* ZDISTA_H_ */
|
||||
1124
src/ZDistA_kopia.c_
Normal file
1124
src/ZDistA_kopia.c_
Normal file
File diff suppressed because it is too large
Load Diff
425
src/ZDistA_kopia.h_
Normal file
425
src/ZDistA_kopia.h_
Normal file
@@ -0,0 +1,425 @@
|
||||
/*
|
||||
* ZDistA.h
|
||||
*
|
||||
*
|
||||
* Created on: 09-03-2017
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
#ifndef ZDISTA_H_
|
||||
#define ZDISTA_H_
|
||||
|
||||
#include "../tdefs.h"
|
||||
#include "helper.h"
|
||||
|
||||
struct impedancja_ZDistA
|
||||
{
|
||||
float R[9]; // czesc rzeczywista impedancji
|
||||
float X[9]; // czesc urojona impedancji
|
||||
float Z[9]; //kwadrat impedancji
|
||||
float absR[9]; // wartosc bezwzgledna impedancji czesc rzeczywista
|
||||
float absX[9]; // wartosc bezwzgledna impedancji czesc urojona
|
||||
float XRtanfi2[9]; // abs(X+R*tan(fi2))
|
||||
float XRtanfi1[9]; // abs(X-R*tan(fi1))
|
||||
//[0] petla L1-E strefa 1
|
||||
//[1] petla L2-E strefa 1
|
||||
//[2] petla L3-E strefa 1
|
||||
//[3] petla L1-E strefa 2,3,4,5
|
||||
//[4] petla L2-E strefa 2,3,4,5
|
||||
//[5] petla L3-E strefa 2,3,4,5
|
||||
//[6] petla L1-L2
|
||||
//[7] petla L2-L3
|
||||
//[8] petla L3-L1
|
||||
};
|
||||
|
||||
struct dane_wewnetrzne_ZDistA
|
||||
{
|
||||
struct impedancja_ZDistA Z;
|
||||
u8 Km;
|
||||
u8 Kp;
|
||||
u8 Igr[6]; // przekroczenie wartosci granicznej pradu
|
||||
u8 Iogr; // zwarcie z udzialem ziemi
|
||||
u8 P_s[6][6];//pobudzenie kryterium impedacyjnego (obszar) [numer strefy][L1E,L2E,L3E,L1L2,L2L3,L3L1]
|
||||
u8 Pbk[6][6];//pobudzenie w strefie [numer strefy][L1E,L2E,L3E,L1L2,L2L3,L3L1] bezkierunkowe
|
||||
u8 P[6][6];//pobudzenie w strefie [numer strefy][L1E,L2E,L3E,L1L2,L2L3,L3L1]
|
||||
u8 BL_Load[9]; ///< impedancja w obszrze pradow roboczych
|
||||
u8 XKp[9]; ///< impedancyjne kryterium kierunku "do przodu"
|
||||
u8 XKm[9]; ///< impedancyjne kryterium kierunku "do tylu"
|
||||
u8 Zm[9];///< impedancyjne kryterium bardzo bliskiego zwarcia
|
||||
short liczp10[9]; /// licznik pobudzen
|
||||
short liczp11[9]; /// licznik pobudzen
|
||||
short liczp12[9]; /// licznik pobudzen
|
||||
//[0] petla L1-E strefa 1
|
||||
//[1] petla L2-E strefa 1
|
||||
//[2] petla L3-E strefa 1
|
||||
//[3] petla L1-E strefa 2,3,4,5
|
||||
//[4] petla L2-E strefa 2,3,4,5
|
||||
//[5] petla L3-E strefa 2,3,4,5
|
||||
//[6] petla L1-L2
|
||||
//[7] petla L2-L3
|
||||
//[8] petla L3-L1
|
||||
short liczps[6][6]; //liczniki pobudzen dla pobudzen stref [numer strefy][L1E,L2E,L3E,L1L2,L2L3,L3L1]
|
||||
short liczpIo; //licznik pobudzen dla identyfikacji zwarc z udzialem ziemi
|
||||
short liczKdod;
|
||||
float U1;
|
||||
float U2;
|
||||
float U3;
|
||||
float I1;
|
||||
float I2;
|
||||
float I3;
|
||||
struct ZDistA_logic *log_ptr;
|
||||
};
|
||||
|
||||
struct nast_w_poligon
|
||||
{
|
||||
float Xr; // zasieg dla poligonu i srodek okregu dla kolowej wspolrzedna X
|
||||
float Rr; // zasieg dla dla poligonu i srodek okregu dla kolowej wspolrzedna R
|
||||
float Z; // srednica kola charakterystyki kolowej
|
||||
float Xp; // zasieg dla poligonu i srodek okregu dla kolowej wspolrzedna X dla powrotu
|
||||
float Rp; // zasieg dla dla poligonu i srodek okregu dla kolowej wspolrzedna R dla powrotu
|
||||
float Zp; // srednica kola charakterystyki kolowej dla powrotu
|
||||
float Rrtanfi1;// wartość rozruchowa prostej nachylonej kątem linii
|
||||
float Rptanfi1;// wartość powrotowa prostej nachylonej kątem linii
|
||||
};
|
||||
|
||||
struct Wyjscia_ZDistA // struktura wyjsc przekaznika
|
||||
{
|
||||
struct dane_wewnetrzne_ZDistA *Zdist_dw;
|
||||
float przekladnia;
|
||||
u8 *on;
|
||||
};
|
||||
|
||||
|
||||
struct Nastawy_przeliczone_ZDistA
|
||||
{
|
||||
struct Wyjscia_ZDistA wyjscie;
|
||||
u8 on_;
|
||||
u8 bl_;
|
||||
u8 Bl_L[6];
|
||||
u8 typ[6];// typ charakterystyki 0 - poligonalna, 1- kolowa
|
||||
float ReK1; // skladowa rzeczywista wspolczynnika kompensacji ziemnozwarciowej dla strefy 1
|
||||
float ImK1;// skladowa urojona wspolczynnika kompensacji ziemnozwarciowej dla strefy 1
|
||||
float ReKr;// skladowa rzeczywista wspolczynnika kompensacji ziemnozwarciowej dla stref 2,3,4,5
|
||||
float ImKr;// skladowa urojona wspolczynnika kompensacji ziemnozwarciowej dla stref 2,3,4,5
|
||||
|
||||
struct nast_w_poligon n_pol[6][2]; // nastawy stref dla charakterystyki poligonalnej [numer strefy][LE/LL]
|
||||
float tanfi1; // tangens kata linii
|
||||
float tanfi2; //tangens kata dodatkowej prostej dla charakterystyki poligonalnej strefa 1
|
||||
float Xr1f; // wartosc rozruchowa dodatkowej prostej dla charakterystyki poligonalnej
|
||||
float Xr1fp; // wartosc powrotowa dodatkowej prostej dla charakterystyki poligonalnej
|
||||
float Xr1Wf; // wartosc rozruchowa dodatkowej prostej dla charakterystyki poligonalnej
|
||||
float Xr1Wfp; // wartosc powrotowa dodatkowej prostej dla charakterystyki poligonalnej
|
||||
float Igr; // wartosc kwadratu pradu granicznego warunku dzialania przekaznika
|
||||
float Igrp; // wartosc kwadratu pradu granicznego warunku dzialania przekaznika (powrot)
|
||||
|
||||
float Zgr;// minimalna wartosc impedancji kryteriunkierunkowego w kwadracie
|
||||
float kp;//współczynnik powrotu dla niedomiarówek
|
||||
float kpp;//współczynnik powrotu dla nadmiarówek
|
||||
float kpk; //kwadrat współczynnika powrotu
|
||||
short kierunek[6];
|
||||
|
||||
//A2
|
||||
float XKR; // wspolczynnik prostej R kierunku kryterium impedancyjnego
|
||||
float XKX; // wspolczynnik prostej R kierunku kryterium impedancyjnego
|
||||
float KL;//wspolczynnik prostej dla blokady od obszaru obciażenia
|
||||
float RLf; // wartosc rozruchowa blokady Load do przodu
|
||||
float RLr; // wartosc rozruchowa blokady Load do tylu
|
||||
float Iogr; // wartosc graniczna skladowej zerowej identyfikacji zwarc z udzialem ziemi
|
||||
float khio; // wspolczynnik stabilizacji dla przekaznika identyfikacji zwarc z udzialem ziemi
|
||||
float Uomin; ///< minimalna wartość napięcia składowej zerowej
|
||||
|
||||
};
|
||||
|
||||
struct ZDistA_logic
|
||||
{
|
||||
struct binary_io stan_bl;
|
||||
struct binary_io Bl_K;
|
||||
float *I1_orta; ///< Skladowa ortogonalna a pradu faza L1
|
||||
float *I1_ortb; ///< Skladowa ortogonalna b pradu faza L1
|
||||
float *I1; ///< Prad mierzony faza 1
|
||||
float *I2_orta; ///< Skladowa ortogonalna a pradu faza L2
|
||||
float *I2_ortb; ///< Skladowa ortogonalna b pradu faza L2
|
||||
float *I2; ///< Prad mierzony faza 2
|
||||
float *I3_orta; ///< Skladowa ortogonalna a pradu faza L3
|
||||
float *I3_ortb; ///< Skladowa ortogonalna b pradu faza L3
|
||||
float *I3; ///< Prad mierzony faza 3
|
||||
float *U1_orta; ///< Skladowa ortogonalna a napiecia faza L1
|
||||
float *U1_ortb; ///< Skladowa ortogonalna b napiecia faza L1
|
||||
float *U1; ///< Napiecie mierzone faza 1
|
||||
float *U2_orta; ///< Skladowa ortogonalna a napiecia faza L2
|
||||
float *U2_ortb; ///< Skladowa ortogonalna b napiecia faza L2
|
||||
float *U2; ///< Napiecie mierzone faza 2
|
||||
float *U3_orta; ///< Skladowa ortogonalna a napiecia faza L3
|
||||
float *U3_ortb; ///< Skladowa ortogonalna b napiecia faza L3
|
||||
float *U3; ///< Napiecie mierzone faza 3
|
||||
float *U12_orta; ///< Skladowa ortogonalna a napiecia L1-L2
|
||||
float *U12_ortb; ///< Skladowa ortogonalna b napiecia L1-L2
|
||||
float *U12; ///< Napiecie mierzone L1-L2
|
||||
float *U23_orta; ///< Skladowa ortogonalna a napiecia L2-L3
|
||||
float *U23_ortb; ///< Skladowa ortogonalna b napiecia L2-L3
|
||||
float *U23; ///< Napiecie mierzone L2-L3
|
||||
float *U31_orta; ///< Skladowa ortogonalna a napiecia L3-L1
|
||||
float *U31_ortb; ///< Skladowa ortogonalna b napiecia L3-L1
|
||||
float *U31; ///< Napiecie mierzone L3-L1
|
||||
float *sI1_orta; ///< Skladowa ortogonalna a skladowej zgodnej pradu
|
||||
float *sI1_ortb; ///< Skladowa ortogonalna b skladowej zgodnej pradu
|
||||
float *sI1; ///< Skladowa zgodna pradu
|
||||
float *sI2_orta; ///< Skladowa ortogonalna a skladowej przeciwnej pradu
|
||||
float *sI2_ortb; ///< Skladowa ortogonalna b skladowej przeciwnej pradu
|
||||
float *sI2; ///< Skladowa przeciwna pradu
|
||||
float *sI0_orta; ///< Skladowa ortogonalna a skladowej zerowej pradu
|
||||
float *sI0_ortb; ///< Skladowa ortogonalna b skladowej zerowej pradu
|
||||
float *sI0; ///< Skladowa zerowa pradu
|
||||
float *sU1_orta; ///< Skladowa ortogonalna a skladowej zgodnej napiecia
|
||||
float *sU1_ortb; ///< Skladowa ortogonalna b skladowej zgodnej napiecia
|
||||
float *sU1; ///< Skladowa zgodna napiecia
|
||||
float *sU2_orta; ///< Skladowa ortogonalna a skladowej przeciwnej napiecia
|
||||
float *sU2_ortb; ///< Skladowa ortogonalna b skladowej przeciwnej napiecia
|
||||
float *sU2; ///< Skladowa przeciwna napiecia
|
||||
float *sU0_orta; ///< Skladowa ortogonalna a skladowej zerowej napiecia
|
||||
float *sU0_ortb; ///< Skladowa ortogonalna b skladowej zerowej napiecia
|
||||
float *sU0; ///< Skladowa zerowa napiecia
|
||||
struct analog_in_params *param_I; ///< Parametry wejscia pradowego
|
||||
struct analog_in_params *param_U; /// < Parametry kanalu napieciowego
|
||||
struct binary_io test;
|
||||
struct binary_io P1W_L1E; ///< Pobudzenie strefy 1W zwarcie L1-E
|
||||
struct binary_io P1W_L2E; ///< Pobudzenie strefy 1W zwarcie L2-E
|
||||
struct binary_io P1W_L3E; ///< Pobudzenie strefy 1W zwarcie L3-E
|
||||
struct binary_io P1W_L1L2; ///< Pobudzenie strefy 1W zwarcie L1-L2
|
||||
struct binary_io P1W_L2L3; ///< Pobudzenie strefy 1W zwarcie L2-L3
|
||||
struct binary_io P1W_L3L1; ///< Pobudzenie strefy 1W zwarcie L3-L1
|
||||
struct binary_io P1_L1E; ///< Pobudzenie strefy 1 zwarcie L1-E
|
||||
struct binary_io P1_L2E; ///< Pobudzenie strefy 1 zwarcie L2-E
|
||||
struct binary_io P1_L3E; ///< Pobudzenie strefy 1 zwarcie L3-E
|
||||
struct binary_io P1_L1L2; ///< Pobudzenie strefy 1 zwarcie L1-L2
|
||||
struct binary_io P1_L2L3; ///< Pobudzenie strefy 1 zwarcie L2-L3
|
||||
struct binary_io P1_L3L1; ///< Pobudzenie strefy 1 zwarcie L3-L1
|
||||
struct binary_io P2_L1E; ///< Pobudzenie strefy 2 zwarcie L1-E
|
||||
struct binary_io P2_L2E; ///< Pobudzenie strefy 2 zwarcie L2-E
|
||||
struct binary_io P2_L3E; ///< Pobudzenie strefy 2 zwarcie L3-E
|
||||
struct binary_io P2_L1L2; ///< Pobudzenie strefy 2 zwarcie L1-L2
|
||||
struct binary_io P2_L2L3; ///< Pobudzenie strefy 2 zwarcie L2-L3
|
||||
struct binary_io P2_L3L1; ///< Pobudzenie strefy 2 zwarcie L3-L1
|
||||
struct binary_io P3_L1E; ///< Pobudzenie strefy 3 zwarcie L1-E
|
||||
struct binary_io P3_L2E; ///< Pobudzenie strefy 3 zwarcie L2-E
|
||||
struct binary_io P3_L3E; ///< Pobudzenie strefy 3 zwarcie L3-E
|
||||
struct binary_io P3_L1L2; ///< Pobudzenie strefy 3 zwarcie L1-L2
|
||||
struct binary_io P3_L2L3; ///< Pobudzenie strefy 3 zwarcie L2-L3
|
||||
struct binary_io P3_L3L1; ///< Pobudzenie strefy 3 zwarcie L3-L1
|
||||
struct binary_io P4_L1E; ///< Pobudzenie strefy 4 zwarcie L1-E
|
||||
struct binary_io P4_L2E; ///< Pobudzenie strefy 4 zwarcie L2-E
|
||||
struct binary_io P4_L3E; ///< Pobudzenie strefy 4 zwarcie L3-E
|
||||
struct binary_io P4_L1L2; ///< Pobudzenie strefy 4 zwarcie L1-L2
|
||||
struct binary_io P4_L2L3; ///< Pobudzenie strefy 4 zwarcie L2-L3
|
||||
struct binary_io P4_L3L1; ///< Pobudzenie strefy 4 zwarcie L3-L1
|
||||
struct binary_io P5_L1E; ///< Pobudzenie strefy 5 zwarcie L1-E
|
||||
struct binary_io P5_L2E; ///< Pobudzenie strefy 5 zwarcie L2-E
|
||||
struct binary_io P5_L3E; ///< Pobudzenie strefy 5 zwarcie L3-E
|
||||
struct binary_io P5_L1L2; ///< Pobudzenie strefy 5 zwarcie L1-L2
|
||||
struct binary_io P5_L2L3; ///< Pobudzenie strefy 5 zwarcie L2-L3
|
||||
struct binary_io P5_L3L1; ///< Pobudzenie strefy 5 zwarcie L3-L1
|
||||
|
||||
struct dane_wewnetrzne_ZDistA dw;
|
||||
struct Nastawy_przeliczone_ZDistA nast_;// struktura z parametrami
|
||||
|
||||
float *z[6]; /// debug
|
||||
};
|
||||
|
||||
struct ZDistA_io
|
||||
{
|
||||
u32 bl_in;
|
||||
u32 bl_k_in;
|
||||
u32 i1_orta_float_in;
|
||||
u32 i1_ortb_float_in;
|
||||
u32 i1_float_in;
|
||||
u32 i2_orta_float_in;
|
||||
u32 i2_ortb_float_in;
|
||||
u32 i2_float_in;
|
||||
u32 i3_orta_float_in;
|
||||
u32 i3_ortb_float_in;
|
||||
u32 i3_float_in;
|
||||
u32 u1_orta_float_in;
|
||||
u32 u1_ortb_float_in;
|
||||
u32 u1_float_in;
|
||||
u32 u2_orta_float_in;
|
||||
u32 u2_ortb_float_in;
|
||||
u32 u2_float_in;
|
||||
u32 u3_orta_float_in;
|
||||
u32 u3_ortb_float_in;
|
||||
u32 u3_float_in;
|
||||
u32 u12_orta_float_in;
|
||||
u32 u12_ortb_float_in;
|
||||
u32 u12_float_in;
|
||||
u32 u23_orta_float_in;
|
||||
u32 u23_ortb_float_in;
|
||||
u32 u23_float_in;
|
||||
u32 u31_orta_float_in;
|
||||
u32 u31_ortb_float_in;
|
||||
u32 u31_float_in;
|
||||
u32 i1_zg_orta_float_in;
|
||||
u32 i1_zg_ortb_float_in;
|
||||
u32 i1_zg_float_in;
|
||||
u32 i2_pr_orta_float_in;
|
||||
u32 i2_pr_ortb_float_in;
|
||||
u32 i2_pr_float_in;
|
||||
u32 io_orta_float_in;
|
||||
u32 io_ortb_float_in;
|
||||
u32 io_float_in;
|
||||
u32 u1_zg_orta_float_in;
|
||||
u32 u1_zg_ortb_float_in;
|
||||
u32 u1_zg_float_in;
|
||||
u32 u2_pr_orta_float_in;
|
||||
u32 u2_pr_ortb_float_in;
|
||||
u32 u2_pr_float_in;
|
||||
u32 uo_orta_float_in;
|
||||
u32 uo_ortb_float_in;
|
||||
u32 uo_float_in;
|
||||
u32 i_param_an_ptr_in;
|
||||
u32 u_param_an_ptr_in;
|
||||
u32 test_in;
|
||||
u32 wy_ptr_out; //zainicjowac
|
||||
u32 P1W_L1E_out;
|
||||
u32 P1W_L2E_out;
|
||||
u32 P1W_L3E_out;
|
||||
u32 P1W_L1L2_out;
|
||||
u32 P1W_L2L3_out;
|
||||
u32 P1W_L3L1_out;
|
||||
u32 P1_L1E_out;
|
||||
u32 P1_L2E_out;
|
||||
u32 P1_L3E_out;
|
||||
u32 P1_L1L2_out;
|
||||
u32 P1_L2L3_out;
|
||||
u32 P1_L3L1_out;
|
||||
u32 P2_L1E_out;
|
||||
u32 P2_L2E_out;
|
||||
u32 P2_L3E_out;
|
||||
u32 P2_L1L2_out;
|
||||
u32 P2_L2L3_out;
|
||||
u32 P2_L3L1_out;
|
||||
u32 P3_L1E_out;
|
||||
u32 P3_L2E_out;
|
||||
u32 P3_L3E_out;
|
||||
u32 P3_L1L2_out;
|
||||
u32 P3_L2L3_out;
|
||||
u32 P3_L3L1_out;
|
||||
u32 P4_L1E_out;
|
||||
u32 P4_L2E_out;
|
||||
u32 P4_L3E_out;
|
||||
u32 P4_L1L2_out;
|
||||
u32 P4_L2L3_out;
|
||||
u32 P4_L3L1_out;
|
||||
u32 P5_L1E_out;
|
||||
u32 P5_L2E_out;
|
||||
u32 P5_L3E_out;
|
||||
u32 P5_L1L2_out;
|
||||
u32 P5_L2L3_out;
|
||||
u32 P5_L3L1_out;
|
||||
|
||||
//debug
|
||||
u32 z1_float_out;
|
||||
u32 z2_float_out;
|
||||
u32 z3_float_out;
|
||||
u32 z4_float_out;
|
||||
u32 z5_float_out;
|
||||
u32 z6_float_out;
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct ZDistA_params
|
||||
{
|
||||
u32 bity; ///< nastawy bitowe;
|
||||
|
||||
long Typ1; ///< Typ charakterystyki strefa 1
|
||||
long Typ2; ///< Typ charakterystyki strefa 2
|
||||
long Typ3; ///< Typ charakterystyki strefa 3
|
||||
long Typ4; ///< Typ charakterystyki strefa 4
|
||||
long Typ5; ///< Typ charakterystyki strefa 5
|
||||
long K1; ///< Kierunek dzialania strefa 1
|
||||
long K2; ///< Kierunek dzialania strefa 2
|
||||
long K3; ///< Kierunek dzialania strefa 3
|
||||
long K4; ///< Kierunek dzialania strefa 4
|
||||
long K5; ///< Kierunek dzialania strefa 5
|
||||
|
||||
double I_min; ///< Graniczna wartosc pradu
|
||||
double Kk1; ///< Wspolczynnik kompensacji ziemnozwarciowej strefa 1
|
||||
double Kk1_kat; ///< Kat wektora kompensacji ziemnozwarciowej strefa 1
|
||||
double KkC; ///< Wspolczynnik kompensacji ziemnozwarciowej stref 2,3,4,5
|
||||
double KkC_kat; ///< Kat wektora kompensacji ziemnozwarciowej stref 2,3,4,5
|
||||
double fi1; ///< Kat linii
|
||||
double fi2; ///< Kat nachylenia prostej korekcji strefy pierwszej dla zwarc jednofazowych z ziemia
|
||||
double R1W_Zf1W_LE; ///< Zasieg rezystancyjny strefy 1 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” wydluzenie strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R1W_Zf1W_LL; ///< Zasieg rezystancyjny strefy 1 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” wyduzenie strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R1_Zf1_LE; ///< Zasieg rezystancyjny strefy 1 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R1_Zf1_LL; ///< Zasieg rezystancyjny strefy 1 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R2_Zf2_LE; ///< Zasieg rezystancyjny strefy 2 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 2 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R2_Zf2_LL; ///< Zasieg rezystancyjny strefy 2 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 2 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R3_Zf3_LE; ///< Zasieg rezystancyjny strefy 3 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 3 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R3_Zf3_LL; ///< Zasieg rezystancyjny strefy 3 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 3 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R4_Zf4_LE; ///< Zasieg rezystancyjny strefy 4 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 4 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R4_Zf4_LL; ///< Zasieg rezystancyjny strefy 4 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 4 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double R5_Zf5_LE; ///< Zasieg rezystancyjny strefy 5 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do przodu” strefy 5 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double R5_Zf5_LL; ///< Zasieg rezystancyjny strefy 5 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do przodu” strefy 5 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X1W_Zr1W_LE; ///< Zasieg reaktancyjny wydluzenie strefy 1 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” wydluzenie strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X1W_Zr1W_LL; ///< Zasieg reaktancyjny wydluzenie strefy 1 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” wydluzenie strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X1_Zr1_LE; ///< Zasieg reaktancyjny strefy 1 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 1 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X1_Zr1_LL; ///< Zasieg reaktancyjny strefy 1 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 1 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X2_Zr2_LE; ///< Zasieg reaktancyjny strefy 2 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 2 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X2_Zr2_LL; ///< Zasieg reaktancyjny strefy 2 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 2 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X3_Zr3_LE; ///< Zasieg reaktancyjny strefy 3 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 3 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X3_Zr3_LL; ///< Zasieg reaktancyjny strefy 3 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 3 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X4_Zr4_LE; ///< Zasieg reaktancyjny strefy 4 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 4 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X4_Zr4_LL; ///< Zasieg reaktancyjny strefy 4 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 4 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double X5_Zr5_LE; ///< Zasieg reaktancyjny strefy 5 dla charakterystyki poligonalnej zwarcie jednofazowe z ziemia
|
||||
///< Zasieg „do tylu” strefy 5 charakterystyki kolowej zwarcie jednofazowe z ziemia
|
||||
double X5_Zr5_LL; ///< Zasieg reaktancyjny strefy 5 dla charakterystyki poligonalnej zwarcie miedzyfazowe
|
||||
///< Zasieg „do tylu” strefy 5 charakterystyki kolowej zwarcie miedzyfazowe
|
||||
double kp; ///< wspolczynnik powrotu
|
||||
//A2
|
||||
// double U_min; ///< Minimalna wartosc napiecia
|
||||
double fi3; ///< Kat kierunkowy od osi X impedancyjnego kryterium kierunku
|
||||
double fi4; ///< Kat kierunkowy od osi R impedancyjnego kryterium kierunku
|
||||
double RLf; ///< Zasieg „ do przodu” kryterium blokady dzialania w zakresie pradow obciażenia
|
||||
double RLr; ///< Zasieg „ do tylu” kryterium blokady dzialania w zakresie pradow obciażenia
|
||||
double fi5; ///< Kat kierunkowy blokady dzialania w zakresie pradow obciażenia
|
||||
double Iomin; ///< Minimalna wartosc rozruchowa pradu zerowego przekaznika identyfikacji zwarc z udzialem ziemi
|
||||
double Iokh; ///< Wspolczynnik stabilizacji charakterystyki przekaznika identyfikacji zwarc z udzialem ziemi
|
||||
double Uomin; ///< minimalna wartość napięcia składowej zerowej
|
||||
|
||||
long Typ0; ///< Typ charakterystyki strefa 1W
|
||||
long K0; ///< Kierunek dzialania strefa 1W
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct ZDistA_args
|
||||
{
|
||||
struct ZDistA_io io;
|
||||
struct ZDistA_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void ZDistA(void *args, void *logic);
|
||||
extern int ZDistA_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* ZDISTA_H_ */
|
||||
1424
src/ZDistL.c
Normal file
1424
src/ZDistL.c
Normal file
File diff suppressed because it is too large
Load Diff
409
src/ZDistL.h
Normal file
409
src/ZDistL.h
Normal file
@@ -0,0 +1,409 @@
|
||||
/*
|
||||
* ZDistL.h
|
||||
*
|
||||
*
|
||||
* Created on: 29-11-2016
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
#ifndef ZDISTL_H_
|
||||
#define ZDISTL_H_
|
||||
/*
|
||||
#include <stdint.h>
|
||||
#define u8 uint8_t
|
||||
#define u16 uint16_t
|
||||
#define u32 uint32_t
|
||||
|
||||
struct binary_io
|
||||
{
|
||||
int yyyy;
|
||||
};
|
||||
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "helper.h"
|
||||
|
||||
struct Wyjscie1_zdistl
|
||||
{
|
||||
u8 dbl_Com[7]; ///deblokowanie dzia<69>ania stref w zale<6C>no<6E>ci od stanu <20><>cza
|
||||
u8 PSPZ;//pobudzenie SPZ
|
||||
};
|
||||
|
||||
enum Wylaczenie
|
||||
{
|
||||
start_jednofazowy,
|
||||
start_trojfazowy,
|
||||
start_kombinowany,
|
||||
wyl_definitywny
|
||||
|
||||
};
|
||||
|
||||
|
||||
enum _tryb_lacza
|
||||
{
|
||||
WYL = 0,
|
||||
ZEZWALAJACY = 1,
|
||||
BLOKUJACY = 2
|
||||
};
|
||||
|
||||
enum _tryb_zezwalajacy
|
||||
{
|
||||
ZGODA = 0,
|
||||
SKROC_CZAS = 1,
|
||||
WYLACZ = 2
|
||||
};
|
||||
|
||||
enum _tryb_blokujacy
|
||||
{
|
||||
BLOKUJ = 0,
|
||||
WYDLUZ_CZAS = 1,
|
||||
BLOKUJ_PRZEKAZNIK = 2,
|
||||
SKROC_ZASIEG = 3
|
||||
};
|
||||
|
||||
|
||||
|
||||
struct dane_wewnetrzne_ZDistL
|
||||
{
|
||||
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 Zf_rozwij[6];
|
||||
short liczts_rozwij[6];
|
||||
short liczt_eldz_rozwij[6];
|
||||
short dodaj_rozw[6];
|
||||
|
||||
};
|
||||
|
||||
struct Nastawy_przeliczone_ZDistL
|
||||
{
|
||||
struct Wyjscie1_zdistl wy;
|
||||
|
||||
struct Wyjscia_ZDistA *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;
|
||||
|
||||
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
|
||||
{
|
||||
|
||||
struct binary_io stan_bl;
|
||||
struct Wyjscia_ZDistA *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_1W;
|
||||
|
||||
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 Nastawy_przeliczone_ZDistL nast_;
|
||||
struct dane_wewnetrzne_ZDistL dw;
|
||||
|
||||
u8 pobudzenia[6][6];
|
||||
u8 P_L1_lub_L2[6];
|
||||
u8 P_L2_lub_L3[6];
|
||||
u8 P_L3_lub_L1[6];
|
||||
};
|
||||
|
||||
struct ZDistL_io
|
||||
{
|
||||
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_1W_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;
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct ZDistL_params
|
||||
{
|
||||
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<69>anie na stref<65>
|
||||
long lrc_strefa; //<strefa logiku pr<70>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
|
||||
{
|
||||
struct ZDistL_io io;
|
||||
struct ZDistL_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void ZDistL(void *args, void *logic);
|
||||
extern void ZDistL_100hz(void *args, void *logic);
|
||||
extern int ZDistL_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* ZDISTL_H_ */
|
||||
1259
src/ZDistL_marian.c_
Normal file
1259
src/ZDistL_marian.c_
Normal file
File diff suppressed because it is too large
Load Diff
336
src/ZDistL_marian.h_
Normal file
336
src/ZDistL_marian.h_
Normal file
@@ -0,0 +1,336 @@
|
||||
/*
|
||||
* ZDistL.h
|
||||
*
|
||||
*
|
||||
* Created on: 29-11-2016
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
#ifndef ZDISTL_H_
|
||||
#define ZDISTL_H_
|
||||
|
||||
#include "../tdefs.h"
|
||||
#include "helper.h"
|
||||
|
||||
struct Wyjscie1_zdistl
|
||||
{
|
||||
u8 dbl_Com[7]; ///deblokowanie działania stref w zależności od stanu łącza
|
||||
u8 PSPZ;//pobudzenie SPZ
|
||||
};
|
||||
|
||||
enum Wylaczenie
|
||||
{
|
||||
start_jednofazowy,
|
||||
start_trojfazowy,
|
||||
start_kombinowany,
|
||||
wyl_definitywny
|
||||
|
||||
};
|
||||
|
||||
|
||||
struct dane_wewnetrzne_ZDistL
|
||||
{
|
||||
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 licz_WSPZ;
|
||||
unsigned short stan_SPZ;
|
||||
short licznik_SPZ; ///< licznik czasu do SPZ
|
||||
short licznik1; ///< licznik czasu w SPZ
|
||||
short licznik2; ///< licznik czasu w SPZ
|
||||
short licznik_bl_SCH; ///< licznik do odliczania czasu oczekiwania na synchronizm
|
||||
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)
|
||||
unsigned int dl_; // dlugosc czasu trwania zaklocenia (rejestr tymczasowy - przed zapisem)
|
||||
unsigned short bl_SPZ1;//blokowanie jednofazowego SPZ
|
||||
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 blIo;//blokada zabezpieczenia ziemnozwarciowego od SPZ jednofazowego
|
||||
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 P_SPZD;//pobudzenie SPZ od odległościówki
|
||||
u8 P_SPZ;//pobudzenie SPZ
|
||||
u8 dBl_SPZ;//dopuszczenie działania automatyki SPZ
|
||||
u8 WZ; //sygnalizacja udanego cyklu SPZ
|
||||
u8 WZW; // sygnalizacja nieudanego cyklu SPZ
|
||||
u8 WD; //wyłączenie definitywne
|
||||
u8 tps_SPZ; // odliczanie czau potwierdzenia skuteczności SPZ
|
||||
u8 t_bzn; // odliczanie czasu przerwy beznapięciowej
|
||||
u8 bl_SPZ_SCH;//blokada załącz SPZ od automatyki kontroli synchronizmu lub braku gotowosci napędu
|
||||
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 bl_WSPZ;//zezwolenie na wyłącz od SPZ
|
||||
u8 R1;
|
||||
u8 S1;
|
||||
u8 T1;
|
||||
u8 W_1faz; // wyłaczenie jednofazowe
|
||||
u8 ZZwP;//wyłączenie od automatyki załączenia na zwarcie
|
||||
};
|
||||
|
||||
struct Nastawy_przeliczone_ZDistL
|
||||
{
|
||||
// Adresy adr;
|
||||
|
||||
struct Wyjscie1_zdistl *COM1;
|
||||
struct Wyjscie1_zdistl *COM2;
|
||||
struct Wyjscie1_zdistl wy;
|
||||
|
||||
struct Wyjscia_ZDistA *ZdistA;
|
||||
|
||||
short ZZw_st; ///< strefa współpracy z automatyką załączenia na zwarcie
|
||||
//short adr_PZZw;///< adres zmiennej pobudzenia strefy współpracujacej z automatyką ZZw
|
||||
//short adr_ZZZw;///< adres zmiennej zadziałania strefy współpracujacej z automatyką ZZw
|
||||
enum Wylaczenie SPZst1; ///< tryb pracy stopnia 1 w SPZ
|
||||
|
||||
short t_stf[6][2]; ///< czas dzialania strefy
|
||||
|
||||
short SPZilst;///< Ilość stopni automatyki SPZ
|
||||
|
||||
short tWSPZ;///< Czas wyłączenia niedefinitywnego
|
||||
short tSPZ_1f;///< Czas przerwy beznapięciowej dla wyłączenia jednofazowego
|
||||
short tSPZ_zr;///< Czas przerwy beznapięciowej dla zwarcia rozwojowego
|
||||
short tSPZ_3f;///< Czas przerwy beznapięciowej dla wyłączenia trójfazowego
|
||||
short tSPZ_st2;///< Czas przerwy beznapięciowej stopnia 2
|
||||
short tSPZ_st3;///< Czas przerwy beznapięciowej stopnia 3
|
||||
short tSPZ_st4;///< Czas przerwy beznapięciowej stopnia 4
|
||||
short tSPZ_st5;///< Czas przerwy beznapięciowej stopnia 5
|
||||
short tSPZow;///< Czas oczekiwania na otwarcie wyłacznika
|
||||
short tSPZSCH;///< Czas oczekiwanie na zdjęcie blokady kontroli synchronizmu
|
||||
short tSPZ_zal;///< Czas trwania impulsu załączającego
|
||||
short tSPZ_bl;///< czas identyfikacji skuteczności SPZ
|
||||
|
||||
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 SPZ_L1; ///< pobudzenie SPZ przez łącze kanał1
|
||||
u8 SPZ_L2; ///< pobudzenie SPZ przez łącze kanał2
|
||||
u8 SPZ_ON;
|
||||
u8 SPZ_s[5];
|
||||
u8 SPZ_zew;
|
||||
u8 Bl_SCH;
|
||||
u8 Bl_PS[6];
|
||||
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
|
||||
u8 Stf_WD[6]; ///< działanie na wylaczenie bez SPZ
|
||||
u8 Stf_W_SPZ[6]; ///< działanie na wylaczenie z automatyką SPZ
|
||||
u8 bl_; ///< wartosc nastawy aktywnosci blokady dzialania 1- blokada aktywna
|
||||
u8 ZZw_ON; ///< włączenie automatyki załączenia na zwarcie
|
||||
};
|
||||
|
||||
struct ZDistL_logic
|
||||
{
|
||||
struct binary_io stan_bl;
|
||||
struct Wyjscia_ZDistA *WE_Zdist;
|
||||
struct Wyjscie1_zdistl *WE_L1;
|
||||
struct Wyjscie1_zdistl *WE_L2;
|
||||
struct binary_io Bl_PS;
|
||||
struct binary_io Bl_Ufail;
|
||||
struct binary_io Bl_SCH;
|
||||
struct binary_io WM_OK;
|
||||
struct binary_io W_ON_L1;
|
||||
struct binary_io W_OFF_L1;
|
||||
struct binary_io W_ON_L2;
|
||||
struct binary_io W_OFF_L2;
|
||||
struct binary_io W_ON_L3;
|
||||
struct binary_io W_OFF_L3;
|
||||
struct binary_io Start_SPZ;
|
||||
struct binary_io BL_SPZ;
|
||||
struct binary_io Z; ///< załączenie wyłącznika - uruchomienie automatyki załączenia na zwarcie
|
||||
struct binary_io Kas_Syg;
|
||||
struct binary_io test;
|
||||
|
||||
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 zal;
|
||||
struct binary_io P_SPZ;
|
||||
struct binary_io SPZ_P1;
|
||||
struct binary_io SPZ_P2;
|
||||
struct binary_io SPZ_P3;
|
||||
struct binary_io SPZ_P4;
|
||||
struct binary_io SPZ_P5;
|
||||
struct binary_io WZ;
|
||||
struct binary_io WZW;
|
||||
struct binary_io WD;
|
||||
struct binary_io err_SPZ;
|
||||
struct binary_io SPZ_BlIo;
|
||||
struct binary_io tps_SPZ;
|
||||
struct binary_io t_bzn;
|
||||
|
||||
struct binary_io PZZw;
|
||||
struct binary_io ZZZw;
|
||||
|
||||
struct Nastawy_przeliczone_ZDistL nast_;
|
||||
struct dane_wewnetrzne_ZDistL dw;
|
||||
};
|
||||
|
||||
struct ZDistL_io
|
||||
{
|
||||
u32 stan_bl_in;
|
||||
u32 we_zdist_ptr_in;
|
||||
u32 we_l1_ptr_in;
|
||||
u32 we_l2_ptr_in;
|
||||
u32 bl_ps_in;
|
||||
u32 bl_ufail_in;
|
||||
u32 bl_sck_in;
|
||||
u32 wm_ok_in;
|
||||
u32 w_on_l1_in;
|
||||
u32 w_off_l1_in;
|
||||
u32 w_on_l2_in;
|
||||
u32 w_off_l2_in;
|
||||
u32 w_on_l3_in;
|
||||
u32 w_off_l3_in;
|
||||
u32 start_spz_in;
|
||||
u32 bl_spz_in;
|
||||
u32 z_in;
|
||||
u32 kas_syg_in;
|
||||
u32 test_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 zal_out;
|
||||
u32 p_spz_out;
|
||||
u32 spz_p1_out;
|
||||
u32 spz_p2_out;
|
||||
u32 spz_p3_out;
|
||||
u32 spz_p4_out;
|
||||
u32 spz_p5_out;
|
||||
u32 spz_wz_out;
|
||||
u32 spz_wzw_out;
|
||||
u32 wd_out;
|
||||
u32 err_spz_out;
|
||||
u32 spz1f_bli0_out;
|
||||
u32 tps_SPZ_out;
|
||||
u32 t_bzn_out;
|
||||
u32 wyj_ptr_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct ZDistL_params
|
||||
{
|
||||
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 SPZst1; ///< tryb pracy stopnia 1 w SPZ
|
||||
long 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 ts5LL;///< Czas wyłączenia strefy 5 zwarcia miedzyfazowe
|
||||
double SPZilst;///< Ilość stopni automatyki SPZ
|
||||
double tWSPZ;///< Czas wyłączenia niedefinitywnego
|
||||
double tSPZ_1f;///< Czas przerwy beznapięciowej dla wyłączenia jednofazowego
|
||||
double tSPZ_3f;///< Czas przerwy beznapięciowej dla wyłączenia trójfazowego
|
||||
double tSPZ_zr;///< Czas przerwy beznapięciowej dla zwarcia rozwojowego
|
||||
double tSPZ_st2;///< Czas przerwy beznapięciowej stopnia 2
|
||||
double tSPZ_st3;///< Czas przerwy beznapięciowej stopnia 3
|
||||
double tSPZ_st4;///< Czas przerwy beznapięciowej stopnia 4
|
||||
double tSPZ_st5;///< Czas przerwy beznapięciowej stopnia 5
|
||||
double tSPZow;///< Czas oczekiwania na otwarcie wyłacznika
|
||||
double tSPZSCH;///< Czas oczekiwanie na zdjęcie blokady kontroli synchronizmu
|
||||
double tSPZ_zal;///< Czas trwania impulsu załączającego
|
||||
double tSPZCON;///< Czas oczekiwania na kontynuację cyklu
|
||||
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 ZDistL_args
|
||||
{
|
||||
struct ZDistL_io io;
|
||||
struct ZDistL_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void ZDistL(void *args, void *logic);
|
||||
extern void ZDistL_100hz(void *args, void *logic);
|
||||
extern int ZDistL_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* ZDISTL_H_ */
|
||||
599
src/ZDistS.c
Normal file
599
src/ZDistS.c
Normal file
@@ -0,0 +1,599 @@
|
||||
/*
|
||||
* ZDistS.c
|
||||
*
|
||||
* Created on: 16-03-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "helper.h"
|
||||
#include "ZDistS.h"
|
||||
#include "ZDistA.h"
|
||||
|
||||
struct ZDistS_nast
|
||||
{
|
||||
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
|
||||
};
|
||||
|
||||
int ZDistS_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct ZDistS_args *args = (struct ZDistS_args *)arguments;
|
||||
struct ZDistS_logic *log = (struct ZDistS_logic *)logic;
|
||||
struct ZDistS_nast snast;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.stan_bl_in,&log->stan_bl))
|
||||
return -1;
|
||||
if(set_pointer_in_ptr(args->io.we_zdist_ptr_in,(u32 *)&log->WE_Zdist))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.bl_ps_in,&log->Bl_PS))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.bl_ufail_in,&log->Bl_Ufail))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.z_in,&log->Z))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.w_on_in,&log->W_ON))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.w_off_in,&log->W_OFF))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.test_in,&log->test))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.p_out,&log->P))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.p1_out,&log->P1))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.p2_out,&log->P2))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.p3_out,&log->P3))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.p4_out,&log->P4))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.p5_out,&log->P5))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.r_out,&log->R))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.s_out,&log->S))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.t_out,&log->T))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.e_out,&log->E))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.z1_out,&log->Z1))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.z2_out,&log->Z2))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.z3_out,&log->Z3))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.z4_out,&log->Z4))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.z5_out,&log->Z5))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.w_out,&log->W))
|
||||
return -1;
|
||||
|
||||
log->nast_.Bl_PS[0] = (args->params.bity & 0x0001)?1:0;
|
||||
log->nast_.Bl_PS[1] = (args->params.bity & 0x0002)?1:0;
|
||||
log->nast_.Bl_PS[2] = (args->params.bity & 0x0004)?1:0;
|
||||
log->nast_.Bl_PS[3] = (args->params.bity & 0x0008)?1:0;
|
||||
log->nast_.Bl_PS[4] = (args->params.bity & 0x0010)?1:0;
|
||||
log->nast_.ZZw_ON = (args->params.bity & 0x0020)?1:0;
|
||||
log->nast_.bl_ = (args->params.bity & 0x0040)?1:0;
|
||||
|
||||
log->nast_.ZdistA = log->WE_Zdist;
|
||||
|
||||
uint16_t i;
|
||||
int16_t temp_ti;
|
||||
float temp_tf;
|
||||
|
||||
for (i=0;i<10;i++)
|
||||
{
|
||||
switch(i)
|
||||
{
|
||||
case 0:
|
||||
temp_tf = args->params.ts1LE;
|
||||
break;
|
||||
case 1:
|
||||
temp_tf = args->params.ts1LL;
|
||||
break;
|
||||
case 2:
|
||||
temp_tf = args->params.ts2LE;
|
||||
break;
|
||||
case 3:
|
||||
temp_tf = args->params.ts2LL;
|
||||
break;
|
||||
case 4:
|
||||
temp_tf = args->params.ts3LE;
|
||||
break;
|
||||
case 5:
|
||||
temp_tf = args->params.ts3LL;
|
||||
break;
|
||||
case 6:
|
||||
temp_tf = args->params.ts4LE;
|
||||
break;
|
||||
case 7:
|
||||
temp_tf = args->params.ts4LL;
|
||||
break;
|
||||
case 8:
|
||||
temp_tf = args->params.ts5LE;
|
||||
break;
|
||||
case 9:
|
||||
temp_tf = args->params.ts6LL;
|
||||
break;
|
||||
default:
|
||||
temp_tf = args->params.ts1LE;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
//przeliczenie czasow stref
|
||||
temp_ti = (100 * (temp_tf - 0.005f));
|
||||
|
||||
if (temp_ti)
|
||||
{
|
||||
log->nast_.Zbz[i/2][i%2] = 0;
|
||||
log->nast_.t_stf[i/2][i%2] = temp_ti;
|
||||
} else {
|
||||
log->nast_.Zbz[i/2][i%2] = 1;
|
||||
}
|
||||
//--------------------------
|
||||
}
|
||||
//-------------------------
|
||||
|
||||
log->nast_.ZZw_st = args->params.ZZw_st + 1;
|
||||
|
||||
switch(log->nast_.ZZw_st)
|
||||
{
|
||||
case 0:
|
||||
log->PZZw=log->P1;
|
||||
log->ZZZw=log->Z1;
|
||||
break;
|
||||
case 1:
|
||||
log->PZZw=log->P2;
|
||||
log->ZZZw=log->Z2;
|
||||
break;
|
||||
case 2:
|
||||
log->PZZw=log->P3;
|
||||
log->ZZZw=log->Z3;
|
||||
break;
|
||||
case 3:
|
||||
log->PZZw=log->P4;
|
||||
log->ZZZw=log->Z4;
|
||||
break;
|
||||
case 4:
|
||||
log->PZZw=log->P5;
|
||||
log->ZZZw=log->Z5;
|
||||
break;
|
||||
default:
|
||||
log->PZZw=log->P1;
|
||||
log->ZZZw=log->Z1;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
snast.Stf1=args->params.Stf1;
|
||||
snast.Stf2=args->params.Stf2;
|
||||
snast.Stf3=args->params.Stf3;
|
||||
snast.Stf4=args->params.Stf4;
|
||||
snast.Stf5=args->params.Stf5;
|
||||
|
||||
long *temp_e = &snast.Stf1;
|
||||
|
||||
for (i=0;i<5;i++)
|
||||
{
|
||||
|
||||
//ustawienie bitow sposobu dzialania stref
|
||||
switch (*(temp_e))
|
||||
{
|
||||
case 0:
|
||||
log->nast_.Stf_ON[i] = 0;
|
||||
log->nast_.Stf_W[i] = 0;
|
||||
break;
|
||||
case 1:
|
||||
log->nast_.Stf_ON[i] = 1;
|
||||
log->nast_.Stf_W[i] = 0;
|
||||
break;
|
||||
case 2:
|
||||
log->nast_.Stf_ON[i] = 1;
|
||||
log->nast_.Stf_W[i] = 1;
|
||||
break;
|
||||
}
|
||||
temp_e++;
|
||||
//--------------------------
|
||||
}
|
||||
//-------------------------
|
||||
|
||||
log->nast_.ZZw_ta = (int16_t)(100 * (args->params.ZZw_ta + 0.005f));
|
||||
log->nast_.ZZw_to = (int16_t)(100 * (args->params.ZZw_to + 0.005f));
|
||||
|
||||
log->nast_.ZZw_Ir = args->params.ZZw_Ir * args->params.ZZw_Ir;
|
||||
log->nast_.ZZw_Ur = args->params.ZZw_Ur * args->params.ZZw_Ur;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
Funkcja okraœlania petli zwarciwej przy wy³aczeniu
|
||||
\param nr_strefy - numer strefy wy³aczaj¹cej
|
||||
*/
|
||||
void wybiornik_f_ZDistS(struct ZDistS_logic *log,unsigned short nr_strefy)
|
||||
{
|
||||
log->dw.R = log->nast_.ZdistA->Zdist_dw->P[nr_strefy][0]
|
||||
|| log->nast_.ZdistA->Zdist_dw->P[nr_strefy][3]
|
||||
|| log->nast_.ZdistA->Zdist_dw->P[nr_strefy][5];
|
||||
|
||||
log->dw.S = log->nast_.ZdistA->Zdist_dw->P[nr_strefy][1]
|
||||
|| log->nast_.ZdistA->Zdist_dw->P[nr_strefy][3]
|
||||
|| log->nast_.ZdistA->Zdist_dw->P[nr_strefy][4];
|
||||
|
||||
log->dw.T = log->nast_.ZdistA->Zdist_dw->P[nr_strefy][2]
|
||||
|| log->nast_.ZdistA->Zdist_dw->P[nr_strefy][4]
|
||||
|| log->nast_.ZdistA->Zdist_dw->P[nr_strefy][5];
|
||||
|
||||
log->dw.E = log->nast_.ZdistA->Zdist_dw->Iogr;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
Funkcja okraœlania petli zwarciwej przy wy³aczeniu - dzia³anie bezkierunkowe
|
||||
\param nr_strefy - numer strefy wy³aczaj¹cej
|
||||
*/
|
||||
void wybiornik_fbk_ZDistS(struct ZDistS_logic *log, unsigned short nr_strefy)
|
||||
{
|
||||
log->dw.Rbk = log->nast_.ZdistA->Zdist_dw->Pbk[nr_strefy][0]
|
||||
|| log->nast_.ZdistA->Zdist_dw->Pbk[nr_strefy][3]
|
||||
|| log->nast_.ZdistA->Zdist_dw->Pbk[nr_strefy][5];
|
||||
|
||||
log->dw.Sbk = log->nast_.ZdistA->Zdist_dw->Pbk[nr_strefy][1]
|
||||
|| log->nast_.ZdistA->Zdist_dw->Pbk[nr_strefy][3]
|
||||
|| log->nast_.ZdistA->Zdist_dw->Pbk[nr_strefy][4];
|
||||
|
||||
log->dw.Tbk = log->nast_.ZdistA->Zdist_dw->Pbk[nr_strefy][2]
|
||||
|| log->nast_.ZdistA->Zdist_dw->Pbk[nr_strefy][4]
|
||||
|| log->nast_.ZdistA->Zdist_dw->Pbk[nr_strefy][5];
|
||||
|
||||
log->dw.E = log->nast_.ZdistA->Zdist_dw->Iogr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ZDistS(void *arguments, void *logic)
|
||||
{
|
||||
struct ZDistS_logic *log = (struct ZDistS_logic *)logic;
|
||||
|
||||
uint16_t i;
|
||||
log->dw.P = 0;
|
||||
log->dw.Zz = 0;
|
||||
|
||||
u8 temp_Bl,temp_Zezwolenie;
|
||||
|
||||
if (*log->nast_.ZdistA->on)
|
||||
{
|
||||
temp_Bl = check_struct(&log->Bl_Ufail)
|
||||
|| (check_struct(&log->stan_bl) && log->nast_.bl_);// | czy_start();
|
||||
|
||||
|
||||
for (i=0;i<5;i++)
|
||||
{
|
||||
if (log->nast_.Stf_ON[i]) //jesli strefa wlaczona
|
||||
{
|
||||
temp_Zezwolenie = !(temp_Bl || (log->nast_.Bl_PS[i] && check_struct(&log->Bl_PS)));
|
||||
|
||||
|
||||
//obsluga wejscia testu przekaznika
|
||||
if (czy_test_R())
|
||||
{
|
||||
log->dw.Pf[i][0] = log->dw.Pf[i][1] = check_struct(&log->test) && temp_Zezwolenie;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
//ustawienie pobudzen
|
||||
log->dw.Pf[i][0] = (log->nast_.ZdistA->Zdist_dw->P[i+1][0] ||
|
||||
log->nast_.ZdistA->Zdist_dw->P[i+1][1] ||
|
||||
log->nast_.ZdistA->Zdist_dw->P[i+1][2])
|
||||
&& temp_Zezwolenie;
|
||||
log->dw.Pf[i][1] = (log->nast_.ZdistA->Zdist_dw->P[i+1][3] ||
|
||||
log->nast_.ZdistA->Zdist_dw->P[i+1][4] ||
|
||||
log->nast_.ZdistA->Zdist_dw->P[i+1][5])
|
||||
&& temp_Zezwolenie;
|
||||
}
|
||||
log->dw.Pzf[i] = log->dw.Pf[i][0] || log->dw.Pf[i][1];
|
||||
|
||||
//ustawienie zadzialan jesli bezzwloczny
|
||||
if (log->nast_.Zbz[i][0])
|
||||
{
|
||||
log->dw.Zf[i][0] = log->dw.Pf[i][0];
|
||||
}
|
||||
if (log->nast_.Zbz[i][1])
|
||||
{
|
||||
log->dw.Zf[i][1] = log->dw.Pf[i][1];
|
||||
}
|
||||
//ustawienie zadzialania strefy
|
||||
log->dw.Z[i] = log->dw.Zf[i][0] || log->dw.Zf[i][1];
|
||||
log->dw.Ws[i] = log->dw.Z[i] && log->nast_.Stf_W[i];
|
||||
|
||||
|
||||
} else {
|
||||
log->dw.Pzf[i] = 0;
|
||||
log->dw.Z[i] = 0;
|
||||
}
|
||||
|
||||
log->dw.P |= log->dw.Pzf[i];
|
||||
log->dw.Zz |= log->dw.Z[i]; //zadzialanie zabezpieczenia
|
||||
if(!log->dw.W)
|
||||
{
|
||||
log->dw.W |= log->dw.Ws[i];
|
||||
if(log->dw.W)
|
||||
{
|
||||
wybiornik_f_ZDistS(log,i+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------
|
||||
//automatyka za³aczenia na zwarcie
|
||||
|
||||
|
||||
|
||||
|
||||
if (check_struct(&log->Z)) {
|
||||
log->dw.ZZw |= 1;
|
||||
}
|
||||
|
||||
if (log->dw.ZZw && log->nast_.ZZw_ON) //jeseli jest w³aczony i jest spe³nione kryterium za³¹czenia na zwarcie
|
||||
{
|
||||
wybiornik_fbk_ZDistS(log,log->nast_.ZZw_st);
|
||||
|
||||
if (log->dw.Rbk || log->dw.Sbk || log->dw.Tbk)
|
||||
{
|
||||
log->dw.W |= 1;
|
||||
log->dw.ZZwP = 1;
|
||||
} else log->dw.ZZwP = 0;
|
||||
|
||||
|
||||
} else {
|
||||
log->dw.Rbk = log->dw.Sbk = log->dw.Tbk = 0;
|
||||
log->dw.ZZwP = 0;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------
|
||||
|
||||
//wyprowadzenie wyjϾ
|
||||
check_and_set_struct(log->dw.P,&log->P);
|
||||
check_and_set_struct(log->dw.Pzf[0],&log->P1);
|
||||
check_and_set_struct(log->dw.Pzf[1],&log->P2);
|
||||
check_and_set_struct(log->dw.Pzf[2],&log->P3);
|
||||
check_and_set_struct(log->dw.Pzf[3],&log->P4);
|
||||
check_and_set_struct(log->dw.Pzf[4],&log->P5);
|
||||
|
||||
check_and_set_struct(log->dw.Z[0],&log->Z1);
|
||||
check_and_set_struct(log->dw.Z[1],&log->Z2);
|
||||
check_and_set_struct(log->dw.Z[2],&log->Z3);
|
||||
check_and_set_struct(log->dw.Z[3],&log->Z4);
|
||||
check_and_set_struct(log->dw.Z[4],&log->Z5);
|
||||
|
||||
check_and_set_struct(log->dw.R || log->dw.Rbk,&log->R);
|
||||
check_and_set_struct(log->dw.S || log->dw.Sbk,&log->S);
|
||||
check_and_set_struct(log->dw.T || log->dw.Tbk,&log->T);
|
||||
check_and_set_struct(log->dw.E,&log->E);
|
||||
|
||||
check_and_set_struct(log->dw.W,&log->W);
|
||||
|
||||
if(log->dw.ZZwP)
|
||||
{
|
||||
set_struct(&log->PZZw);
|
||||
set_struct(&log->ZZZw);
|
||||
}
|
||||
} else {
|
||||
clear_struct(&log->P);
|
||||
clear_struct(&log->P1);
|
||||
clear_struct(&log->P2);
|
||||
clear_struct(&log->P3);
|
||||
clear_struct(&log->P4);
|
||||
clear_struct(&log->P5);
|
||||
|
||||
clear_struct(&log->Z1);
|
||||
clear_struct(&log->Z2);
|
||||
clear_struct(&log->Z3);
|
||||
clear_struct(&log->Z4);
|
||||
clear_struct(&log->Z5);
|
||||
|
||||
clear_struct(&log->R);
|
||||
clear_struct(&log->S);
|
||||
clear_struct(&log->T);
|
||||
clear_struct(&log->E);
|
||||
clear_struct(&log->W);
|
||||
}
|
||||
}
|
||||
|
||||
void ZDistS_100hz(void *arguments, void *logic)
|
||||
{
|
||||
struct ZDistS_logic *log = (struct ZDistS_logic *)logic;
|
||||
unsigned short i;
|
||||
u8 tempbool = 0;
|
||||
|
||||
|
||||
if (*log->nast_.ZdistA->on)
|
||||
{
|
||||
|
||||
//wczytanie danych o stanie wy³¹cznika
|
||||
log->dw.W_ON = check_struct(&log->W_ON) && !check_struct(&log->W_OFF);
|
||||
log->dw.W_OFF = !check_struct(&log->W_ON) && check_struct(&log->W_OFF);
|
||||
|
||||
|
||||
for (i=0;i<5;i++)
|
||||
{
|
||||
//realizacja przekaznikow czasowych
|
||||
if (log->nast_.Stf_ON[i]) //jesli strefa wlaczona
|
||||
{
|
||||
|
||||
if (log->dw.Pf[i][0])
|
||||
{
|
||||
if(!log->nast_.Zbz[i][0]) // jesli nie bezzwloczny
|
||||
{
|
||||
if (!log->dw.liczts[i][0])
|
||||
{
|
||||
log->dw.Zf[i][0] = 1;
|
||||
log->dw.liczts[i][0]++;
|
||||
}
|
||||
log->dw.liczts[i][0]--;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else//wylaczenie zadzialania (odpad)
|
||||
{
|
||||
log->dw.liczts[i][0] = log->nast_.t_stf[i][0];
|
||||
log->dw.Zf[i][0] = 0;
|
||||
}
|
||||
if (log->dw.Pf[i][1])
|
||||
{
|
||||
if(!log->nast_.Zbz[i][1]) // jesli nie bezzwloczny
|
||||
{
|
||||
if (!log->dw.liczts[i][1])
|
||||
{
|
||||
log->dw.Zf[i][1] = 1;
|
||||
log->dw.liczts[i][1]++;
|
||||
}
|
||||
log->dw.liczts[i][1]--;
|
||||
}
|
||||
}
|
||||
else//wylaczenie zadzialania (odpad)
|
||||
{
|
||||
log->dw.liczts[i][1] = log->nast_.t_stf[i][1];
|
||||
log->dw.Zf[i][1] = 0;
|
||||
}
|
||||
|
||||
}
|
||||
//-----------------------------------------------------------
|
||||
}
|
||||
|
||||
//odpad wy³aczeñ
|
||||
|
||||
|
||||
|
||||
for(i=0;i<5;i++)
|
||||
{
|
||||
tempbool |= log->dw.Ws[i];
|
||||
}
|
||||
if (!tempbool) log->dw.W = log->dw.R = log->dw.S = log->dw.T = log->dw.E = 0;
|
||||
|
||||
|
||||
|
||||
|
||||
//automatyka za³aczenia na zwarcie - identyfikacja stanu za³¹czenia na zwarcie
|
||||
|
||||
//w³aczenie od otwarcia wy³¹cznika
|
||||
|
||||
tempbool = (log->nast_.ZdistA->Zdist_dw->I1<log->nast_.ZZw_Ir) &&
|
||||
(log->nast_.ZdistA->Zdist_dw->I2<log->nast_.ZZw_Ir) &&
|
||||
(log->nast_.ZdistA->Zdist_dw->I3<log->nast_.ZZw_Ir) &&
|
||||
(log->nast_.ZdistA->Zdist_dw->U1<log->nast_.ZZw_Ur) &&
|
||||
(log->nast_.ZdistA->Zdist_dw->U2<log->nast_.ZZw_Ur) &&
|
||||
(log->nast_.ZdistA->Zdist_dw->U3<log->nast_.ZZw_Ur);
|
||||
|
||||
sprawdz_P(&log->dw.ZZw_PIU,tempbool,!tempbool,&log->dw.licznik_PIU,log->nast_.ZZw_to,2);
|
||||
|
||||
log->dw.ZZw_start = log->dw.ZZw_PIU || //w³¹czenie ZZw jeœli brak napiêcia i pr¹du
|
||||
check_struct(&log->Z) || //w³¹czenie ZZw jeœli aktywny sygna³ zamkniêcia wy³¹cznika
|
||||
(log->dw.W_OFF); //w³¹czenie ZZw jeœli otwarte styki i nie ma cyklu SPZ
|
||||
|
||||
log->dw.ZZw |= log->dw.ZZw_start;
|
||||
if(log->dw.ZZw_start)
|
||||
{
|
||||
log->dw.licznik_ZZwa = 0;
|
||||
} else {
|
||||
log->dw.licznik_ZZwa++;
|
||||
if(log->dw.licznik_ZZwa>log->nast_.ZZw_ta)
|
||||
{
|
||||
if (!log->dw.ZZwP) log->dw.ZZw = 0;
|
||||
log->dw.licznik_ZZwa--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
|
||||
// realizacja rejestratora parametrow ostatniego zaklocenia
|
||||
switch(status_rej)
|
||||
{
|
||||
case oczekiwanie:
|
||||
if (log->dw.P)
|
||||
{
|
||||
log->dw.dl_ = 0; // start odliczania czasu dlugosci trwania zaklocenia
|
||||
status_rej = sledzenie;
|
||||
}
|
||||
break;
|
||||
case sledzenie:
|
||||
if (log->dw.W)
|
||||
{
|
||||
status_rej = sledzenie_zad;
|
||||
if (log->dw.Ws[0] | log->dw.Ws[1])
|
||||
{
|
||||
log->dw.RL1Em = log->nast_.ZdistA->Zdist_dw->Z.R[0];
|
||||
log->dw.RL2Em = log->nast_.ZdistA->Zdist_dw->Z.R[1];
|
||||
log->dw.RL3Em = log->nast_.ZdistA->Zdist_dw->Z.R[2];
|
||||
log->dw.XL1Em = log->nast_.ZdistA->Zdist_dw->Z.X[0];
|
||||
log->dw.XL2Em = log->nast_.ZdistA->Zdist_dw->Z.X[1];
|
||||
log->dw.XL3Em = log->nast_.ZdistA->Zdist_dw->Z.X[2];
|
||||
} else {
|
||||
log->dw.RL1Em = log->nast_.ZdistA->Zdist_dw->Z.R[3];
|
||||
log->dw.RL2Em = log->nast_.ZdistA->Zdist_dw->Z.R[4];
|
||||
log->dw.RL3Em = log->nast_.ZdistA->Zdist_dw->Z.R[5];
|
||||
log->dw.XL1Em = log->nast_.ZdistA->Zdist_dw->Z.X[3];
|
||||
log->dw.XL2Em = log->nast_.ZdistA->Zdist_dw->Z.X[4];
|
||||
log->dw.XL3Em = log->nast_.ZdistA->Zdist_dw->Z.X[5];
|
||||
}
|
||||
log->dw.RL1L2m = log->nast_.ZdistA->Zdist_dw->Z.R[6];
|
||||
log->dw.RL2L3m = log->nast_.ZdistA->Zdist_dw->Z.R[7];
|
||||
log->dw.RL3L1m = log->nast_.ZdistA->Zdist_dw->Z.R[8];
|
||||
log->dw.XL1L2m = log->nast_.ZdistA->Zdist_dw->Z.X[6];
|
||||
log->dw.XL2L3m = log->nast_.ZdistA->Zdist_dw->Z.X[7];
|
||||
log->dw.XL3L1m = log->nast_.ZdistA->Zdist_dw->Z.X[8];
|
||||
|
||||
//log->dw.czas_ = time; // zapisanie do bufora tymczasowego czasu wyslania impulsu wylacz dla rejestracji
|
||||
}
|
||||
if (log->dw.P)
|
||||
{
|
||||
log->dw.dl_++;
|
||||
} else {
|
||||
status_rej = oczekiwanie;
|
||||
}
|
||||
break;
|
||||
case sledzenie_zad:
|
||||
if (!log->dw.P)
|
||||
{
|
||||
log->dw.wsk_rej = 1; // zapamietanie faktu powstania zaklocenia z wylaczeniem
|
||||
status_rej = zapis;
|
||||
} else {
|
||||
log->dw.dl_++;
|
||||
}
|
||||
break;
|
||||
case zapis:
|
||||
if (!log->dw.wsk_rej)
|
||||
{
|
||||
status_rej = oczekiwanie;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
185
src/ZDistS.h
Normal file
185
src/ZDistS.h
Normal file
@@ -0,0 +1,185 @@
|
||||
/*
|
||||
* 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_ */
|
||||
60
src/an_gen.c
Normal file
60
src/an_gen.c
Normal file
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* an_gen.c
|
||||
*
|
||||
* Created on: 19-07-2017
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
#include <math.h>
|
||||
|
||||
#include "an_gen.h"
|
||||
#include "analog_in.h"
|
||||
#include "dev_ctrl.h"
|
||||
#include "elements.h"
|
||||
#include "config.h"
|
||||
#include <ti/sysbios/hal/Hwi.h>
|
||||
|
||||
//u16 bus_an_samples_buf_force[MAX_AN_CARDS][4][4];
|
||||
|
||||
#define SAMPLE_STEP (50.0f/(SAMPLES_PER_MS*1000.0f))
|
||||
|
||||
struct an_gen_force_params genpar;
|
||||
u8 an_gen_buf_ready = 0;
|
||||
|
||||
int an_gen_initlog(void *arguments, void *logic)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void an_gen(void *arguments, void *logic)
|
||||
{
|
||||
int i,j;
|
||||
u8 an_gen_sample_num;
|
||||
|
||||
if(!(dev_ctrl_state & DEV_CTRL_STATE_TEST_AN) || !genpar.an_force_mask)
|
||||
{
|
||||
an_gen_buf_ready=0;
|
||||
return;
|
||||
}
|
||||
|
||||
UInt key = Hwi_disable();
|
||||
|
||||
an_gen_sample_num=bus_an_cur_sample_num+(SAMPLES_PER_MS*LOOP_CYCLE_MS);
|
||||
an_gen_sample_num%=(SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS*2);
|
||||
|
||||
for(j=0;j<(SAMPLES_PER_MS*LOOP_CYCLE_MS);j++)
|
||||
{
|
||||
for(i=0;i<=(MAX_AN_CARDS/2 * 4);i++)
|
||||
if(genpar.an_force_mask & (1<<i))
|
||||
bus_an_samples_buf[i>>2][i%4][an_gen_sample_num] = (u16)(genpar.an_force_amp[i/4][i%4] * sinf(2 * PI * SAMPLE_STEP * (bus_an_cur_timestamp+(SAMPLES_PER_MS*LOOP_CYCLE_MS)+j) + genpar.an_force_ph[i/4][i%4]) + 32768);
|
||||
|
||||
an_gen_sample_num++;
|
||||
an_gen_sample_num%=(SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS*2);
|
||||
}
|
||||
|
||||
an_gen_buf_ready=1;
|
||||
Hwi_restore(key);
|
||||
}
|
||||
50
src/an_gen.h
Normal file
50
src/an_gen.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* an_gen.h
|
||||
*
|
||||
*
|
||||
* Created on: 19-07-2017
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
#ifndef AN_GEN_H_
|
||||
#define AN_GEN_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
#include "an_gen.h"
|
||||
|
||||
struct an_gen_logic
|
||||
{
|
||||
// u16 an_count;
|
||||
// u16 element_num[];
|
||||
};
|
||||
|
||||
struct an_gen_io
|
||||
{
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct an_gen_params
|
||||
{
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct an_gen_args
|
||||
{
|
||||
struct an_gen_io io;
|
||||
struct an_gen_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct an_gen_force_params
|
||||
{
|
||||
u32 an_force_mask;
|
||||
u16 an_force_amp[MAX_AN_CARDS/2][4];
|
||||
float an_force_ph[MAX_AN_CARDS/2][4];
|
||||
} __attribute__((__packed__));
|
||||
|
||||
extern struct an_gen_force_params genpar;
|
||||
extern u8 an_gen_buf_ready;
|
||||
|
||||
extern int an_gen_initlog(void *args, void *logic);
|
||||
extern void an_gen(void *args, void *logic);
|
||||
|
||||
#endif /* AN_GEN_H_ */
|
||||
90
src/analog_in.c
Normal file
90
src/analog_in.c
Normal file
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* analog_in.c
|
||||
*
|
||||
* Created on: 06-05-2014
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "analog_in.h"
|
||||
|
||||
int analog_in_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct analog_in_args *args = (struct analog_in_args *)arguments;
|
||||
struct analog_in_logic *log = (struct analog_in_logic *)logic;
|
||||
u32 *params_ptr;
|
||||
u32 *samples_buf_ptr;
|
||||
|
||||
log->kob_ptr = log_manager.nets_data + (args->io.kob_out >> 3);
|
||||
log->kob_bit_no = args->io.kob_out & 0x07;
|
||||
|
||||
if(log->kob_ptr >= (log_manager.nets_data+sizeof(log_manager.nets_data)))
|
||||
return -1;
|
||||
|
||||
log->cur_sample_ptr = (float *)(log_manager.nets_data + (args->io.sample_float_out >> 3));
|
||||
if((u8*)log->cur_sample_ptr > (log_manager.nets_data+sizeof(log_manager.nets_data)-sizeof(float)))
|
||||
return -1;
|
||||
|
||||
log->raw_sample_ptr = (short *)(log_manager.nets_data + (args->io.sample_raw_short_out >> 3));
|
||||
if((u8*)log->raw_sample_ptr > (log_manager.nets_data+sizeof(log_manager.nets_data)-sizeof(short)))
|
||||
return -1;
|
||||
|
||||
params_ptr = (u32 *)(log_manager.nets_data+(args->io.params_ptr_out>>3));
|
||||
|
||||
if((u8 *)params_ptr > (log_manager.nets_data+sizeof(log_manager.nets_data)-sizeof(void *)) )
|
||||
return -1;
|
||||
|
||||
*params_ptr = (u32)&log->params_ext;//args->params;
|
||||
|
||||
if(args->params.card_addr>(MAX_AN_CARDS-1))
|
||||
return -1;
|
||||
|
||||
if(args->params.phase_num>3)
|
||||
return -1;
|
||||
|
||||
samples_buf_ptr = (u32 *)(log_manager.nets_data+(args->io.samples_buf_ptr_out>>3));
|
||||
|
||||
if((u8 *)samples_buf_ptr > (log_manager.nets_data+sizeof(log_manager.nets_data)-sizeof(void *)) )
|
||||
return -1;
|
||||
|
||||
*samples_buf_ptr = (u32)&bus_an_samples_buf[args->params.card_addr][args->params.phase_num][0];
|
||||
|
||||
if(args->params.bits & ANALOG_NEGATION)
|
||||
bus_an_samples_neg[args->params.card_addr][args->params.phase_num]=1;
|
||||
else
|
||||
bus_an_samples_neg[args->params.card_addr][args->params.phase_num]=0;
|
||||
|
||||
log->params_ext.bits=args->params.bits;
|
||||
log->params_ext.card_addr=args->params.card_addr;
|
||||
log->params_ext.jednostka=args->params.jednostka;
|
||||
log->params_ext.multiplier=args->params.multiplier;
|
||||
log->params_ext.offset=args->params.offset;
|
||||
log->params_ext.phase_num=args->params.phase_num;
|
||||
log->params_ext.znam_wtor=args->params.znam_wtor;
|
||||
log->params_ext.znam_pierw=args->params.znam_pierw;
|
||||
log->params_ext.nast.offset=args->params.offset;
|
||||
log->params_ext.nast.mnoznik=args->params.multiplier;
|
||||
//nast.offset = n.korekcja_offsetu * 32767 / n.zasieg / 1.4142136f;
|
||||
//nast.mnoznik = 1.4142136f * n.korekcja_ampl * n.zasieg / 32767;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void analog_in(void *arguments, void *logic)
|
||||
{
|
||||
struct analog_in_args *args = (struct analog_in_args *)arguments;
|
||||
struct analog_in_logic *log = (struct analog_in_logic *)logic;
|
||||
//u16 sample;
|
||||
short sample;
|
||||
|
||||
if(ic->kob_an & (1<<args->params.card_addr))
|
||||
*log->kob_ptr|=(1<<log->kob_bit_no);
|
||||
else
|
||||
*log->kob_ptr&=~(1<<log->kob_bit_no);
|
||||
|
||||
sample = bus_an_samples_buf[args->params.card_addr][args->params.phase_num][bus_an_cur_sample_num] - 0x7FFF;
|
||||
*log->cur_sample_ptr=((float)sample - args->params.offset ) * args->params.multiplier;
|
||||
*log->raw_sample_ptr=sample;
|
||||
}
|
||||
77
src/analog_in.h
Normal file
77
src/analog_in.h
Normal file
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* analog_in.h
|
||||
*
|
||||
* Created on: 06-05-2014
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef ANALOG_IN_H_
|
||||
#define ANALOG_IN_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
struct Nastawa_przeliczona_analog_in
|
||||
{
|
||||
float mnoznik;///< stala przeliczenia int na float z korekcja wzmocnienia
|
||||
float offset; ///< wartosc korekcji przesuniecia skladowej stalej
|
||||
};
|
||||
|
||||
struct analog_in_params_extended
|
||||
{
|
||||
u32 card_addr;
|
||||
u32 phase_num;
|
||||
double offset;
|
||||
double multiplier;
|
||||
double znam_wtor; ///< watosc znamionowa wtorna
|
||||
double znam_pierw; ///< wartosc znamionowa pierwotna
|
||||
long jednostka;
|
||||
u32 bits;
|
||||
struct Nastawa_przeliczona_analog_in nast;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct analog_in_logic
|
||||
{
|
||||
u8 *kob_ptr;
|
||||
u8 kob_bit_no;
|
||||
float *cur_sample_ptr;
|
||||
short *raw_sample_ptr;
|
||||
struct analog_in_params_extended params_ext;
|
||||
};
|
||||
|
||||
struct analog_in_io
|
||||
{
|
||||
u32 sample_float_out;
|
||||
u32 samples_buf_ptr_out;
|
||||
u32 params_ptr_out;
|
||||
u32 sample_raw_short_out;
|
||||
u32 kob_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
|
||||
struct analog_in_params
|
||||
{
|
||||
u32 card_addr;
|
||||
u32 phase_num;
|
||||
double offset;
|
||||
double multiplier;
|
||||
double znam_wtor; ///< watosc znamionowa wtorna
|
||||
double znam_pierw; ///< wartosc znamionowa pierwotna
|
||||
long jednostka;
|
||||
u32 bits;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
|
||||
//bits
|
||||
#define ANALOG_NEGATION 0x01
|
||||
|
||||
struct analog_in_args
|
||||
{
|
||||
struct analog_in_io io;
|
||||
struct analog_in_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void analog_in(void *args, void *logic);
|
||||
extern int analog_in_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* ANALOG_IN_H_ */
|
||||
49
src/and.c
Normal file
49
src/and.c
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* nand.c
|
||||
*
|
||||
* Created on: 29-04-2014
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "and.h"
|
||||
|
||||
int and_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct and_args *args = (struct and_args *)arguments;
|
||||
struct and_logic *log = (struct and_logic *)logic;
|
||||
|
||||
log->out_ptr = log_manager.nets_data + (args->io.out >> 3);
|
||||
log->out_bit_mask = 1<<(args->io.out & 0x07);
|
||||
|
||||
log->in1_ptr = log_manager.nets_data + (args->io.in1 >> 3);
|
||||
log->in1_bit_mask = 1<<(args->io.in1 & 0x07);
|
||||
|
||||
log->in2_ptr = log_manager.nets_data + (args->io.in2 >> 3);
|
||||
log->in2_bit_mask = 1<<(args->io.in2 & 0x07);
|
||||
|
||||
if(log->out_ptr >= (log_manager.nets_data+sizeof(log_manager.nets_data)))
|
||||
return -1;
|
||||
|
||||
if(log->in1_ptr >= (log_manager.nets_data+sizeof(log_manager.nets_data)))
|
||||
return -1;
|
||||
|
||||
if(log->in2_ptr >= (log_manager.nets_data+sizeof(log_manager.nets_data)))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void and(void *arguments, void *logic)
|
||||
{
|
||||
// struct and_args *args = (struct and_args *)arguments;
|
||||
struct and_logic *log = (struct and_logic *)logic;
|
||||
|
||||
if((*log->in1_ptr & log->in1_bit_mask) && (*log->in2_ptr & log->in2_bit_mask))
|
||||
*log->out_ptr|=log->out_bit_mask;
|
||||
else
|
||||
*log->out_ptr&=~log->out_bit_mask;
|
||||
}
|
||||
46
src/and.h
Normal file
46
src/and.h
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* nand.h
|
||||
*
|
||||
* Created on: 29-04-2014
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
#ifndef AND_H_
|
||||
#define AND_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
struct and_logic
|
||||
{
|
||||
u8 *out_ptr;
|
||||
u8 out_bit_mask;
|
||||
|
||||
u8 *in1_ptr;
|
||||
u8 in1_bit_mask;
|
||||
|
||||
u8 *in2_ptr;
|
||||
u8 in2_bit_mask;
|
||||
};
|
||||
|
||||
struct and_io
|
||||
{
|
||||
u32 in1;
|
||||
u32 in2;
|
||||
u32 out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct and_params
|
||||
{
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct and_args
|
||||
{
|
||||
struct and_io io;
|
||||
struct and_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void and(void *args, void *logic);
|
||||
extern int and_initlog(void *args, void *logic);
|
||||
|
||||
#endif /* AND_H_ */
|
||||
46
src/and4.c
Normal file
46
src/and4.c
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* and4.c
|
||||
*
|
||||
* Created on: 15-02-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "helper.h"
|
||||
#include "and4.h"
|
||||
|
||||
int and4_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct and4_args *args = (struct and4_args *)arguments;
|
||||
struct and4_logic *log = (struct and4_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.in1_in,&log->in[0],&log->in_bit_mask[0]))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.in2_in,&log->in[1],&log->in_bit_mask[1]))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.in3_in,&log->in[2],&log->in_bit_mask[2]))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.in4_in,&log->in[3],&log->in_bit_mask[3]))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.out_out,&log->out,&log->out_bit_mask))
|
||||
return -1;
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void and4(void *arguments, void *logic)
|
||||
{
|
||||
struct and4_logic *log = (struct and4_logic *)logic;
|
||||
u8 i;
|
||||
|
||||
for(i=0;i<4;i++)
|
||||
if(!(*log->in[i] & log->in_bit_mask[i]))
|
||||
break;
|
||||
|
||||
check_and_set_mask(i>=4,log->out,log->out_bit_mask);
|
||||
}
|
||||
45
src/and4.h
Normal file
45
src/and4.h
Normal file
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* and4.h
|
||||
*
|
||||
* Created on: 15-02-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef AND4_H_
|
||||
#define AND4_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
struct and4_logic
|
||||
{
|
||||
u8 *in[4];
|
||||
u8 in_bit_mask[4];
|
||||
|
||||
u8 *out;
|
||||
u8 out_bit_mask;
|
||||
};
|
||||
|
||||
struct and4_io
|
||||
{
|
||||
u32 in1_in;
|
||||
u32 in2_in;
|
||||
u32 in3_in;
|
||||
u32 in4_in;
|
||||
u32 out_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct and4_params
|
||||
{
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct and4_args
|
||||
{
|
||||
struct and4_io io;
|
||||
struct and4_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void and4(void *args, void *logic);
|
||||
extern int and4_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* AND4_H_ */
|
||||
54
src/and8.c
Normal file
54
src/and8.c
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* and8.c
|
||||
*
|
||||
* Created on: 15-02-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "helper.h"
|
||||
#include "and8.h"
|
||||
|
||||
int and8_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct and8_args *args = (struct and8_args *)arguments;
|
||||
struct and8_logic *log = (struct and8_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.in1_in,&log->in[0],&log->in_bit_mask[0]))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.in2_in,&log->in[1],&log->in_bit_mask[1]))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.in3_in,&log->in[2],&log->in_bit_mask[2]))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.in4_in,&log->in[3],&log->in_bit_mask[3]))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.in5_in,&log->in[4],&log->in_bit_mask[4]))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.in6_in,&log->in[5],&log->in_bit_mask[5]))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.in7_in,&log->in[6],&log->in_bit_mask[6]))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.in8_in,&log->in[7],&log->in_bit_mask[7]))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.out_out,&log->out,&log->out_bit_mask))
|
||||
return -1;
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void and8(void *arguments, void *logic)
|
||||
{
|
||||
struct and8_logic *log = (struct and8_logic *)logic;
|
||||
u8 i;
|
||||
|
||||
for(i=0;i<8;i++)
|
||||
if(!(*log->in[i] & log->in_bit_mask[i]))
|
||||
break;
|
||||
|
||||
check_and_set_mask(i>=8,log->out,log->out_bit_mask);
|
||||
}
|
||||
49
src/and8.h
Normal file
49
src/and8.h
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* and8.h
|
||||
*
|
||||
* Created on: 15-02-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef AND8_H_
|
||||
#define AND8_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
struct and8_logic
|
||||
{
|
||||
u8 *in[8];
|
||||
u8 in_bit_mask[8];
|
||||
|
||||
u8 *out;
|
||||
u8 out_bit_mask;
|
||||
};
|
||||
|
||||
struct and8_io
|
||||
{
|
||||
u32 in1_in;
|
||||
u32 in2_in;
|
||||
u32 in3_in;
|
||||
u32 in4_in;
|
||||
u32 in5_in;
|
||||
u32 in6_in;
|
||||
u32 in7_in;
|
||||
u32 in8_in;
|
||||
u32 out_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct and8_params
|
||||
{
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct and8_args
|
||||
{
|
||||
struct and8_io io;
|
||||
struct and8_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void and8(void *args, void *logic);
|
||||
extern int and8_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* AND8_H_ */
|
||||
98
src/bank_sel.c
Normal file
98
src/bank_sel.c
Normal file
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* bank_sel.c
|
||||
*
|
||||
* Created on: 13-12-2016
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
#include "helper.h"
|
||||
#include "bank_sel.h"
|
||||
#include "comm.h"
|
||||
#include "config.h"
|
||||
|
||||
#include <ti/ipc/Notify.h>
|
||||
|
||||
|
||||
int bank_sel_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct bank_sel_args *args = (struct bank_sel_args *)arguments;
|
||||
struct bank_sel_logic *log = (struct bank_sel_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.bank0_in,&log->bank0_ptr,&log->bank0_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.bank1_in,&log->bank1_ptr,&log->bank1_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.bank2_in,&log->bank2_ptr,&log->bank2_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.bank3_in,&log->bank3_ptr,&log->bank3_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.bank4_in,&log->bank4_ptr,&log->bank4_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.bank5_in,&log->bank5_ptr,&log->bank5_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.blok_in,&log->blok_in,&log->blok_in_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.bank0_out,&log->bank0_out,&log->bank0_out_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.bank1_out,&log->bank1_out,&log->bank1_out_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.bank2_out,&log->bank2_out,&log->bank2_out_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.bank3_out,&log->bank3_out,&log->bank3_out_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.bank4_out,&log->bank4_out,&log->bank4_out_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.bank5_out,&log->bank5_out,&log->bank5_out_bit_mask))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void bank_sel(void *arguments, void *logic)
|
||||
{
|
||||
struct bank_sel_logic *log = (struct bank_sel_logic *)logic;
|
||||
|
||||
if(!(*log->blok_in & log->blok_in_bit_mask))
|
||||
{
|
||||
if(*log->bank0_ptr & log->bank0_bit_mask)
|
||||
log->sel_bank=0;
|
||||
else if(*log->bank1_ptr & log->bank1_bit_mask)
|
||||
log->sel_bank=1;
|
||||
else if(*log->bank2_ptr & log->bank2_bit_mask)
|
||||
log->sel_bank=2;
|
||||
else if(*log->bank3_ptr & log->bank3_bit_mask)
|
||||
log->sel_bank=3;
|
||||
else if(*log->bank4_ptr & log->bank4_bit_mask)
|
||||
log->sel_bank=4;
|
||||
else if(*log->bank5_ptr & log->bank5_bit_mask)
|
||||
log->sel_bank=5;
|
||||
else
|
||||
log->sel_bank=0;
|
||||
}
|
||||
|
||||
check_and_set_mask(log->sel_bank==0,log->bank0_out,log->bank0_out_bit_mask);
|
||||
check_and_set_mask(log->sel_bank==1,log->bank1_out,log->bank1_out_bit_mask);
|
||||
check_and_set_mask(log->sel_bank==2,log->bank2_out,log->bank2_out_bit_mask);
|
||||
check_and_set_mask(log->sel_bank==3,log->bank3_out,log->bank3_out_bit_mask);
|
||||
check_and_set_mask(log->sel_bank==4,log->bank4_out,log->bank4_out_bit_mask);
|
||||
check_and_set_mask(log->sel_bank==5,log->bank5_out,log->bank5_out_bit_mask);
|
||||
|
||||
if(log->t_cnt++ > (1200/LOOP_CYCLE_MS)) // every 1.2 secs
|
||||
{
|
||||
|
||||
logman_notify|=(LOGMAN_NOTIFY_BANK0<<log->sel_bank) | LOGMAN_NOTIFY_NEW_EVENTS;
|
||||
// Notify_sendEvent(notify.remoteProcId,notify.lineId,notify.eventId, NOTIFY_SEL_BANK0+log->sel_bank, TRUE);
|
||||
log->t_cnt=0;
|
||||
}
|
||||
}
|
||||
79
src/bank_sel.h
Normal file
79
src/bank_sel.h
Normal file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* bank_sel.h
|
||||
*
|
||||
*
|
||||
* Created on: 13-12-2016
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
#ifndef BANK_SEL_H_
|
||||
#define BANK_SEL_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
|
||||
struct bank_sel_logic
|
||||
{
|
||||
u8 *bank0_ptr;
|
||||
u8 bank0_bit_mask;
|
||||
u8 *bank1_ptr;
|
||||
u8 bank1_bit_mask;
|
||||
u8 *bank2_ptr;
|
||||
u8 bank2_bit_mask;
|
||||
u8 *bank3_ptr;
|
||||
u8 bank3_bit_mask;
|
||||
u8 *bank4_ptr;
|
||||
u8 bank4_bit_mask;
|
||||
u8 *bank5_ptr;
|
||||
u8 bank5_bit_mask;
|
||||
|
||||
u8 *blok_in;
|
||||
u8 blok_in_bit_mask;
|
||||
u8 *bank0_out;
|
||||
u8 bank0_out_bit_mask;
|
||||
u8 *bank1_out;
|
||||
u8 bank1_out_bit_mask;
|
||||
u8 *bank2_out;
|
||||
u8 bank2_out_bit_mask;
|
||||
u8 *bank3_out;
|
||||
u8 bank3_out_bit_mask;
|
||||
u8 *bank4_out;
|
||||
u8 bank4_out_bit_mask;
|
||||
u8 *bank5_out;
|
||||
u8 bank5_out_bit_mask;
|
||||
u32 t_cnt;
|
||||
u32 sel_bank;
|
||||
};
|
||||
|
||||
struct bank_sel_io
|
||||
{
|
||||
u32 bank0_in;
|
||||
u32 bank1_in;
|
||||
u32 bank2_in;
|
||||
u32 bank3_in;
|
||||
u32 bank4_in;
|
||||
u32 bank5_in;
|
||||
u32 blok_in;
|
||||
u32 bank0_out;
|
||||
u32 bank1_out;
|
||||
u32 bank2_out;
|
||||
u32 bank3_out;
|
||||
u32 bank4_out;
|
||||
u32 bank5_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct bank_sel_params
|
||||
{
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct bank_sel_args
|
||||
{
|
||||
struct bank_sel_io io;
|
||||
struct bank_sel_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void bank_sel(void *args, void *logic);
|
||||
extern int bank_sel_initlog(void *args, void *logic);
|
||||
|
||||
#endif /* BANK_SEL_H_ */
|
||||
97
src/bin_in.c
Normal file
97
src/bin_in.c
Normal file
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
* bin_in.c
|
||||
*
|
||||
* Created on: 07-04-2014
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "bin_in.h"
|
||||
|
||||
int bin_in_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct bin_in_args *args = (struct bin_in_args *)arguments;
|
||||
struct bin_in_logic *log = (struct bin_in_logic *)logic;
|
||||
|
||||
log->out_ptr = log_manager.nets_data + (args->io.out >> 3);
|
||||
log->out_bit_mask = 1<<(args->io.out & 0x07);
|
||||
log->kob_ptr = log_manager.nets_data + (args->io.kob_out >> 3);
|
||||
log->kob_bit_mask = 1<<(args->io.kob_out & 0x07);
|
||||
|
||||
if(args->params.card_addr>=MAX_BIN_CARDS)
|
||||
{
|
||||
if(args->params.ac_filter)
|
||||
ic->bin_ac_mask_ench[args->params.card_addr-16]|=(1<<args->params.in_num);
|
||||
else
|
||||
ic->bin_ac_mask_ench[args->params.card_addr-16]&=~(1<<args->params.in_num);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(args->params.ac_filter)
|
||||
ic->bin_ac_mask[args->params.card_addr]|=(1<<args->params.in_num);
|
||||
else
|
||||
ic->bin_ac_mask[args->params.card_addr]&=~(1<<args->params.in_num);
|
||||
}
|
||||
|
||||
if(log->out_ptr >= (log_manager.nets_data+sizeof(log_manager.nets_data)))
|
||||
return -1;
|
||||
|
||||
if(log->kob_ptr >= (log_manager.nets_data+sizeof(log_manager.nets_data)))
|
||||
return -1;
|
||||
|
||||
if(args->params.card_addr>=(MAX_BIN_CARDS * 2)) // *2 bo mwd32
|
||||
return -1;
|
||||
|
||||
log->in_num_mask=(1<<args->params.in_num);
|
||||
log->card_addr_mask=(1<<args->params.card_addr);
|
||||
|
||||
if(args->params.card_addr>=16)
|
||||
{
|
||||
mwd32_mask|=1<<(args->params.card_addr&0x07);
|
||||
ic->mwd32_present=1;
|
||||
}
|
||||
|
||||
if(args->params.in_num>=8)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void bin_in(void *arguments, void *logic)
|
||||
{
|
||||
struct bin_in_args *args = (struct bin_in_args *)arguments;
|
||||
struct bin_in_logic *log = (struct bin_in_logic *)logic;
|
||||
|
||||
|
||||
if(args->params.card_addr>=MAX_BIN_CARDS) // mwd32
|
||||
{
|
||||
if(bus_bin_data_ench[args->params.card_addr-16] & log->in_num_mask)
|
||||
*log->out_ptr|=log->out_bit_mask;
|
||||
else
|
||||
*log->out_ptr&=~log->out_bit_mask;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(bus_bin_data[args->params.card_addr] & log->in_num_mask)
|
||||
*log->out_ptr|=log->out_bit_mask;
|
||||
else
|
||||
*log->out_ptr&=~log->out_bit_mask;
|
||||
}
|
||||
|
||||
if(mwd32_mask & (1<<(args->params.card_addr&0x07)))
|
||||
{
|
||||
if(ic->kob_bin & (1<<(args->params.card_addr&0x07)))
|
||||
*log->kob_ptr|=log->kob_bit_mask;
|
||||
else
|
||||
*log->kob_ptr&=~log->kob_bit_mask;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(ic->kob_bin & log->card_addr_mask)
|
||||
*log->kob_ptr|=log->kob_bit_mask;
|
||||
else
|
||||
*log->kob_ptr&=~log->kob_bit_mask;
|
||||
}
|
||||
}
|
||||
46
src/bin_in.h
Normal file
46
src/bin_in.h
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* bin_in.h
|
||||
*
|
||||
* Created on: 07-04-2014
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef BIN_IN_H_
|
||||
#define BIN_IN_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
struct bin_in_logic
|
||||
{
|
||||
u8 *out_ptr;
|
||||
u8 out_bit_mask;
|
||||
u8 *kob_ptr;
|
||||
u8 kob_bit_mask;
|
||||
u8 in_num_mask;
|
||||
u16 card_addr_mask;
|
||||
};
|
||||
|
||||
struct bin_in_io
|
||||
{
|
||||
u32 out; // one bit output for one binary input
|
||||
u32 kob_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct bin_in_params
|
||||
{
|
||||
u32 card_addr;
|
||||
u32 in_num;
|
||||
u32 ac_filter;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct bin_in_args
|
||||
{
|
||||
struct bin_in_io io;
|
||||
struct bin_in_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void bin_in(void *args, void *logic);
|
||||
extern int bin_in_initlog(void *args, void *logic);
|
||||
|
||||
#endif /* BIN_IN_H_ */
|
||||
38
src/buzzer.c
Normal file
38
src/buzzer.c
Normal file
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* buzzer.c
|
||||
*
|
||||
* Created on: 09-10-2014
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "led.h"
|
||||
|
||||
int buzzer_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct led_args *args = (struct led_args *)arguments;
|
||||
struct led_logic *log = (struct led_logic *)logic;
|
||||
|
||||
log->in_ptr = log_manager.nets_data + (args->io.in >> 3);
|
||||
log->in_bit_no = args->io.in & 0x07;
|
||||
log->blink_in_ptr = log_manager.nets_data + (args->io.blink_in >> 3);
|
||||
log->blink_in_bit_no = args->io.blink_in & 0x07;
|
||||
log->clr_ptr = log_manager.nets_data + (args->io.clr_in >> 3);
|
||||
log->clr_bit_no = args->io.clr_in & 0x07;
|
||||
|
||||
if(log->in_ptr >= (log_manager.nets_data+sizeof(log_manager.nets_data)))
|
||||
return -1;
|
||||
|
||||
if(log->clr_ptr >= (log_manager.nets_data+sizeof(log_manager.nets_data)))
|
||||
return -1;
|
||||
|
||||
if(log->blink_in_ptr >= (log_manager.nets_data+sizeof(log_manager.nets_data)))
|
||||
return -1;
|
||||
|
||||
args->params.led_num=BUZZER_LED_NUM;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
586
src/c37_94.c
Normal file
586
src/c37_94.c
Normal file
@@ -0,0 +1,586 @@
|
||||
/*
|
||||
* c37_94.c
|
||||
*
|
||||
* Created on: 16-07-2019
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
#include "config.h"
|
||||
|
||||
#include "c37_94.h"
|
||||
#include "helper.h"
|
||||
#include "mkstream.h"
|
||||
|
||||
#include <ti/ipc/Notify.h>
|
||||
|
||||
#include "comm.h"
|
||||
#include <ti/sysbios/hal/Hwi.h>
|
||||
|
||||
volatile struct stream_frame c37_str[C37_MAX_STREAMS][C37_STREAM_BUF_SIZE] __attribute__((aligned(4)));
|
||||
volatile u8 c37_str_bits[C37_MAX_STREAMS][C37_STREAM_BUF_SIZE] __attribute__((aligned(4)));
|
||||
volatile u32 c37_str_pos[C37_MAX_STREAMS] __attribute__((aligned(4)));
|
||||
|
||||
int c37_94_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct c37_94_args *args = (struct c37_94_args *)arguments;
|
||||
struct c37_94_logic *log = (struct c37_94_logic *)logic;
|
||||
|
||||
if(set_pointer_in_ptr(args->io.stream_ptr_in,(u32 *)&log->stream_in))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.stream_en_in,&log->stream_en))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.no_sync_in,&log->no_sync))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.clr_in,&log->clr))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.ping_in,&log->ping))
|
||||
return -1;
|
||||
|
||||
if(set_pointer_out_ptr(args->io.stream0_ptr_out,(u32 *)&log->stream_out[0]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.stream0_act_out,&log->stream_act[0]))
|
||||
return -1;
|
||||
if(set_pointer_out_ptr(args->io.stream1_ptr_out,(u32 *)&log->stream_out[1]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.stream1_act_out,&log->stream_act[1]))
|
||||
return -1;
|
||||
if(set_pointer_out_ptr(args->io.stream2_ptr_out,(u32 *)&log->stream_out[2]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.stream2_act_out,&log->stream_act[2]))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.err_out,&log->err))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.y_bit_out,&log->y_bit))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.err2_out,&log->err2))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.y2_bit_out,&log->y_bit2))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.stream0_errs_float_out,&log->stream_errs[0]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.stream1_errs_float_out,&log->stream_errs[1]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.stream2_errs_float_out,&log->stream_errs[2]))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.link0_out,&log->link[0]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.link1_out,&log->link[1]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.link2_out,&log->link[2]))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.cur_shift_float_out,&log->cur_shift))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.cur_shift2_float_out,&log->cur_shift2))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.stream0_synt_errs_float_out,&log->stream_synt_errs[0]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.stream1_synt_errs_float_out,&log->stream_synt_errs[1]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.stream2_synt_errs_float_out,&log->stream_synt_errs[2]))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.ping_float_out,&log->ping_time))
|
||||
return -1;
|
||||
|
||||
log->wr_bits=((args->params.bits & 0x00000001)?MUX_REG_EXT_CLK:0)|((args->params.mux_chans<=12?args->params.mux_chans:12)<<MUX_REG_CHAN_NUM_OFFSET);
|
||||
ic->mux_reg=log->wr_bits|MUX_REG_SKIP_FF;
|
||||
log->prev_addr=ic->mux_state & MUX_STATE_RX_BYTES_MASK;
|
||||
|
||||
//
|
||||
log->s_delay=args->params.sample_delay/LOOP_CYCLE_MS;
|
||||
if(args->params.sample_delay%LOOP_CYCLE_MS)
|
||||
log->s_delay++;
|
||||
|
||||
log->s_delay*=(SAMPLES_PER_MS*LOOP_CYCLE_MS);
|
||||
|
||||
if(log->s_delay>=((C37_STREAM_BUF_SIZE-1)*(SAMPLES_PER_MS*LOOP_CYCLE_MS)))
|
||||
log->s_delay=(C37_STREAM_BUF_SIZE-1)*(SAMPLES_PER_MS*LOOP_CYCLE_MS);
|
||||
//
|
||||
|
||||
log->wr_addr=1;
|
||||
|
||||
ic->mux_shift=0;
|
||||
|
||||
// mux2
|
||||
log->wr_bits2=((args->params.bits & MUX2_EXT_CLK)?MUX_REG_EXT_CLK:0)|((args->params.mux_chans<=12?args->params.mux_chans:12)<<MUX_REG_CHAN_NUM_OFFSET);
|
||||
ic->mux2_reg=log->wr_bits2|MUX_REG_SKIP_FF;
|
||||
log->prev_addr2=ic->mux2_state & MUX_STATE_RX_BYTES_MASK;
|
||||
log->wr_addr2=1;
|
||||
ic->mux2_shift=0;
|
||||
|
||||
log->my_mask = (args->params.serial_num<<2)&C37_SERIAL_MASK;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void c37_94(void *arguments, void *logic)
|
||||
{
|
||||
struct c37_94_logic *log = (struct c37_94_logic *)logic;
|
||||
struct c37_94_args *args = (struct c37_94_args *)arguments;
|
||||
int i,rx_bytes;
|
||||
u8 j,k;
|
||||
u8 cksum;
|
||||
u16 find_stamp;
|
||||
u16 cur_addr;
|
||||
u16 mux_offset;
|
||||
u8 already_incremented[C37_MAX_STREAMS]={0,0,0};
|
||||
u8 need_pong=0;
|
||||
|
||||
static struct stream_frame tmp_frame;
|
||||
|
||||
|
||||
if(check_struct(&log->clr))
|
||||
{
|
||||
for(i=0;i<C37_MAX_STREAMS;i++)
|
||||
{
|
||||
*log->stream_errs[i]=0;
|
||||
*log->stream_synt_errs[i]=0;
|
||||
}
|
||||
}
|
||||
|
||||
for(i=0;i<C37_MAX_STREAMS;i++)
|
||||
{
|
||||
if(log->prev_pos[i]!=c37_str_pos[i])
|
||||
{
|
||||
if(log->link_up_cnt[i]>LINK_UP_TIME)
|
||||
{
|
||||
if(!check_struct(&log->link[i]))
|
||||
*log->stream_errs[i]=0;
|
||||
set_struct(&log->link[i]);
|
||||
}
|
||||
else
|
||||
log->link_up_cnt[i]+=LOOP_CYCLE_MS;
|
||||
|
||||
while(log->prev_pos[i]!=c37_str_pos[i])
|
||||
{
|
||||
u16 prev_tstamp=(!log->prev_pos[i]?c37_str[i][C37_STREAM_BUF_SIZE-1].sample_stamp:c37_str[i][log->prev_pos[i]-1].sample_stamp) & 0x7FFF;
|
||||
u16 next_tstamp=(c37_str[i][log->prev_pos[i]].sample_stamp)&0x7FFF;
|
||||
|
||||
if((prev_tstamp+(SAMPLES_PER_MS*LOOP_CYCLE_MS))%(SAMPLES_PER_MS*1000)!=next_tstamp)
|
||||
{
|
||||
if((log->prev_timestamp+(SAMPLES_PER_MS*LOOP_CYCLE_MS))%(SAMPLES_PER_MS*1000)==bus_an_cur_timestamp)
|
||||
*log->stream_errs[i]+=1.0f;
|
||||
already_incremented[i]=1;
|
||||
}
|
||||
log->prev_pos[i]++;
|
||||
log->prev_pos[i]%=C37_STREAM_BUF_SIZE;
|
||||
}
|
||||
|
||||
log->link_timeout_cnt[i]=0;
|
||||
log->prev_pos[i]=c37_str_pos[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
if(log->link_timeout_cnt[i]>LINK_TIMEOUT_TIME)
|
||||
{
|
||||
clear_struct(&log->link[i]);
|
||||
log->link_up_cnt[i]=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(log->link_timeout_cnt[i]>(1*LOOP_CYCLE_MS))
|
||||
{
|
||||
if((log->prev_timestamp+(SAMPLES_PER_MS*LOOP_CYCLE_MS))%(SAMPLES_PER_MS*1000)==bus_an_cur_timestamp)
|
||||
*log->stream_errs[i]+=1.0f;
|
||||
already_incremented[i]=1;
|
||||
}
|
||||
log->link_timeout_cnt[i]+=LOOP_CYCLE_MS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
check_and_set_struct(ic->mux_state & MUX_STATE_ERR,&log->err);
|
||||
check_and_set_struct(ic->mux2_state & MUX_STATE_ERR,&log->err2);
|
||||
|
||||
cur_addr = ic->mux_state & MUX_STATE_RX_BYTES_MASK;
|
||||
rx_bytes = cur_addr>=log->prev_addr ? cur_addr-log->prev_addr : C37_MUX_BUFSIZE + cur_addr - log->prev_addr;
|
||||
mux_offset = log->prev_addr;
|
||||
/*
|
||||
if(check_struct(&log->shift_out))
|
||||
{
|
||||
log->out_shift_cnt++;
|
||||
log->out_shift_cnt&=0x07;
|
||||
ic->mux_shift=(ic->mux_shift & 0x0F) | (log->out_shift_cnt<<4);
|
||||
}
|
||||
*/
|
||||
|
||||
// MUX1
|
||||
if(!(ic->mux_state & MUX_STATE_ERR))
|
||||
{
|
||||
log->no_data_cnt+=LOOP_CYCLE_MS;
|
||||
|
||||
if(log->no_data_cnt > (C37_NO_DATA_SHIFT_INTERVAL))
|
||||
{
|
||||
log->no_data_cnt=0;
|
||||
log->shift_cnt++;
|
||||
log->shift_cnt&=0x07;
|
||||
ic->mux_shift=(ic->mux_shift & 0xF0)|log->shift_cnt;
|
||||
*log->cur_shift=log->shift_cnt;
|
||||
}
|
||||
}
|
||||
else
|
||||
log->no_data_cnt=0;
|
||||
|
||||
while(rx_bytes >= C37_FRAME_SIZE)
|
||||
{
|
||||
if(ic->mux_indata[mux_offset]!='T' || ic->mux_indata[(mux_offset+1)%C37_MUX_BUFSIZE]!='Z')
|
||||
{
|
||||
rx_bytes--;
|
||||
mux_offset++;
|
||||
mux_offset%=C37_MUX_BUFSIZE;
|
||||
continue;
|
||||
}
|
||||
|
||||
if(mux_offset + C37_FRAME_SIZE > C37_MUX_BUFSIZE)
|
||||
{
|
||||
memcpy((u8*)&tmp_frame,(u8*)&ic->mux_indata[mux_offset],C37_MUX_BUFSIZE - mux_offset);
|
||||
memcpy((u8*)&tmp_frame+(C37_MUX_BUFSIZE-mux_offset),(u8*)&ic->mux_indata[0],C37_FRAME_SIZE-(C37_MUX_BUFSIZE-mux_offset));
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy((u8*)&tmp_frame,(u8*)&ic->mux_indata[mux_offset],C37_FRAME_SIZE);
|
||||
}
|
||||
|
||||
cksum=CKSUM_IV;
|
||||
for(j=0;j<C37_FRAME_SIZE-1;j++)
|
||||
cksum+=*((u8*)&tmp_frame+j);
|
||||
|
||||
if(cksum == tmp_frame.cksum && ((tmp_frame.addr & C37_SERIAL_MASK) == log->my_mask))
|
||||
{
|
||||
if(tmp_frame.addr & 0x80)
|
||||
need_pong=1;
|
||||
if(tmp_frame.addr & 0x40 && log->ping_sent)
|
||||
{
|
||||
*log->ping_time=log->ping_cnt;
|
||||
log->ping_sent=0;
|
||||
}
|
||||
tmp_frame.addr&=0x03;
|
||||
log->no_data_cnt=0;
|
||||
|
||||
if(tmp_frame.addr <C37_MAX_STREAMS)
|
||||
{
|
||||
memcpy((u8 *)&c37_str[tmp_frame.addr][c37_str_pos[tmp_frame.addr]],(u8*)&tmp_frame,C37_FRAME_SIZE);
|
||||
c37_str_bits[tmp_frame.addr][c37_str_pos[tmp_frame.addr]++]=0;
|
||||
c37_str_pos[tmp_frame.addr]%=C37_STREAM_BUF_SIZE;
|
||||
}
|
||||
}
|
||||
// else
|
||||
// *log->cksum_err+=1.0;
|
||||
//else odjac tylko 2 bajty TZ i szukac kolejnego?
|
||||
|
||||
rx_bytes-=C37_FRAME_SIZE;
|
||||
mux_offset+=C37_FRAME_SIZE;
|
||||
mux_offset%=C37_MUX_BUFSIZE;
|
||||
}
|
||||
|
||||
log->prev_addr=mux_offset;
|
||||
|
||||
// *log->hw_err=(float)((ic->mux_state & MUX_STATE_ERR_CNT_MASK)>>MUX_STATE_ERR_CNT_OFFSET);
|
||||
check_and_set_struct(ic->mux_state & MUX_STATE_YELLOW_BIT_IN, &log->y_bit);
|
||||
|
||||
//MUX2
|
||||
if(args->params.bits & MUX2_ACTIVE)
|
||||
{
|
||||
cur_addr = ic->mux2_state & MUX_STATE_RX_BYTES_MASK;
|
||||
rx_bytes = cur_addr>=log->prev_addr2 ? cur_addr-log->prev_addr2 : C37_MUX_BUFSIZE + cur_addr - log->prev_addr2;
|
||||
mux_offset = log->prev_addr2;
|
||||
|
||||
if(!(ic->mux2_state & MUX_STATE_ERR))
|
||||
{
|
||||
log->no_data_cnt2+=LOOP_CYCLE_MS;
|
||||
|
||||
if(log->no_data_cnt2 > (C37_NO_DATA_SHIFT_INTERVAL))
|
||||
{
|
||||
log->no_data_cnt2=0;
|
||||
log->shift_cnt2++;
|
||||
log->shift_cnt2&=0x07;
|
||||
ic->mux2_shift=(ic->mux2_shift & 0xF0)|log->shift_cnt2;
|
||||
*log->cur_shift2=log->shift_cnt2;
|
||||
}
|
||||
}
|
||||
else
|
||||
log->no_data_cnt2=0;
|
||||
|
||||
while(rx_bytes >= C37_FRAME_SIZE)
|
||||
{
|
||||
if(ic->mux2_indata[mux_offset]!='T' || ic->mux2_indata[(mux_offset+1)%C37_MUX_BUFSIZE]!='Z')
|
||||
{
|
||||
rx_bytes--;
|
||||
mux_offset++;
|
||||
mux_offset%=C37_MUX_BUFSIZE;
|
||||
continue;
|
||||
}
|
||||
|
||||
if(mux_offset + C37_FRAME_SIZE > C37_MUX_BUFSIZE)
|
||||
{
|
||||
memcpy((u8*)&tmp_frame,(u8*)&ic->mux2_indata[mux_offset],C37_MUX_BUFSIZE - mux_offset);
|
||||
memcpy((u8*)&tmp_frame+(C37_MUX_BUFSIZE-mux_offset),(u8*)&ic->mux2_indata[0],C37_FRAME_SIZE-(C37_MUX_BUFSIZE-mux_offset));
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy((u8*)&tmp_frame,(u8*)&ic->mux2_indata[mux_offset],C37_FRAME_SIZE);
|
||||
}
|
||||
|
||||
cksum=CKSUM_IV;
|
||||
for(j=0;j<C37_FRAME_SIZE-1;j++)
|
||||
cksum+=*((u8*)&tmp_frame+j);
|
||||
|
||||
if(cksum == tmp_frame.cksum && ((tmp_frame.addr & C37_SERIAL_MASK) == log->my_mask))
|
||||
{
|
||||
if(tmp_frame.addr & 0x80)
|
||||
need_pong=1;
|
||||
if(tmp_frame.addr & 0x40 && log->ping_sent)
|
||||
{
|
||||
*log->ping_time=log->ping_cnt;
|
||||
log->ping_sent=0;
|
||||
}
|
||||
tmp_frame.addr&=0x03;
|
||||
log->no_data_cnt2=0;
|
||||
|
||||
if(tmp_frame.addr <C37_MAX_STREAMS)
|
||||
{
|
||||
memcpy((u8 *)&c37_str[tmp_frame.addr][c37_str_pos[tmp_frame.addr]],(u8*)&tmp_frame,C37_FRAME_SIZE);
|
||||
c37_str_bits[tmp_frame.addr][c37_str_pos[tmp_frame.addr]++]=0;
|
||||
c37_str_pos[tmp_frame.addr]%=C37_STREAM_BUF_SIZE;
|
||||
}
|
||||
}
|
||||
// else
|
||||
// *log->cksum_err+=1.0;
|
||||
//else odjac tylko 2 bajty TZ i szukac kolejnego?
|
||||
|
||||
rx_bytes-=C37_FRAME_SIZE;
|
||||
mux_offset+=C37_FRAME_SIZE;
|
||||
mux_offset%=C37_MUX_BUFSIZE;
|
||||
}
|
||||
|
||||
log->prev_addr2=mux_offset;
|
||||
|
||||
// *log->hw_err=(float)((ic->mux_state & MUX_STATE_ERR_CNT_MASK)>>MUX_STATE_ERR_CNT_OFFSET);
|
||||
check_and_set_struct(ic->mux2_state & MUX_STATE_YELLOW_BIT_IN, &log->y_bit2);
|
||||
}
|
||||
//
|
||||
|
||||
if(bus_an_cur_timestamp>=log->s_delay)
|
||||
find_stamp=bus_an_cur_timestamp-log->s_delay;
|
||||
else
|
||||
find_stamp=(SAMPLES_PER_MS*1000)+bus_an_cur_timestamp-log->s_delay;
|
||||
|
||||
|
||||
for(i=0;i<C37_MAX_STREAMS;i++)
|
||||
{
|
||||
if(!check_struct(&log->no_sync))
|
||||
{
|
||||
if(!check_struct(&log->link[i]))
|
||||
{
|
||||
clear_struct(&log->stream_act[i]);
|
||||
continue;
|
||||
}
|
||||
|
||||
for(k=0;k<C37_STREAM_BUF_SIZE;k++)
|
||||
{
|
||||
if(c37_str[i][k].sample_stamp == find_stamp && !(c37_str_bits[i][k] & STATUS_FRAME_READ))
|
||||
{
|
||||
c37_str_bits[i][k]|=STATUS_FRAME_READ;
|
||||
log->stream_out[i] = c37_str[i][k];
|
||||
// *log->stream_snum[i] = c37_str[i][k].sample_stamp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(k<C37_STREAM_BUF_SIZE)
|
||||
set_struct(&log->stream_act[i]);
|
||||
else
|
||||
{
|
||||
if(!already_incremented[i])
|
||||
*log->stream_synt_errs[i]+=1.0f;
|
||||
//*log->stream_errs[i]+=1.0f;
|
||||
clear_struct(&log->stream_act[i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(args->params.bits & 0x00000002) // no buf
|
||||
{
|
||||
if(!(c37_str_bits[i][(c37_str_pos[i]+C37_STREAM_BUF_SIZE-1) % C37_STREAM_BUF_SIZE] & STATUS_FRAME_READ))
|
||||
{
|
||||
c37_str_bits[i][(c37_str_pos[i]+C37_STREAM_BUF_SIZE-1) % C37_STREAM_BUF_SIZE]|=STATUS_FRAME_READ;
|
||||
log->stream_out[i] = c37_str[i][(c37_str_pos[i]+C37_STREAM_BUF_SIZE-1) % C37_STREAM_BUF_SIZE];
|
||||
// *log->stream_snum[i] = c37_str[i][(c37_str_pos[i]+C37_STREAM_BUF_SIZE-1) % C37_STREAM_BUF_SIZE].sample_stamp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(k=0;k<C37_STREAM_BUF_SIZE;k++)
|
||||
{
|
||||
|
||||
if(!(c37_str_bits[i][(c37_str_pos[i]+k) % C37_STREAM_BUF_SIZE] & STATUS_FRAME_READ))
|
||||
{
|
||||
c37_str_bits[i][(c37_str_pos[i]+k) % C37_STREAM_BUF_SIZE]|=STATUS_FRAME_READ;
|
||||
log->stream_out[i] = c37_str[i][(c37_str_pos[i]+k) % C37_STREAM_BUF_SIZE];
|
||||
// *log->stream_snum[i] = c37_str[i][(c37_str_pos[i]+k) % C37_STREAM_BUF_SIZE].sample_stamp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(k<C37_STREAM_BUF_SIZE)
|
||||
set_struct(&log->stream_act[i]);
|
||||
else
|
||||
{
|
||||
if(!already_incremented[i])
|
||||
*log->stream_synt_errs[i]+=1.0f;
|
||||
//*log->stream_errs[i]+=1.0f;
|
||||
clear_struct(&log->stream_act[i]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
log->prev_timestamp=bus_an_cur_timestamp;
|
||||
if(log->stream_in->addr<C37_MAX_STREAMS)
|
||||
{
|
||||
memcpy((u8 *)&c37_str[log->stream_in->addr][c37_str_pos[log->stream_in->addr]],(u8*)log->stream_in,C37_FRAME_SIZE);
|
||||
c37_str_bits[log->stream_in->addr][c37_str_pos[log->stream_in->addr]++]=0;
|
||||
c37_str_pos[log->stream_in->addr]%=C37_STREAM_BUF_SIZE;
|
||||
|
||||
if(check_struct(&log->stream_en))
|
||||
{
|
||||
//
|
||||
log->stream_in->addr|=log->my_mask;
|
||||
log->stream_in->cksum+=log->my_mask;
|
||||
|
||||
if(check_struct(&log->ping) && log->ping_cnt==0)
|
||||
{
|
||||
log->stream_in->addr|=0x80; // ping req
|
||||
log->stream_in->cksum+=0x80;
|
||||
log->ping_sent=1;
|
||||
}
|
||||
if(need_pong)
|
||||
{
|
||||
log->stream_in->addr|=0x40;
|
||||
log->stream_in->cksum+=0x40;
|
||||
}
|
||||
|
||||
if(log->wr_addr + C37_FRAME_SIZE > C37_MUX_BUFSIZE)
|
||||
{
|
||||
memcpy((u8*)&ic->mux_outdata[log->wr_addr],(u8 *)log->stream_in,C37_MUX_BUFSIZE - log->wr_addr);
|
||||
memcpy((u8*)ic->mux_outdata,(u8 *)log->stream_in+(C37_MUX_BUFSIZE - log->wr_addr),C37_FRAME_SIZE - (C37_MUX_BUFSIZE - log->wr_addr));
|
||||
}
|
||||
else
|
||||
memcpy((u8*)&ic->mux_outdata[log->wr_addr],(u8 *)log->stream_in,C37_FRAME_SIZE);
|
||||
|
||||
log->wr_addr+=C37_FRAME_SIZE-1;
|
||||
log->wr_addr%=C37_MUX_BUFSIZE;
|
||||
ic->mux_reg=log->wr_bits|MUX_REG_WR|log->wr_addr;
|
||||
log->wr_addr++;
|
||||
log->wr_addr%=C37_MUX_BUFSIZE;
|
||||
//
|
||||
//mux2
|
||||
if(args->params.bits & MUX2_ACTIVE)
|
||||
{
|
||||
if(log->wr_addr2 + C37_FRAME_SIZE > C37_MUX_BUFSIZE)
|
||||
{
|
||||
memcpy((u8*)&ic->mux2_outdata[log->wr_addr2],(u8 *)log->stream_in,C37_MUX_BUFSIZE - log->wr_addr2);
|
||||
memcpy((u8*)ic->mux2_outdata,(u8 *)log->stream_in+(C37_MUX_BUFSIZE - log->wr_addr2),C37_FRAME_SIZE - (C37_MUX_BUFSIZE - log->wr_addr2));
|
||||
}
|
||||
else
|
||||
memcpy((u8*)&ic->mux2_outdata[log->wr_addr2],(u8 *)log->stream_in,C37_FRAME_SIZE);
|
||||
|
||||
log->wr_addr2+=C37_FRAME_SIZE-1;
|
||||
log->wr_addr2%=C37_MUX_BUFSIZE;
|
||||
ic->mux2_reg=log->wr_bits2|MUX_REG_WR|log->wr_addr2;
|
||||
log->wr_addr2++;
|
||||
log->wr_addr2%=C37_MUX_BUFSIZE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(check_struct(&log->ping) && log->ping_cnt==0)
|
||||
{
|
||||
memcpy((u8 *)&c37_str[log->stream_in->addr][c37_str_pos[log->stream_in->addr]],(u8*)log->stream_in,C37_FRAME_SIZE);
|
||||
c37_str_bits[log->stream_in->addr][c37_str_pos[log->stream_in->addr]++]=0;
|
||||
c37_str_pos[log->stream_in->addr]%=C37_STREAM_BUF_SIZE;
|
||||
|
||||
log->ping_sent=1;
|
||||
log->stream_in->addr|=0x80; // ping req
|
||||
log->stream_in->cksum+=0x80;
|
||||
log->stream_in->addr|=log->my_mask;
|
||||
log->stream_in->cksum+=log->my_mask;
|
||||
|
||||
if(need_pong)
|
||||
{
|
||||
log->stream_in->addr|=0x40;
|
||||
log->stream_in->cksum+=0x40;
|
||||
}
|
||||
|
||||
//
|
||||
if(log->wr_addr + C37_FRAME_SIZE > C37_MUX_BUFSIZE)
|
||||
{
|
||||
memcpy((u8*)&ic->mux_outdata[log->wr_addr],(u8 *)log->stream_in,C37_MUX_BUFSIZE - log->wr_addr);
|
||||
memcpy((u8*)ic->mux_outdata,(u8 *)log->stream_in+(C37_MUX_BUFSIZE - log->wr_addr),C37_FRAME_SIZE - (C37_MUX_BUFSIZE - log->wr_addr));
|
||||
}
|
||||
else
|
||||
memcpy((u8*)&ic->mux_outdata[log->wr_addr],(u8 *)log->stream_in,C37_FRAME_SIZE);
|
||||
|
||||
log->wr_addr+=C37_FRAME_SIZE-1;
|
||||
log->wr_addr%=C37_MUX_BUFSIZE;
|
||||
ic->mux_reg=log->wr_bits|MUX_REG_WR|log->wr_addr;
|
||||
log->wr_addr++;
|
||||
log->wr_addr%=C37_MUX_BUFSIZE;
|
||||
//
|
||||
//
|
||||
if(args->params.bits & MUX2_ACTIVE)
|
||||
{
|
||||
if(log->wr_addr + C37_FRAME_SIZE > C37_MUX_BUFSIZE)
|
||||
{
|
||||
memcpy((u8*)&ic->mux2_outdata[log->wr_addr2],(u8 *)log->stream_in,C37_MUX_BUFSIZE - log->wr_addr2);
|
||||
memcpy((u8*)ic->mux2_outdata,(u8 *)log->stream_in+(C37_MUX_BUFSIZE - log->wr_addr2),C37_FRAME_SIZE - (C37_MUX_BUFSIZE - log->wr_addr2));
|
||||
}
|
||||
else
|
||||
memcpy((u8*)&ic->mux2_outdata[log->wr_addr2],(u8 *)log->stream_in,C37_FRAME_SIZE);
|
||||
|
||||
log->wr_addr2+=C37_FRAME_SIZE-1;
|
||||
log->wr_addr2%=C37_MUX_BUFSIZE;
|
||||
ic->mux2_reg=log->wr_bits2|MUX_REG_WR|log->wr_addr2;
|
||||
log->wr_addr2++;
|
||||
log->wr_addr2%=C37_MUX_BUFSIZE;
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(log->ping_cnt<5000)
|
||||
log->ping_cnt+=LOOP_CYCLE_MS;
|
||||
else
|
||||
{
|
||||
if(log->ping_sent)
|
||||
{
|
||||
*log->ping_time=999999.0f;
|
||||
log->ping_sent=0;
|
||||
}
|
||||
|
||||
log->ping_cnt=0;
|
||||
}
|
||||
}
|
||||
126
src/c37_94.h
Normal file
126
src/c37_94.h
Normal file
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* c37_94.h
|
||||
*
|
||||
* Created on: 17-07-2019
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef C37_94_H_
|
||||
#define C37_94_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "helper.h"
|
||||
#include "mkstream.h"
|
||||
#include "eth.h"
|
||||
|
||||
#define C37_MAX_STREAMS 3
|
||||
#define C37_STREAM_BUF_SIZE 16//8
|
||||
#define C37_NUM_OF_CHANS 6
|
||||
#define C37_FRAME_SIZE sizeof(struct stream_frame)
|
||||
|
||||
#define C37_NO_DATA_SHIFT_INTERVAL 100
|
||||
|
||||
#define C37_SERIAL_MASK 0x3c
|
||||
|
||||
extern volatile u8 c37_str_bits[C37_MAX_STREAMS][C37_STREAM_BUF_SIZE];
|
||||
//args->params.bits definitions
|
||||
|
||||
#define EXT_CLK 0x00000001
|
||||
#define NO_BUF 0x00000002
|
||||
#define MUX2_ACTIVE 0x00000004
|
||||
#define MUX2_EXT_CLK 0x00000008
|
||||
|
||||
struct c37_94_logic
|
||||
{
|
||||
struct binary_io stream_en;
|
||||
struct binary_io no_sync;
|
||||
struct binary_io clr;
|
||||
struct binary_io ping;
|
||||
struct stream_frame *stream_in;
|
||||
struct stream_frame stream_out[C37_MAX_STREAMS];
|
||||
struct binary_io stream_act[C37_MAX_STREAMS];
|
||||
struct binary_io link[C37_MAX_STREAMS];
|
||||
float *stream_errs[C37_MAX_STREAMS];
|
||||
float *stream_synt_errs[C37_MAX_STREAMS];
|
||||
struct binary_io err;
|
||||
struct binary_io y_bit;
|
||||
struct binary_io err2;
|
||||
struct binary_io y_bit2;
|
||||
float *cur_shift;
|
||||
float *cur_shift2;
|
||||
float *ping_time;
|
||||
u16 s_delay;
|
||||
u16 wr_bits;
|
||||
u16 wr_bits2;
|
||||
u16 prev_addr;
|
||||
u16 prev_addr2;
|
||||
u16 wr_addr;
|
||||
u16 wr_addr2;
|
||||
u8 shift_cnt;
|
||||
u8 shift_cnt2;
|
||||
u8 out_shift_cnt;
|
||||
u16 no_data_cnt;
|
||||
u16 no_data_cnt2;
|
||||
u32 prev_pos[C37_MAX_STREAMS];
|
||||
u32 link_timeout_cnt[C37_MAX_STREAMS];
|
||||
u32 link_up_cnt[C37_MAX_STREAMS];
|
||||
u16 prev_timestamp;
|
||||
u16 ping_cnt;
|
||||
u16 ping_sent;
|
||||
u8 my_mask;
|
||||
};
|
||||
|
||||
struct c37_94_io
|
||||
{
|
||||
u32 stream_en_in;
|
||||
u32 stream_ptr_in;
|
||||
u32 no_sync_in;
|
||||
u32 clr_in;
|
||||
u32 ping_in;
|
||||
|
||||
u32 stream0_ptr_out;
|
||||
u32 stream0_act_out;
|
||||
u32 link0_out;
|
||||
u32 stream0_errs_float_out;
|
||||
|
||||
u32 stream1_ptr_out;
|
||||
u32 stream1_act_out;
|
||||
u32 link1_out;
|
||||
u32 stream1_errs_float_out;
|
||||
|
||||
u32 stream2_ptr_out;
|
||||
u32 stream2_act_out;
|
||||
u32 link2_out;
|
||||
u32 stream2_errs_float_out;
|
||||
u32 err_out;
|
||||
u32 y_bit_out;
|
||||
u32 cur_shift_float_out;
|
||||
u32 err2_out;
|
||||
u32 y2_bit_out;
|
||||
u32 cur_shift2_float_out;
|
||||
u32 stream0_synt_errs_float_out;
|
||||
u32 stream1_synt_errs_float_out;
|
||||
u32 stream2_synt_errs_float_out;
|
||||
u32 ping_float_out;
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct c37_94_params
|
||||
{
|
||||
u32 bits;
|
||||
u32 mux_chans;
|
||||
u32 sample_delay;
|
||||
u32 serial_num;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct c37_94_args
|
||||
{
|
||||
struct c37_94_io io;
|
||||
struct c37_94_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void c37_94(void *args, void *logic);
|
||||
extern int c37_94_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif
|
||||
137
src/cap_comp.c
Normal file
137
src/cap_comp.c
Normal file
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
* cap_comp.c
|
||||
*
|
||||
* Created on: 19-08-2019
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
#include "config.h"
|
||||
|
||||
#include "helper.h"
|
||||
#include "cap_comp.h"
|
||||
#include "analog_in.h"
|
||||
|
||||
int cap_comp_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct cap_comp_args *args = (struct cap_comp_args *)arguments;
|
||||
struct cap_comp_logic *log = (struct cap_comp_logic *)logic;
|
||||
/*
|
||||
if(set_float_ptr(args->io.IL1_float_in,&log->I[0]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.IL2_float_in,&log->I[1]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.IL3_float_in,&log->I[2]))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.UL1_float_in,&log->U[0]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.UL2_float_in,&log->U[1]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.UL3_float_in,&log->U[2]))
|
||||
return -1;
|
||||
*/
|
||||
if(set_pointer_in_ptr(args->io.IL1_buf_ptr_in,(u32*)&log->IL_buf[0]))
|
||||
return -1;
|
||||
if(set_pointer_in_ptr(args->io.IL2_buf_ptr_in,(u32*)&log->IL_buf[1]))
|
||||
return -1;
|
||||
if(set_pointer_in_ptr(args->io.IL3_buf_ptr_in,(u32*)&log->IL_buf[2]))
|
||||
return -1;
|
||||
|
||||
if(set_pointer_in_ptr(args->io.UL1_buf_ptr_in,(u32*)&log->UL_buf[0]))
|
||||
return -1;
|
||||
if(set_pointer_in_ptr(args->io.UL2_buf_ptr_in,(u32*)&log->UL_buf[1]))
|
||||
return -1;
|
||||
if(set_pointer_in_ptr(args->io.UL3_buf_ptr_in,(u32*)&log->UL_buf[2]))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.IL1_comp_float_out,&log->I_comp[0]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.IL2_comp_float_out,&log->I_comp[1]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.IL3_comp_float_out,&log->I_comp[2]))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.IL1_comp_prev_float_out,&log->I_comp_prev[0]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.IL2_comp_prev_float_out,&log->I_comp_prev[1]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.IL3_comp_prev_float_out,&log->I_comp_prev[2]))
|
||||
return -1;
|
||||
|
||||
if(set_pointer_in_ptr(args->io.IL1_params_ptr_in,(u32 *)&log->I_params[0]))
|
||||
return -1;
|
||||
if(set_pointer_in_ptr(args->io.IL2_params_ptr_in,(u32 *)&log->I_params[1]))
|
||||
return -1;
|
||||
if(set_pointer_in_ptr(args->io.IL3_params_ptr_in,(u32 *)&log->I_params[2]))
|
||||
return -1;
|
||||
|
||||
if(set_pointer_in_ptr(args->io.UL1_params_ptr_in,(u32 *)&log->U_params[0]))
|
||||
return -1;
|
||||
if(set_pointer_in_ptr(args->io.UL2_params_ptr_in,(u32 *)&log->U_params[1]))
|
||||
return -1;
|
||||
if(set_pointer_in_ptr(args->io.UL3_params_ptr_in,(u32 *)&log->U_params[2]))
|
||||
return -1;
|
||||
|
||||
//po staremu log->mul=args->params.k*args->params.c/2.0f*(1 / log->I_params[0]->znam_pierw);
|
||||
log->mul=args->params.k*args->params.c/2.0f*((log->U_params[0]->znam_pierw/log->U_params[0]->znam_wtor)*(log->I_params[0]->znam_wtor/log->I_params[0]->znam_pierw));
|
||||
return 0;
|
||||
}
|
||||
|
||||
void cap_comp(void *arguments, void *logic)
|
||||
{
|
||||
struct cap_comp_logic *log = (struct cap_comp_logic *)logic;
|
||||
struct cap_comp_args *args = (struct cap_comp_args *)arguments;
|
||||
u8 i;
|
||||
short snum_next = bus_an_cur_sample_num;
|
||||
short snum_cur,snum_prev;
|
||||
short snum_next2, snum_cur2,snum_prev2;
|
||||
|
||||
snum_cur = snum_next - 1;
|
||||
if(snum_cur < 0)
|
||||
snum_cur = (SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS*2)-1;
|
||||
|
||||
snum_prev = snum_cur - 1;
|
||||
if(snum_prev < 0)
|
||||
snum_prev = (SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS*2)-1;
|
||||
|
||||
snum_next2 = snum_next-SAMPLES_PER_MS;
|
||||
if(snum_next2 < 0)
|
||||
snum_next2 = (SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS*2)-SAMPLES_PER_MS;
|
||||
|
||||
snum_cur2 = snum_next2 - 1;
|
||||
if(snum_cur2 < 0)
|
||||
snum_cur2 = (SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS*2)-1;
|
||||
|
||||
snum_prev2 = snum_cur2 - 1;
|
||||
if(snum_prev2 < 0)
|
||||
snum_prev2 = (SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS*2)-1;
|
||||
|
||||
|
||||
if(args->params.bits & 0x01)
|
||||
{
|
||||
for(i=0;i<3;i++)
|
||||
{
|
||||
float u_next = (((float)(log->UL_buf[i][snum_next] - 0x7FFF)) - log->U_params[i]->offset ) * log->U_params[i]->multiplier;
|
||||
float u_prev = (((float)(log->UL_buf[i][snum_prev] - 0x7FFF)) - log->U_params[i]->offset ) * log->U_params[i]->multiplier;
|
||||
float i_cur= (((float)(log->IL_buf[i][snum_cur] - 0x7FFF)) - log->I_params[i]->offset ) * log->I_params[i]->multiplier;
|
||||
*log->I_comp[i]=i_cur-((u_next-u_prev)*log->mul);
|
||||
|
||||
u_next = (((float)(log->UL_buf[i][snum_next2] - 0x7FFF)) - log->U_params[i]->offset ) * log->U_params[i]->multiplier;
|
||||
u_prev = (((float)(log->UL_buf[i][snum_prev2] - 0x7FFF)) - log->U_params[i]->offset ) * log->U_params[i]->multiplier;
|
||||
i_cur= (((float)(log->IL_buf[i][snum_cur2] - 0x7FFF)) - log->I_params[i]->offset ) * log->I_params[i]->multiplier;
|
||||
*log->I_comp_prev[i]=i_cur-((u_next-u_prev)*log->mul);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(i=0;i<3;i++)
|
||||
{
|
||||
*log->I_comp[i]=(((float)(log->IL_buf[i][snum_cur] - 0x7FFF)) - log->I_params[i]->offset ) * log->I_params[i]->multiplier;
|
||||
*log->I_comp_prev[i]=(((float)(log->IL_buf[i][snum_cur2] - 0x7FFF)) - log->I_params[i]->offset ) * log->I_params[i]->multiplier;
|
||||
}
|
||||
}
|
||||
}
|
||||
64
src/cap_comp.h
Normal file
64
src/cap_comp.h
Normal file
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* cap_comp.h
|
||||
*
|
||||
* Created on: 19-08-2019
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef CAP_COMP_H_
|
||||
#define CAP_COMP_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
struct cap_comp_logic
|
||||
{
|
||||
float *I_comp[3];
|
||||
float *I_comp_prev[3];
|
||||
u16 *IL_buf[3];
|
||||
u16 *UL_buf[3];
|
||||
struct analog_in_params *I_params[3];
|
||||
struct analog_in_params *U_params[3];
|
||||
float mul;
|
||||
};
|
||||
|
||||
struct cap_comp_io
|
||||
{
|
||||
u32 IL1_buf_ptr_in;
|
||||
u32 IL1_params_ptr_in;
|
||||
u32 IL2_buf_ptr_in;
|
||||
u32 IL2_params_ptr_in;
|
||||
u32 IL3_buf_ptr_in;
|
||||
u32 IL3_params_ptr_in;
|
||||
u32 UL1_buf_ptr_in;
|
||||
u32 UL1_params_ptr_in;
|
||||
u32 UL2_buf_ptr_in;
|
||||
u32 UL2_params_ptr_in;
|
||||
u32 UL3_buf_ptr_in;
|
||||
u32 UL3_params_ptr_in;
|
||||
u32 IL1_comp_float_out;
|
||||
u32 IL2_comp_float_out;
|
||||
u32 IL3_comp_float_out;
|
||||
u32 IL1_comp_prev_float_out;
|
||||
u32 IL2_comp_prev_float_out;
|
||||
u32 IL3_comp_prev_float_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
|
||||
struct cap_comp_params
|
||||
{
|
||||
u32 bits;
|
||||
double k;
|
||||
double c;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct cap_comp_args
|
||||
{
|
||||
struct cap_comp_io io;
|
||||
struct cap_comp_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void cap_comp(void *args, void *logic);
|
||||
extern int cap_comp_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif
|
||||
27
src/cfg_state.c
Normal file
27
src/cfg_state.c
Normal file
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* cfg_state.c
|
||||
*
|
||||
* Created on: 22-02-2017
|
||||
* Author:
|
||||
*/
|
||||
|
||||
|
||||
#include "cfg_state.h"
|
||||
|
||||
#include "helper.h"
|
||||
|
||||
int state_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct state_args *args = (struct state_args *)arguments;
|
||||
struct state_logic *log = (struct state_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.out,&log->out_bit,&log->out_bit_mask))
|
||||
return -1;
|
||||
|
||||
if (args->params.bity)
|
||||
*log->out_bit |= log->out_bit_mask;
|
||||
else
|
||||
*log->out_bit &= ~log->out_bit_mask;
|
||||
|
||||
return 0;
|
||||
}
|
||||
38
src/cfg_state.h
Normal file
38
src/cfg_state.h
Normal file
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* cfg_state.h
|
||||
*
|
||||
* Created on: 22-02-2017
|
||||
* Author:
|
||||
*/
|
||||
|
||||
#ifndef CFG_STATE_H_
|
||||
#define CFG_STATE_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
struct state_logic
|
||||
{
|
||||
u8* out_bit;
|
||||
u8 out_bit_mask;
|
||||
};
|
||||
|
||||
|
||||
struct state_params
|
||||
{
|
||||
u32 bity;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct state_io
|
||||
{
|
||||
u32 out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct state_args
|
||||
{
|
||||
struct state_io io;
|
||||
struct state_params params;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern int state_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* CFG_STATE_H_ */
|
||||
@@ -8,6 +8,8 @@
|
||||
#ifndef CFG_VAR_H_
|
||||
#define CFG_VAR_H_
|
||||
|
||||
#include "misc.h"
|
||||
|
||||
extern const struct config_lookup_table cfg_lut[];
|
||||
extern const unsigned int cfg_lut_elements;
|
||||
|
||||
|
||||
239
src/chka.c
Normal file
239
src/chka.c
Normal file
@@ -0,0 +1,239 @@
|
||||
/*
|
||||
* chka.c
|
||||
*
|
||||
* Created on: 07-03-2018
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "chka.h"
|
||||
#include "helper.h"
|
||||
#include <math.h>
|
||||
|
||||
int chka_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct chka_args *args = (struct chka_args *)arguments;
|
||||
struct chka_logic *log = (struct chka_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.stan_bl_in,&log->stan_bl))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.test_in,&log->test))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.zezw_l1_in,&log->zezw[0]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.zezw_l2_in,&log->zezw[1]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.zezw_l3_in,&log->zezw[2]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.pl1_out,&log->P[0]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.pl2_out,&log->P[1]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.pl3_out,&log->P[2]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.p3f_out,&log->P[3]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.w3f_out,&log->W))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.z3f_out,&log->Z))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.wel1_float_in,&log->We[0]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.wel2_float_in,&log->We[1]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.wel3_float_in,&log->We[2]))
|
||||
return -1;
|
||||
|
||||
log->Wn = args->params.Wn * args->params.Wn;
|
||||
log->Wn_hyst = log->Wn * args->params.k * args->params.k;
|
||||
|
||||
log->t0=(u32)(args->params.t0*1000);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void chka(void *arguments, void *logic)
|
||||
{
|
||||
struct chka_logic *log = (struct chka_logic *)logic;
|
||||
struct chka_args *args = (struct chka_args *)arguments;
|
||||
float tplus_value;
|
||||
u8 w,i;
|
||||
|
||||
if((args->params.bity & 0x00000001) && !((args->params.bity & 0x00000002) && check_struct(&log->stan_bl))) // ON && unblocked
|
||||
{
|
||||
for(i=0;i<3;i++)
|
||||
{
|
||||
if(!check_struct(&log->zezw[i]))
|
||||
{
|
||||
log->dw.p[i]=0;
|
||||
log->dw.w[i]=0;
|
||||
log->dw.t[i]=0;
|
||||
log->dw.lp[i]=0;
|
||||
log->dw.lp2[i]=0;
|
||||
continue;
|
||||
}
|
||||
|
||||
w=0;
|
||||
|
||||
sprawdz_P(&log->dw.p[i],
|
||||
*log->We[i]>log->Wn,
|
||||
*log->We[i]<log->Wn_hyst,
|
||||
&log->dw.lp[i],
|
||||
3,3);
|
||||
|
||||
if(log->dw.p[i])
|
||||
{
|
||||
if(args->params.typ_chki == CHKA_SIL_ZAL)
|
||||
{
|
||||
tplus_value=sqrtf(*log->We[i]);
|
||||
tplus_value/=args->params.Wn;
|
||||
tplus_value=powf(tplus_value,(float)args->params.n);
|
||||
tplus_value-=1;
|
||||
|
||||
if(!tplus_value || tplus_value<0)
|
||||
tplus_value=0.0000001;
|
||||
tplus_value=args->params.tm/tplus_value;
|
||||
tplus_value*=(1000/LOOP_CYCLE_MS);
|
||||
|
||||
if(tplus_value)
|
||||
{
|
||||
tplus_value=1000000000/tplus_value;
|
||||
log->dw.t[i]+=tplus_value;
|
||||
}
|
||||
else
|
||||
log->dw.t[i]=1000000000;
|
||||
|
||||
|
||||
if(log->dw.t[i]>=1000000000)
|
||||
{
|
||||
log->dw.t[i]=1000000000;
|
||||
w=1;
|
||||
}
|
||||
else
|
||||
w=0;
|
||||
}
|
||||
else if(args->params.typ_chki == CHKA_STALA)
|
||||
{
|
||||
w=1;
|
||||
}
|
||||
else if(args->params.typ_chki == CHKA_IDMT)
|
||||
{
|
||||
tplus_value=sqrtf(*log->We[i]);
|
||||
tplus_value/=args->params.Wn;
|
||||
tplus_value=powf(tplus_value,(float)args->params.n);
|
||||
tplus_value-=1;
|
||||
|
||||
if(!tplus_value || tplus_value<0)
|
||||
tplus_value=0.0000001;
|
||||
tplus_value=args->params.tm/tplus_value;
|
||||
tplus_value*=(1000/LOOP_CYCLE_MS);
|
||||
|
||||
if(tplus_value)
|
||||
{
|
||||
tplus_value=1000000000/tplus_value;
|
||||
log->dw.t[i]+=tplus_value;
|
||||
}
|
||||
else
|
||||
log->dw.t[i]=1000000000;
|
||||
|
||||
|
||||
if(log->dw.t[i]>=1000000000)
|
||||
{
|
||||
log->dw.t[i]=1000000000;
|
||||
w=1;
|
||||
}
|
||||
else
|
||||
w=0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(args->params.typ_chki == CHKA_IDMT)
|
||||
{
|
||||
tplus_value=sqrtf(*log->We[i]);
|
||||
tplus_value/=args->params.Wn;
|
||||
tplus_value=powf(tplus_value,(float)args->params.n);
|
||||
tplus_value=(1-tplus_value);
|
||||
|
||||
if(!tplus_value || tplus_value<0)
|
||||
tplus_value=0.0000001;
|
||||
tplus_value=args->params.tm/tplus_value;
|
||||
tplus_value*=(1000/LOOP_CYCLE_MS);
|
||||
|
||||
if(tplus_value)
|
||||
{
|
||||
tplus_value=1000000000/tplus_value;
|
||||
if(tplus_value<=log->dw.t[i])
|
||||
log->dw.t[i]-=tplus_value;
|
||||
else
|
||||
log->dw.t[i]=0;
|
||||
}
|
||||
else
|
||||
log->dw.t[i]=0;
|
||||
}
|
||||
else
|
||||
log->dw.t[i]=0;
|
||||
}
|
||||
|
||||
if(w)
|
||||
{
|
||||
if(log->dw.lp2[i]>log->t0)
|
||||
log->dw.w[i]=1;
|
||||
else
|
||||
log->dw.lp2[i]+=LOOP_CYCLE_MS;
|
||||
}
|
||||
else
|
||||
{
|
||||
log->dw.lp2[i]=0;
|
||||
log->dw.w[i]=0;
|
||||
}
|
||||
}
|
||||
|
||||
if(args->params.bity & 0x00000004) // OR logic
|
||||
{
|
||||
log->dw.w[3]=log->dw.w[0]||log->dw.w[1]||log->dw.w[2];
|
||||
log->dw.p[3]=log->dw.p[0]||log->dw.p[1]||log->dw.p[2];
|
||||
}
|
||||
else
|
||||
{
|
||||
log->dw.w[3]=log->dw.w[0]&&log->dw.w[1]&&log->dw.w[2];
|
||||
log->dw.p[3]=log->dw.p[0]&&log->dw.p[1]&&log->dw.p[2];
|
||||
}
|
||||
|
||||
|
||||
if(check_struct(&log->test))
|
||||
{
|
||||
log->dw.p[0]=1;
|
||||
log->dw.p[1]=1;
|
||||
log->dw.p[2]=1;
|
||||
log->dw.p[3]=1;
|
||||
log->dw.w[0]=1;
|
||||
log->dw.w[1]=1;
|
||||
log->dw.w[2]=1;
|
||||
log->dw.w[3]=1;
|
||||
}
|
||||
|
||||
|
||||
check_and_set_struct(log->dw.p[0],&log->P[0]);
|
||||
check_and_set_struct(log->dw.p[1],&log->P[1]);
|
||||
check_and_set_struct(log->dw.p[2],&log->P[2]);
|
||||
check_and_set_struct(log->dw.p[3],&log->P[3]);
|
||||
check_and_set_struct(log->dw.w[3],&log->Z);
|
||||
|
||||
if(args->params.bity & 0x00000008) // na wylacz
|
||||
{
|
||||
check_and_set_struct(log->dw.w[3],&log->W);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
clear_struct(&log->P[0]);
|
||||
clear_struct(&log->P[1]);
|
||||
clear_struct(&log->P[2]);
|
||||
clear_struct(&log->P[3]);
|
||||
clear_struct(&log->W);
|
||||
clear_struct(&log->Z);
|
||||
}
|
||||
}
|
||||
82
src/chka.h
Normal file
82
src/chka.h
Normal file
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* chka.h
|
||||
*
|
||||
* Created on: 07-03-2018
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef CHKA_H_
|
||||
#define CHKA_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "helper.h"
|
||||
|
||||
#define CHKA_SIL_ZAL 0
|
||||
#define CHKA_STALA 1
|
||||
#define CHKA_IDMT 2
|
||||
|
||||
struct dane_wewnetrzne_chka
|
||||
{
|
||||
short lp[3]; ///<licznik filtracji pobudzen
|
||||
u32 lp2[3]; ///<licznik filtracji pobudzen
|
||||
u8 p[4];
|
||||
u8 w[4];
|
||||
u32 t[3];
|
||||
};
|
||||
|
||||
struct chka_logic
|
||||
{
|
||||
struct binary_io stan_bl;
|
||||
struct binary_io test;
|
||||
struct binary_io P[4];
|
||||
struct binary_io W;
|
||||
struct binary_io Z;
|
||||
struct binary_io zezw[3];
|
||||
|
||||
float *We[3];
|
||||
float Wn;
|
||||
float Wn_hyst;
|
||||
u32 t0;
|
||||
struct dane_wewnetrzne_chka dw;
|
||||
};
|
||||
|
||||
struct chka_io
|
||||
{
|
||||
u32 stan_bl_in;
|
||||
u32 test_in;
|
||||
u32 wel1_float_in;
|
||||
u32 zezw_l1_in;
|
||||
u32 wel2_float_in;
|
||||
u32 zezw_l2_in;
|
||||
u32 wel3_float_in;
|
||||
u32 zezw_l3_in;
|
||||
u32 pl1_out;
|
||||
u32 pl2_out;
|
||||
u32 pl3_out;
|
||||
u32 p3f_out;
|
||||
u32 z3f_out;
|
||||
u32 w3f_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct chka_params
|
||||
{
|
||||
u32 bity;
|
||||
u32 typ_chki;
|
||||
double Wn;
|
||||
double tm;
|
||||
double n;
|
||||
double t0;
|
||||
double k;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct chka_args
|
||||
{
|
||||
struct chka_io io;
|
||||
struct chka_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern int chka_initlog(void *arguments, void *logic);
|
||||
extern void chka(void *arguments, void *logic);
|
||||
|
||||
#endif /* CHKA_H_ */
|
||||
327
src/chka_ieee.c
Normal file
327
src/chka_ieee.c
Normal file
@@ -0,0 +1,327 @@
|
||||
/*
|
||||
* chka_ieee.c
|
||||
*
|
||||
* Created on: 08-08-2018
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
#include "helper.h"
|
||||
|
||||
#include "chka_ieee.h"
|
||||
#include <math.h>
|
||||
|
||||
int chka_ieee_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct chka_ieee_args *args = (struct chka_ieee_args *)arguments;
|
||||
struct chka_ieee_logic *log = (struct chka_ieee_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.stan_bl_in,&log->stan_bl))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.test_in,&log->test))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.zezw_l1_in,&log->zezw[0]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.zezw_l2_in,&log->zezw[1]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.zezw_l3_in,&log->zezw[2]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.pl1_out,&log->P[0]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.pl2_out,&log->P[1]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.pl3_out,&log->P[2]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.p3f_out,&log->P[3]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.w3f_out,&log->W))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.z3f_out,&log->Z))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.relax_out,&log->relax))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.wel1_float_in,&log->We[0]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.wel2_float_in,&log->We[1]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.wel3_float_in,&log->We[2]))
|
||||
return -1;
|
||||
|
||||
log->Wn = args->params.Wn * args->params.Wn;
|
||||
log->Wn_hyst = log->Wn * args->params.kp * args->params.kp;
|
||||
|
||||
/// predefined curves
|
||||
if(args->params.typ_chki == CHKA_INVERSE)
|
||||
{
|
||||
args->params.typ_chki=CHKA_SIL_ZAL;
|
||||
args->params.k=0.14;
|
||||
args->params.c=0;
|
||||
args->params.alfa=0.02;
|
||||
args->params.tr=0;
|
||||
}
|
||||
else if(args->params.typ_chki == CHKA_VERY_INVERSE)
|
||||
{
|
||||
args->params.typ_chki=CHKA_SIL_ZAL;
|
||||
args->params.k=13.5;
|
||||
args->params.c=0;
|
||||
args->params.alfa=1;
|
||||
args->params.tr=0;
|
||||
}
|
||||
else if(args->params.typ_chki == CHKA_EXTREMELY_INVERSE)
|
||||
{
|
||||
args->params.typ_chki=CHKA_SIL_ZAL;
|
||||
args->params.k=80;
|
||||
args->params.c=0;
|
||||
args->params.alfa=2;
|
||||
args->params.tr=0;
|
||||
}
|
||||
else if(args->params.typ_chki == CHKA_IEEE_MODERATELY_INVERSE)
|
||||
{
|
||||
args->params.typ_chki=CHKA_IDMT;
|
||||
args->params.k=0.0515;
|
||||
args->params.c=0.1140;
|
||||
args->params.alfa=0.02;
|
||||
args->params.tr=4.85;
|
||||
log->ieee_mi=1;
|
||||
}
|
||||
else if(args->params.typ_chki == CHKA_IEEE_VERY_INVERSE)
|
||||
{
|
||||
args->params.typ_chki=CHKA_IDMT;
|
||||
args->params.k=19.61;
|
||||
args->params.c=0.491;
|
||||
args->params.alfa=2;
|
||||
args->params.tr=21.6;
|
||||
}
|
||||
else if(args->params.typ_chki == CHKA_IEEE_EXTREMELY_INVERSE)
|
||||
{
|
||||
args->params.typ_chki=CHKA_IDMT;
|
||||
args->params.k=28.2;
|
||||
args->params.c=0.1217;
|
||||
args->params.alfa=2;
|
||||
args->params.tr=29.1;
|
||||
}
|
||||
///
|
||||
|
||||
if(args->params.typ_chki == CHKA_STALA)
|
||||
log->t0=(u32)(args->params.c*1000);
|
||||
else
|
||||
log->t0=(u32)(args->params.c*1000*args->params.TMS);
|
||||
|
||||
log->kTMS=args->params.TMS*args->params.k;
|
||||
log->trTMS=args->params.TMS*args->params.tr;
|
||||
|
||||
log->t_blok_max = (u32)(args->params.t_blok * 1000);
|
||||
log->t_blok = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void chka_ieee(void *arguments, void *logic)
|
||||
{
|
||||
struct chka_ieee_logic *log = (struct chka_ieee_logic *)logic;
|
||||
struct chka_ieee_args *args = (struct chka_ieee_args *)arguments;
|
||||
float tplus_value;
|
||||
u8 w,i;
|
||||
|
||||
if((args->params.bity & 0x00000001) && !((args->params.bity & 0x00000002) && check_struct(&log->stan_bl))) // ON && unblocked
|
||||
{
|
||||
log->t_blok = 0;
|
||||
|
||||
for(i=0;i<3;i++)
|
||||
{
|
||||
if(!check_struct(&log->zezw[i]))
|
||||
{
|
||||
log->dw.p[i]=0;
|
||||
log->dw.w[i]=0;
|
||||
log->dw.t[i]=0;
|
||||
log->dw.lp[i]=0;
|
||||
log->dw.lp2[i]=0;
|
||||
continue;
|
||||
}
|
||||
|
||||
w=0;
|
||||
|
||||
sprawdz_P(&log->dw.p[i],
|
||||
*log->We[i]>log->Wn,
|
||||
*log->We[i]<log->Wn_hyst,
|
||||
&log->dw.lp[i],
|
||||
3,3);
|
||||
|
||||
if(log->dw.p[i])
|
||||
{
|
||||
if(args->params.typ_chki == CHKA_SIL_ZAL)
|
||||
{
|
||||
tplus_value=sqrtf(*log->We[i]);
|
||||
tplus_value/=args->params.Wn;
|
||||
tplus_value=powf(tplus_value,(float)args->params.alfa);
|
||||
tplus_value-=1;
|
||||
|
||||
if(!tplus_value || tplus_value<0)
|
||||
tplus_value=0.0000001;
|
||||
tplus_value=log->kTMS/tplus_value;
|
||||
tplus_value*=(1000/LOOP_CYCLE_MS);
|
||||
|
||||
if(tplus_value)
|
||||
{
|
||||
tplus_value=1000000000/tplus_value;
|
||||
log->dw.t[i]+=tplus_value;
|
||||
}
|
||||
else
|
||||
log->dw.t[i]=1000000000;
|
||||
|
||||
|
||||
if(log->dw.t[i]>=1000000000)
|
||||
{
|
||||
log->dw.t[i]=1000000000;
|
||||
w=1;
|
||||
}
|
||||
else
|
||||
w=0;
|
||||
}
|
||||
else if(args->params.typ_chki == CHKA_STALA)
|
||||
{
|
||||
w=1;
|
||||
}
|
||||
else if(args->params.typ_chki == CHKA_IDMT)
|
||||
{
|
||||
tplus_value=sqrtf(*log->We[i]);
|
||||
tplus_value/=args->params.Wn;
|
||||
tplus_value=powf(tplus_value,(float)args->params.alfa);
|
||||
tplus_value-=1;
|
||||
|
||||
if(!tplus_value || tplus_value<0)
|
||||
tplus_value=0.0000001;
|
||||
tplus_value=log->kTMS/tplus_value;
|
||||
tplus_value*=(1000/LOOP_CYCLE_MS);
|
||||
|
||||
if(tplus_value)
|
||||
{
|
||||
tplus_value=1000000000/tplus_value;
|
||||
log->dw.t[i]+=tplus_value;
|
||||
}
|
||||
else
|
||||
log->dw.t[i]=1000000000;
|
||||
|
||||
|
||||
if(log->dw.t[i]>=1000000000)
|
||||
{
|
||||
log->dw.t[i]=1000000000;
|
||||
w=1;
|
||||
}
|
||||
else
|
||||
w=0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(args->params.typ_chki == CHKA_IDMT)
|
||||
{
|
||||
tplus_value=sqrtf(*log->We[i]);
|
||||
tplus_value/=args->params.Wn;
|
||||
if(log->ieee_mi)
|
||||
tplus_value=powf(tplus_value,(float)2.00);
|
||||
else
|
||||
tplus_value=powf(tplus_value,(float)args->params.alfa);
|
||||
|
||||
tplus_value=(1-tplus_value);
|
||||
|
||||
if(!tplus_value || tplus_value<0)
|
||||
tplus_value=0.0000001;
|
||||
tplus_value=log->trTMS/tplus_value;
|
||||
tplus_value*=(1000/LOOP_CYCLE_MS);
|
||||
|
||||
if(tplus_value)
|
||||
{
|
||||
tplus_value=1000000000/tplus_value;
|
||||
if(tplus_value>=(float)log->dw.t[i])
|
||||
log->dw.t[i]=0;
|
||||
else
|
||||
log->dw.t[i]-=tplus_value;
|
||||
}
|
||||
else
|
||||
log->dw.t[i]=0;
|
||||
}
|
||||
else
|
||||
log->dw.t[i]=0;
|
||||
}
|
||||
|
||||
if(w)
|
||||
{
|
||||
if(log->dw.lp2[i]>log->t0)
|
||||
log->dw.w[i]=1;
|
||||
else
|
||||
log->dw.lp2[i]+=LOOP_CYCLE_MS;
|
||||
}
|
||||
else
|
||||
{
|
||||
log->dw.lp2[i]=0;
|
||||
log->dw.w[i]=0;
|
||||
}
|
||||
}
|
||||
|
||||
if(args->params.bity & 0x00000004) // OR logic
|
||||
{
|
||||
log->dw.w[3]=log->dw.w[0]||log->dw.w[1]||log->dw.w[2];
|
||||
log->dw.p[3]=log->dw.p[0]||log->dw.p[1]||log->dw.p[2];
|
||||
}
|
||||
else
|
||||
{
|
||||
log->dw.w[3]=log->dw.w[0]&&log->dw.w[1]&&log->dw.w[2];
|
||||
log->dw.p[3]=log->dw.p[0]&&log->dw.p[1]&&log->dw.p[2];
|
||||
}
|
||||
|
||||
|
||||
if(czy_test_R() && check_struct(&log->test))
|
||||
{
|
||||
log->dw.p[0]=1;
|
||||
log->dw.p[1]=1;
|
||||
log->dw.p[2]=1;
|
||||
log->dw.p[3]=1;
|
||||
log->dw.w[0]=1;
|
||||
log->dw.w[1]=1;
|
||||
log->dw.w[2]=1;
|
||||
log->dw.w[3]=1;
|
||||
}
|
||||
|
||||
|
||||
check_and_set_struct(log->dw.p[0],&log->P[0]);
|
||||
check_and_set_struct(log->dw.p[1],&log->P[1]);
|
||||
check_and_set_struct(log->dw.p[2],&log->P[2]);
|
||||
check_and_set_struct(log->dw.p[3],&log->P[3]);
|
||||
check_and_set_struct(log->dw.w[3],&log->Z);
|
||||
|
||||
if(args->params.bity & 0x00000008) // na wylacz
|
||||
{
|
||||
check_and_set_struct(log->dw.w[3],&log->W);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (log->t_blok < log->t_blok_max)
|
||||
{
|
||||
log->t_blok += LOOP_CYCLE_MS;
|
||||
}
|
||||
else
|
||||
{
|
||||
for(i=0;i<3;i++)
|
||||
{
|
||||
log->dw.p[i]=0;
|
||||
log->dw.w[i]=0;
|
||||
log->dw.t[i]=0;
|
||||
log->dw.lp2[i]=0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
clear_struct(&log->P[0]);
|
||||
clear_struct(&log->P[1]);
|
||||
clear_struct(&log->P[2]);
|
||||
clear_struct(&log->P[3]);
|
||||
clear_struct(&log->W);
|
||||
clear_struct(&log->Z);
|
||||
}
|
||||
|
||||
check_and_set_struct(!log->dw.t[0]&&!log->dw.t[1]&&!log->dw.t[2] && !((args->params.typ_chki == CHKA_STALA)&&w),&log->relax);
|
||||
}
|
||||
101
src/chka_ieee.h
Normal file
101
src/chka_ieee.h
Normal file
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* chka_ieee.h
|
||||
*
|
||||
* Created on: 08-08-2018
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef CHKA_IEEE_H_
|
||||
#define CHKA_IEEE_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "helper.h"
|
||||
|
||||
//#include "pawel_usun_to.h"
|
||||
|
||||
#define CHKA_SIL_ZAL 0
|
||||
#define CHKA_STALA 1
|
||||
#define CHKA_IDMT 2
|
||||
#define CHKA_INVERSE 3
|
||||
#define CHKA_VERY_INVERSE 4
|
||||
#define CHKA_EXTREMELY_INVERSE 5
|
||||
#define CHKA_IEEE_MODERATELY_INVERSE 6
|
||||
#define CHKA_IEEE_VERY_INVERSE 7
|
||||
#define CHKA_IEEE_EXTREMELY_INVERSE 8
|
||||
|
||||
struct dane_wewnetrzne_chka_ieee
|
||||
{
|
||||
short lp[3]; ///<licznik filtracji pobudzen
|
||||
u32 lp2[3]; ///<licznik filtracji pobudzen
|
||||
u8 p[4];
|
||||
u8 w[4];
|
||||
u32 t[3];
|
||||
};
|
||||
|
||||
struct chka_ieee_logic
|
||||
{
|
||||
struct binary_io stan_bl;
|
||||
struct binary_io test;
|
||||
struct binary_io P[4];
|
||||
struct binary_io W;
|
||||
struct binary_io Z;
|
||||
struct binary_io zezw[3];
|
||||
struct binary_io relax;
|
||||
|
||||
float *We[3];
|
||||
float Wn;
|
||||
float Wn_hyst;
|
||||
u32 t0;
|
||||
float kTMS;
|
||||
float trTMS;
|
||||
struct dane_wewnetrzne_chka_ieee dw;
|
||||
u8 ieee_mi;
|
||||
u32 t_blok;
|
||||
u32 t_blok_max;
|
||||
};
|
||||
|
||||
struct chka_ieee_io
|
||||
{
|
||||
u32 stan_bl_in;
|
||||
u32 test_in;
|
||||
u32 wel1_float_in;
|
||||
u32 zezw_l1_in;
|
||||
u32 wel2_float_in;
|
||||
u32 zezw_l2_in;
|
||||
u32 wel3_float_in;
|
||||
u32 zezw_l3_in;
|
||||
u32 pl1_out;
|
||||
u32 pl2_out;
|
||||
u32 pl3_out;
|
||||
u32 p3f_out;
|
||||
u32 z3f_out;
|
||||
u32 w3f_out;
|
||||
u32 relax_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct chka_ieee_params
|
||||
{
|
||||
u32 bity;
|
||||
u32 typ_chki;
|
||||
double Wn;
|
||||
double tr;
|
||||
double kp;
|
||||
double TMS;
|
||||
double k;
|
||||
double c;
|
||||
double alfa;
|
||||
double t_blok;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct chka_ieee_args
|
||||
{
|
||||
struct chka_ieee_io io;
|
||||
struct chka_ieee_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern int chka_ieee_initlog(void *arguments, void *logic);
|
||||
extern void chka_ieee(void *arguments, void *logic);
|
||||
|
||||
#endif /* CHKA_IEEE_H_ */
|
||||
|
||||
64
src/cnt.c
Normal file
64
src/cnt.c
Normal file
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* cnt.c
|
||||
*
|
||||
* Created on: 10-06-2019
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "helper.h"
|
||||
#include "cnt.h"
|
||||
|
||||
float cnt_mem[8] = {0,0,0,0,0,0,0,0};
|
||||
|
||||
int cnt_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct cnt_args *args = (struct cnt_args *)arguments;
|
||||
struct cnt_logic *log = (struct cnt_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.Pwe_in,&log->Pwe,&log->Pwe_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.Kas_in,&log->Kas,&log->Kas_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.Pwy_out,&log->Pwy,&log->Pwy_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.Licznik_float_out,&log->licznik))
|
||||
return -1;
|
||||
|
||||
log->on = args->params.bity & 0x0001;
|
||||
log->Wr = args->params.Wr_; // przepisanie wartosci progowej PKW
|
||||
log->id = args->params.id & 0x0007;
|
||||
|
||||
// Semaphore_post(spi_semaphore);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void cnt(void *arguments, void *logic)
|
||||
{
|
||||
struct cnt_logic *log = (struct cnt_logic *)logic;
|
||||
struct cnt_args *args = (struct cnt_args *)arguments;
|
||||
|
||||
if(log->on) // jesli funkcja przekaznika aktywna
|
||||
{
|
||||
if (*log->Kas & log->Kas_bit_mask)
|
||||
cnt_mem[log->id]=args->params.kas;
|
||||
|
||||
if (*log->Pwe & log->Pwe_bit_mask)
|
||||
cnt_mem[log->id] += 1.0;
|
||||
|
||||
check_and_set_mask(cnt_mem[log->id]>=log->Wr,log->Pwy,log->Pwy_bit_mask);
|
||||
|
||||
*log->licznik = cnt_mem[log->id];
|
||||
}
|
||||
else
|
||||
*log->licznik = 0;
|
||||
}
|
||||
|
||||
57
src/cnt.h
Normal file
57
src/cnt.h
Normal file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* cnt.h
|
||||
*
|
||||
* Created on: 11-06-2019
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef CNT_H_
|
||||
#define CNT_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
extern float cnt_mem[8];
|
||||
|
||||
struct cnt_logic
|
||||
{
|
||||
u8 *Pwe;
|
||||
u8 Pwe_bit_mask;
|
||||
u8 *Kas;
|
||||
u8 Kas_bit_mask;
|
||||
u8 *Pwy;
|
||||
u8 Pwy_bit_mask;
|
||||
|
||||
float *licznik;
|
||||
|
||||
u16 Wr; ///< wartosc progowa sygnalizacji
|
||||
u8 on; ///< wartosc nastawy aktywnosci PKWa 1- aktywny
|
||||
u8 id;
|
||||
};
|
||||
|
||||
struct cnt_io
|
||||
{
|
||||
u32 Pwe_in;
|
||||
u32 Kas_in;
|
||||
u32 Pwy_out;
|
||||
u32 Licznik_float_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct cnt_params
|
||||
{
|
||||
u32 bity; ///< nastawy bitowe;
|
||||
double Wr_; ///< wartosc progowa sygnalizacji
|
||||
double kas; // wartosc przepisywana przy kasowaniu
|
||||
u32 id; // id pkw od 0..7
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct cnt_args
|
||||
{
|
||||
struct cnt_io io;
|
||||
struct cnt_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void cnt(void *args, void *logic);
|
||||
extern int cnt_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* CNT_H_ */
|
||||
@@ -8,8 +8,10 @@
|
||||
#ifndef COMM_H_
|
||||
#define COMM_H_
|
||||
|
||||
/*
|
||||
#include <ti/ipc/MessageQ.h>
|
||||
#include <ti/sysbios/hal/Timer.h>
|
||||
*/
|
||||
#include "tdefs.h"
|
||||
|
||||
#define DSP_CMD_INIT_COMM 0x01
|
||||
|
||||
84
src/comp_s.c
Normal file
84
src/comp_s.c
Normal file
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* comp_s.c
|
||||
*
|
||||
* Created on: 08-05-2014
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
#include "helper.h"
|
||||
#include "analog_in.h"
|
||||
|
||||
#include "comp_s.h"
|
||||
|
||||
int comp_s_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct comp_s_args *args = (struct comp_s_args *)arguments;
|
||||
struct comp_s_logic *log = (struct comp_s_logic *)logic;
|
||||
struct analog_in_params *an_params;
|
||||
|
||||
u32 *an_params_ptr;
|
||||
u32 *buf_ptr;
|
||||
|
||||
if(set_bit_ptr(args->io.P_out,&log->P,&log->P_bit_no))
|
||||
return -1;
|
||||
|
||||
an_params_ptr = (u32 *)(log_manager.nets_data + (args->io.param_an_ptr_in >> 3));
|
||||
if((u8*)an_params_ptr > (log_manager.nets_data+sizeof(log_manager.nets_data) - sizeof(void *)))
|
||||
return -1;
|
||||
|
||||
if(!*an_params_ptr) // param in not connected or wrong elements order (analog_in should be run before)
|
||||
return -1;
|
||||
|
||||
an_params=(struct analog_in_params *)*an_params_ptr;
|
||||
|
||||
log->an_params=an_params;
|
||||
|
||||
buf_ptr = (u32 *)(log_manager.nets_data + (args->io.buf_u16_ptr_in >> 3));
|
||||
if((u8*)buf_ptr > (log_manager.nets_data+sizeof(log_manager.nets_data) - sizeof(void *)))
|
||||
return -1;
|
||||
|
||||
if(!*buf_ptr) // param in not connected or wrong elements order (analog_in should be run before)
|
||||
return -1;
|
||||
|
||||
log->buf_ptr=(u16*)*buf_ptr;
|
||||
|
||||
log->nast_.limit1_ = args->params.Wr_ * args->params.mnoz_; // wyliczenie wartosci rozruchowej algorytmu
|
||||
log->nast_.l_powt_pob = args->params.l_powt_pob;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void comp_s(void *arguments, void *logic)
|
||||
{
|
||||
// struct comp_s_args *args = (struct comp_s_args *)arguments;
|
||||
struct comp_s_logic *log = (struct comp_s_logic *)logic;
|
||||
|
||||
short i,i1,i2;
|
||||
float pr;
|
||||
|
||||
short pobud = 0;
|
||||
i2 = bus_an_cur_sample_num;
|
||||
|
||||
for (i=0;i<(SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS);i++)
|
||||
{
|
||||
i1 = i2 - i;
|
||||
if(i1<0)
|
||||
i1 += (SAMPLES_PER_MS*MAIN_FREQ_PERIOD_MS*2);
|
||||
pr = (float)(log->buf_ptr[i1] - 0x7FFF);
|
||||
pr*=log->an_params->multiplier;
|
||||
|
||||
if (pr < 0) pr = 0 - pr;
|
||||
|
||||
if (pr > log->nast_.limit1_)
|
||||
pobud ++;
|
||||
|
||||
}
|
||||
if (pobud >= log->nast_.l_powt_pob)
|
||||
log->pob = 1;
|
||||
else
|
||||
log->pob = 0;
|
||||
|
||||
check_and_set(log->pob,log->P,log->P_bit_no);
|
||||
}
|
||||
59
src/comp_s.h
Normal file
59
src/comp_s.h
Normal file
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* comp_s.h
|
||||
*
|
||||
* Created on: 01-04-2022
|
||||
* Author: Pawel
|
||||
*/
|
||||
|
||||
#ifndef COMP_S_H_
|
||||
#define COMP_S_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
//#include "pawel_usun_to.h"
|
||||
|
||||
struct nastawy_przeliczone_comp_s
|
||||
{
|
||||
float limit1_; ///< wartosc rozruchowa
|
||||
short l_powt_pob;
|
||||
};
|
||||
|
||||
struct comp_s_logic
|
||||
{
|
||||
u16 *buf_ptr;
|
||||
struct analog_in_params *an_params;
|
||||
|
||||
u8 *P;
|
||||
u8 P_bit_no;
|
||||
|
||||
struct nastawy_przeliczone_comp_s nast_;
|
||||
u8 pob;
|
||||
};
|
||||
|
||||
struct comp_s_io
|
||||
{
|
||||
u32 buf_u16_ptr_in;
|
||||
u32 param_an_ptr_in;
|
||||
u32 P_out;
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct comp_s_params
|
||||
{
|
||||
double Wr_; ///< wartosc nastawy rozruchowej przekaznika w krotnosciach wartosci znamionowej
|
||||
//double kp_; ///< wartosc nastawy wspolczynnika powrotu
|
||||
double mnoz_; ///< mnoznik wart_roz
|
||||
u32 l_powt_pob;
|
||||
//u32 l_powt_odp;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct comp_s_args
|
||||
{
|
||||
struct comp_s_io io;
|
||||
struct comp_s_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void comp_s(void *args, void *logic);
|
||||
extern int comp_s_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* COMP_S_H_ */
|
||||
28
src/const_flt.c
Normal file
28
src/const_flt.c
Normal file
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* counter.c
|
||||
*
|
||||
* Created on: 04-06-2018
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "helper.h"
|
||||
#include "const_flt.h"
|
||||
|
||||
int const_flt_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct const_flt_args *args = (struct const_flt_args *)arguments;
|
||||
struct const_flt_logic *log = (struct const_flt_logic *)logic;
|
||||
|
||||
if(set_float_ptr(args->io.out_float_out,&log->out))
|
||||
return -1;
|
||||
|
||||
*log->out=(float)args->params.val;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
37
src/const_flt.h
Normal file
37
src/const_flt.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* const_flt.h
|
||||
*
|
||||
* Created on: 04-06-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef CONST_FLT_H_
|
||||
#define CONST_FLT_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
struct const_flt_logic
|
||||
{
|
||||
float *out;
|
||||
};
|
||||
|
||||
struct const_flt_io
|
||||
{
|
||||
u32 out_float_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct const_flt_params
|
||||
{
|
||||
double val;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct const_flt_args
|
||||
{
|
||||
struct const_flt_io io;
|
||||
struct const_flt_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern int const_flt_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* CONST_FLT_H_ */
|
||||
46
src/counter.c
Normal file
46
src/counter.c
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* counter.c
|
||||
*
|
||||
* Created on: 04-06-2018
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "helper.h"
|
||||
#include "counter.h"
|
||||
|
||||
int counter_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct counter_args *args = (struct counter_args *)arguments;
|
||||
struct counter_logic *log = (struct counter_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.in_in,&log->in))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.clr_in,&log->clr))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.out_float_out,&log->out))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void counter(void *arguments, void *logic)
|
||||
{
|
||||
struct counter_logic *log = (struct counter_logic *)logic;
|
||||
|
||||
if(!check_struct(&log->clr))
|
||||
{
|
||||
if(check_struct(&log->in))
|
||||
log->cnt++;
|
||||
}
|
||||
else
|
||||
log->cnt=0;
|
||||
|
||||
*log->out=(float)log->cnt;
|
||||
}
|
||||
42
src/counter.h
Normal file
42
src/counter.h
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* counter.h
|
||||
*
|
||||
* Created on: 04-06-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef COUNTER_H_
|
||||
#define COUNTER_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
struct counter_logic
|
||||
{
|
||||
struct binary_io in;
|
||||
struct binary_io clr;
|
||||
u32 cnt;
|
||||
float *out;
|
||||
};
|
||||
|
||||
struct counter_io
|
||||
{
|
||||
u32 in_in;
|
||||
u32 clr_in;
|
||||
u32 out_float_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct counter_params
|
||||
{
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct counter_args
|
||||
{
|
||||
struct counter_io io;
|
||||
struct counter_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void counter(void *args, void *logic);
|
||||
extern int counter_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* COUNTER_H_ */
|
||||
219
src/ddr.c
Normal file
219
src/ddr.c
Normal file
@@ -0,0 +1,219 @@
|
||||
/*
|
||||
* ddr.c
|
||||
*
|
||||
* Created on: 26-05-2014
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include <ti/ipc/Notify.h>
|
||||
#include <string.h>
|
||||
#include "ddr.h"
|
||||
#include "ddr_drv.h"
|
||||
#include "rec_an.h"
|
||||
#include "rec_bin.h"
|
||||
#include "comm.h"
|
||||
#include "misc.h"
|
||||
#include "config.h"
|
||||
|
||||
#pragma LOCATION(ddr_bank0,0xc4000000) // @ non-cached memory above 128MB
|
||||
volatile u8 ddr_bank0[DDR_REG_BANK_SIZE];
|
||||
#pragma LOCATION(ddr_bank1,0xc4100000) // @ non-cached memory above 128MB
|
||||
volatile u8 ddr_bank1[DDR_REG_BANK_SIZE];
|
||||
#pragma LOCATION(ddr_bank2,0xc4200000) // @ non-cached memory above 128MB
|
||||
volatile u8 ddr_bank2[DDR_REG_BANK_SIZE];
|
||||
#pragma LOCATION(ddr_bank3,0xc4300000) // @ non-cached memory above 128MB
|
||||
volatile u8 ddr_bank3[DDR_REG_BANK_SIZE];
|
||||
|
||||
volatile struct ddr_reg_inf ddr_regs = { .cur_reg_bank = 0,
|
||||
.bank[0].data = (void*) ddr_bank0,
|
||||
.bank[0].state = BANK_BUFFERING,
|
||||
.bank[0].addr_offset = 0,
|
||||
.bank[0].pre_trigger_cnt = 0,
|
||||
.bank[0].post_trigger_cnt = 0,
|
||||
.bank[0].total_cnt = 0,
|
||||
.bank[1].data = (void*) ddr_bank1,
|
||||
.bank[2].data = (void*) ddr_bank2,
|
||||
.bank[3].data = (void*) ddr_bank3,
|
||||
};
|
||||
|
||||
int ddr_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct ddr_args *args = (struct ddr_args *)arguments;
|
||||
struct ddr_logic *log = (struct ddr_logic *)logic;
|
||||
|
||||
log->trigger_ptr = log_manager.nets_data + (args->io.trigger_in >> 3);
|
||||
log->trigger_bit_no = args->io.trigger_in & 0x07;
|
||||
if(log->trigger_ptr >= (log_manager.nets_data+sizeof(log_manager.nets_data)))
|
||||
return -1;
|
||||
|
||||
switch((enum ddr_fs)args->params.f_sampling)
|
||||
{
|
||||
case Fs_100Hz:
|
||||
log->decimation=10/LOOP_CYCLE_MS;
|
||||
break;
|
||||
case Fs_50Hz:
|
||||
log->decimation=20/LOOP_CYCLE_MS;
|
||||
break;
|
||||
case Fs_10Hz:
|
||||
log->decimation=100/LOOP_CYCLE_MS;
|
||||
break;
|
||||
case Fs_5Hz:
|
||||
log->decimation=200/LOOP_CYCLE_MS;
|
||||
break;
|
||||
case Fs_1Hz:
|
||||
log->decimation=1000/LOOP_CYCLE_MS;
|
||||
break;
|
||||
case Fs_0_5Hz:
|
||||
log->decimation=2000/LOOP_CYCLE_MS;
|
||||
break;
|
||||
case Fs_0_1Hz:
|
||||
log->decimation=10000/LOOP_CYCLE_MS;
|
||||
break;
|
||||
default:
|
||||
log->decimation=10/LOOP_CYCLE_MS;
|
||||
break;
|
||||
}
|
||||
|
||||
log->pre_trigger_samples = args->params.pre_trigger_time / log->decimation;
|
||||
if(args->params.pre_trigger_time)
|
||||
log->pre_trigger_samples++;
|
||||
|
||||
log->post_trigger_samples = args->params.post_trigger_time / log->decimation;
|
||||
if(args->params.post_trigger_time)
|
||||
log->post_trigger_samples++;
|
||||
|
||||
log->max_reg_samples = args->params.max_reg_time / log->decimation;
|
||||
if(args->params.max_reg_time)
|
||||
log->max_reg_samples++;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ddr(void *arguments, void *logic)
|
||||
{
|
||||
struct ddr_logic *log = (struct ddr_logic *)logic;
|
||||
//struct ddr_args *args = (struct ddr_args *)arguments;
|
||||
struct rec_an_logic *an_log;
|
||||
struct rec_bin_logic *bin_log;
|
||||
u16 sample_buf[(MAX_SAMPLE_SIZE/sizeof(u16)) + 8];
|
||||
int i,bit_cnt=0,pos=0;
|
||||
u8 new_sample=0;
|
||||
|
||||
if(ddr_drv_log_ptr == NULL) // ddr driver not initialized?
|
||||
return;
|
||||
|
||||
if(!log->decimation_cnt--)
|
||||
{
|
||||
log->decimation_cnt=log->decimation;
|
||||
new_sample=1;
|
||||
}
|
||||
|
||||
switch(ddr_regs.bank[ddr_regs.cur_reg_bank].state)
|
||||
{
|
||||
case BANK_BUFFERING:
|
||||
if(*log->trigger_ptr & (1<<log->trigger_bit_no))
|
||||
{
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].state=BANK_TRIGGERED;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].tr_time=(timesync_bits & CFG_TSYNC_USE_SWCLK)?cur_time_sw.tv_sec:cur_time.tv_sec;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].tr_time_ms=(timesync_bits & CFG_TSYNC_USE_SWCLK)?cur_time_sw.tv_usec:cur_time.tv_usec;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].sample_size=ddr_drv_log_ptr->sample_size;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].an_count=ddr_drv_log_ptr->an_count;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].bin_count=ddr_drv_log_ptr->bin_count;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].post_trigger_cnt=0;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].trigger_offset=ddr_regs.bank[ddr_regs.cur_reg_bank].addr_offset;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].total_cnt=ddr_regs.bank[ddr_regs.cur_reg_bank].pre_trigger_cnt;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(new_sample && ddr_regs.bank[ddr_regs.cur_reg_bank].pre_trigger_cnt<log->pre_trigger_samples)
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].pre_trigger_cnt++;
|
||||
}
|
||||
break;
|
||||
|
||||
case BANK_TRIGGERED:
|
||||
if(new_sample)
|
||||
{
|
||||
if(ddr_regs.bank[ddr_regs.cur_reg_bank].total_cnt++>=log->max_reg_samples || ddr_regs.bank[ddr_regs.cur_reg_bank].post_trigger_cnt>=log->post_trigger_samples)
|
||||
{
|
||||
// send notify to ARM
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].state=BANK_FILLED;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].decimation=log->decimation;
|
||||
ddr_regs.cur_reg_bank++;
|
||||
ddr_regs.cur_reg_bank%=DDR_MAX_REG_BANKS;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].state=BANK_BUFFERING;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].addr_offset=0;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].post_trigger_cnt=0;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].pre_trigger_cnt=0;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].trigger_offset=0;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].total_cnt=0;
|
||||
logman_notify|=LOGMAN_NOTIFY_NEW_DDR;
|
||||
// Notify_sendEvent(notify.remoteProcId,notify.lineId,notify.eventId, NOTIFY_NEW_DDR_REG, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(*log->trigger_ptr & (1<<log->trigger_bit_no))
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].post_trigger_cnt=0;
|
||||
else
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].post_trigger_cnt++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case BANK_EMPTY:
|
||||
case BANK_FILLED:
|
||||
default:
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].state=BANK_BUFFERING;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].addr_offset=0;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].post_trigger_cnt=0;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].pre_trigger_cnt=0;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].trigger_offset=0;
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].total_cnt=0;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
// will be overwritten by ARM
|
||||
// *((u32 *)&sample_buf[0]) = 0; // sample number 1..n
|
||||
// *((u32 *)&sample_buf[2]) = 0; // time stamp 0..n*1ms @ 1 kHz
|
||||
//
|
||||
if(new_sample)
|
||||
{
|
||||
|
||||
pos = 4;
|
||||
|
||||
for(i=0;i<ddr_drv_log_ptr->an_count;i++)
|
||||
{
|
||||
an_log = (struct rec_an_logic *)log_manager.log_element[ddr_drv_log_ptr->element_num[i] & 0x3FFF].fun_log_ptr;
|
||||
sample_buf[pos]=*an_log->in_ptr;
|
||||
pos++;
|
||||
}
|
||||
|
||||
sample_buf[pos]=0;
|
||||
|
||||
for(;i<(ddr_drv_log_ptr->an_count+ddr_drv_log_ptr->bin_count);i++)
|
||||
{
|
||||
bin_log = (struct rec_bin_logic *)log_manager.log_element[ddr_drv_log_ptr->element_num[i] & 0x3FFF].fun_log_ptr;
|
||||
|
||||
if(*bin_log->in_ptr & bin_log->in_bit_mask)
|
||||
sample_buf[pos]|=(1<<(bit_cnt%16));
|
||||
|
||||
if(!(++bit_cnt%16) && bit_cnt)
|
||||
{
|
||||
pos++;
|
||||
sample_buf[pos]=0;
|
||||
}
|
||||
}
|
||||
|
||||
if(ddr_regs.bank[ddr_regs.cur_reg_bank].addr_offset + ddr_drv_log_ptr->sample_size > DDR_REG_BANK_SIZE)
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].addr_offset=0;
|
||||
|
||||
memcpy((u8*)ddr_regs.bank[ddr_regs.cur_reg_bank].data+ddr_regs.bank[ddr_regs.cur_reg_bank].addr_offset,(void *)sample_buf,ddr_drv_log_ptr->sample_size);
|
||||
ddr_regs.bank[ddr_regs.cur_reg_bank].addr_offset+=ddr_drv_log_ptr->sample_size;
|
||||
}
|
||||
}
|
||||
102
src/ddr.h
Normal file
102
src/ddr.h
Normal file
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
* ddr.h
|
||||
*
|
||||
*
|
||||
* Created on: 26-05-2017
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
#ifndef DDR_H_
|
||||
#define DDR_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
#define MAX_SAMPLE_SIZE 512
|
||||
|
||||
|
||||
#define DDR_REG_BANK_SIZE 0x100000
|
||||
|
||||
// bank states
|
||||
#define BANK_EMPTY 0x00
|
||||
#define BANK_BUFFERING 0x01
|
||||
#define BANK_TRIGGERED 0x02
|
||||
#define BANK_FILLED 0x03
|
||||
|
||||
#define DDR_MAX_REG_BANKS 4
|
||||
|
||||
struct ddr_reg_data
|
||||
{
|
||||
u8 *data;
|
||||
u8 state;
|
||||
u32 addr_offset;
|
||||
u32 pre_trigger_cnt;
|
||||
u32 post_trigger_cnt;
|
||||
u32 total_cnt;
|
||||
u32 trigger_offset;
|
||||
u32 tr_time;
|
||||
u32 tr_time_ms;
|
||||
u16 sample_size;
|
||||
u8 an_count;
|
||||
u16 bin_count;
|
||||
u16 decimation;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct ddr_reg_inf
|
||||
{
|
||||
u8 cur_reg_bank;
|
||||
struct ddr_reg_data bank[DDR_MAX_REG_BANKS];
|
||||
}__attribute__((__packed__));
|
||||
|
||||
enum ddr_fs
|
||||
{
|
||||
Fs_100Hz,
|
||||
Fs_50Hz,
|
||||
Fs_10Hz,
|
||||
Fs_5Hz,
|
||||
Fs_1Hz,
|
||||
Fs_0_5Hz,
|
||||
Fs_0_1Hz
|
||||
};
|
||||
|
||||
extern volatile u8 ddr_bank0[DDR_REG_BANK_SIZE];
|
||||
extern volatile u8 ddr_bank1[DDR_REG_BANK_SIZE];
|
||||
extern volatile u8 ddr_bank2[DDR_REG_BANK_SIZE];
|
||||
extern volatile u8 ddr_bank3[DDR_REG_BANK_SIZE];
|
||||
|
||||
extern volatile struct ddr_reg_inf ddr_regs;
|
||||
|
||||
struct ddr_logic
|
||||
{
|
||||
u8 *trigger_ptr;
|
||||
u8 trigger_bit_no;
|
||||
u32 decimation;
|
||||
u32 decimation_cnt;
|
||||
u32 pre_trigger_samples;
|
||||
u32 post_trigger_samples;
|
||||
u32 max_reg_samples;
|
||||
};
|
||||
|
||||
struct ddr_io
|
||||
{
|
||||
u32 trigger_in;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct ddr_params
|
||||
{
|
||||
u32 pre_trigger_time;
|
||||
u32 post_trigger_time;
|
||||
u32 max_reg_time;
|
||||
u32 f_sampling;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct ddr_args
|
||||
{
|
||||
struct ddr_io io;
|
||||
struct ddr_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern int ddr_initlog(void *args, void *logic);
|
||||
extern void ddr(void *args, void *logic);
|
||||
|
||||
#endif /* DDR_H_ */
|
||||
98
src/ddr_drv.c
Normal file
98
src/ddr_drv.c
Normal file
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* ddr_drv.c
|
||||
*
|
||||
* Created on: 26-05-2017
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include <string.h>
|
||||
#include "rec_bin.h"
|
||||
#include "rec_float.h"
|
||||
#include "ddr.h"
|
||||
#include "ddr_drv.h"
|
||||
|
||||
struct ddr_drv_logic *ddr_drv_log_ptr = NULL;
|
||||
|
||||
int ddr_drv_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct ddr_drv_logic *log = (struct ddr_drv_logic *)logic;
|
||||
int i;
|
||||
|
||||
log->an_count=0;
|
||||
log->bin_count=0;
|
||||
|
||||
for(i=0;i<MAX_LOG_ELEMENTS;i++) /* find analog channels */
|
||||
{
|
||||
struct rec_float_args *args;
|
||||
|
||||
args = (struct rec_float_args *)log_manager.log_element[i].fun_args_ptr;
|
||||
|
||||
if((log_manager.log_element[i].flags & FUNCTION_IS_REC_FLOAT) && (args->params.bits & REC_CHAN_ENABLED_DDR))
|
||||
{
|
||||
if((u8 *)&log->element_num[log->an_count]>(u8 *)(log_manager.buf+sizeof(log_manager.buf)-sizeof(u16)))
|
||||
return -1;
|
||||
|
||||
log->element_num[log->an_count]=i|((log_manager.log_element[i].flags & FUNCTION_IS_REC_FLOAT)?ELEMENT_IS_REC_FLOAT:0);
|
||||
log->an_count++;
|
||||
}
|
||||
}
|
||||
|
||||
log->sample_size=log->an_count * sizeof(u16);
|
||||
|
||||
for(i=0;i<MAX_LOG_ELEMENTS;i++) /* find binary channels */
|
||||
{
|
||||
struct rec_bin_args *args;
|
||||
|
||||
args = (struct rec_bin_args *)log_manager.log_element[i].fun_args_ptr;
|
||||
|
||||
if((log_manager.log_element[i].flags & FUNCTION_IS_REC_BIN) && (args->params.bits & REC_CHAN_ENABLED_DDR))
|
||||
{
|
||||
if((u8 *)&log->element_num[log->an_count+log->bin_count]>(u8 *)(log_manager.buf+sizeof(log_manager.buf)-sizeof(u16)))
|
||||
return -1;
|
||||
|
||||
log->element_num[log->an_count+log->bin_count]=i;
|
||||
log->bin_count++;
|
||||
}
|
||||
}
|
||||
|
||||
log->sample_size+=((log->bin_count/16)*2);
|
||||
if(log->bin_count%16)
|
||||
log->sample_size+=2;
|
||||
|
||||
log->sample_size+=8; // sample number && time stamp
|
||||
|
||||
if(log->sample_size>MAX_SAMPLE_SIZE)
|
||||
return -1;
|
||||
|
||||
for(i=0;i<MAX_LOG_ELEMENTS;i++)
|
||||
{
|
||||
if(log_manager.log_element[i].flags & FUNCTION_IS_DDR)
|
||||
{
|
||||
// struct ddr_args *args;
|
||||
struct ddr_logic *dlog;
|
||||
|
||||
// args = (struct ddr_args *)log_manager.log_element[i].fun_args_ptr;
|
||||
dlog = (struct ddr_logic *)log_manager.log_element[i].fun_log_ptr;
|
||||
|
||||
if(dlog->max_reg_samples > ((DDR_REG_BANK_SIZE / log->sample_size) - 2))
|
||||
dlog->max_reg_samples = ((DDR_REG_BANK_SIZE / log->sample_size) - 2);
|
||||
//return -1;
|
||||
|
||||
if((dlog->post_trigger_samples + dlog->pre_trigger_samples) > dlog->max_reg_samples)
|
||||
{
|
||||
dlog->post_trigger_samples=dlog->max_reg_samples/2;
|
||||
dlog->pre_trigger_samples=dlog->max_reg_samples/2;
|
||||
// return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ddr_drv_log_ptr=(struct ddr_drv_logic *)logic;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
44
src/ddr_drv.h
Normal file
44
src/ddr_drv.h
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* ddr_drv.h
|
||||
*
|
||||
*
|
||||
* Created on: 26-05-2017
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
#ifndef DDR_DRV_H_
|
||||
#define DDR_DRV_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "ddr.h"
|
||||
|
||||
#define ELEMENT_IS_REC_FLOAT 0x8000
|
||||
|
||||
extern struct ddr_drv_logic *ddr_drv_log_ptr;
|
||||
|
||||
struct ddr_drv_logic
|
||||
{
|
||||
u16 an_count;
|
||||
u16 bin_count;
|
||||
u16 sample_size;
|
||||
u16 element_num[];
|
||||
};
|
||||
|
||||
struct ddr_drv_io
|
||||
{
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct ddr_drv_params
|
||||
{
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct ddr_drv_args
|
||||
{
|
||||
struct ddr_drv_io io;
|
||||
struct ddr_drv_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern int ddr_drv_initlog(void *args, void *logic);
|
||||
|
||||
#endif /* DDR_DRV_H_ */
|
||||
118
src/dec_month.c
Normal file
118
src/dec_month.c
Normal file
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* klapacz.c
|
||||
*
|
||||
* Created on: 07-04-2014
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "helper.h"
|
||||
#include "dec_month.h"
|
||||
#include <time.h>
|
||||
//volatile struct klapacz_args tkl;
|
||||
|
||||
int dec_month_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct dec_month_args *args = (struct dec_month_args *)arguments;
|
||||
struct dec_month_logic *log = (struct dec_month_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.sty,&log->mon[0]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.lut,&log->mon[1]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.marz,&log->mon[2]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.kwie,&log->mon[3]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.maj,&log->mon[4]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.czer,&log->mon[5]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.lip,&log->mon[6]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.sier,&log->mon[7]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.wrz,&log->mon[8]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.paz,&log->mon[9]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.lis,&log->mon[10]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.gru,&log->mon[11]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.zima,&log->zima))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.lato,&log->lato))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern void my_gmtime(const uint32_t *timer, struct tm *timep);
|
||||
extern uint8_t isindst(struct tm *tb, uint8_t cest_cet_n);
|
||||
|
||||
void dec_month(void *arguments, void *logic)
|
||||
{
|
||||
// struct dec_month_args *args = (struct dec_month_args *)arguments;
|
||||
struct dec_month_logic *log = (struct dec_month_logic *)logic;
|
||||
struct tm tim;
|
||||
u8 i;
|
||||
|
||||
my_gmtime((const uint32_t*)&cur_time.tv_sec,&tim);
|
||||
|
||||
for(i=0;i<12;i++)
|
||||
check_and_set_struct(tim.tm_mon==i,&log->mon[i]);
|
||||
|
||||
if(isindst(&tim,0))
|
||||
{
|
||||
set_struct(&log->lato);
|
||||
clear_struct(&log->zima);
|
||||
}
|
||||
else
|
||||
{
|
||||
set_struct(&log->zima);
|
||||
clear_struct(&log->lato);
|
||||
}
|
||||
/*u8 day_of_week;
|
||||
|
||||
day_of_week = (cur_time.tv_sec / 86400 + 4)%7;
|
||||
|
||||
check_and_set_struct((day_of_week==0),&log->niedz);
|
||||
check_and_set_struct((day_of_week==1),&log->pon);
|
||||
check_and_set_struct((day_of_week==2),&log->wt);
|
||||
check_and_set_struct((day_of_week==3),&log->sr);
|
||||
check_and_set_struct((day_of_week==4),&log->czw);
|
||||
check_and_set_struct((day_of_week==5),&log->pt);
|
||||
check_and_set_struct((day_of_week==6),&log->sob);
|
||||
check_and_set_struct((day_of_week==7),&log->niedz);
|
||||
*/
|
||||
|
||||
/*
|
||||
local function GetMonth(seconds)
|
||||
local dayduration,year = 3600*24
|
||||
local days={31,0,31,30,31,30,31,31,30,31,30,31}
|
||||
for i=1970,10000 do -- For some reason too lazy to use while
|
||||
local yeardays = i%4 == 0 and i%100 ~= 0 and 366 or 365
|
||||
local yearduration = dayduration * yeardays
|
||||
if yearduration < seconds then
|
||||
seconds = seconds - yearduration
|
||||
else
|
||||
year = i break
|
||||
end
|
||||
end
|
||||
days[2]=(year%4==0) and 29 or 28
|
||||
seconds = seconds%(365*24*3600)
|
||||
for i=1,12 do
|
||||
if seconds>days[i]*dayduration then
|
||||
seconds=seconds-days[i]*dayduration
|
||||
else
|
||||
return --i + year*12 <-- If you want a unique ID
|
||||
end
|
||||
end
|
||||
end
|
||||
*/
|
||||
|
||||
|
||||
}
|
||||
57
src/dec_month.h
Normal file
57
src/dec_month.h
Normal file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* klapacz.h
|
||||
*
|
||||
* Created on: 07-04-2014
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef DEC_MONTH_H_
|
||||
#define DEC_MONTH_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
struct dec_month_logic
|
||||
{
|
||||
|
||||
struct binary_io mon[12]; // one bit
|
||||
|
||||
struct binary_io zima; // one bit
|
||||
struct binary_io lato; // one bit
|
||||
|
||||
};
|
||||
|
||||
struct dec_month_io
|
||||
{
|
||||
u32 sty; // one bit
|
||||
u32 lut; // one bit
|
||||
u32 marz; // one bit
|
||||
u32 kwie; // one bit
|
||||
u32 maj; // one bit
|
||||
u32 czer; // one bit
|
||||
u32 lip; // one bit
|
||||
u32 sier; // one bit
|
||||
u32 wrz; // one bit
|
||||
u32 paz; // one bit
|
||||
u32 lis; // one bit
|
||||
u32 gru; // one bit
|
||||
|
||||
u32 zima; // one bit
|
||||
u32 lato; // one bit
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct dec_month_params
|
||||
{
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct dec_month_args
|
||||
{
|
||||
struct dec_month_io io;
|
||||
struct dec_month_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void dec_month(void *args, void *logic);
|
||||
extern int dec_month_initlog(void *args, void *logic);
|
||||
|
||||
#endif /* DEC_MONTH_H_ */
|
||||
64
src/demux8.c
Normal file
64
src/demux8.c
Normal file
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* demux8.c
|
||||
*
|
||||
* Created on: 22-05-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "helper.h"
|
||||
#include "demux8.h"
|
||||
|
||||
int demux8_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct demux8_args *args = (struct demux8_args *)arguments;
|
||||
struct demux8_logic *log = (struct demux8_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.we_in,&log->we))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.a0_in,&log->a0))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.a1_in,&log->a1))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.a2_in,&log->a2))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.wy1_out,&log->wy[0]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.wy2_out,&log->wy[1]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.wy3_out,&log->wy[2]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.wy4_out,&log->wy[3]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.wy5_out,&log->wy[4]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.wy6_out,&log->wy[5]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.wy7_out,&log->wy[6]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.wy8_out,&log->wy[7]))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void demux8(void *arguments, void *logic)
|
||||
{
|
||||
struct demux8_logic *log = (struct demux8_logic *)logic;
|
||||
u8 choice,i;
|
||||
|
||||
choice = check_struct(&log->a0)?1:0;
|
||||
choice |= check_struct(&log->a1)?2:0;
|
||||
choice |= check_struct(&log->a2)?4:0;
|
||||
|
||||
for(i=0;i<8;i++)
|
||||
clear_struct(&log->wy[i]);
|
||||
|
||||
if (check_struct(&log->we))
|
||||
set_struct(&log->wy[choice]);
|
||||
}
|
||||
52
src/demux8.h
Normal file
52
src/demux8.h
Normal file
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* demux8.h
|
||||
*
|
||||
* Created on: 22-05-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef DEMUX8_H_
|
||||
#define DEMUX8_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
struct demux8_logic
|
||||
{
|
||||
struct binary_io we;
|
||||
struct binary_io a0;
|
||||
struct binary_io a1;
|
||||
struct binary_io a2;
|
||||
struct binary_io wy[8];
|
||||
};
|
||||
|
||||
struct demux8_io
|
||||
{
|
||||
u32 we_in;
|
||||
u32 a0_in;
|
||||
u32 a1_in;
|
||||
u32 a2_in;
|
||||
u32 wy1_out;
|
||||
u32 wy2_out;
|
||||
u32 wy3_out;
|
||||
u32 wy4_out;
|
||||
u32 wy5_out;
|
||||
u32 wy6_out;
|
||||
u32 wy7_out;
|
||||
u32 wy8_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct demux8_params
|
||||
{
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct demux8_args
|
||||
{
|
||||
struct demux8_io io;
|
||||
struct demux8_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void demux8(void *args, void *logic);
|
||||
extern int demux8_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif /* DEMUX8_H_ */
|
||||
58
src/destream.c
Normal file
58
src/destream.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* destream.c
|
||||
*
|
||||
* Created on: 23-04-2019
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "helper.h"
|
||||
#include "destream.h"
|
||||
#include "analog_in.h"
|
||||
|
||||
int destream_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct destream_args *args = (struct destream_args *)arguments;
|
||||
struct destream_logic *log = (struct destream_logic *)logic;
|
||||
u8 i;
|
||||
|
||||
if(set_pointer_in_ptr(args->io.stream_ptr_in,(u32*)&log->stream))
|
||||
return -1;
|
||||
|
||||
if(set_float_ptr(args->io.A1L1_float_out,&log->A[0]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.A1L2_float_out,&log->A[1]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.A1L3_float_out,&log->A[2]))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.snum_float_out,&log->snum))
|
||||
return -1;
|
||||
|
||||
for(i=0;i<16;i++)
|
||||
if(set_bit_ptr_struct(args->io.b_out[i],&log->b[i]))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void destream(void *arguments, void *logic)
|
||||
{
|
||||
struct destream_logic *log = (struct destream_logic *)logic;
|
||||
// struct destream_args *args = (struct mkstream_args *)arguments;
|
||||
|
||||
u32 i;
|
||||
|
||||
for(i=0;i<3;i++)
|
||||
{
|
||||
*log->A[i]=log->stream->A[i];
|
||||
*log->snum=(float)log->stream->sample_stamp;
|
||||
}
|
||||
|
||||
for(i=0;i<16;i++)
|
||||
check_and_set_struct(log->stream->bits & (1<<i),&log->b[i]);
|
||||
|
||||
}
|
||||
52
src/destream.h
Normal file
52
src/destream.h
Normal file
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* destream.h
|
||||
*
|
||||
* Created on: 23-04-2019
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef DESTREAM_H_
|
||||
#define DESTREAM_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "analog_in.h"
|
||||
#include "mkstream.h"
|
||||
#include "helper.h"
|
||||
|
||||
struct destream_logic
|
||||
{
|
||||
float *A[3];
|
||||
float *snum;
|
||||
|
||||
struct stream_frame *stream;
|
||||
struct binary_io b[16];
|
||||
};
|
||||
|
||||
struct destream_io
|
||||
{
|
||||
u32 stream_ptr_in;
|
||||
|
||||
u32 A1L1_float_out;
|
||||
u32 A1L2_float_out;
|
||||
u32 A1L3_float_out;
|
||||
u32 snum_float_out;
|
||||
u32 b_out[16];
|
||||
}__attribute__((__packed__));
|
||||
|
||||
|
||||
struct destream_params
|
||||
{
|
||||
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct destream_args
|
||||
{
|
||||
struct destream_io io;
|
||||
struct destream_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern void destream(void *args, void *logic);
|
||||
extern int destream_initlog(void *arguments, void *logic);
|
||||
|
||||
#endif
|
||||
258
src/dev_ctrl.c
Normal file
258
src/dev_ctrl.c
Normal file
@@ -0,0 +1,258 @@
|
||||
/*
|
||||
* dev_ctrl.c
|
||||
*
|
||||
* Created on: 07-02-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "dev_ctrl.h"
|
||||
#include "helper.h"
|
||||
|
||||
u32 dev_ctrl_state = 0;
|
||||
u32 powered_off=220;
|
||||
u32 service_mode = 0;
|
||||
|
||||
int dev_ctrl_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct dev_ctrl_args *args = (struct dev_ctrl_args *)arguments;
|
||||
struct dev_ctrl_logic *log = (struct dev_ctrl_logic *)logic;
|
||||
|
||||
if(set_bit_ptr_mask(args->io.test_we_in,&log->test_we,&log->test_we_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.test_wy_in,&log->test_wy,&log->test_wy_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.test_log_in,&log->test_log,&log->test_log_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.blok_wy_in,&log->blok_wy,&log->blok_wy_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.test_an_in,&log->test_an,&log->test_an_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.pps2_in,&log->pps2))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.service_mode_in,&log->service))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.pwr1_ok_out,&log->pwr1_ok,&log->pwr1_ok_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.pwr2_ok_out,&log->pwr2_ok,&log->pwr2_ok_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.pwr2_ok_out,&log->pwr2_ok,&log->pwr2_ok_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.nowe_nast_out,&log->nowe_nast,&log->nowe_nast_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.blad_konf_out,&log->blad_konf,&log->blad_konf_bit_mask))
|
||||
return -1;
|
||||
if(set_bit_ptr_mask(args->io.blad_sd_out,&log->blad_sd,&log->blad_sd_bit_mask))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.mgb_ch1_act_out,&log->mgb_ch[0]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.mgb_ch2_act_out,&log->mgb_ch[1]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.mgb_ch3_act_out,&log->mgb_ch[2]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.mgb_ch4_act_out,&log->mgb_ch[3]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.mgb_ch5_act_out,&log->mgb_ch[4]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.mgb_ch6_act_out,&log->mgb_ch[5]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.mgb_ch7_act_out,&log->mgb_ch[6]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.mgb_ch8_act_out,&log->mgb_ch[7]))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.mki_zp6_act_out,&log->mki_zp6))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.mki_iec1_act_out,&log->mki_iec[0]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.mki_iec2_act_out,&log->mki_iec[1]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.mki_iec3_act_out,&log->mki_iec[2]))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.mki_iec4_act_out,&log->mki_iec[3]))
|
||||
return -1;
|
||||
|
||||
if(set_bit_ptr_struct(args->io.pps_ok_out,&log->pps_ok))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.ptp_ok_out,&log->ptp_ok))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.ntp_ok_out,&log->ntp_ok))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.irigb_fix_ok_out,&log->irigb_fix_ok))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.iec_err_out,&log->iec_err))
|
||||
return -1;
|
||||
if(set_bit_ptr_struct(args->io.pps_sw_out,&log->pps_sw))
|
||||
return -1;
|
||||
if(set_float_ptr(args->io.sat_cnt_float_out,&log->sat_cnt))
|
||||
return -1;
|
||||
|
||||
dev_ctrl_state&=~DEV_CTRL_STATE_SD_ERR;
|
||||
dev_ctrl_state&=~DEV_CTRL_STATE_PPS_OK;
|
||||
dev_ctrl_state&=~DEV_CTRL_STATE_PTP_OK;
|
||||
dev_ctrl_state&=~DEV_CTRL_STATE_IRIGB_FIX_OK;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dev_ctrl(void *arguments, void *logic)
|
||||
{
|
||||
struct dev_ctrl_logic *log = (struct dev_ctrl_logic *)logic;
|
||||
|
||||
if(powered_off)
|
||||
{
|
||||
if(powered_off>=LOOP_CYCLE_MS)
|
||||
powered_off-=LOOP_CYCLE_MS;
|
||||
else
|
||||
powered_off=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
check_and_set_mask(!(IN_DATA01 & (1<<12)),log->pwr1_ok,log->pwr1_ok_bit_mask);
|
||||
check_and_set_mask(!(IN_DATA01 & (1<<5)),log->pwr2_ok,log->pwr2_ok_bit_mask);
|
||||
}
|
||||
|
||||
if(check_struct(&log->service))
|
||||
service_mode=1;
|
||||
else
|
||||
service_mode=0;
|
||||
|
||||
if(*log->test_we & log->test_we_bit_mask)
|
||||
dev_ctrl_state|=DEV_CTRL_STATE_TEST_IN;
|
||||
else
|
||||
dev_ctrl_state&=~DEV_CTRL_STATE_TEST_IN;
|
||||
|
||||
if(*log->test_wy & log->test_wy_bit_mask)
|
||||
dev_ctrl_state|=DEV_CTRL_STATE_TEST_OUT;
|
||||
else
|
||||
dev_ctrl_state&=~DEV_CTRL_STATE_TEST_OUT;
|
||||
|
||||
if(*log->test_log & log->test_log_bit_mask)
|
||||
dev_ctrl_state|=DEV_CTRL_STATE_TEST_LOG;
|
||||
else
|
||||
dev_ctrl_state&=~DEV_CTRL_STATE_TEST_LOG;
|
||||
|
||||
if(*log->blok_wy & log->blok_wy_bit_mask)
|
||||
dev_ctrl_state|=DEV_CTRL_STATE_BLOCK_OUT;
|
||||
else
|
||||
dev_ctrl_state&=~DEV_CTRL_STATE_BLOCK_OUT;
|
||||
|
||||
if(*log->test_an & log->test_an_bit_mask)
|
||||
dev_ctrl_state|=DEV_CTRL_STATE_TEST_AN;
|
||||
else
|
||||
dev_ctrl_state&=~DEV_CTRL_STATE_TEST_AN;
|
||||
|
||||
|
||||
check_and_set_mask(dev_ctrl_state & DEV_CTRL_STATE_CFG_CHANGE,log->nowe_nast,log->nowe_nast_bit_mask);
|
||||
dev_ctrl_state&=~DEV_CTRL_STATE_CFG_CHANGE;
|
||||
check_and_set_mask(dev_ctrl_state & DEV_CTRL_STATE_CFG_ERR,log->blad_konf,log->blad_konf_bit_mask);
|
||||
check_and_set_mask(dev_ctrl_state & DEV_CTRL_STATE_SD_ERR,log->blad_sd,log->blad_sd_bit_mask);
|
||||
}
|
||||
|
||||
void dev_ctrl_20hz(void *arguments, void *logic)
|
||||
{
|
||||
struct dev_ctrl_logic *log = (struct dev_ctrl_logic *)logic;
|
||||
struct time_data irigb_time;
|
||||
u8 i;
|
||||
|
||||
if(ic->sync_reg & 0xC000) // IRIG-B or PPS
|
||||
{
|
||||
log->pps_timeout_cnt2=0;
|
||||
|
||||
if(log->pps_timeout_cnt>100)
|
||||
dev_ctrl_state|=DEV_CTRL_STATE_PPS_OK;
|
||||
else
|
||||
log->pps_timeout_cnt++;
|
||||
}
|
||||
else
|
||||
{
|
||||
log->pps_timeout_cnt=0;
|
||||
if(log->pps_timeout_cnt2>100)
|
||||
dev_ctrl_state&=~DEV_CTRL_STATE_PPS_OK;
|
||||
else
|
||||
log->pps_timeout_cnt2++;
|
||||
}
|
||||
|
||||
if(ic->sync_reg & 0x4000)
|
||||
{
|
||||
irigb_time=irigb_process_frame();
|
||||
if(timesync_method==SYNC_METHOD_IRIG_B || timesync_method==SYNC_METHOD_IRIG_B_ZPRAE || (timesync_method==SYNC_METHOD_CUSTOM && (timesync_bits & CFG_TSYNC_FROM_DSP)))
|
||||
{
|
||||
if(irigb_time.fix_sat & 0x10)
|
||||
{
|
||||
if(cur_time.tv_usec>50 && cur_time.tv_usec<950)
|
||||
cur_time.tv_sec = irigb_time.secs;
|
||||
|
||||
if(cur_time_sw.tv_usec>50 && cur_time_sw.tv_usec<950)
|
||||
cur_time_sw.tv_sec = irigb_time.secs;
|
||||
}
|
||||
}
|
||||
|
||||
if(irigb_time.fix_sat & 0x10)
|
||||
{
|
||||
log->fix_timeout_cnt2=0;
|
||||
if(log->fix_timeout_cnt>100)
|
||||
dev_ctrl_state|=DEV_CTRL_STATE_IRIGB_FIX_OK;
|
||||
else
|
||||
log->fix_timeout_cnt++;
|
||||
// zrobione juz wyzej - bez rozdzialu na irigb i irigb_zprae
|
||||
// if((timesync_method==SYNC_METHOD_IRIG_B_ZPRAE || (timesync_method==SYNC_METHOD_CUSTOM && (timesync_bits & CFG_TSYNC_FROM_DSP))) && cur_time.tv_usec>50 && cur_time.tv_usec<950)
|
||||
// cur_time.tv_sec = irigb_time.secs;
|
||||
|
||||
*log->sat_cnt=irigb_time.fix_sat & 0x0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
*log->sat_cnt=0;
|
||||
log->fix_timeout_cnt=0;
|
||||
if(log->fix_timeout_cnt2>100)
|
||||
dev_ctrl_state&=~DEV_CTRL_STATE_IRIGB_FIX_OK;
|
||||
else
|
||||
log->fix_timeout_cnt2++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*log->sat_cnt=0;
|
||||
log->fix_timeout_cnt=0;
|
||||
if(log->fix_timeout_cnt2>100)
|
||||
dev_ctrl_state&=~DEV_CTRL_STATE_IRIGB_FIX_OK;
|
||||
else
|
||||
log->fix_timeout_cnt2++;
|
||||
}
|
||||
|
||||
if(pps3_timeout_cnt>60000)
|
||||
clear_struct(&log->pps_sw);
|
||||
else
|
||||
set_struct(&log->pps_sw);
|
||||
|
||||
if(check_struct(&log->pps2))
|
||||
{
|
||||
if(!(ic->sync_reg & MKI_PPS_IN))
|
||||
ic->sync_reg|=MKI_PPS_IN;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(ic->sync_reg & MKI_PPS_IN)
|
||||
ic->sync_reg&=~MKI_PPS_IN;
|
||||
}
|
||||
|
||||
check_and_set_struct(dev_ctrl_state&DEV_CTRL_STATE_PPS_OK,&log->pps_ok);
|
||||
check_and_set_struct(dev_ctrl_state&DEV_CTRL_STATE_PTP_OK,&log->ptp_ok);
|
||||
check_and_set_struct(dev_ctrl_state&DEV_CTRL_STATE_NTP_OK,&log->ntp_ok);
|
||||
check_and_set_struct(dev_ctrl_state&DEV_CTRL_STATE_IRIGB_FIX_OK,&log->irigb_fix_ok);
|
||||
for(i=0;i<8;i++)
|
||||
check_and_set_struct(dev_ctrl_state & (DEV_CTRL_STATE_MGB_CHAN1<<i),&log->mgb_ch[i]);
|
||||
|
||||
check_and_set_struct(dev_ctrl_state & (DEV_CTRL_STATE_MKI_CHAN_ZP),&log->mki_zp6);
|
||||
check_and_set_struct(dev_ctrl_state & (DEV_CTRL_STATE_MKI_IEC_ERR),&log->iec_err);
|
||||
|
||||
check_and_set_struct(dev_ctrl_state & (DEV_CTRL_STATE_MKI_IEC_CHAN1),&log->mki_iec[0]);
|
||||
check_and_set_struct(dev_ctrl_state & (DEV_CTRL_STATE_MKI_IEC_CHAN2),&log->mki_iec[1]);
|
||||
check_and_set_struct(dev_ctrl_state & (DEV_CTRL_STATE_MKI_IEC_CHAN3),&log->mki_iec[2]);
|
||||
check_and_set_struct(dev_ctrl_state & (DEV_CTRL_STATE_MKI_IEC_CHAN4),&log->mki_iec[3]);
|
||||
|
||||
}
|
||||
142
src/dev_ctrl.h
Normal file
142
src/dev_ctrl.h
Normal file
@@ -0,0 +1,142 @@
|
||||
/*
|
||||
* dev_ctrl.h
|
||||
*
|
||||
* Created on: 07-02-2017
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#ifndef DEV_CTRL_H_
|
||||
#define DEV_CTRL_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "helper.h"
|
||||
|
||||
struct dev_ctrl_logic
|
||||
{
|
||||
u8 *pwr1_ok;
|
||||
u8 pwr1_ok_bit_mask;
|
||||
u8 *pwr2_ok;
|
||||
u8 pwr2_ok_bit_mask;
|
||||
u8 *nowe_nast;
|
||||
u8 nowe_nast_bit_mask;
|
||||
u8 *blad_konf;
|
||||
u8 blad_konf_bit_mask;
|
||||
u8 *blad_sd;
|
||||
u8 blad_sd_bit_mask;
|
||||
|
||||
u8 *test_we;
|
||||
u8 test_we_bit_mask;
|
||||
u8 *test_wy;
|
||||
u8 test_wy_bit_mask;
|
||||
u8 *test_log;
|
||||
u8 test_log_bit_mask;
|
||||
u8 *blok_wy;
|
||||
u8 blok_wy_bit_mask;
|
||||
u8 *test_an;
|
||||
u8 test_an_bit_mask;
|
||||
struct binary_io pps2;
|
||||
float *sat_cnt;
|
||||
|
||||
struct binary_io mgb_ch[8];
|
||||
struct binary_io mki_zp6;
|
||||
struct binary_io mki_iec[4];
|
||||
struct binary_io pps_ok;
|
||||
struct binary_io ptp_ok;
|
||||
struct binary_io ntp_ok;
|
||||
struct binary_io irigb_fix_ok;
|
||||
struct binary_io iec_err;
|
||||
struct binary_io pps_sw;
|
||||
struct binary_io service;
|
||||
u16 pps_timeout_cnt;
|
||||
u16 pps_timeout_cnt2;
|
||||
u16 fix_timeout_cnt;
|
||||
u16 fix_timeout_cnt2;
|
||||
};
|
||||
|
||||
struct dev_ctrl_io
|
||||
{
|
||||
u32 test_we_in;
|
||||
u32 test_wy_in;
|
||||
u32 test_log_in;
|
||||
u32 blok_wy_in;
|
||||
u32 test_an_in;
|
||||
u32 pps2_in;
|
||||
u32 service_mode_in;
|
||||
u32 pwr1_ok_out;
|
||||
u32 pwr2_ok_out;
|
||||
u32 nowe_nast_out;
|
||||
u32 blad_konf_out;
|
||||
u32 blad_sd_out;
|
||||
u32 mgb_ch1_act_out;
|
||||
u32 mgb_ch2_act_out;
|
||||
u32 mgb_ch3_act_out;
|
||||
u32 mgb_ch4_act_out;
|
||||
u32 mgb_ch5_act_out;
|
||||
u32 mgb_ch6_act_out;
|
||||
u32 mgb_ch7_act_out;
|
||||
u32 mgb_ch8_act_out;
|
||||
u32 mki_zp6_act_out;
|
||||
u32 mki_iec1_act_out;
|
||||
u32 mki_iec2_act_out;
|
||||
u32 mki_iec3_act_out;
|
||||
u32 mki_iec4_act_out;
|
||||
u32 pps_ok_out;
|
||||
u32 ptp_ok_out;
|
||||
u32 irigb_fix_ok_out;
|
||||
u32 iec_err_out;
|
||||
u32 sat_cnt_float_out;
|
||||
u32 ntp_ok_out;
|
||||
u32 pps_sw_out;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct dev_ctrl_params
|
||||
{
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct dev_ctrl_args
|
||||
{
|
||||
struct dev_ctrl_io io;
|
||||
struct dev_ctrl_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern u32 dev_ctrl_state;
|
||||
extern u32 service_mode;
|
||||
|
||||
#define DEV_CTRL_STATE_TEST_IN 0x01
|
||||
#define DEV_CTRL_STATE_TEST_OUT 0x02
|
||||
#define DEV_CTRL_STATE_TEST_LOG 0x04
|
||||
#define DEV_CTRL_STATE_BLOCK_OUT 0x08
|
||||
#define DEV_CTRL_STATE_TEST_AN 0x10
|
||||
#define DEV_CTRL_STATE_CFG_CHANGE 0x0100
|
||||
#define DEV_CTRL_STATE_CFG_ERR 0x0200
|
||||
#define DEV_CTRL_STATE_SD_ERR 0x0400
|
||||
#define DEV_CTRL_STATE_PPS_OK 0x0800
|
||||
#define DEV_CTRL_STATE_PTP_OK 0x1000
|
||||
#define DEV_CTRL_STATE_IRIGB_FIX_OK 0x2000
|
||||
#define DEV_CTRL_STATE_NTP_OK 0x4000
|
||||
#define DEV_CTRL_STATE_NTP_HISZP_OK 0x8000
|
||||
#define DEV_CTRL_STATE_MGB_CHAN1 0x010000UL
|
||||
#define DEV_CTRL_STATE_MGB_CHAN2 0x020000
|
||||
#define DEV_CTRL_STATE_MGB_CHAN3 0x040000
|
||||
#define DEV_CTRL_STATE_MGB_CHAN4 0x080000
|
||||
#define DEV_CTRL_STATE_MGB_CHAN5 0x100000
|
||||
#define DEV_CTRL_STATE_MGB_CHAN6 0x200000
|
||||
#define DEV_CTRL_STATE_MGB_CHAN7 0x400000
|
||||
#define DEV_CTRL_STATE_MGB_CHAN8 0x800000
|
||||
#define DEV_CTRL_STATE_MKI_CHAN_ZP 0x1000000
|
||||
#define DEV_CTRL_STATE_MKI_IEC_ERR 0x2000000
|
||||
#define DEV_CTRL_STATE_MKI_UNUSED1 0x4000000
|
||||
#define DEV_CTRL_STATE_MKI_UNUSED2 0x8000000
|
||||
//
|
||||
//
|
||||
#define DEV_CTRL_STATE_MKI_IEC_CHAN1 0x10000000
|
||||
#define DEV_CTRL_STATE_MKI_IEC_CHAN2 0x20000000
|
||||
#define DEV_CTRL_STATE_MKI_IEC_CHAN3 0x40000000
|
||||
#define DEV_CTRL_STATE_MKI_IEC_CHAN4 0x80000000
|
||||
|
||||
extern int dev_ctrl_initlog(void *arguments, void *logic);
|
||||
extern void dev_ctrl(void *arguments, void *logic);
|
||||
extern void dev_ctrl_20hz(void *arguments, void *logic);
|
||||
|
||||
#endif /* DEV_CTRL_H_ */
|
||||
219
src/dfr.c
Normal file
219
src/dfr.c
Normal file
@@ -0,0 +1,219 @@
|
||||
/*
|
||||
* dfr.c
|
||||
*
|
||||
* Created on: 24-06-2014
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include <ti/ipc/Notify.h>
|
||||
#include <string.h>
|
||||
#include "dfr.h"
|
||||
#include "dfr_drv.h"
|
||||
#include "rec_an.h"
|
||||
#include "rec_buf.h"
|
||||
#include "rec_bin.h"
|
||||
#include "comm.h"
|
||||
#include "misc.h"
|
||||
#include "config.h"
|
||||
|
||||
#pragma LOCATION(bank0,0xc4400000) // @ non-cached memory above 128MB
|
||||
volatile u8 bank0[REG_BANK_SIZE];
|
||||
#pragma LOCATION(bank1,0xc4800000) // @ non-cached memory above 128MB
|
||||
volatile u8 bank1[REG_BANK_SIZE];
|
||||
#pragma LOCATION(bank2,0xc4c00000) // @ non-cached memory above 128MB
|
||||
volatile u8 bank2[REG_BANK_SIZE];
|
||||
#pragma LOCATION(bank3,0xc5000000) // @ non-cached memory above 128MB
|
||||
volatile u8 bank3[REG_BANK_SIZE];
|
||||
|
||||
volatile struct reg_inf regs = { .cur_reg_bank = 0,
|
||||
.bank[0].data = (void*) bank0,
|
||||
.bank[0].state = BANK_BUFFERING,
|
||||
.bank[0].addr_offset = 0,
|
||||
.bank[0].pre_trigger_cnt = 0,
|
||||
.bank[0].post_trigger_cnt = 0,
|
||||
.bank[0].total_cnt = 0,
|
||||
.bank[1].data = (void*) bank1,
|
||||
.bank[2].data = (void*) bank2,
|
||||
.bank[3].data = (void*) bank3,
|
||||
};
|
||||
|
||||
int dfr_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct dfr_args *args = (struct dfr_args *)arguments;
|
||||
struct dfr_logic *log = (struct dfr_logic *)logic;
|
||||
|
||||
log->trigger_ptr = log_manager.nets_data + (args->io.trigger_in >> 3);
|
||||
log->trigger_bit_no = args->io.trigger_in & 0x07;
|
||||
if(log->trigger_ptr >= (log_manager.nets_data+sizeof(log_manager.nets_data)))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dfr(void *arguments, void *logic)
|
||||
{
|
||||
struct dfr_logic *log = (struct dfr_logic *)logic;
|
||||
struct dfr_args *args = (struct dfr_args *)arguments;
|
||||
struct rec_an_logic *an_log;
|
||||
struct rec_buf_logic *an_buf_log;
|
||||
struct rec_bin_logic *bin_log;
|
||||
u16 sample_buf[(MAX_SAMPLE_SIZE/sizeof(u16)) + 8];
|
||||
int i,bit_cnt=0,pos=0;
|
||||
int sdiff;
|
||||
u32 prev_offset;
|
||||
short *sample_buf_prev;
|
||||
|
||||
if(dfr_drv_log_ptr == NULL) // dfr driver not initialized?
|
||||
return;
|
||||
|
||||
sdiff=cur_sample_diff;
|
||||
|
||||
while(sdiff)
|
||||
{
|
||||
switch(regs.bank[regs.cur_reg_bank].state)
|
||||
{
|
||||
case BANK_BUFFERING:
|
||||
if(*log->trigger_ptr & (1<<log->trigger_bit_no))
|
||||
{
|
||||
regs.bank[regs.cur_reg_bank].state=BANK_TRIGGERED;
|
||||
regs.bank[regs.cur_reg_bank].tr_time=(timesync_bits & CFG_TSYNC_USE_SWCLK)?cur_time_sw.tv_sec:cur_time.tv_sec;
|
||||
regs.bank[regs.cur_reg_bank].tr_time_ms=(timesync_bits & CFG_TSYNC_USE_SWCLK)?cur_time_sw.tv_usec:cur_time.tv_usec;
|
||||
regs.bank[regs.cur_reg_bank].sample_size=dfr_drv_log_ptr->sample_size;
|
||||
regs.bank[regs.cur_reg_bank].an_count=dfr_drv_log_ptr->an_count;
|
||||
regs.bank[regs.cur_reg_bank].bin_count=dfr_drv_log_ptr->bin_count;
|
||||
regs.bank[regs.cur_reg_bank].post_trigger_cnt=0;
|
||||
regs.bank[regs.cur_reg_bank].trigger_offset=regs.bank[regs.cur_reg_bank].addr_offset;
|
||||
regs.bank[regs.cur_reg_bank].total_cnt=regs.bank[regs.cur_reg_bank].pre_trigger_cnt;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(regs.bank[regs.cur_reg_bank].pre_trigger_cnt<args->params.pre_trigger_time)
|
||||
regs.bank[regs.cur_reg_bank].pre_trigger_cnt++;
|
||||
}
|
||||
break;
|
||||
|
||||
case BANK_TRIGGERED:
|
||||
if(regs.bank[regs.cur_reg_bank].total_cnt++>=args->params.max_reg_time || regs.bank[regs.cur_reg_bank].post_trigger_cnt>=args->params.post_trigger_time)
|
||||
{
|
||||
// send notify to ARM
|
||||
regs.bank[regs.cur_reg_bank].state=BANK_FILLED;
|
||||
regs.cur_reg_bank++;
|
||||
regs.cur_reg_bank%=MAX_REG_BANKS;
|
||||
regs.bank[regs.cur_reg_bank].state=BANK_BUFFERING;
|
||||
regs.bank[regs.cur_reg_bank].addr_offset=0;
|
||||
regs.bank[regs.cur_reg_bank].post_trigger_cnt=0;
|
||||
regs.bank[regs.cur_reg_bank].pre_trigger_cnt=0;
|
||||
regs.bank[regs.cur_reg_bank].trigger_offset=0;
|
||||
regs.bank[regs.cur_reg_bank].total_cnt=0;
|
||||
logman_notify|=LOGMAN_NOTIFY_NEW_DFR;
|
||||
// Notify_sendEvent(notify.remoteProcId,notify.lineId,notify.eventId, NOTIFY_NEW_DFR_REG, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(*log->trigger_ptr & (1<<log->trigger_bit_no))
|
||||
regs.bank[regs.cur_reg_bank].post_trigger_cnt=0;
|
||||
else
|
||||
regs.bank[regs.cur_reg_bank].post_trigger_cnt++;
|
||||
}
|
||||
break;
|
||||
|
||||
case BANK_EMPTY:
|
||||
case BANK_FILLED:
|
||||
default:
|
||||
regs.bank[regs.cur_reg_bank].state=BANK_BUFFERING;
|
||||
regs.bank[regs.cur_reg_bank].addr_offset=0;
|
||||
regs.bank[regs.cur_reg_bank].post_trigger_cnt=0;
|
||||
regs.bank[regs.cur_reg_bank].pre_trigger_cnt=0;
|
||||
regs.bank[regs.cur_reg_bank].trigger_offset=0;
|
||||
regs.bank[regs.cur_reg_bank].total_cnt=0;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
// will be overwritten by ARM
|
||||
// *((u32 *)&sample_buf[0]) = 0; // sample number 1..n
|
||||
// *((u32 *)&sample_buf[2]) = 0; // time stamp 0..n*1ms @ 1 kHz
|
||||
//
|
||||
|
||||
pos = 4;
|
||||
|
||||
|
||||
for(i=0;i<dfr_drv_log_ptr->an_count;i++)
|
||||
{
|
||||
if(regs.bank[regs.cur_reg_bank].addr_offset >= (dfr_drv_log_ptr->sample_size))
|
||||
prev_offset = regs.bank[regs.cur_reg_bank].addr_offset - (dfr_drv_log_ptr->sample_size);
|
||||
else
|
||||
prev_offset = dfr_drv_log_ptr->max_offset - (dfr_drv_log_ptr->sample_size);
|
||||
|
||||
sample_buf_prev = (short*)((u8*)regs.bank[regs.cur_reg_bank].data+prev_offset+(pos<<1));
|
||||
|
||||
if(dfr_drv_log_ptr->element_num[i] & ELEMENT_IS_REC_BUF)
|
||||
{
|
||||
an_buf_log = (struct rec_buf_logic *)log_manager.log_element[dfr_drv_log_ptr->element_num[i] & 0x3FFF].fun_log_ptr;
|
||||
|
||||
sample_buf[pos]=(short)an_buf_log->buf_ptr[bus_an_cur_sample_num]-0x7FFF;
|
||||
|
||||
if(sdiff>SAMPLES_PER_MS)
|
||||
{
|
||||
int snum;
|
||||
snum = bus_an_cur_sample_num;
|
||||
snum-= (sdiff-SAMPLES_PER_MS);
|
||||
if(snum<0)
|
||||
snum+=(SAMPLES_PER_MS*2*MAIN_FREQ_PERIOD_MS);
|
||||
*sample_buf_prev=(short)an_buf_log->buf_ptr[snum]-0x7FFF;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
an_log = (struct rec_an_logic *)log_manager.log_element[dfr_drv_log_ptr->element_num[i] & 0x3FFF].fun_log_ptr;
|
||||
sample_buf[pos]=*an_log->in_ptr;
|
||||
|
||||
if(sdiff>SAMPLES_PER_MS)//first sample interpolation
|
||||
{
|
||||
#if SAMPLES_INTERPOLATION==1
|
||||
*sample_buf_prev=((short)*an_log->in_ptr+*sample_buf_prev)>>1;
|
||||
#elif SAMPLES_INTERPOLATION==2
|
||||
*sample_buf_prev=32768;
|
||||
#else
|
||||
*sample_buf_prev=sample_buf[pos]; // only phase shift
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
pos++;
|
||||
}
|
||||
|
||||
sample_buf[pos]=0;
|
||||
bit_cnt=0;
|
||||
|
||||
for(;i<(dfr_drv_log_ptr->an_count+dfr_drv_log_ptr->bin_count);i++)
|
||||
{
|
||||
bin_log = (struct rec_bin_logic *)log_manager.log_element[dfr_drv_log_ptr->element_num[i] & 0x3FFF].fun_log_ptr;
|
||||
|
||||
if(*bin_log->in_ptr & bin_log->in_bit_mask)
|
||||
sample_buf[pos]|=(1<<(bit_cnt%16));
|
||||
|
||||
if(!(++bit_cnt%16) && bit_cnt)
|
||||
{
|
||||
pos++;
|
||||
sample_buf[pos]=0;
|
||||
}
|
||||
}
|
||||
|
||||
if(regs.bank[regs.cur_reg_bank].addr_offset + dfr_drv_log_ptr->sample_size > REG_BANK_SIZE)
|
||||
regs.bank[regs.cur_reg_bank].addr_offset=0;
|
||||
|
||||
memcpy((u8*)regs.bank[regs.cur_reg_bank].data+regs.bank[regs.cur_reg_bank].addr_offset,(void *)sample_buf,dfr_drv_log_ptr->sample_size);
|
||||
regs.bank[regs.cur_reg_bank].addr_offset+=dfr_drv_log_ptr->sample_size;
|
||||
|
||||
sdiff-=SAMPLES_PER_MS;
|
||||
if(sdiff<0)
|
||||
sdiff=0;
|
||||
}
|
||||
}
|
||||
84
src/dfr.h
Normal file
84
src/dfr.h
Normal file
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* dfr.h
|
||||
*
|
||||
*
|
||||
* Created on: 24-06-2014
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
#ifndef DFR_H_
|
||||
#define DFR_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
#define MAX_SAMPLE_SIZE 512
|
||||
|
||||
#define REG_BANK_SIZE 0x400000
|
||||
#define AN_IS_FLOAT 0x80000000
|
||||
|
||||
// bank states
|
||||
#define BANK_EMPTY 0x00
|
||||
#define BANK_BUFFERING 0x01
|
||||
#define BANK_TRIGGERED 0x02
|
||||
#define BANK_FILLED 0x03
|
||||
|
||||
#define MAX_REG_BANKS 4
|
||||
|
||||
struct reg_data
|
||||
{
|
||||
u8 *data;
|
||||
u8 state;
|
||||
u32 addr_offset;
|
||||
u32 pre_trigger_cnt;
|
||||
u32 post_trigger_cnt;
|
||||
u32 total_cnt;
|
||||
u32 trigger_offset;
|
||||
u32 tr_time;
|
||||
u32 tr_time_ms;
|
||||
u16 sample_size;
|
||||
u8 an_count;
|
||||
u16 bin_count;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct reg_inf
|
||||
{
|
||||
u8 cur_reg_bank;
|
||||
struct reg_data bank[MAX_REG_BANKS];
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern volatile u8 bank0[REG_BANK_SIZE];
|
||||
extern volatile u8 bank1[REG_BANK_SIZE];
|
||||
extern volatile u8 bank2[REG_BANK_SIZE];
|
||||
extern volatile u8 bank3[REG_BANK_SIZE];
|
||||
|
||||
extern volatile struct reg_inf regs;
|
||||
|
||||
struct dfr_logic
|
||||
{
|
||||
u8 *trigger_ptr;
|
||||
u8 trigger_bit_no;
|
||||
};
|
||||
|
||||
struct dfr_io
|
||||
{
|
||||
u32 trigger_in;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct dfr_params
|
||||
{
|
||||
u32 pre_trigger_time;
|
||||
u32 post_trigger_time;
|
||||
u32 max_reg_time;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct dfr_args
|
||||
{
|
||||
struct dfr_io io;
|
||||
struct dfr_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern int dfr_initlog(void *args, void *logic);
|
||||
extern void dfr(void *args, void *logic);
|
||||
|
||||
#endif /* DFR_H_ */
|
||||
122
src/dfr_drv.c
Normal file
122
src/dfr_drv.c
Normal file
@@ -0,0 +1,122 @@
|
||||
/*
|
||||
* dfr_drv.c
|
||||
*
|
||||
* Created on: 23-10-2014
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include <string.h>
|
||||
#include "rec_bin.h"
|
||||
#include "rec_an.h"
|
||||
#include "rec_buf.h"
|
||||
#include "rec_float.h"
|
||||
#include "dfr.h"
|
||||
#include "dfr_drv.h"
|
||||
|
||||
struct dfr_drv_logic *dfr_drv_log_ptr = NULL;
|
||||
|
||||
int dfr_drv_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct dfr_drv_logic *log = (struct dfr_drv_logic *)logic;
|
||||
int i;
|
||||
|
||||
log->an_count=0;
|
||||
log->bin_count=0;
|
||||
|
||||
for(i=0;i<MAX_LOG_ELEMENTS;i++) /* find analog channels */
|
||||
{
|
||||
if(log_manager.log_element[i].flags & (FUNCTION_IS_REC_AN|FUNCTION_IS_REC_FLOAT|FUNCTION_IS_REC_BUF))
|
||||
{
|
||||
if(log_manager.log_element[i].flags & FUNCTION_IS_REC_AN)
|
||||
{
|
||||
struct rec_an_args *args;
|
||||
|
||||
args = (struct rec_an_args *)log_manager.log_element[i].fun_args_ptr;
|
||||
if(!(args->params.bits & REC_CHAN_ENABLED_DFR))
|
||||
continue;
|
||||
}
|
||||
else if(log_manager.log_element[i].flags & FUNCTION_IS_REC_BUF)
|
||||
{
|
||||
struct rec_buf_args *args;
|
||||
|
||||
args = (struct rec_buf_args *)log_manager.log_element[i].fun_args_ptr;
|
||||
if(!(args->params.bits & REC_CHAN_ENABLED_DFR))
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
struct rec_float_args *args;
|
||||
|
||||
args = (struct rec_float_args *)log_manager.log_element[i].fun_args_ptr;
|
||||
if(!(args->params.bits & REC_CHAN_ENABLED_DFR))
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if((u8 *)&log->element_num[log->an_count]>(u8 *)(log_manager.buf+sizeof(log_manager.buf)-sizeof(u16)))
|
||||
return -1;
|
||||
|
||||
log->element_num[log->an_count]=i|((log_manager.log_element[i].flags & FUNCTION_IS_REC_FLOAT)?ELEMENT_IS_REC_FLOAT:(log_manager.log_element[i].flags & FUNCTION_IS_REC_BUF)?ELEMENT_IS_REC_BUF:0);
|
||||
log->an_count++;
|
||||
}
|
||||
}
|
||||
|
||||
log->sample_size=log->an_count * sizeof(u16);
|
||||
|
||||
for(i=0;i<MAX_LOG_ELEMENTS;i++) /* find binary channels */
|
||||
{
|
||||
struct rec_bin_args *args;
|
||||
|
||||
args = (struct rec_bin_args *)log_manager.log_element[i].fun_args_ptr;
|
||||
|
||||
if((log_manager.log_element[i].flags & FUNCTION_IS_REC_BIN) && (args->params.bits & REC_CHAN_ENABLED_DFR))
|
||||
{
|
||||
if((u8 *)&log->element_num[log->an_count+log->bin_count]>(u8 *)(log_manager.buf+sizeof(log_manager.buf)-sizeof(u16)))
|
||||
return -1;
|
||||
|
||||
log->element_num[log->an_count+log->bin_count]=i;
|
||||
log->bin_count++;
|
||||
}
|
||||
}
|
||||
|
||||
log->sample_size+=((log->bin_count/16)*2);
|
||||
if(log->bin_count%16)
|
||||
log->sample_size+=2;
|
||||
|
||||
log->sample_size+=8; // sample number && time stamp
|
||||
|
||||
if(log->sample_size>MAX_SAMPLE_SIZE)
|
||||
return -1;
|
||||
|
||||
for(i=0;i<MAX_LOG_ELEMENTS;i++)
|
||||
{
|
||||
if(log_manager.log_element[i].flags & FUNCTION_IS_DFR)
|
||||
{
|
||||
struct dfr_args *args;
|
||||
|
||||
args = (struct dfr_args *)log_manager.log_element[i].fun_args_ptr;
|
||||
|
||||
if(args->params.max_reg_time > ((REG_BANK_SIZE / log->sample_size) - 2))
|
||||
args->params.max_reg_time=((REG_BANK_SIZE / log->sample_size) - 2);
|
||||
//return -1;
|
||||
|
||||
if((args->params.post_trigger_time + args->params.pre_trigger_time) > args->params.max_reg_time)
|
||||
{
|
||||
args->params.post_trigger_time=args->params.max_reg_time/2;
|
||||
args->params.pre_trigger_time=args->params.max_reg_time/2;
|
||||
// return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log->max_offset=REG_BANK_SIZE/dfr_drv_log_ptr->sample_size*dfr_drv_log_ptr->sample_size;
|
||||
|
||||
dfr_drv_log_ptr=(struct dfr_drv_logic *)logic;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
45
src/dfr_drv.h
Normal file
45
src/dfr_drv.h
Normal file
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* dfr_drv.h
|
||||
*
|
||||
*
|
||||
* Created on: 23-10-2014
|
||||
* Author: KJ
|
||||
*/
|
||||
|
||||
#ifndef DFR_DRV_H_
|
||||
#define DFR_DRV_H_
|
||||
|
||||
#include "tdefs.h"
|
||||
|
||||
#define ELEMENT_IS_REC_FLOAT 0x8000
|
||||
#define ELEMENT_IS_REC_BUF 0x4000
|
||||
|
||||
extern struct dfr_drv_logic *dfr_drv_log_ptr;
|
||||
|
||||
struct dfr_drv_logic
|
||||
{
|
||||
u16 an_count;
|
||||
u16 bin_count;
|
||||
u16 sample_size;
|
||||
u32 max_offset;
|
||||
u16 element_num[];
|
||||
};
|
||||
|
||||
struct dfr_drv_io
|
||||
{
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct dfr_drv_params
|
||||
{
|
||||
}__attribute__((__packed__));
|
||||
|
||||
struct dfr_drv_args
|
||||
{
|
||||
struct dfr_drv_io io;
|
||||
struct dfr_drv_params params;
|
||||
// u16 crc;
|
||||
}__attribute__((__packed__));
|
||||
|
||||
extern int dfr_drv_initlog(void *args, void *logic);
|
||||
|
||||
#endif /* DFR_DRV_H_ */
|
||||
69
src/e_addvec.c
Normal file
69
src/e_addvec.c
Normal file
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* e_addvec.c
|
||||
*
|
||||
* Created on: 10-06-2016
|
||||
* Author: Krzysztof Jakubczyk
|
||||
*/
|
||||
|
||||
#include "tdefs.h"
|
||||
#include "misc.h"
|
||||
|
||||
#include "e_addvec.h"
|
||||
#include "analog_in.h"
|
||||
#include <math.h>
|
||||
|
||||
int e_addvec_initlog(void *arguments, void *logic)
|
||||
{
|
||||
struct e_addvec_args *args = (struct e_addvec_args *)arguments;
|
||||
struct e_addvec_logic *log = (struct e_addvec_logic *)logic;
|
||||
|
||||
log->orta1_ptr = (float *)(log_manager.nets_data + (args->io.orta1_float_in >> 3));
|
||||
if((u8 *)log->orta1_ptr > (log_manager.nets_data+sizeof(log_manager.nets_data) - sizeof(float)))
|
||||
return -1;
|
||||
|
||||
log->ortb1_ptr = (float *)(log_manager.nets_data + (args->io.ortb1_float_in >> 3));
|
||||
if((u8 *)log->ortb1_ptr > (log_manager.nets_data+sizeof(log_manager.nets_data) - sizeof(float)))
|
||||
return -1;
|
||||
|
||||
log->orta2_ptr = (float *)(log_manager.nets_data + (args->io.orta2_float_in >> 3));
|
||||
if((u8 *)log->orta2_ptr > (log_manager.nets_data+sizeof(log_manager.nets_data) - sizeof(float)))
|
||||
return -1;
|
||||
|
||||
log->ortb2_ptr = (float *)(log_manager.nets_data + (args->io.ortb2_float_in >> 3));
|
||||
if((u8 *)log->ortb2_ptr > (log_manager.nets_data+sizeof(log_manager.nets_data) - sizeof(float)))
|
||||
return -1;
|
||||
|
||||
log->orta_ptr = (float *)(log_manager.nets_data + (args->io.orta_float_out >> 3));
|
||||
if((u8 *)log->orta_ptr > (log_manager.nets_data+sizeof(log_manager.nets_data) - sizeof(float)))
|
||||
return -1;
|
||||
|
||||
log->ortb_ptr = (float *)(log_manager.nets_data + (args->io.ortb_float_out >> 3));
|
||||
if((u8 *)log->ortb_ptr > (log_manager.nets_data+sizeof(log_manager.nets_data) - sizeof(float)))
|
||||
return -1;
|
||||
|
||||
log->esk_ptr = (float *)(log_manager.nets_data + (args->io.esk_float_out >> 3));
|
||||
if((u8 *)log->esk_ptr > (log_manager.nets_data+sizeof(log_manager.nets_data) - sizeof(float)))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void e_addvec(void *arguments, void *logic)
|
||||
{
|
||||
struct e_addvec_args *args = (struct e_addvec_args *)arguments;
|
||||
struct e_addvec_logic *log = (struct e_addvec_logic *)logic;
|
||||
|
||||
float orta, ortb;
|
||||
|
||||
orta = *log->orta1_ptr + *log->orta2_ptr;
|
||||
ortb = *log->ortb1_ptr + *log->ortb2_ptr;
|
||||
|
||||
if(args->io.esk_float_out)
|
||||
*log->esk_ptr=(orta*orta + ortb*ortb)/2;
|
||||
|
||||
if(args->io.orta_float_out)
|
||||
*log->orta_ptr = orta;
|
||||
|
||||
if(args->io.ortb_float_out)
|
||||
*log->ortb_ptr = ortb;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user