Poprawki od Gemini, parsowanie pliku nastawy.txt

Dodany konwerter w pythonie do konwersji nastaw z docx na txt
This commit is contained in:
2026-02-19 08:32:33 +01:00
parent a8cd93ab02
commit 6c948b44fa
18 changed files with 544 additions and 313 deletions

View File

@@ -37,7 +37,8 @@ class DistanceRelayZDistA:
# Typ charakterystyki (0=poligonalna, 1=okragla)
typ_zwarc=0,
# Włącznik
wyl=False):
wyl=False,
settings=None):
# Parametry linii
self.Z_line_R = Z_line_R
@@ -55,12 +56,7 @@ class DistanceRelayZDistA:
self.fi2 = fi2
self.fi3 = fi3
self.fi4 = fi4
# Kąty pomocnicze
RnaS = math.pi / 180
self.tanfi1 = math.tan(RnaS * fi1)
self.tanfi2 = math.tan(RnaS * fi2)
# Współczynniki stref
self.z1_reach = z1_reach
self.z2_reach = z2_reach
@@ -68,9 +64,6 @@ class DistanceRelayZDistA:
self.z4_reach = z4_reach
self.z5_reach = z5_reach
# Obliczanie parametrów stref
self._calc_zones()
# Opóźnienia stref [ms]
self.t_z1 = t_z1
self.t_z2 = t_z2
@@ -85,36 +78,86 @@ class DistanceRelayZDistA:
# Kierunek
self.kierunek = kierunek
# Kompensacja ziemnozwarciowa
self.Kk1 = Kk1
self.Kk1_kat = Kk1_kat
self.KkC = KkC
self.KkC_kat = KkC_kat
# Oblicz współczynniki kompensacji
self.ReK1 = 3 * Kk1 * math.cos(RnaS * -Kk1_kat)
self.ImK1 = 3 * Kk1 * math.sin(RnaS * -Kk1_kat)
self.ReKr = 3 * KkC * math.cos(RnaS * -KkC_kat)
self.ImKr = 3 * KkC * math.sin(RnaS * -KkC_kat)
# Typ charakterystyki
self.typ_zwarc = typ_zwarc
# Stan wyłącznika
self.wyl = wyl
# Nadpisz nastawy z pliku konfiguracyjnego
if settings:
print("\n--- Nadpisywanie nastaw ZDistA z pliku konfiguracyjnego ---")
self.kierunek = int(settings.get('Kierunek', self.kierunek))
# Strefy - obsługa zarówno zasięgu w % (np. z1_reach) jak i wartości bezwzględnych (np. Z1_R)
if 'Z1_R' in settings and self.Z_line_R > 0:
self.z1_reach = float(settings['Z1_R']) / self.Z_line_R
else:
self.z1_reach = float(settings.get('z1_reach', self.z1_reach))
if 'Z2_R' in settings and self.Z_line_R > 0:
self.z2_reach = float(settings['Z2_R']) / self.Z_line_R
else:
self.z2_reach = float(settings.get('z2_reach', self.z2_reach))
if 'Z3_R' in settings and self.Z_line_R > 0:
self.z3_reach = float(settings['Z3_R']) / self.Z_line_R
else:
self.z3_reach = float(settings.get('z3_reach', self.z3_reach))
if 'Z4_R' in settings and self.Z_line_R > 0:
self.z4_reach = float(settings['Z4_R']) / self.Z_line_R
else:
self.z4_reach = float(settings.get('z4_reach', self.z4_reach))
if 'Z5_R' in settings and self.Z_line_R > 0:
self.z5_reach = float(settings['Z5_R']) / self.Z_line_R
else:
self.z5_reach = float(settings.get('z5_reach', self.z5_reach))
self.t_z1 = int(settings.get('tZ1', self.t_z1))
self.t_z2 = int(settings.get('tZ2', self.t_z2))
self.t_z3 = int(settings.get('tZ3', self.t_z3))
self.t_z4 = int(settings.get('tZ4', self.t_z4))
self.t_z5 = int(settings.get('tZ5', self.t_z5))
self.Kk1 = float(settings.get('Kk1', self.Kk1))
self.Kk1_kat = float(settings.get('Kk1_kat', self.Kk1_kat))
print("--- Koniec nadpisywania nastaw ZDistA ---\n")
# Kąty pomocnicze
RnaS = math.pi / 180
self.tanfi1 = math.tan(RnaS * self.fi1)
self.tanfi2 = math.tan(RnaS * self.fi2)
# Obliczanie parametrów stref
self._calc_zones()
# Oblicz współczynniki kompensacji
self.ReK1 = 3 * self.Kk1 * math.cos(RnaS * -self.Kk1_kat)
self.ImK1 = 3 * self.Kk1 * math.sin(RnaS * -self.Kk1_kat)
self.ReKr = 3 * self.KkC * math.cos(RnaS * -self.KkC_kat)
self.ImKr = 3 * self.KkC * math.sin(RnaS * -self.KkC_kat)
# Debug info
print(f"Nastawy zabezpieczenia ZDistA:")
print(f" Linia: R={Z_line_R:.2f} Ohm, X={Z_line_X:.2f} Ohm, |Z|={self.Z_line_mag:.2f} Ohm")
print(f" Kąt linii: {line_angle:.1f} deg")
print(f" Strefa 1: {z1_reach*100:.0f}% (natychmiast)")
print(f" Strefa 2: {z2_reach*100:.0f}% ({t_z2}ms)")
print(f" Strefa 3: {z3_reach*100:.0f}% ({t_z3}ms)")
print(f" Strefa 4: {z4_reach*100:.0f}% ({t_z4}ms)")
print(f" Strefa 5: {z5_reach*100:.0f}% ({t_z5}ms)")
print(f" Kierunek: {kierunek} (0=bez, 1=do linii, 2=do szyn)")
print(f" Kompensacja Kk1: {Kk1}, kąt: {Kk1_kat} deg")
print(f" Strefa 1: {self.z1_reach*100:.0f}% ({self.t_z1}ms)")
print(f" Strefa 2: {self.z2_reach*100:.0f}% ({self.t_z2}ms)")
print(f" Strefa 3: {self.z3_reach*100:.0f}% ({self.t_z3}ms)")
print(f" Strefa 4: {self.z4_reach*100:.0f}% ({self.t_z4}ms)")
print(f" Strefa 5: {self.z5_reach*100:.0f}% ({self.t_z5}ms)")
print(f" Kierunek: {self.kierunek} (0=bez, 1=do linii, 2=do szyn)")
print(f" Kompensacja Kk1: {self.Kk1}, kąt: {self.Kk1_kat} deg")
# Inicjalizacja stanów
self.init_state()