Repo EPO do UPS

Zapytam się czata - wrzucę na forum, niech ktoś sprawdzi, czy jest dobrze. Szkoda pieniędzy na projektanta, a ja będę tańszy i to mnie weźmie Pan Inwestor.

Jasne — poniżej praktyczny, zgodny z instrukcjami producentów i realiami odbiorów ppoż. sposób wykonania sygnalizacji w REPO/EPO dla wyłączenia UPS (czyli „Emergency Power Off / Remote EPO”):

Co trzeba ustalić najpierw

  1. Typ wejścia EPO w UPS-ie
    W 99% UPS oczekuje pętli NC (normalnie zwartej) na zaciskach EPO/REPO: rozwarcie pętli natychmiast odcina wyjście UPS. To jest opisane w dokumentacji wielu producentów (np. Eaton, Schneider) i kompendiach branżowych. Ważne: pętla EPO jest obwodem sygnałowym SELV/klasa 2 – nie podajemy na nią żadnego obcego napięcia. portalelektryka.pl+3Eaton+3productinfo.schneider-electric.com+3

  2. Brak jednej „świętej” normy na szczegóły PWP/EPO
    Przepisy i PN-HD 60364-5-56 określają ogólne wymagania, ale nie dyktują, jakie dokładnie stany i gdzie mają być sygnalizowane – to pozostawia się projektantowi i uzgodnieniu z PSP. Elementem wykonawczym może być wyłącznik lub rozłącznik. Elektro+1


Prosty i poprawny układ sygnalizacji (polecany w praktyce)

Założenie: przycisk grzybkowy REPO/EPO z dwoma niezależnymi stykami NC (albo jeden NC + przekaźnik pomocniczy), osobny zasilacz 24 V DC SELV tylko do LED-ów.

Połączenia:

  • Styk NC #1 (czysto beznapięciowy) wpiąć szeregowo w pętlę EPO UPS: zacisk TB1 ↔ NC ↔ TB2.

  • Styk NC #2 wykorzystać do miejscowej sygnalizacji 24 V DC:

    • Zielona LED „UPS ZAŁ.” świeci, gdy styk NC #2 jest zamknięty (brak EPO).

    • Po naciśnięciu grzybka NC #2 się rozwiera → zielona gaśnie, a czerwona LED „UPS WYŁ. EPO” zapala się przez styk NO (z przycisku lub z przekaźnika bistabilnego), z podtrzymaniem (latch) aż do skasowania kluczem.

  • Kasowanie/Reset: kluczykowy RESET (NO) w torze przekaźnika podtrzymującego czerwoną LED. Zapobiega przypadkowemu „samoodblokowaniu” – to wymóg dobrych praktyk EPO (brak przypadkowego ponownego załączenia). sep.krakow.pl

Stany LED na płycie REPO:

  • Zielona „UPS ZAŁ.” – świeci, gdy pętla EPO jest zwarta (normalna praca).

  • Czerwona „UPS WYŁ. EPO” – świeci (z podtrzymaniem) po zadziałaniu EPO do czasu ręcznego resetu.

  • (Opcjonalnie) Żółta „USZK. PĘTLI EPO” – patrz wariant „z nadzorem pętli” niżej.

Taką „REPO z podwójną sygnalizacją” oferują nawet gotowe moduły rynkowe — ułatwia to odbiory i standaryzację na obiekcie. b2b.comex.com.pl


Wariant z nadzorem pętli (zalecany przy większych obiektach)

Jeśli inwestor/PSP wymagają nadzoru ciągłości (wykrycie przerwy/zwory), dodaj:

  • Przekaźnik kontroli linii w obwodzie 24 V DC (NIE w samych zaciskach UPS!), który obserwuje tor styków pomocniczych i sygnalizuje awarię linii (żółta LED + styk do BMS/SSP).

  • Zasada: pętla EPO UPS nadal pozostaje czysto beznapięciowa; nadzór dotyczy wyłącznie równoległego toru sygnalizacji 24 V poprzez dodatkowe, niezależne styki przycisku lub przekaźnika mechanicznie sprzężonego. To spełnia wymóg braku galwanicznego połączenia z obwodami sieci zasilającej/UPS. sep.krakow.pl


