Tietokoneiden näyttöjä, joissa näkyy kuvaa automaatiolaboratorion laitteistosta. Monitoreiden takana näkyy sama laitteisto kuin kuvissa.

timohei.net / Opintojaksot / Soveltava ohjelmointi / Structured Text -ohjelmointi /
Kommentoitu nuohoinsovellus (SCL)

Default Tag Table

NameTypeAddressComment
XS-100Bool%I0.1NUOHOUS-nappi
XS-101Bool%I0.2SISÄÄN-nappi
XS-107Bool%I0.3YV_KUITTAUS-nappi
XS-106Bool%I0.4HV_KUITTAUS-nappi
GS-104Bool%I0.5SISÄRAJA
GS-105Bool%I0.6ULKORAJA
FS-113Bool%I0.7HÖYRYANTURI
XC-111Bool%Q0.1SISÄLLÄ-lamppu
XC-110Bool%Q0.2ULKONA-lamppu
XC-109Bool%Q0.3YLEISVIKA-lamppu
XC-108Bool%Q0.4HÖYRY-lamppu
XC-102Bool%Q0.5SK_SISÄLLE
XC-103Bool%Q0.6SK_ULOS
XC-112Bool%Q0.7HÖYRYVENTTIILIn ohjaus
Clock_5HzBool%M100.1
Clock_1HzBool%M100.5
hoyryvikaKuittaamattaBool%M0.0Höyryvika on ainakin käynyt päällä, eikä sitä ole vielä kuitattu.
yleisvikaKuittaamattaBool%M0.1Yleisvika on ainakin käynyt päällä, eikä sitä ole vielä kuitattu.
rajavikaKuittaamattaBool%M0.2Rajavika on ainakin käynyt päällä, eikä sitä ole vielä kuitattu.
hoyryvikaTuliPaalleBool%M0.3Höyryvika tuli päälle juuri tällä suorituskierroksella
kulkuaikaUlosBool%M0.4Kulkuaikavika ULOS-suuntaan ylittynyt
rajavikaBool%M0.5Rajavika on päällä juuri nyt

Block Interface

Temp: kaantoviiveKulunut Bool // Kääntöviiveajastimen lähtö hoyryvikaPaalla Bool // Höyryvika on päällä juuri nyt hoyryvikaKuitattu Bool // Höyryvika on päällä, mutta se on jo kuitattu yleisvikaPaalla Bool // Yleisvika on päällä juuri nyt yleisvikaKuitattu Bool // Yleisvika on päällä, mutta se on jo kuitattu yleisvikaTuliPaalle Bool // Yleisvika tuli juuri tällä suorituskierroksella päälle kulkuaikaSisaan Bool // Kulkuaikavika SISÄÄN päällä rajavikaTuliPaalle Bool // Rajatietovika tuli juuri tällä suorituskierroksella päälle rajavianKuittaus Bool // Yleisvika-painiketta on painettu 5 s, joten kuitataan rajavika pois rajavikaKuitattiin Bool // Rajavika kuitattiin juuri tällä suorituskierroksella Constant: kulkuaika Time := T#20s; // Sallittu kulkuaika SISÄÄN tai ULOS

Viemällä hiiren osoitin sovelluksen eri osien päälle, tulee näkyviin ko. osan vihje. Sovelluksessa esiintyvien positiotunnusten kohdalta tulee näkyviin ko. signaalin nimi.

