Files
dist_tester/test_wrapper.c

83 lines
2.6 KiB
C

#include "mocks.h" // Plik z mockami, który stworzyliśmy w poprzednim kroku
#include "ZDistA_komp.c"
// Globalne instancje struktur dla pojedynczego kanału testowego
static struct ZDistA_komp_args args;
static struct ZDistA_komp_logic log_inst;
// Zmienne do trzymania wejść
static float i1_re, i1_im, i1_mod;
static float i2_re, i2_im, i2_mod;
static float i3_re, i3_im, i3_mod;
static float i0_re, i0_im, i0_mod;
static float i1_zg_re, i1_zg_im, i1_zg_mod; // Składowa zgodna I1
static float i2_pr_re, i2_pr_im, i2_pr_mod; // Składowa przeciwna I2
static float u1_re, u1_im, u1_mod;
static float u2_re, u2_im, u2_mod;
static float u3_re, u3_im, u3_mod;
static float u0_re, u0_im, u0_mod;
static struct binary_io out_P1W_L1E, out_P1W_L2E, out_P1W_L3E;
// Funkcja eksportowana dla Pythona do inicjalizacji
__declspec(dllexport) void init_relay()
{
memset(&args, 0, sizeof(args));
memset(&log_inst, 0, sizeof(log_inst));
// Podpięcie wskaźników (tylko przykład dla I1 i wyjść)
args.io.i1_orta_float_in = &i1_re;
args.io.i1_ortb_float_in = &i1_im;
args.io.i1_float_in = &i1_mod;
// ... tu musisz podpiąć resztę wskaźników dla U1, U2, I0, I2_pr itd.
args.io.P1W_L1E_out = &out_P1W_L1E;
args.io.P1W_L2E_out = &out_P1W_L2E;
args.io.P1W_L3E_out = &out_P1W_L3E;
// Ustawienie bazowych nastaw
args.params.bity = 0xFFFF; // Włącz wszystko do testu
args.params.kp = 1.0;
args.params.fi1 = 75.0; // Kąt charakterystyki
args.params.R1_Zf1_LE = 10.0;
args.params.X1_Zr1_LE = 20.0;
ZDistA_komp_initlog(&args, &log_inst);
}
// Funkcja eksportowana dla Pythona do pojedynczego kroku obliczeń
__declspec(dllexport) void step_relay(
float i1re, float i1im, float u1re, float u1im,
float i0re, float i0im, float u0re, float u0im,
float i2pr_re, float i2pr_im, float i1zg_re, float i1zg_im,
int *trip_L1, int *trip_L2, int *trip_L3)
{
// 1. Przepisanie wejść z Pythona
i1_re = i1re;
i1_im = i1im;
u1_re = u1re;
u1_im = u1im;
i0_re = i0re;
i0_im = i0im;
// Obliczenie modułów (algorytm ich wymaga)
i1_mod = sqrtf(i1_re * i1_re + i1_im * i1_im);
u1_mod = sqrtf(u1_re * u1_re + u1_im * u1_im);
// Zasilenie składowych symetrycznych
i2_pr_re = i2pr_re;
i2_pr_im = i2pr_im;
i1_zg_re = i1zg_re;
i1_zg_im = i1zg_im;
// 2. Wykonanie algorytmu zabezpieczeniowego
ZDistA_komp(&args, &log_inst);
// 3. Zebranie wyników i przekazanie z powrotem do Pythona
*trip_L1 = check_struct(log_inst.P1W_L1E);
*trip_L2 = check_struct(log_inst.P1W_L2E);
*trip_L3 = check_struct(log_inst.P1W_L3E);
}