Dodatkowe wskazówki projektowe

  • Separacja i kable: prowadź pętlę EPO jako SELV, osobno od torów mocy; dobierz przewód zgodnie z wymaganiami odporności pożarowej dla tras ppoż. w danym obiekcie (uzgodnij w projekcie ppoż.). Artykuły branżowe podkreślają, że szczegóły są po stronie projektanta/uzgodnień. Elektro

  • Integracja z PWP: często stosuje się dwa przyciski obok siebie (PWP dla obiektu i EPO dla UPS) albo jeden ROP ze zdublowanymi stykami – oba rozwiązania przechodzą odbiory, gdy są logicznie opisane i uzgodnione. ISE.pl - Forum Elektryka

  • Wejścia/wyjścia UPS: część UPS ma dodatkowe styki statusowe (np. „EPO aktywny”, „na obejściu/bypass”). Warto je wyprowadzić do BMS/SSP jako potwierdzenie zadziałania – szczegóły w manualu producenta (np. Schneider: zaciski TB1/TB2 dla EPO i wytyczne prowadzenia przewodów). productinfo.schneider-electric.com

  • Filozofia bezpieczeństwa: EPO powinien natychmiast odciąć napięcie na wyjściu UPS i uniemożliwić przypadkowe ponowne załączenie bez kontroli – to jest często podkreślane w dokumentacjach producentów. Eaton+1