"Kaantoviive".TON(IN := "GS-105" AND NOT "rajavika", PT := T#5s, Q => #kaantoviiveKulunut);
(* SK_SISÄÄN-ohjaus laitetaan - päälle SISÄÄN-napista - pois SISÄRAJAsta - höyryviasta - kulkuaikaviasta ULOS SK_SISÄÄN-ohjaus PIDETÄÄN päällä kun rajavikaKuittaamatta on päällä. SK_SISÄÄN-ohjaus käsitellään ennen SK_ULOS-ohjausta, jotta ristiriitatilanteessa SK_SISÄÄN-tieto ehtisi mennä ykköseksi ennen SK_ULOS-ohjauksen käsittelyä *)
"F_TRIG_DB"(CLK := "rajavikaKuittaamatta", Q => #rajavikaKuitattiin);
IF "XS-101" OR #kaantoviiveKulunut OR "hoyryvikaTuliPaalle" OR "kulkuaikaUlos" OR "rajavikaKuittaamatta" THEN "XC-102" := 1; ELSIF "GS-104" OR #rajavikaKuitattiin THEN // SK_ULOS nollattava myös, "XC-102" := 0; // kun rajavikaKuittaamatta poistuu, END_IF; // vaikka SISÄRAJA ei olisikaan päällä!
(* SK_ULOS-ohjaus laitetaan - päälle NUOHOUS-napista - pois ULKORAJAsta Tässä on toteutettu pitopiiri eli RS-kiikku kahdella IF-lauseella; ensimmäinen toteuttaa SET-toiminteen ja jälkimmäinen RESET-toiminteen *)
IF "XS-100" THEN "XC-103" := 1; END_IF;
IF "GS-105" OR "XC-102" THEN "XC-103" := 0; END_IF;
(* Merkkivalojen ohjaus *) (* ULKONA-lamppu - vilkkuu, kun ajetaan ULOS - palaa, kun ollaan ULKONA - ristiriitatilanteessa vilkkuu *)
IF "XC-103" THEN "XC-110" := "Clock_1Hz"; ELSIF "GS-105" THEN "XC-110" := 1; ELSE "XC-110" := 0; END_IF;
(* SISÄLLÄ-lamppu - vilkkuu, kun ajetaan SISÄÄN - palaa, kun ollaan SISÄLLÄ - ristiriitatilanteessa vilkkuu *)
IF "XC-102" THEN "XC-111" := "Clock_1Hz"; ELSIF "GS-104" THEN "XC-111" := 1; ELSE "XC-111" := 0; END_IF;
(* HÖYRYVENTTIILI avataan, kun lähdetään liikkeelle ULOS ja pidetään auki, kunnes palataan SISÄRAJAlle. Venttiili pidetään auki myös rajavian päällä ollessa. *) "XC-112" := "XC-103" OR "GS-105" OR "XC-102" OR "rajavika"; (* Höyryvian ilmaisu ja valon ohjaus *) (* Onko höyryvika päällä? *) #hoyryvikaPaalla := NOT "FS-113" AND NOT "GS-104"; (* Tuliko höyryvika päälle juuri nyt? *) "R_TRIG_DB"(CLK:=#hoyryvikaPaalla, Q=>"hoyryvikaTuliPaalle"); (* Onko höyryvika kuittaamatta? *)
IF "hoyryvikaTuliPaalle" THEN "hoyryvikaKuittaamatta" := TRUE; ELSIF "XS-106" THEN "hoyryvikaKuittaamatta" := FALSE; END_IF;
(* Onko kuitattu höyryvika päällä? *) #hoyryvikaKuitattu := #hoyryvikaPaalla AND NOT "hoyryvikaKuittaamatta"; (* Höyryvalon ohjaus - priorisointi: 1) kuittaamaton hälytys > vilkutetaan nopeasti 2) kuitattu hälytys > vilkutetaan hitaasti 3) ei vikaa > näytetään höyryanturin tila *)
IF "hoyryvikaKuittaamatta" THEN "XC-108" := "Clock_1Hz" AND "Clock_5Hz"; ELSIF #hoyryvikaKuitattu THEN "XC-108" := "Clock_1Hz"; ELSE "XC-108" := "FS-113"; END_IF;
(* YLEISVIKA *) (* Kulkuaikavika SISÄÄN *)
"kulkuaikavikaSisaan_DB".TON(IN := "XC-102", PT := #kulkuaika, Q => #kulkuaikaSisaan);
(* Kulkuaikavika ULOS *)
"kulkuaikavikaUlos_DB".TON(IN := "XC-103", PT := #kulkuaika, Q => "kulkuaikaUlos");
(* Rajatietovika *) "rajavika" :="GS-104" AND "GS-105";
"R_TRIG_DB_2"(CLK:="rajavika", Q=>#rajavikaTuliPaalle);
(* Kuittaamaton rajatietovika *) (* - rajatietovika kuitataan painamalla YV_KUITTAUS-painiketta 5 s *)
"rajavianKuittausviive_DB".TON(IN := "XS-107", PT := T#5s, Q => #rajavianKuittaus);
(* - rajavian pitopiiri: SET: rajavika tulee päälle RESET: YV_KUITTAUS > 5 s *)
IF #rajavikaTuliPaalle THEN "rajavikaKuittaamatta" := TRUE; ELSIF #rajavianKuittaus THEN "rajavikaKuittaamatta" := FALSE; END_IF;
(* Yhdistetty YLEISVIKA *) #yleisvikaPaalla := #kulkuaikaSisaan OR "kulkuaikaUlos" OR "rajavika";
"R_TRIG_DB_1"(CLK:=#yleisvikaPaalla, Q=>#yleisvikaTuliPaalle);
(* YLEISVIKA-lamppu *) (* Kuittaamaton YLEISVIKA *)
IF #yleisvikaTuliPaalle THEN "yleisvikaKuittaamatta" := TRUE; ELSIF "XS-107" THEN "yleisvikaKuittaamatta" := FALSE; END_IF;
(* Kuitattu YLEISVIKA *) #yleisvikaKuitattu := #yleisvikaPaalla AND NOT "yleisvikaKuittaamatta"; (* YLEISVIKA-Lampun ohjaus - priorisointi: 1) kuittaamaton hälytys > nopea vilkutus 2) kuitattu hälytys > hidas vilkutus 3) ei vikaa > lamppu pimeänä *)
IF "yleisvikaKuittaamatta" THEN "XC-109" := "Clock_1Hz" AND "Clock_5Hz"; ELSIF #yleisvikaKuitattu THEN "XC-109" := "Clock_1Hz"; ELSE "XC-109" := 0; END_IF;
Päivitetty 13.1.2023

<<  Edellinen
(4) Kommentoimaton nuohoinsovellus (SCL)
Sivu 5/6Seuraava >>
(6) CX-Programmerin asentaminen
© Timo Heikkinen | timo piste heikkinen at oamk piste fi