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
-
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 -
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’