AU080401 Automaatiotekniikka Funktio FC
Tarkoitus Dokumentissa kuvataan, mikä on funktio miksi funktioita kannattaa käyttää milloin funktioita kannattaa käyttää mitä asioita on huomioitava funktiota luotaessa miten funktio muodostetaan ja miten sitä sovelletaan S7 ohjelmointiympäristössä (STEP7) 2
Ohjelmakomponentit Ohjelmassa usein toistuvasta ohjelmaosuudesta kannattaa luoda ohjelmakomponentti, koska se on helposti käytettävissä uudelleen muualla ohjelmassa. Siemens ohjelmointiympäristössä voidaan ohjelmakomponentiksi luoda ohjelma, joka on toteutettu joko FC:hen (funktioon) tai FB:hen (toimilohkoon). Tämä dokumentti kuvaa, mikä on funktio ja miten sitä sovelletaan S7 ympäristössä. Toimilohko on kuvattu tarkemmin dokumentissa AU080401_Toimilohko.pdf 3
Funktio Ohjelmistoelementti, johon voidaan ohjelmoida tiettyä toiminnallista kokonaisuutta ohjaava ohjausalgoritmi. Funktio on uudelleenkäytettävä ohjelmakomponentti, jota voidaan kutsua ohjelmassa rajattomasti. Funktiolla ei ole sisäistä muistia, joten funktioon syötetyt arvot (tulot) vaikuttavat suoraan funktiosta lähteviin arvoihin. Koska funktiolla ei ole sisäistä muistia, se soveltuu huonosti monimutkaisten toimintojen toteuttamiseen, Funktio sisältää ohjelmakoodin ja tulo- ja lähtöparametrien määrittelyn. Funktiota kutsuvan sovelluksen ja funktion välinen tiedonvaihto suoritetaan tulo- ja lähtöparametrien kautta. 4
Funktio Funktion etuja eräästä C-kielen opetusmateriaalista: Funktiot ovat esimerkki luovasta laiskuudesta. Toistuvista toiminnoista kannattaa tehdä funktoita, jolloin samaa koodia ei tarvitse kirjoittaa joka paikkaan. Miksi sitten ei kannata kopioida jo toimivaa koodia sellaisenaan useampiin kohtiin? Vastaus: jos ja kun ohjemaa täytyy muuttaa toistuvan koodin kohdalta, on paljon selkeämpää ja helpompaa muuttaa koodia yhden funktion sisällä kuin kopioiduista koodilohkoista. Lisäksi funktioiden tekeminen pakottaa tekemään yhden asian kerrallaan, mikä pienentää vikoje etsimisen vaivaa ja koodin kirjoittamista, kun ohjelma kasvaa isommaksi. 5
Funktio lisää etuja: Ei ole olemassa ohjelmoijaa, jonka koodit eivät olisi jossain vaiheessa ylittäneet ohjelmoijan käsityskykyä. Pitämällä koodin selkeänä ja rakenteisena, pystyt tekemään ohjelmasta paljon paremman ominaisuuksien määrässä sekä virheiden vähyydessä, koska tajuat ohjelman toiminnan. Edellä mainitut edut pätevät myös ohjelmoitavilla logiikoilla tehtävään ohjelmistokehitykseen. 6
Funktio, Siemens S7 Siemens S7 ohjelmointiympäristössä funktiota vastaa ohjelmalohko Function (FC), johon olemme tutustuneet automaatiotekniikan laboraatioissa 7
Siemens S7, Funktion soveltaminen keino 1 Funktiosta (FC) on mahdollista tehdä projektikohtainen moduuli, jolloin funktioon ohjelmoidaan tietyn toiminnallisuuden toteuttava ohjelma, joka hakee tulotietonsa ja päivittää lähtötietonsa (tieto = signaali) suoraan ohjattavan sovelluksen (laitteen) tulo- ja lähtökorteilta. (Tällä tavalla sovelsimme funktiota automaatio laboraatioissa) Seuraavalla sivulla on esimerkki, projektikohtaisesta funktiosta, johon on ohjelmoitu ohjelma, joka asettaa lähdön päälle, kun tietyt tulotiedot ovat asettuneet. 8
Siemens S7, Funktion soveltaminen keino 1 FC:hen kirjoitettu ohjausohjelma Viittaa suoraan luettavaan tuloon Viittaa suoraan ohjattavaan lähtöön Viittaa suoraan luettavaan lähtöön FC:n kutsu OB1:ssä 9
Siemens S7, Funktion soveltaminen keino 2 Funktiosta (FC) on mahdollista tehdä yleiskäyttöinen moduuli, jolloin funktioon ohjelmoidaan tietyn toiminnallisuuden toteuttava ohjelma, esimerkiksi edellisellä sivulla esitetty lähdön ohjaus. Tavan 1 ja 2 erona on, että tavassa 2 sovelluksen ja funktion välinen tiedonvaihto suoritetaan suorien muistiviittausten sijaan tulo(in) - ja lähtö(out) -parametrien kautta, jolloin samaa funktiota voidaan käyttää (kutsua) ohjelmassa muuallakin. Ohjauskohtaiset muistiviittaukset kirjataan tulo(in) - ja lähtö(out) parametrien funktion kutsussa. Seuraavalla sivulla on esimerkki funktiosta, joka toteuttaa saman toiminnallisuuden, kuin edellisellä sivulla kuvattu ohjelma, mutta funktiosta on tehty yleiskäyttöinen määrittelemällä funktion Interfaceosioon tarvittavat tulo- ja lähtöparametrit ja käyttämällä niitä ohjelmassa suorien tulo- ja lähtökorttiviittausten sijasta. 10
Siemens S7, Funktion soveltaminen keino 2 FC:hen kirjoitettu ohjausohjelma FC:n kutsu OB1:ssä 11
Siemens S7, Funktion soveltaminen keinot 1 & 2 Ohjelmat ovat samanlaiset paitsi, että yleiskäyttöisessä funktiossa tulo- ja lähtösignaalit siirretään sovelluksesta funktioon/sta IN-, INOUT ja OUT-parametrien kautta 12
Siemens S7, Funktion soveltaminen keino 3 Funktiota (FC) on mahdollista käyttää myös ohjelman jakamisessa pienempiin osakokonaisuuksiin (ks. Jaoteltu ohjelmointi), jolloin ohjelmien rakenne ja sitä kautta myös luettavuus paranevat. Laiteohjauksen arkkitehtuurista johtuen, tämä tapa on yleisesti käytetty. Jokaisen laitteen ohjaus sijoitetaan omiin ohjelmalohkoihinsa, jotka ryhmitellään fyysisen sijainnin perusteella omiksi kokonaisuuksikseen. Esim. Funktiosta tehdään projektikohtainen moduuli, johon kerätään tiettyä osakokonaisuutta (esim. kaikki solun laitteet) ohjaavien laitteiden ohjelmat ts. funktioon ohjelmoidaan kutsut ko. laitteita ohjaaviin funktioihin ja toimilohkoihin. Seuraavilla sivuilla on esimerkki laitteita ohjaavan ohjelmiston jakamisesta pienempiin osakokonaisuuksiin. 13
Siemens S7, Funktion soveltaminen keino 3 14 Kuvan järjestelmä koostuu usei osakokonaisuuksista,mm: Pallettikuljettimet Tarkastusasemat Varastokuljetin Pakkaussolut Siirtovaunu..
Siemens S7, Funktion soveltaminen keino 3 Kuvassa on tarkempi kuvaus pakkaussolusta 15
Siemens S7, Funktion soveltaminen keino 3 Kuvassa on esitetty, miten funktioita soveltamalla jaetaan edellisillä sivuilla kuvattu järjestelmä toiminnallisuuden perusteella muodostettaviin osakokonaisuuksiin. Esim. funktioon FC100 on sijoitettu solua 1 ohjaava kokonaisuus (Käyttötaparyhmän ja laitteiden ohjaus) FC101 ohjaa solua 2, jne OB1 FC100 Solu 1" FC101 Solu 2... FB100 CNV100 DB100 FB100 CNV101 DB101 FB100 CNV102 DB102 FB101, CNV110 DB110 FB101, CNV111 DB111... FB110, R1 DB120 FC104 Solu 4 16
Siemens S7 Function (FC) ominaisuuksia: Ohjelmoidaan kuten FB:t ja OB:t Kaikki ohjelmassa käytettävät muuttuja määritellään lohkossa: (IN) Tuloparametrit (OUT) Lähtäparametrit (IN_OUT) Tulo lähtöparametrit (TEMP) Lohkon sisäiset, väliaikaiset muuttujat, jotka nollautuvat, kun funktion käsittely loppuu Funktiossa käsiteltävät arvot siirretään kutsuvasta ohjelmasta funktioon IN- ja IN_OUT- parametrien kautta Funktio palauttaa päivittämänsä arvot kutsuvaan ohjelmaan OUT ja IN_OUT parametrien kautta Funktiota voidaan rajattomasti kutsua ohjelmassa. 17
Siemens S7 Funktion kutsussa esitettävät tulo- ja lähtöparametrit määritellään funktion Interface osion kohtiin IN, OUT ja IN_OUT. Parametrit määritellään kuten tiedostoissa, ts. muuttujalle annetaan nimi ja tyyppi (BOOL, INT, Timer, S5Time,...). 18
Siemens S7 IN - kohtaan määritellään tuloparametrit, eli ne muuttujat, joiden alkuarvo halutaan määritellä kutsuvassa ohjelmassa. Huom! Funktion sisällä ei ole mahdollista muuttaa tuloparametreihin määriteltyjä arvoja. OUT - kohtaan määritellään lähtöparametrit, eli ne muuttujat, joiden arvo halutaan palauttaa kutsuvaan ohjelmaan. IN_OUT - kohtaan määritellään parametrit, joissa tieto siirtyy molempiin suuntiin. Tällaisten muuttujien arvoja voidaan päivittää sekä funktiossa, että funktion ulkopuolella sovelluksessa. 19
Siemens S7, esimerkki 1 Luodaan funktio CLOCK_PULSE (FC30) ja ohjelmoidaan siihen ohjelma, joka muodostaa kellopulssin, jonka ylhäällä ja alhaalla oloaika voidaan määritellä erikseen. Alla aikakaavio, jossa on kuvattu funktion lähdön suhde funktion tuloon Tulo Lähtö Toiminnallisuus toteutetaan ensin projektikohtaisessa funktiossa ja sen jälkeen funktio muutetaan yleiskäyttöiseksi ohjelmakomponentiksi. 20
Siemens S7, esimerkki 1 Funktioon kirjoitettu ohjausohjelma Funktion kutsu OB1:ssä 21
Siemens S7, esimerkki 1 Funktiosta muokataan yleiskäyttöinen ohjelmakomponentti seuraavasti: Siirretään funktion tulo- ja lähtöparametreiksi kaikki funktioon menevät ja sieltä tulevat signaalit 22
Siemens S7, esimerkki 1 Seuraavaksi siirretään funktion tulo (IN) parametreihin ohjelmassa käytettyjen ajastimien osoitteet (T100, T101) Yleiskäyttöistä funktiota voidaan kutsua ohjelmassa useammin kuin kerran, joten funktion sisällä ei voi olla viittausta tiettyyn osoitteeseen logiikan muistissa 23
Siemens S7, esimerkki 1 Seuraavaksi siirretään funktion tulolähtö (INOUT) parametreihin ohjelmassa käytetyt osoitteet, joita funktion sisällä sekä luetaan, että päivitetään. Tässä ohjelmassa sellainen tieto on nousevan reunan toteuttavan lohkon P apubitti M100.0. Yleiskäyttöistä funktiota voidaan kutsua ohjelmassa useammin kuin kerran, joten funktion sisällä ei voi olla viittausta tiettyyn osoitteeseen logiikan muistissa 24
Siemens S7, esimerkki 1 Lopuksi siirretään funktion tuloparametreihin ajastimien asetusarvot, jolloin pulssin muoto voidaan määritellä funktion kutsussa 25
Siemens S7, esimerkki 1 Muutettu funktio lopullisessa muodossa 26
Siemens S7, esimerkki 1 Funktiokutsu täytyy päivittää, aina sen jälkeen kun funktion IN-, INOUT tai OUT-parametrien määrää on muutettu. Alla oleva ilmoitus ilmestyy näytölle, kun funktiota kutsuva ohjelma avataan (tässä tapauksessa OB1). Valitaan OK Ohjelma esittää muuttuneen funktion punaisella. 27
Siemens S7, esimerkki 1 Valitaan funktio ja painetaan hiiren oikeanpuoleista painiketta... valitaan Update Block Call 28
Siemens S7, esimerkki 1.. valitaan OK 29
Siemens S7, esimerkki 1 ja funktio tulostuu päivitettynä virtapiiriin Sama toimenpide on toistettava kaikissa niissä virtapiireissä, joissa ko. funktiota kutsutaan. Tässä esimerkissä ei ole muita virtapiirejä. 30
Siemens S7, esimerkki 1 Lopuksi funktiokutsuun päivitetään tarvittavat osoitteet ja alkuarvot. 31
Siemens S7, esimerkki 1 Lisätään kutsu FC30:neen myös seuraavaan virtapiriin Mieti miksi ajastimien ja nousevan reunan apubitin ja lähdön osoitteiksi pitää antaa ositteet (muistipaikat), joita ei ole käytetty muualla ohjelmassa. 32
Siemens S7, esimerkki 2 Luodaan funktio Motor_Control FC10 ja ohjelmoidaan siihen ohjelma, joka ohjaa 2-suuntaista moottoria. Toiminnallisuus toteutetaan ensin projektikohtaisessa funktiossa ja sen jälkeen funktio muutetaan yleiskäyttöiseksi ohjelmakomponentiksi. 33
Siemens S7, esimerkki 2 Moottorin ohjaus, toteutettuna projektikohtaisena funktiona Ohjelmassa viitataan suoraan logiikan muistiosoitteisiin, kuten esim. tulo- ja lähtösignaaleihin. 34
Siemens S7, esimerkki 2 Moottorin ohjaus, toteutettuna projektikohtaisena funktiona Ohjelmassa viitataan suoraan logiikan muistiosoitteisiin, kuten esim. sisäisestä muistista varattuihin sanoihin. 35
Siemens S7, esimerkki 2 Moottorin ohjaus, toteutettuna yleiskäyttöisenä funktiona I2.0 I2.1 I2.2 T10 T11 I2.3 S5T#3s S5T#3s Vaihdetaan suoraan tulokortteihin tehtävät viittaukset ja ajastimien osoitteet tuloparametreiksi 36
Siemens S7, esimerkki 2 Moottorin ohjaus, toteutettuna yleiskäyttöisenä funktiona M12.0 M12.1 M12.2 M12.3 MW80 Vaihdetaan tiedot, joita sekä luetaan että päivitetään funktiossa tulo- ja lähtöparametreiksi, jotka edelleen määritellään Interface-osion IN_OUT - kohtaan 37
Siemens S7, esimerkki 2 Moottorin ohjaus, toteutettuna yleiskäyttöisenä funktiona Q4.3 Q4.4 Vaihdetaan suoraan lähtökortteihin tehtävät viittaukset tulolähtöparametreiksi, jotka edelleen määritellään Interface-osion OUT - kohtaan 38
Siemens S7, esimerkki 2 Moottorin ohjaus, toteutettuna yleiskäyttöisenä funktiona Vaihdetaan ohjelmassa jokaisen suoran osoiteviittauksen tilalle vastaava tulo- tai lähtöparametri. 39
Siemens S7, esimerkki 2 Moottorin ohjaus, toteutettuna yleiskäyttöisenä funktiona Vaihdetaan ohjelmassa jokaisen suoran osoiteviittauksen tilalle vastaava tulotai lähtöparametri. Talletetaan ohjelma 40
Siemens S7, esimerkki 2 Moottorin ohjaus, toteutettuna yleiskäyttöisenä funktiona Lopuksi lisätään tehdyn funktion kutsu OB1:een ja päivitetään käytettävät osoitteet ja alkuarvot funktion tulo- ja lähtöparametreihin 41