Následující příklad vyhotov v prostředí TIA verze 14 nebo vyšší. Pro otestování použij simulátor a vytvoř časové průběhy signálů, ze kterých bude zřejmá správná funkcionalita. Kód řádně okomentuj.
FUNKČNÍ BLOK PRO ŘÍZENÍ VENTILU
Navrhni a naprogramuj funkční blok pro ovládání proporcionálního hydraulického ventilu. Obdobný ventil se využívá pro ovládání: hydraulických válců, hydromotorů a čerpadel s proměnlivým geometrickým objemem. Ventil je ovládán pomocí dvou proporcionálních solenoidů (PosDir a NegDir). Výstupem na jednotlivé solenoidy je proud v mA. Každá cívka má vlastní proudové limity (minimální proud a maximální proud.) Minimální proud odpovídá Standstill hodnotě (ventil je uzavřen, nulový průtok kapaliny skrze ventil). Maximální proud odpovídá maximálnímu otevření ventilu (maximální průtok kapaliny v daném směru). V jeden okamžik může být aktivní pouze jedna cívka (PosDir nebo NegDir). Jelikož reálný systém musí pracovat se setrvačností, je potřeba implementovat DeadTime pro reverzaci. DeadTime je časová konstanta, která se aktivuje vždy při změně směru PosDir <-> NegDir. Po tuto dobu je na oba solenoidy posílán minimální proud. Vstupem pro ovládání solenoidů je hodnota Command nabývající hodnot od -1000 .. 0 .. 1000. Hodnota – 1000 značí maximální proud na solenoid NegDir adekvátně hodnota 1000 odpovídá maximálnímu proudu na PosDir. Hodnota 0 odpovídá minimálním proudům na obou solenoidech. Hodnota Command není proud, ale hodnota otevření v procentech x 10. Pro větší plynulost ovládání je potřeba do FB implementovat rampovací funkci. Každý solenoid má dvě rampy: akcelerační a decelerační. Strmost rampy je definována časem pro přestavení ventilu z MIN na MAX. Akcelerace a decelerace můžou být rozdílné (čas přestavení z minima na maximum může být odlišný od přestavení z maxima na minimum). Posledními vstupy do FB jsou povolení pohybu pro daný směr (EnaPosDir, EnaNegDir), které musí být TRUE. Dojde-li ke ztrátě povolení během pohybu, hodnota na výstupu se dále neinkrementuje. V tomto případě FB umožní pouze snížení aktuální hodnoty na daný výstup snížením Commandu (FB nedekrementuje automaticky).
1 Příklad TIA
Vstupy:
EnaPosDir // Povolení pohybu v daném směru
EnaNegDir // Povolení pohybu v daném směru Command // Příkaz -1000 .. 0 .. 1000 [procenta * 10]
Výstupy:
OutPosDir // Výstup v daném směru [mA]
OutNegDir // Výstup v daném směru [mA]
Konfigurační parametry:
CurPosDirMin // Minimální proud na solenoid v daném směru [mA]
CurPosDirMax // Maximální proud na solenoid v daném směru [mA] CurNegDirMin // Minimální proud na solenoid v daném směru [mA] CurNegDirMax // Maximální proud na solenoid v daném směru [mA] RampPosDirUp // Čas změny z min. na max. otevření v daném směru [ms] RampPosDirDown // Čas změny z max. na min. otevření v daném směru [ms] RampNegDirUp // Čas změny z min. na max. otevření v daném směru [ms] RampNegDirDown // Čas změny z max. na min. otevření v daném směru [ms] DeadTime // Kompenzace setrvačnosti při reverzaci [ms]
Status:
Standstill // Oba výstupy jsou na minimu
Accel // Jeden z výstupů zrychluje Decel // Jeden z výstupů zpomaluje OutPosDirProc // Výstup v daném směru [%] OutNegDirProc // Výstup v daném směru [%] bBussy // TRUE je-li FB aktivní (změna na výstupu) bDone // TRUE je-li výstupní hodnota je rovna žádané bError // Chyba nErrorId // Kód chyby