timohei.net / Opintojaksot / Soveltava ohjelmointi / Structured Text -ohjelmointi /
Kommentoitu nuohoinsovellus (SCL)
Default Tag Table
Name Type Address Comment XS-100 Bool %I0.1 NUOHOUS-nappi XS-101 Bool %I0.2 SISÄÄN-nappi XS-107 Bool %I0.3 YV_KUITTAUS-nappi XS-106 Bool %I0.4 HV_KUITTAUS-nappi GS-104 Bool %I0.5 SISÄRAJA GS-105 Bool %I0.6 ULKORAJA FS-113 Bool %I0.7 HÖYRYANTURI XC-111 Bool %Q0.1 SISÄLLÄ-lamppu XC-110 Bool %Q0.2 ULKONA-lamppu XC-109 Bool %Q0.3 YLEISVIKA-lamppu XC-108 Bool %Q0.4 HÖYRY-lamppu XC-102 Bool %Q0.5 SK_SISÄLLE XC-103 Bool %Q0.6 SK_ULOS XC-112 Bool %Q0.7 HÖYRYVENTTIILIn ohjaus Clock_5Hz Bool %M100.1 Clock_1Hz Bool %M100.5 hoyryvikaKuittaamatta Bool %M0.0 Höyryvika on ainakin käynyt päällä, eikä sitä ole vielä kuitattu. yleisvikaKuittaamatta Bool %M0.1 Yleisvika on ainakin käynyt päällä, eikä sitä ole vielä kuitattu. rajavikaKuittaamatta Bool %M0.2 Rajavika on ainakin käynyt päällä, eikä sitä ole vielä kuitattu. hoyryvikaTuliPaalle Bool %M0.3 Höyryvika tuli päälle juuri tällä suorituskierroksella kulkuaikaUlos Bool %M0.4 Kulkuaikavika ULOS-suuntaan ylittynyt rajavika Bool %M0.5 Rajavika 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/6 | Seuraava >> (6) CX-Programmerin asentaminen |
© Timo Heikkinen | timo piste heikkinen at oamk piste fi