99 lines
3.5 KiB
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;
|
|
}
|