Minimalny schemat ideowy (opis słowny)

  • UPS EPO: TB1—[NC#1 (grzybek)]—TB2

  • Sygnalizacja 24 V DC: +24V—[NC#2]—(LED zielona)—0V; równolegle: +24V—[NO (grzybek) → przekaźnik podtrzymujący]—(LED czerwona)—0V; RESET kluczykowy rozwiera pętlę podtrzymania.

  • (Opcja) Nadzór: przekaźnik kontroli linii w torze 24 V dla LED-ów, wyjście → żółta LED + sygnał do BMS.


Dlaczego tak?

  • Nie wstrzykujemy żadnego napięcia w zaciski EPO UPS (wymóg producentów i dobrej praktyki). productinfo.schneider-electric.com+1

  • Otrzymujesz czytelną, lokalną sygnalizację (zielona/czerwona) jak w gotowych panelach REPO, z opcjonalnym nadzorem pętli (żółta). b2b.comex.com.pl

  • Układ jest zgodny z podejściem, że szczegóły sygnalizacji są po stronie projektu i uzgodnień z PSP (brak twardej normy produktowej). Elektro+1

Jeśli chcesz, mogę od razu narysować prosty schemat (ASCII albo .pdf z rysunkiem DIN) na Twoje oznaczenia zacisków i konkretny model UPS — daj tylko znać model i czy potrzebujesz wariantu z nadzorem pętli.

 from reportlab.lib.pagesizes import A4
 from reportlab.pdfgen import canvas
 from reportlab.lib import colors
 from reportlab.lib.units import mm

 # File path

 file_path = “/mnt/data/REPO_EPO_Ups_Schematic_Loop_Supervision.pdf”

 # Page setup

 width, height = A4
 c = canvas.Canvas(file_path, pagesize=A4)
 c.setTitle(“REPO/EPO UPS – DIN Schematic with Loop Supervision”)

 # Helper functions

 def draw_nc(x, y, length=18*mm, label=“NC”):
 “”"
 Draw a normally closed contact (NC): slanted line touching fixed contact.
 “”"
 # fixed contact
 c.setStrokeColor(colors.black)
 c.line(x, y, x + length, y)
 # moving contact (slanted touching)
 c.line(x + length - 6*mm, y + 6*mm, x + length, y)
 # label
 c.setFont(“Helvetica”, 8)
 c.drawString(x, y + 3*mm, label)

 def draw_no(x, y, length=18*mm, label=“NO”):
 “”"
 Draw a normally open contact (NO): gap between fixed and moving contact.
 “”"
 c.setStrokeColor(colors.black)
 # fixed contact
 c.line(x, y, x + length, y)
 # moving arm (slanted, not touching)
 c.line(x + length - 6*mm, y + 6*mm, x + length - 2*mm, y)
 # small gap
 c.setFont(“Helvetica”, 8)
 c.drawString(x, y + 3\*mm, label)

 def draw_led(x, y, text=“LED”, color=colors.green):
 “”"
 Draw an LED symbol: diode triangle-like with label; here simplified as circle + label.
 “”"
 c.setStrokeColor(colors.black)
 c.setFillColor(color)
 c.circle(x, y, 2.8*mm, stroke=1, fill=1)
 c.setFillColor(colors.black)
 c.setFont(“Helvetica”, 8)
 c.drawString(x + 4*mm, y - 2\*mm, text)

 def draw_block(x, y, w, h, title):
 c.setStrokeColor(colors.black)
 c.setFillColor(colors.whitesmoke)
 c.rect(x, y, w, h, stroke=1, fill=1)
 c.setFillColor(colors.black)
 c.setFont(“Helvetica-Bold”, 10)
 c.drawCentredString(x + w/2, y + h + 3\*mm, title)

 def draw_terminal(x, y, label, orientation=“left”):
 # small filled rectangle terminal
 c.setFillColor(colors.black)
 c.rect(x, y - 1*mm, 2*mm, 2*mm, stroke=0, fill=1)
 c.setFillColor(colors.black)
 c.setFont(“Helvetica”, 8)
 if orientation == “left”:
 c.drawRightString(x - 1*mm, y - 2*mm, label)
 else:
 c.drawString(x + 3*mm, y - 2\*mm, label)

 def draw_ground(x, y):
 c.setStrokeColor(colors.black)
 c.line(x, y, x, y - 3*mm)
 c.line(x - 3*mm, y - 3*mm, x + 3*mm, y - 3*mm)
 c.line(x - 2*mm, y - 4.5*mm, x + 2*mm, y - 4.5*mm)
 c.line(x - 1*mm, y - 6*mm, x + 1*mm, y - 6\*mm)

 # Title

 c.setFont(“Helvetica-Bold”, 14)
 c.drawString(20*mm, height - 20*mm, “REPO / EPO UPS – Schematic with Loop Supervision (DIN style)”)

 c.setFont(“Helvetica”, 9)
 c.drawString(20*mm, height - 26*mm, “Opis: Pętla EPO UPS (SELV, bezpotencjałowa) + lokalna sygnalizacja 24 V DC z nadzorem ciągłości.”)
 c.drawString(20*mm, height - 31*mm, “Uwaga: Nie podawaj żadnego napięcia na zaciski EPO UPS. Nadzór dotyczy wyłącznie toru sygnalizacji 24 V DC.”)

 # UPS block (EPO terminals)

 ups_x, ups_y = 20*mm, height - 100*mm
 ups_w, ups_h = 40*mm, 25*mm
 draw_block(ups_x, ups_y, ups_w, ups_h, “UPS”)
 draw_terminal(ups_x + ups_w, ups_y + ups_h - 8*mm, “TB1 (EPO)”, orientation=“right”)
 draw_terminal(ups_x + ups_w, ups_y + 8*mm, “TB2 (EPO)”, orientation=“right”)

 # EPO mushroom button block

 btn_x, btn_y = 95*mm, height - 105*mm
 btn_w, btn_h = 40*mm, 45*mm
 draw_block(btn_x, btn_y, btn_w, btn_h, “PRZYCISK EPO / REPO”)
 c.setFont(“Helvetica”, 8)
 c.drawString(btn_x + 3*mm, btn_y + btn_h - 9*mm, “Styk 1: NC (tor EPO UPS)”)
 c.drawString(btn_x + 3*mm, btn_y + btn_h - 16*mm, “Styk 2: NC (zielona)”)
 c.drawString(btn_x + 3*mm, btn_y + btn_h - 23*mm, “Styk 3: NO (czerwona/latch)”)
 c.drawString(btn_x + 3*mm, btn_y + 4*mm, “Reset kluczykowy: NO (kasowanie)”)

 # Draw EPO loop wiring (UPS TB1/TB2 → NC#1)

 # From UPS TB1 terminal to NC contact

 epo_y = ups_y + ups_h - 8*mm
 c.line(ups_x + ups_w + 2*mm, epo_y, btn_x - 10*mm, epo_y)
 draw_nc(btn_x - 10*mm, epo_y, label=“NC #1”)
 c.line(btn_x + 8*mm, epo_y, btn_x + btn_w + 15*mm, epo_y)

 # Down back to TB2

 c.line(btn_x + btn_w + 15*mm, epo_y, btn_x + btn_w + 15*mm, ups_y + 8*mm)
 c.line(btn_x + btn_w + 15*mm, ups_y + 8*mm, ups_x + ups_w + 2*mm, ups_y + 8\*mm)

 # Label SELV

 c.setFont(“Helvetica-Oblique”, 8)
 c.drawString(ups_x + ups_w + 4*mm, ups_y + ups_h + 2*mm, “Pętla EPO – SELV / bezpotencjałowa”)

 # 24V DC supply block

 ps_x, ps_y = 20*mm, height - 160*mm
 ps_w, ps_h = 35*mm, 22*mm
 draw_block(ps_x, ps_y, ps_w, ps_h, “ZASILACZ 24 V DC (SELV)”)

 # +24V and 0V terminals

 draw_terminal(ps_x + ps_w, ps_y + ps_h - 7*mm, “+24V”, orientation=“right”)
 draw_terminal(ps_x + ps_w, ps_y + 7*mm, “0V”, orientation=“right”)

 # Green LED path: +24V → NC #2 → LED green → 0V

 path_y_green = ps_y + ps_h - 7*mm
 c.line(ps_x + ps_w + 2*mm, path_y_green, btn_x - 10*mm, path_y_green)
 draw_nc(btn_x - 10*mm, path_y_green, label=“NC #2”)
 c.line(btn_x + 8*mm, path_y_green, btn_x + 8*mm + 10*mm, path_y_green)
 draw_led(btn_x + 8*mm + 12\*mm, path_y_green, text=“LED Zielona – „UPS ZAŁ.””, color=colors.green)

 # from LED to 0V

 c.line(btn_x + 8*mm + 18*mm, path_y_green, ps_x + ps_w + 2*mm, ps_y + 7*mm)

 # Red LED latch path: +24V → NO → latch relay coil → LED red → 0V

 path_y_red = path_y_green - 15*mm
 c.line(ps_x + ps_w + 2*mm, path_y_red, btn_x - 10*mm, path_y_red)
 draw_no(btn_x - 10*mm, path_y_red, label=“NO (EPO)”)

 # Latch relay coil block

 coil_x = btn_x + 8*mm
 coil_y = path_y_red - 5*mm
 c.setStrokeColor(colors.black)
 c.rect(coil_x, coil_y, 14*mm, 10*mm, stroke=1, fill=0)
 c.setFont(“Helvetica”, 7.5)
 c.drawCentredString(coil_x + 7*mm, coil_y + 12*mm, “PRZEKAŹNIK”)
 c.drawCentredString(coil_x + 7*mm, coil_y + 4*mm, “PODTRZYM.”)

 # wire through coil

 c.line(btn_x + 8*mm - 2*mm, path_y_red, coil_x, path_y_red)
 c.line(coil_x + 14*mm, path_y_red, coil_x + 14*mm + 10\*mm, path_y_red)

 # Red LED

 draw_led(coil_x + 14*mm + 12*mm, path_y_red, text=“LED Czerwona – „UPS WYŁ. EPO””, color=colors.red)

 # to 0V

 c.line(coil_x + 14*mm + 18*mm, path_y_red, ps_x + ps_w + 2*mm, ps_y + 7*mm)

 # Latch contact (self-hold) parallel to NO EPO, with RESET key NO in series

 # Draw branch up from after NO to before coil through contact NO (latching)

 branch_y = path_y_red - 10\*mm

 # From +24V side to latch branch

 c.line(ps_x + ps_w + 2*mm, path_y_red, ps_x + ps_w + 2*mm, branch_y)

 # Latch NO contact

 draw_no(btn_x + 28\*mm, branch_y, label=“NO (styk pomocn. przekaźnika)”)

 # RESET key (NO) in series

 draw_no(btn_x + 52\*mm, branch_y, label=“RESET klucz NO”)

 # Connect branch to coil input

 c.line(btn_x + 70*mm, branch_y, btn_x + 70*mm, path_y_red)
 c.line(btn_x + 70\*mm, path_y_red, coil_x, path_y_red)

 # Supervision relay block monitoring 24 V line (NOT UPS EPO loop)

 sup_x, sup_y = 115*mm, height - 165*mm
 sup_w, sup_h = 45*mm, 24*mm
 draw_block(sup_x, sup_y, sup_w, sup_h, “PRZEKAŹNIK NADZORU LINII 24 V”)
 c.setFont(“Helvetica”, 8)
 c.drawString(sup_x + 3*mm, sup_y + sup_h - 10*mm, “Nadzór: tor sygnalizacji 24 V”)
 c.drawString(sup_x + 3*mm, sup_y + 4*mm, “Wyjście: styk awarii + LED żółta”)

 # Tap the 24 V path (between NC#2 and LED green) to supervision relay input

 tap_y = path_y_green
 c.line(btn_x + 8*mm + 10*mm, tap_y, sup_x - 5*mm, tap_y)
 c.line(sup_x - 5*mm, tap_y, sup_x - 5*mm, sup_y + sup_h - 7*mm)
 c.line(sup_x - 5*mm, sup_y + sup_h - 7*mm, sup_x, sup_y + sup_h - 7\*mm)

 # Yellow LED for fault

 draw_led(sup_x + sup_w + 15*mm, sup_y + sup_h - 7*mm, text=“LED Żółta – „USZK. PĘTLI EPO/SYGN.””, color=colors.yellow)

 # Connect supervision relay output to yellow LED and to 0V

 c.line(sup_x + sup_w, sup_y + sup_h - 7*mm, sup_x + sup_w + 10*mm, sup_y + sup_h - 7*mm)
 c.line(sup_x + sup_w + 20*mm, sup_y + sup_h - 7*mm, ps_x + ps_w + 2*mm, ps_y + 7\*mm)

 # BMS/SSP dry contact from supervision relay

 c.setFont(“Helvetica”, 8)
 c.drawString(sup_x + 3*mm, sup_y + sup_h/2 - 2*mm, “Styk wyj. (AWARIA) → BMS/SSP”)
 c.line(sup_x + sup_w/2, sup_y + sup_h/2 - 5*mm, sup_x + sup_w + 25*mm, sup_y + sup_h/2 - 5*mm)
 c.line(sup_x + sup_w + 25*mm, sup_y + sup_h/2 - 5*mm, sup_x + sup_w + 25*mm, sup_y + sup_h/2 - 15*mm)
 c.circle(sup_x + sup_w + 25*mm, sup_y + sup_h/2 - 15*mm, 1.2*mm, stroke=1, fill=1)
 c.drawString(sup_x + sup_w + 28*mm, sup_y + sup_h/2 - 18*mm, “Do BMS/SSP (wejście NO/NC wg projektu)”)

 # Notes and legends

 legend_x = 20*mm
 legend_y = 30*mm
 c.setFont(“Helvetica-Bold”, 10)
 c.drawString(legend_x, legend_y + 30*mm, “Legenda i uwagi:”)
 c.setFont(“Helvetica”, 8.5)
 legend_lines = \[
 “1) Pętla EPO UPS: wyłącznie styki bezpotencjałowe (SELV), brak wprowadzania napięcia obcego.”,
 “2) Sygnalizacja lokalna 24 V DC: zielona – praca normalna; czerwona – zadziałanie EPO (z podtrzymaniem),”,
 "   żółta – uszkodzenie/rozwarcie toru sygnalizacji (nadzór linii).",
 “3) Reset wymagany kluczem – zapobiega przypadkowemu samoczynnemu powrotowi.”,
 “4) Nadzór linii dotyczy toru 24 V sygnalizacji, nie pętli EPO UPS.”,
 “5) Rozdziel okablowanie SELV od torów mocy; oznacz przewody i zaciski zgodnie z projektem.”,
 “6) Wyprowadź ‚EPO ACTIVE’/‚BY-PASS’ z UPS (jeśli dostępne) do BMS/SSP jako potwierdzenie.”
 \]
 for i, line in enumerate(legend_lines):
 c.drawString(legend_x, legend_y + (24 - i*5)\*mm/6, line)

 # Borders / zones

 c.setStrokeColor(colors.lightgrey)
 c.rect(15*mm, 20*mm, width - 30*mm, height - 50*mm, stroke=1, fill=0)
 c.setFont(“Helvetica-Oblique”, 7.5)
 c.setFillColor(colors.grey)
 c.drawRightString(width - 16*mm, 18*mm, “Rys. poglądowy DIN – do uzgodnienia z projektantem/PSP”)

 # Footer

 c.setFillColor(colors.black)
 c.setFont(“Helvetica”, 7.5)
 c.drawString(16*mm, 12*mm, “Projekt: REPO/EPO UPS – wariant z nadzorem pętli | Skala poglądowa | Data: 2025-10-01”)

 c.showPage()
 c.save()

 file_path
 Wynik
 ‘/mnt/data/REPO_EPO_Ups_Schematic_Loop_Supervision.pdf’