#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; }