====== Blok Switcher (v3.2) ====== {{:cs:mervis-ide:35-help:switcherblock_v2.0.png}} ===== Popis ===== * **Plný název funkčního bloku:** Lib.Mervis.v3_2.SwitcherBlock * **Dědí z:** [[en:mervis-ide:35-help:035-software_basic:060-libraries:060-lib-mervis:015-utilities:040-base-function-blocks:010-basealarmblock:v2_0|Lib.Mervis.v2_0.BaseAlarmBlock]] * **Požadované reference projektu:** Lib.Mervis, Lib.Mervis.Alarms Univerzální blok pro bezpečné spínání jednostupňového fyzického zařízení (čerpadlo, ventilátor, kompresor, ventil, topná patrona). Sdružuje standardní funkcionalitu potřebnou pro řízení takového zařízení: provozní režimy Automatika / Ručně zapnuto / Ručně vypnuto, dohled nad zpětnou vazbou běhu, dva vestavěné alarmy (Nespuštění a Porucha/Havarijní stav), periodické protočení zařízení, doběh po vypnutí, havarijní odstavení s nejvyšší prioritou a servisní čítače (provozní hodiny a počet startů). Protože dědí z ''BaseAlarmBlock'', poskytuje blok jednotné alarmové rozhraní, které lze řetězit do projektového alarmového systému. ===== Volání ve ST ===== PROGRAM PUMP_CONTROL_DEMO VAR Heating_Demand : BOOL; Pressure_Switch : BOOL; Thermal_Fault : BOOL; PumpSwitcher : Lib.Mervis.v3_2.SwitcherBlock; Pump_Relay : BOOL; END_VAR PumpSwitcher( OperatingMode := OperatingModeType#Automatic, Demand := Heating_Demand, Feedback := BOOL_TO_USINT(Pressure_Switch), // 0/1; použijte 2 pro ignorování zpětné vazby Failure := Thermal_Fault, RunDown := T#2m, // doběh 2 min pro odvedení zbytkového tepla FeedbackTimeout := T#10s // čekat 10 s na vytvoření tlaku ); Pump_Relay := PumpSwitcher.Command; END_PROGRAM ===== Vstupy ===== ^ Název ^ Datový typ ^ Povolený rozsah ^ Retain ^ Povinné ^ Popis ^ | OperatingMode | [[en:mervis-ide:35-help:035-software_basic:060-libraries:060-lib-mervis:015-utilities:030-types:operatingmodetype|OperatingModeType]] | | Ano | Ne | Požadovaný provozní režim (Automatika / Zapnuto / Vypnuto). Režim ''Off'' má nejvyšší prioritu a zabraňuje spuštění jakoukoli jinou funkcí. Výchozí hodnota: ''Off''. | | Demand | bool | | Ne | Ano | Požadavek na provoz v automatickém režimu (standardní průmyslový signál „požadavek na topení / požadavek na chod“). V manuálních režimech je ignorován. | | Feedback | usint | 0..2 | Ne | Ne | Zpětná vazba běhu. Logický signál lze přímo mapovat pomocí ''BOOL_TO_USINT''. Výchozí hodnota: ''2'' (zpětná vazba není připojena → logika zpětné vazby je vynechána). | | FeedbackManual | bool | | Ne | Ne | Indikuje ruční hardwarové ovládání (např. přepínač HOA na rozvaděči). Promítá se do ''CompositeState''. Výchozí hodnota: ''false''. | | Failure | bool | | Ne | Ne | Externí hlášení poruchy zařízení (vypadlý motorový jistič, tepelná ochrana, porucha měniče, …). Vyvolá alarm **Failure**. Výchozí hodnota: ''false''. | | EmergencyShutdown | bool | | Ne | Ne | Havarijní odstavení. Okamžitě deaktivuje ''Command'' a má prioritu nad všemi režimy. Výchozí hodnota: ''false''. | | OperatingHoursReset | bool | | Ne | Ne | Náběžná hrana, která resetuje čítače provozních hodin a počtu startů. Výchozí hodnota: ''false''. | | ControlFlags | uint | 0..15 | Ne | Ne | Pole bitů definující rozšířené chování (viz tabulka níže). Výchozí hodnota: ''0''. | | RunDown | time | | Ne | Ne | Doba doběhu po vypnutí: zařízení zůstane v chodu po tuto dobu po zrušení ''Demand'' (např. kvůli odvodu zbytkového tepla). Pokud je ''0'', je funkce vypnuta. Výchozí hodnota: ''T#5m''. | | FeedbackTimeout | time | | Ne | Ne | Maximální doba, po kterou se čeká na aktivaci ''Feedback'' po vydání ''Command'', než je vyvolán alarm **Not Run**. Výchozí hodnota: ''T#30s''. | | KickFunctionInterval | time | | Ne | Ne | Interval periodického protočení zařízení (ochrana proti zadření). Pokud je ''0'', je funkce vypnuta. Výchozí hodnota: ''T#0s'' (vypnuto). | | KickFunctionDuration | time | | Ne | Ne | Doba, po kterou zařízení běží během periodického protočení. Výchozí hodnota: ''T#1m''. | | NotRunAlarmPriority | [[en:mervis-ide:35-help:035-software_basic:060-libraries:060-lib-mervis:015-utilities:030-types:alarmprioritytype|AlarmPriorityType]] | | Ne | Ne | Třída alarmu pro alarm „Nespuštění“ (Not Running). Výchozí hodnota: ''32''. | | FailureAlarmPriority | AlarmPriorityType | | Ne | Ne | Třída alarmu pro externí alarm poruchy. Výchozí hodnota: ''32''. | | EmergencyAlarmPriority | AlarmPriorityType | | Ne | Ne | Třída alarmu pro reakci na havarijní odstavení jako alarm (viz bit 3 v ''ControlFlags''). Výchozí hodnota: ''32''. | **Popis hodnot Feedback** ^ Hodnota ^ Význam ^ | 0 | Zpětná vazba není aktivní (zařízení neběží). | | 1 | Zpětná vazba je aktivní (zařízení běží). | | 2 | Zpětná vazba není připojena (výchozí stav) — logika zpětné vazby je vynechána; stav běhu odpovídá hodnotě ''Command''. | **Popis hodnot ControlFlags** ^ Bit ^ Maska ^ Význam ^ | 0 | 1 | Pokud je TRUE, je kompletně vypnuto veškeré vyhodnocování alarmů. | | 1 | 2 | Pokud je TRUE, ''Command'' je při aktivní poruše zrušen v režimu **Automatika**. | | 2 | 4 | Pokud je TRUE, ''Command'' je při aktivní poruše zrušen v režimu **Ručně (Zapnuto)**. | | 3 | 8 | Pokud je TRUE, ''EmergencyShutdown'', ke kterému dojde současně s požadavkem na spuštění, je také hlášeno jako alarm **Failure**. | | 4..15 | - | Nepoužito. | ===== Výstupy ===== ^ Název ^ Datový typ ^ Popis ^ | Command | bool | Výstupní povel k provozu (TRUE = běh, FALSE = zastavení). | | CompositeState | uint | Pole bitů popisující kompletní interní stav bloku (viz tabulka níže). | | OperatingHours | time | Celková akumulovaná doba běhu (uchovávaná). Resetuje se pomocí ''OperatingHoursReset''. | | StartCounter | udint | Celkový počet startů (uchovávaný). Resetuje se pomocí ''OperatingHoursReset''. | Protože je blok potomkem ''BaseAlarmBlock'', poskytuje také zděděné **alarmové rozhraní** (''AlarmsInterface'' / ''Reset'' / ''Acknowledge'' / ''GetActiveAlarmsMask'' …), které slouží k začlenění jeho dvou interních alarmů do projektového alarmového systému. **Popis hodnot výstupu CompositeState** ^ Bit ^ Maska ^ Význam ^ | 0 | 1 | ''Command'' je aktivní. | | 1 | 2 | Zpětná vazba je aktivní (''Feedback'' = 1 nebo ''Feedback'' = 2 při aktivním ''Command''). | | 2 | 4 | Je aktivní manuální režim (''OperatingMode'' ≠ Automatic nebo je hlášeno ruční hardwarové ovládání). | | 3 | 8 | Je aktivní režim Ručně zapnuto (''OperatingMode'' = On nebo ruční ovládání při běhu). | | 4 | 16 | ''Demand'' je aktivní. | | 5 | 32 | Právě probíhá periodické protočení. | | 6 | 64 | Právě probíhá doběh po vypnutí. | | 7 | 128 | Je přítomen aktivní alarm. | | 8..9 | - | Aktuální reprezentace ''OperatingMode''. | ===== Podrobný popis funkce ===== Blok používá interní stavový automat (Off → WaitForFeedback → On → Run-Down s paralelními větvemi Failure, Kick a Emergency) a spravuje **dva alarmy**: * **Not Run (Nespuštění):** vyvolá se, pokud je vydán ''Command'', ale ''Feedback'' se nestane aktivním během ''FeedbackTimeout''. Priorita = ''NotRunAlarmPriority''. * **Failure (Porucha):** vyvolává jej externí vstup ''Failure'' (a volitelně také ''EmergencyShutdown'', viz bit 3 v ''ControlFlags''). Priorita = ''FailureAlarmPriority'' / ''EmergencyAlarmPriority''. Hlavní funkce: * **Provozní režimy:** Automatika, Ručně zapnuto, Ručně vypnuto. Režim ''Off'' má nejvyšší prioritu; ''EmergencyShutdown'' přebíjí všechny režimy. * **Dohled nad zpětnou vazbou:** ověřuje, že se zařízení skutečně spustilo; pokud ''Feedback'' = 2, logika zpětné vazby je vynechána a stav běhu odpovídá ''Command''. * **Doběh po vypnutí:** po zrušení ''Demand'' v automatickém režimu zařízení pokračuje v chodu po dobu ''RunDown'' (např. pro odvod zbytkového tepla), poté se zastaví. Zařízení, které nikdy nepotvrdilo běh zpětnou vazbou nebo bylo vypnuto již v prvním cyklu, dobu doběhu přeskočí. * **Periodické protočení:** v automatickém režimu, pokud bylo zařízení nečinné po dobu ''KickFunctionInterval'', je spuštěno na ''KickFunctionDuration'', aby se zabránilo jeho zadření. Protočení má vlastní dohled nad zpětnou vazbou. * **Havarijní odstavení:** okamžitě nastaví ''Command'' = FALSE bez ohledu na provozní režim. Pokud je nakonfigurováno (bit 3 v ''ControlFlags''), současný požadavek na spuštění vyvolá alarm Failure. * **Reakce na poruchu:** bity 1 a 2 v ''ControlFlags'' určují, zda bude ''Command'' při poruše zrušen samostatně pro automatický a manuální režim (např. aby kritické čerpadlo zůstalo při méně závažném alarmu v manuálním režimu v provozu). * **Servisní čítače:** akumulované ''OperatingHours'' a ''StartCounter'', které lze resetovat pomocí ''OperatingHoursReset''. **Logika vykonávání:** V automatickém režimu je spuštění vyžádáno vstupem ''Demand''; v režimu Ručně zapnuto je vynuceno. Po požadavku na spuštění blok přejde do stavu //WaitForFeedback//, aktivuje ''Command'' a čeká maximálně ''FeedbackTimeout'' na ''Feedback''. Pokud je zpětná vazba potvrzena, přejde do stavu //On// a zvýší ''StartCounter''; při překročení časového limitu vyvolá alarm **Not Run**. Vstup ''Failure'' nebo ''EmergencyShutdown'' kdykoli přesměruje řízení do odpovídající větve. Po zrušení ''Demand'' zajistí větev //Run-Down// běh zařízení ještě po dobu ''RunDown'' a poté jeho zastavení. ===== Příklad použití z reálného projektu ===== **Scénář: Redundantní čerpadlo chladiva pro kolektor ledové plochy** Dvě čerpadla (M4/M5) zajišťují cirkulaci chladiva do ledové plochy. Každé čerpadlo je řízeno vlastním blokem ''SwitcherBlock'': * Požadavek z logiky střídání čerpadel Lead/Lag je přiveden na **//Demand//**; diferenční tlakový spínač (dP) je mapován na **//Feedback//** pomocí ''BOOL_TO_USINT''. * Pokud PLC aktivuje ''Command'', ale během **//FeedbackTimeout//** = ''T#10s'' nevznikne signál dP, alarm **Not Run** indikuje například prasklou spojku nebo zadřený rotor a logika střídání může přepnout na záložní čerpadlo. * Porucha motorové ochrany nebo frekvenčního měniče je přivedena na **//Failure//**; při nastaveném bitu 1 v ''ControlFlags'' je ''Command'' při poruše v automatickém režimu zrušen. * Aby nedošlo k zadření během letní odstávky, **//KickFunctionInterval//** = ''T#7d'' a **//KickFunctionDuration//** = ''T#30s'' zajistí týdenní protočení čerpadla. * Krátký **//RunDown//** udržuje po ukončení požadavku krátce cirkulaci chladiva. ''Command'' ovládá relé čerpadla; ''AlarmsInterface'' je připojeno do agregátoru alarmů strojovny a ''OperatingHours'' / ''StartCounter'' jsou využity v servisním přehledu. ===== Verze ===== {{indexmenu>.120-switcherblock}}