Dnes se opět po nějaké době vrátíme k miniPLC s malým webserverem s názvem iDo, které vyrábí i prodává přímo firma HW server. Tentokrát však ve největší verzi PRO, která nabízí více vstupů, výstupů, 1-Wire rozhraní i RS-232 výstup pro případné připojení LCD displeje. Také se vyznačuje pro průmyslové použití praktičtější "schránkou". Více o hardwaru PLC iDO najdete v článku "NOVINKA! - MiniPLC iDo PRO aneb když potřebujeme více".
Na stránkách serveru automatizace.HW.cz jste si již mohli přečíst o iDo několik popisných i praktických článků. Například popis základů programování miniPLC iDO najdete v článcích "Mini PLC iDo a hrátky s tlačítky - 1. část, "Mini PLC iDo a hrátky s tlačítky - 2. část" a "MiniPLC iDo - nové vlastnosti s novým firmwarem".V tomto článku si pak čistě prakticky ukážeme jednoduchý prográmek pro kontrolu teploty a hladiny vody v nádrži.
Z hardwarového pohledu je celý systém složen z následujících komponent:
- magnetický plovákový snímač hladiny Honeywell (viz TEST "Magnetický plovákový snímač Honeywell")
- teplotní senzor s rozhraním 1-Wire
- PLC iDo PRO
- mechanický 3-polohový přepínač
- indikační světlo
- zdroj 24 V DC
Protože s většinou použitých komponent jste se již na HW serveru mohli setkat, přejdeme přímo k popisu tohoto nejdůležitějšího, tedy softwaru.
Popis programu pro PLC iDO
Cílem aplikace bylo detekovat vysokou úroveň hladiny a zabránit tak přetečení nádrže a zároveň sledovat a regulovat teplotu vody. Systém by měl umět jednoduchou pulsně-šířkové řízení vytápění a indikovat nežádoucí stavy měření, tedy jak teploty, tak vysoké hladiny.
Konkrétně navolení mechanického přepínače do polohy 1 (v poloze nula je funkce systému vypnuta) se aktivuje jak funkce měření a řízení teploty i detekce výšky hladiny kapaliny. Tento režim indikuje trvale sepnutý indikační výstup, který spíná zdroj 24 V napájející indikační světlo. To tedy trvale svítí. Detekční úroveň hladiny je dána fyzickým umístěným snímače, zatímco požadovaná cílová hodnota teploty se zadávané uživatelem. Výsledkem porovnání aktuální teploty s nastavenou je řízení jednoduchého PWM spínání výstupu pro řízení vytápění, pokud je teplota nižší, než zadaná.
Výsledkem aktivace hladinového snímače příliš vysokou hladinou, zahájí se indikace periodickým spínáním indikačního výstupu, který to této doby byl trvale sepnutý a indikoval zvolený režim. Výsledkem je tedy blikající indikační světlo zadanou frekvencí.
Při navolení spínače do polohy 2 se provádí jen měření a řízení teploty s řízení PWM výstupu bez detekce vysoké hladiny. Vliv snímače hladiny je vyřazen. V tomto režimu pokud je teplota nižší než zadaná, indikační výstup je rozepnutý (světlo nesvítí), pokud je vyšší, je indikační výstup trvale sepnutý a indikační světlo svítí. Řízení PWM je též vypnuto (mimo provoz).
Zdrojový výpis programu
Zde je celý zdrojový program nahraný uvnitř PLC iDO, který vypadá takto:
prog(
usr.K := 1,
usr.cas1 := 1,
usr.cilteplotvoda := 20,
usr.K1 := 100,
stavhladinomer := 0,
stav1prep := 0,
stav2prep := 0,
svetlosviti := 0,
merenistart := 0,stavhladinomer = in.1,
stav1prep = in.2,
stav2prep = in.3,
cilovateplota = usr.cilteplotvoda,
merenistart = stav1prep,
tepmonitor = stav2prep,vysokahladina = iif(stavhladinomer && merenistart, 1, 0),
vysokateplota = iif(tm.voda.Temp > usr.cilteplotvoda, 1, 0),
stavmereni = iif(zmena && vysokahladina, sys.time, stavmereni),
proslo1 = sys.time - stavmereni,zmena = iif(proslo1 < usr.cas1, 0, 1),
blikani = iif(zmena && vysokahladina, !blikani, blikani),
svetlosviti = merenistart,
svetlosviti = iif(vysokahladina, blikani, svetlosviti),
svetlosviti = iif(vysokateplota && tepmonitor, 1, svetlosviti),
out.1 = svetlosviti,regulacerozdil = abs (usr.cilteplotvoda - tm.voda.Temp),
dobatopeni = usr.K * usr.K1 * (regulacerozdil / usr.cilteplotvoda),
zbytek = usr.K1 - dobatopeni,
cyklus = iif(perioda && !vysokateplota, 0, cyklus + 1),
pwmstav1 = iif(cyklus < dobatopeni, 1, 0),
pwmstav0 = iif((cyklus > dobatopeni) && (cyklus < zbytek), 1, 0),
perioda = iif(!pwmstav1 && !pwmstav0, 1, 0),
out.2 = iif(pwmstav1 && merenistart, 1, 0)
)
Program je sice jednoduchý, ale přesto je vhodné si jej blíže popsat:
V úvodu je deklarace proměnných. Ty co se dají externě zadávat bez změny programu mají tvar „usr.xxxx“. Konkrétně „usr.K“ slouží pro nastavení citlivosti řízení PWM regulace na teplotní rozdíl, přesněji řečeno zesílení regulační soustavy. Čím větší je hodnota v proměnné, tím delší je čas sepnutí výstupu při stejné aktuální i cílové teplotě, tedy větší střída PWM. Proměnnou „usr.K“ se pak definuje perioda / frekvence PWM. Tak je pak ve výsledku dána součinem této konstanty a nastavené doby běhu programu „Run Period“ umístěné pod zadávacím oknem programu. Proměnná „usr.cas1“ definuje frekvenci spínání indikačního výstupu, tedy i blikání indikačního světla. Konečně proměnná „usr.cilteplotvoda“ definuje cílovou regulační teplotu vody. Průběžně měřenou aktuální teplotu z připojeného 1-Wire teplotního snímače u mě v iDO označeného jako "voda" najdete tedy v proměnné "tm.voda.Temp". Samozřejmě jméno "voda" lze nahradit jakýmkoliv jiným.
Proměnné „vysokahladina“ a „vysokateplota“ pak indikují vysokou hladinu nahlášenou hladinoměrem, resp. vysokou teplotu, pokud překročí nastavenou cílovou hodnotu. To vše pouze za stavu, že je přepínačem navolen režim měření (nahozena proměnná „merenistart“) nebo v případě indikace teploty navolen režim monitorování (nahozena proměnná „tepmonitor“).
Proměnná „blikani“ pak je výsledkem procedury měření prošlého času a jeho porovnávání s nastaveným časem blikání v proměnné „usr.cas1“.
Proměnná „svetlosviti“ pak určuje stav, kdy má indikační světlo svítit. Konkrétně trvale pro informaci, že je navolen režim měření nebo blikat, když je detekovaný vysoká hladina. V režimu monitorování pak jen blikat, když je aktuální teplota vyšší než cílová. Stav této proměnné se kopíruje na výstup O1.
Na konci programu pak je část řízení PWM regulace. Zde se nejdříve porovnává aktuální naměřená teplota „tm.voda.Temp“ s cílovou teplotou v proměnné „usr.cilteplotvoda“. Absolutní rozdíl se pak nejdříve normuje a přes násobící konstanty „usr.K“ a „usr.K1“ se definuje fyzická doba sepnutí výstupu, tedy v praxi čas, po který je připojeno napájení topné spirály (proměnná „pwmstav1“). Proměnná „zbytek“ pak definuje dobu, kdy bude výstup rozepnutý (proměnná „pwmstav0“), tedy napájení topení vypnuto. Součet hodnoty „dobatopeni“ a „zbytek“ definuje celkovou periodu PWM signálu, která se změnou konstanty „usr.K“ nemění, protože co přidáme na době topení, to ubereme v proměnné „zbytek“. Délka perioda tedy je závislá jen na nastavené hodnotě „usr.K1“. PWM signál je kopírován na výstup O2. V praxi to tedy funguje tak, že čím je rozdíl aktuální a cílové hodnoty menší, tím kratší je doba sepnutí napájení topení. Tato regulace je tedy jemnější (ale také pomalejší) než jen v případě jednoduššího dvoustavového termostatového typu řízení.
Ovládací webová stránka programu v PLC iDO
To není vše. Pro snadnější uživatelské ovládání jsem využil miniaturní „web server“ uvnitř PLC iDo a udělal jednoduchou ovládací „webovou“ stránku. Po vizuální stránce je velmi jednoduchá, prakticky obsahuje jen text, ale to hlavní je zde ukázka snadného zobrazování hodnot proměnných, měnit zobrazení textu dle stavové proměnné 1 vs. 0 a možnost zadání nové řídící hodnoty a nastavení jejího zapsání do programu.
Zde je zdrojový zápis web stránky "mereni.asp":
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<title>Měření v. 1.0</title>
</head>
<body>
<p align="center"><b> Měření a sledování teploty a výšky hladiny v nádrži</b></p>
<p align="center"> Režim měření: {?merenistart}Zapnutý{!}Vypnuto{.}<br>
Režim monitorování teploty: {?tepmonitor}Zapnutý{!}Vypnuto{.}</p>
<p><em>Aktuální stavy monitorování teploty a hladiny:</em><br>
Stav teploty vody: {?vysokateplota} Vysoká{!}Nízká{.}<br>
Stav hladiny: {?vysokahladina} Vysoká{!} Nízká{.}<br>
</p>
<hr>
<p><em>Hodnoty teplot: </em><br>
Aktuální teplota: {tm.voda.Temp}°C<br>
Cílová teplota: {cilovateplota}°C </p>
<hr>
<p><em>Změna hodnoty:</em>
<table width="300" border="0" cellpadding="0" cellspacing="0">
<TR>
<TD width="54%">Cílová teplota v °C: </TD>
<TD width="7%"><div></div>
</TD>
<td width="39%" align="center">
<form method="POST" action="/vars.asp" target="_blank">
<input type="text" name="usr.cilteplotvoda" size="10" value="">
</form>
</td></tr></table>
</p></body>
</html>
Postup korektního nahrání uživatelské stránky do iDo, aby Vám vše fungovalo, již pak popsal kolega v článku "Jak na uživatelské rozhraní k iDO", takže zde se k tomu nebudu vracet, protože tento postup plně funguje.
Popis zdrojáku webové stránky
Úvod je pro každého, kdo již dělal něco v HTML kódu asi jasný. Prostě deklarace
webové stránky, jazyka apod. Pokud to neznáte, stačí program od začátku až do
příkazu <body> a případně pouze přepsat název webové stránky
mezi příkazy <title></title>.
Mezi tagy <p> </p> se nachází běžný pasivní text pro zobrazení.
Zajímavé jsou až deklarace „ASP příkazů“, které vytváří to rozhraní mezi touto
webovou stránkou a programem v iDO. Použity jsou zde následující:
1) Stav teploty vody: {?vysokateplota} Vysoká{!}Nízká{.}
Úvodní text „Stav teploty vody:“ se vždy zobrazí. Je to jen text. Dále je deklarace
{?vysokateplota} Vysoká, která říká, že pokud v programové proměnné „vysokateplota“
je stav 1, zobrazí se za deklarací umístěný text, zde tedy slovo „Vysoká“. Místo
slova však zde může být i celá věta či odstavec apod. Deklarace {!}Nízká{.}
definuje, že pokud je v proměnné „vysokateplota“ stav 0, zobrazí se slovo „Nízká“.
Symbol {.} vše ukončuje, aby se účinnost deklarace nepřenášela na další část
webové stránky.
2) Aktuální teplota: {tm.voda.Temp}°C
V úvodu této deklarace je zase jen obyčejný text ke zobrazení. Dále znaky {tm.voda.Temp}
říkají, aby se zobrazil stav programové proměnné „tm.voda.Temp“. Místo této
deklarace se tedy zobrazí zde číslo naměřené teploty v době načtení stránky.
3) <form method="POST" action="/vars.asp"
target="_blank">
<input type="text" name="usr.cilteplotvoda" size="10"
value="">
</form>
Toto je pak nejjednodušší systém, jak změnit hodnotu proměnné typu „usr.xxxxx“ v programu, zde konkrétně proměnnou „usr.cilteplotvoda“. Využívá se zde klasický HTML formulář a zasílání zadané hodnoty metodu POST do skriptu na stránce "vars.asp“. Ta si hodnotu zadanou do na stránce zobrazeného okna, která se přiřadí položce „value“ zpracuje a změní v programu.
A to je z pohledu webové stránky prakticky vše. Samozřejmě, že si ji můžete zkrášlit grafikou apod., ale pozor na omezené možnosti webserveru miniPLC iDO, blíže popsané v manuálu. Přece je to jen malé zařízení.
Závěrem...
Na tomto jednoduchém příkladu jsem chtěl ukázat, že vytvoření základních řídící aplikací lze na PLC iDO je docela snadné, včetně vytvoření základního vizualizačního rozhraní. Toto je však jen základ tohoto, co PLC iDO PRO dokáže. Takže s ním jdou realizovat i mnohem náročnější aplikace, nehledě k tomu, že lze po ethernetu napojit více PLC iDO dohromady a tak násobit výpočet výkon i provozní ovládací a komunikační rozhraní. To je ideální pro realizaci distribuovaných systémů. Jediná významná vada na iDO je pak absence přímo analogového vstupu pro připojení běžných čidel s analogovým výstupem.
Více dalších informací o PLC iDO najdete v článcích na níže uvedených odkazech nebo v manuálu iDo-manual.pdf.
Článek i fotografie vytvořil: Antonín Vojáček
DOWNLOAD & Odkazy
- Zdrojový kód popisovaného programu pro PLC iDO a webstránky - mereni.zip
- Domovská stránka zařízení iDO - http://hw.cz/iDo
- Koupit miniPLC iDO ve verzi NET i PRO můžete v obchodě - http://obchod.hw.cz
- Manuál k programování iDO - iDo-manual.pdf
- Články o PLC iDO a jeho programování:
- Další články a testy o snímačích, PLC, komponentech nejen pro průmyslové aplikace najdete na stránkách serveru automatizace.HW.cz