Files
dist_tester/src/mocks.c

99 lines
3.5 KiB
C

#include "mocks.h"
// Dołączamy oryginalny kod (lub kompilujemy go razem)
// Uwaga: w oryginalnym pliku C musisz zakomentować oryginalne #include i dodać #include "mocks.h"
#include "ZDistA_komp.c"
// Struktury parametrów (muszą być zgodne z tymi w kodzie, tu uproszczone deklaracje jeśli brak plików .h)
// W rzeczywistości powinieneś dołączyć oryginalne pliki nagłówkowe z definicjami struktur logic i args.
int main() {
// 1. Alokacja struktur
struct ZDistA_komp_args args;
struct ZDistA_komp_logic logic;
memset(&args, 0, sizeof(args));
memset(&logic, 0, sizeof(logic));
// 2. Symulacja sygnałów wejściowych (Hardware Registers)
float sim_I1_orta, sim_I1_ortb, sim_I1;
float sim_U1_orta, sim_U1_ortb, sim_U1;
// ... (zadeklaruj resztę: I2, I3, U2, U3, U12, I0, itd.)
struct binary_io sim_bl_in = {0};
struct binary_io sim_bl_k_in = {0};
// Parametry nastawcze (Dummy params)
struct param_I_struct pI = { .znam_wtor = 5.0, .znam_pierw = 400.0 };
struct param_U_struct pU = { .znam_wtor = 100.0 };
// 3. Mapowanie wejść w args (to co robiłby system operacyjny)
args.io.i1_orta_float_in = &sim_I1_orta;
args.io.i1_ortb_float_in = &sim_I1_ortb;
args.io.i1_float_in = &sim_I1; // Moduł prądu
args.io.u1_orta_float_in = &sim_U1_orta;
args.io.u1_ortb_float_in = &sim_U1_ortb;
// ... (przypisz resztę wskaźników dla wszystkich faz i składowych)
args.io.i_param_an_ptr_in = (u32*)&pI;
args.io.u_param_an_ptr_in = (u32*)&pU;
// Ustawienie nastaw zabezpieczeniowych (przykładowe)
args.params.X1_Zr1_LE = 10.0; // 10 Ohm
args.params.R1_Zf1_LE = 5.0;
args.params.kp = 1.0;
args.params.fi1 = 75.0; // Kąt linii
// ... ustaw resztę nastaw (bity, strefy itd.)
// 4. Inicjalizacja algorytmu
if (ZDistA_komp_initlog(&args, &logic) != 0) {
printf("Błąd inicjalizacji!\n");
return -1;
}
// 5. Otwarcie plików z danymi
FILE *f_in = fopen("pomiary.csv", "r");
FILE *f_out = fopen("wyniki.csv", "w");
if (!f_in) { printf("Brak pliku pomiary.csv\n"); return -1; }
fprintf(f_out, "Z1_R,Z1_X,Trip_L1E,Trip_L2E,Trip_L3E\n"); // Nagłówek
// Bufor na linię CSV
char line[1024];
// Pomiń nagłówek wejściowy
fgets(line, sizeof(line), f_in);
// 6. Główna pętla symulacyjna
int step = 0;
while (fgets(line, sizeof(line), f_in)) {
// Parsowanie CSV: Zakładamy format: I1_Re, I1_Im, U1_Re, U1_Im...
// Musisz dostosować sscanf do swojego formatu pliku CSV
sscanf(line, "%f,%f,%f,%f",
&sim_I1_orta, &sim_I1_ortb,
&sim_U1_orta, &sim_U1_ortb);
// Oblicz moduły (algorytm wymaga też modułów w 'i1_float_in')
sim_I1 = sqrtf(sim_I1_orta*sim_I1_orta + sim_I1_ortb*sim_I1_ortb);
// ... oblicz resztę modułów
// WYKONANIE ALGORYTMU
ZDistA_komp(&args, &logic);
// Zapis wyników
// Odczytujemy ze struktury 'logic', tam gdzie algorytm zapisał wyniki
fprintf(f_out, "%f,%f,%d,%d,%d\n",
logic.dw.Z.R[0], // Impedancja L1-E Re
logic.dw.Z.X[0], // Impedancja L1-E Im
logic.P1W_L1E.val, // Pobudzenie strefy 1 L1-E
logic.P1W_L2E.val,
logic.P1W_L3E.val
);
step++;
}
fclose(f_in);
fclose(f_out);
printf("Test zakończony. Przetworzono %d próbek.\n", step);
return 0;
}