SIMATIC. STEP 7 Magasabb szintű műveletek (STL)

Hasonló dokumentumok
A 32 bites x86-os architektúra regiszterei

találhatók. A memória-szervezési modell mondja meg azt, hogy miként

Bevezetés az informatikába

Adatelérés és memóriakezelés

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Programozás alapjai. 10. előadás

Digitális ki-bemenetek kezelése, bitszintű műveletek

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

Számítógépek felépítése

Mutatók és mutató-aritmetika C-ben március 19.

A STEP 7 programozás alapjai

Készítette: Oláh István mestertanár

SZÁMÍTÓGÉPEK BELSŐ FELÉPÍTÉSE - 1

Segédlet az Informatika alapjai I. című tárgy számrendszerek fejezetéhez

Adatok ábrázolása, adattípusok

Mikroprocesszor CPU. C Central Központi. P Processing Számító. U Unit Egység

5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI

VI. SZOFTVERES PROGRAMOZÁSÚ VLSI ÁRAMKÖRÖK

Máté: Assembly programozás

Aritmetikai utasítások I.

Digitális rendszerek. Utasításarchitektúra szintje

A számítógép alapfelépítése

Architektúra, megszakítási rendszerek

Járműfedélzeti rendszerek I. 3. előadás Dr. Bécsi Tamás

Digitális technika HF2 Elkészítési segédlet Gépi szintű programozás

Assembly. Iványi Péter

2. Fejezet : Számrendszerek

Számítógépek felépítése, alapfogalmak

5. Laborgyakorlat. Számláló funkciók, időzítő funkciók.

The Architecture of Computer Hardware and Systems Software: An InformationTechnology Approach 3. kiadás, Irv Englander John Wiley and Sons 2003

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Digitális technika VIMIAA hét

Mintavételes szabályozás mikrovezérlő segítségével

A mikroprocesszor felépítése és működése

Digitális technika VIMIAA hét

Assembly programozás levelező tagozat

Operandus típusok Bevezetés: Az utasítás-feldolgozás menete

Adattípusok és paramétertípusok

Digitális technika II. (vimia111) 5. gyakorlat: Tervezés adatstruktúra-vezérlés szétválasztással, vezérlőegység generációk

Bevezetés az informatikába gyakorló feladatok Utoljára módosítva:

1. Az utasítás beolvasása a processzorba

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Összeadás BCD számokkal

Óbudai Egyetem. C programozási nyelv

VEZÉRLŐEGYSÉGEK. Tartalom

[cimke:] [feltétel] utasítás paraméterek [; megjegyzés]

_INVHU000_WriteReadParameter.cxf Frekvenciaváltók

1. fogalom. Add meg az összeadásban szereplő számok elnevezéseit! Milyen tulajdonságai vannak az összeadásnak? Hogyan ellenőrizzük az összeadást?

PLC Versenyfeladat. XIV. Országos Irányítástechnikai Programozó Verseny Budapest, március Összeállította az EvoPro Kft.

Számítógépek felépítése, alapfogalmak

Bevezetés az informatikába gyakorló feladatok Utoljára módosítva:

Máté: Számítógép architektúrák

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Mi az assembly? Gyakorlatias assembly bevezető. Sokféle assembly van... Mit fogunk mi használni? A NASM fordítóprogramja. Assembly programok fordítása

Számítógép felépítése

DSP architektúrák dspic30f család memória kezelése

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Assembly Utasítások, programok. Iványi Péter

2. Laborgyakorlat. Step7 programozási környezet bemutatása

C programozási nyelv

3. Laborgyakorlat. ProTool bevezető

Assembly programozás: 2. gyakorlat

4. Fejezet : Az egész számok (integer) ábrázolása

Informatika érettségi vizsga

Programozási nyelvek 6. előadás

Máté: Számítógép architektúrák

A mikroprocesszor egy RISC felépítésű (LOAD/STORE), Neumann architektúrájú 32 bites soft processzor, amelyet FPGA val valósítunk meg.

Digitális technika VIMIAA01

Bevezetés a programozásba. 5. Előadás: Tömbök

Programozási segédlet DS89C450 Fejlesztőpanelhez

Szekvenciális hálózatok és automaták

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

Széchenyi István Szakképző Iskola

Fixpontos és lebegőpontos DSP Számrendszerek

Táblázatkezelés Excel XP-vel. Tanmenet

Algoritmusok. Dr. Iványi Péter

Máté: Számítógép architektúrák

Az AVR programozás alapjai. Előadja: Both Tamás

Programozas 1. Strukturak, mutatok

Magas szintű optimalizálás

SZÁMÍTÁSOK A TÁBLÁZATBAN

Máté: Számítógép architektúrák

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba

A programozás alapjai

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

Balaton Marcell Balázs. Assembly jegyzet. Az Assembly egy alacsony szintű nyelv, mely a gépi kódú programozás egyszerűsítésére született.

Assembly. Iványi Péter

CIMR-V7AZ, CIMR-F7Z, CIMR-E7Z, CIMR-L7Z, CIMR-G7 V1000 sorozat CIMR-VZA PLC CPU-k CP1H-X, CP1H-XA, CP1H-Y CP1L-L, CP1L-M

Számítógépes Hálózatok. 7. gyakorlat

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

SR mini PLC Modbus illesztő modul. Modul beállítása Bemeneti pontok kiosztása főmodul esetén Bemeneti pontok címkiosztása kiegészítő modul esetében

Paraméter átadás regisztereken keresztül

A processzor hajtja végre a műveleteket. összeadás, szorzás, logikai műveletek (és, vagy, nem)

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

1. Kombinációs hálózatok mérési gyakorlatai

Adatszerkezetek 1. Dr. Iványi Péter

SzA19. Az elágazások vizsgálata

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Átírás:

SIMATIC STEP 7 Magasabb szintű műveletek (STL) Magasabb szintű utasítások részleges ismertetése STL (utasításlista) programozás esetére (angol, vagy német rövidítésekkel). Ez a segédlet a SIMATIC S7-300, S7-400, C7, ET-200 IM CPU és az embedded, illetve PC-based (WinAC szoftver PLC) kontrollerek programozásához használható. Siemens Zrt. Ipari Szektor, Industry Automation & Drive Technologies Copyright Siemens Zrt. 2010. STEP 7, magasabb szintű STL műveletek 1

Az esetleges hibákért felelősséget nem vállalunk. Részletes gépkönyvek és további dokumentumok világnyelveken letölthetők az Internetről: www.siemens.com/automation/service&support Magyar nyelvű segédletek letöltési címe: www.siemens.hu/ad Katalógusok letöltési címe: www.automation.siemens.com/infocenter SIMATIC internetoldal címe: www.siemens.com/simatic Információ-kérés magyar nyelven: simatic.tamogatas.hu@siemens.com STEP 7, magasabb szintű STL műveletek 2

Tartalomjegyzék 1. Hurok programozása 2. Indirekt címzés 3. Többszörös elágazás (case) 4. Akkumulátorműveletek STEP 7, magasabb szintű STL műveletek 3

A STEP7 magasabb szintű műveletei A STEP7, mint ezt már korábban írtuk, lényegében gépi kód, vagy másként fogalmazva assembly-színtű programnyelv (ami nem ugyanaz,de...). A számítástechnikával és a számítógépek programozásával korábban ismeretséget kötő, ma már ritkábban előforduló, szakemberek számára ez részben fogalom, részben magától értetődik. Az assembly-nyelvek esetében a magasabb szint contradictio in adjectu lenne, ha nem keveredtek volna a fogalmak és a célok az utóbbi évtizedekben, és ha a PLC nem képezne egy sajátságos területet a számítástechnika és a mikroszámítógépek területén. Bevezetésként talán ennyi elég... A STEP5 kevés, és igen egyéni (indirekt címzés), a STEP7 kiscsit több, és a számítástechnika más területeihez jobban illeszkedő, magasabb szintű műveletet tartalmaz. Ezeket ismertetjük a következőkben magyar nyelven, mert egyébként különböző idegen nyelveken a Siemens AG megfelelő honlapjain a teljes gépkönyv-készlet hozzáférhető. A magasabb szintű műveletek: - Hurok programozása - Indirekt címzés - Többszörös elágazás (case) - Regiszterműveletek STEP 7, magasabb szintű STL műveletek 4

1. Hurok programozása Ha a programban ugyanabban a ciklusban egy műveletet vagy műveletsort többször kell végrehajtani, akkor hurkot programoznak, amelynek a magasabb szintű nyelveken meg van a maga struktúrája (pl. FOR NEXT). A STEP7 ilyen eljárást nem tartalmaz, de rendelkezik egy viszonylag egyszerű makroprogrammal, ami mégis megkönnyíti a hurok létrehozását. Egyetlen kulcsszót kell hozzá ismerni, és a hozzá tartozó programszerkezetet. A kulcsszó: LOOP (hurok) A huroknak azt kell biztosítani, hogy a program végrehajtása egy bizonyos helyen annyiszor forduljon vissza, és fusson le azon a kis szakaszon még egyszer, ahányszor a feladat végrehajtása szükséges. Azt a címet, amelyen számon tartjuk, hogy a hurok hányszor hajtódott vére, hurokszámlálónak nevezik. A fenti struktogramban kettős kerettel jelölt műveleteket a LOOP makroutasítás tartalmazza, a többit a programozónak kell megadni. A következő példán követhető a hurok programozása és működése. A feladat legyen egy szorzás, de úgy hogy összeadásokból kell létrehozni, vagyis a szorzandót annyiszor kell hozzáadni saját magához, amennyi a szorzó értéke. STEP 7, magasabb szintű STL műveletek 5

Feladat: 5 x 4 L 4 //szorzandó T MW42 //betöltése T MW44 //eredménytároló L 5 //hurokszámláló VISZ : T MW40 //betöltése L MW42 L MW44 //eredmény + szorzandó +I T MW44 //eredmény tárolása L MW40 //hurokszámláló ellenőrzése LOOP VISZ //visszaugrás, ha a hurokszámláló nem nulla L MW44 T QW6 //az eredmény kijelzése STEP 7, magasabb szintű STL műveletek 6

2. Indirekt címzés A PLC programozása során az egyik legfontosabb kulcsszó a CÍM. Bemeneteket, kimeneteket eszközöket, függvényeket stb. címeken keresztül lehet elérni. Ezek fizikailag általában nem láthatók, meg nem foghatók, ha azonban valamilyen oknál fogva eltévesztik őket, nagy kárt, de legalábbis programhibát okozhatnak. A PLC-ben abszolút, szimbolikus ill. indirekt címzésről beszélünk (a cím szó persze sok egyéb összefüggésben is előfordul), amiből most a szimbolikus címzést elhagyhatjuk, mivel az lényegében az abszolút címzés másik neve, azaz a szimbolikus cím is egy abszolút címet takar (I2.2 = bekapcs ) legalábbis a globális szimbólumok esetében, a PLC működését nem érinti, a futó program nem is tartalmazza. Az abszolút cím a számítástechnikában a tárnak, a perifériának egy eszköznek stb. számmal megadott helye, elérési pontja. Ezt a számot a számítástechnika sajátságos rendszere szerint általában hexadecimális formátumban szokták megadni (pl. FF00H vagy a STEP7-ben W#16#140 stb.). A STEP5-ben még a programozó is használhatta a hexadecimális abszolút címeket, a STEP7 különböző célszerűségi okoknál fogva ezt már nem teszi lehetővé, és ez jobb is így. Ennek ellenére már a STEP5-ben is elterjedt, hogy nem a hexadecimális címet nevezték abszolút címnek (mivel leggyakrabban azt nem is használták), hanem a PLC egyes jellemző tárterületeinek azt a címzési módját, amikor az utasítás címrészében egy kód a terület fajtáját, egy szám pedig az azon belüli (lényegében) relatív címet jelölte. Pl. A F12.3 (U M12.3), azaz a belső változók területén (Merker németül, Flag angolul) a 13. bájt 4. bitje, vagy másként a 12-es bájt 3-as bitje. Ez azután a STEP7-ben is megmaradt, annál is inkább, mert ott a tényleges abszolút címzésre nincs lehetőség. Egy utasítással összekapcsolva az abszolút címzés tehát pl. a következő: A I 12.1 abszolút cím: 12-es bájt, 1-es bit memóriaterület: bemenet az utasítás kódja: ÉS A fenti utasítás azt mondja meg, hogy milyen műveletet (operation) kell végrehajtani az operandusban megadott címen lévő értékkel. Az utasítás tehát közvetlenül tartalmazza a címet, ezért ezt direkt címzésnek nevezik. A címet más módon is meg lehet adni, mégpedig indirekt módon, tehát úgy, hogy az utasításban nem az elérendő cím közvetlenül, hanem ez olyan cím található, amely arra a helyre mutat, ahol a közvetlen cím van. Ennek a címzési módnak az a nagy előnye, hogy az így kapott cím futás közben módosítható. A PLCben nincs olyan utasítás, amellyel az A I 12.1 utasításban lévő direkt (közvetlen) cím futás közben módosítható. Sem a területet, sem a címet nem lehet megváltoztatni. A közvetett címzés lehetővé teszi e két jellemző futás közbeni módosítását. A közvetett címzés általános szintaxisa a következő: utasítás [ mutató ] A mutató arra az indirekt címre mutat, amely tartalmazza az elérni kívánt (direkt) címet. A szögletes zárójel mint általában a számítástechnikában azt jelzi, hogy az operandus nem a zárójelben lévő cím, hanem annak tartalma. Ez azért is fontos, mert címet módosítani futás közben nem lehet de tartalmat igen. Márpedig, ha a mutató (pointer) tartalmát módosítani lehet, és a tartalom cím, akkor a címet tudom futás közben módosítani. Mire terjed ki ez a módosítási lehetőség, vagyis mit lehet a STEP7-ben indirekten címezni. Lényegében mindent: I bemenet Q kimenet M belső változó DBW adatcím DBx adatmodul cím FC/FB függvénycím STEP 7, magasabb szintű STL műveletek 7

T C időművelet címe számláló címe...stb. A mutató formátuma, és a mutatót tartalmazó terület Az előbbi felsorolás felvet néhány kérdést: a megadott területek címtartománya és címzési módja igen különböző. Ez természetesen különböző pointer-formátumokat és méreteket jelent. A pointer elhelyezése is többféle lehet, valamint hatásterülete szempontjából is többféle lehetőség van. - A mutató mérete: alapvetően két méret lehetséges WORD és DWORD Ez attól függ, hogy mekkorának kell lenni a címzési tartománynak. Az időműveletek pl. bizonyosan nem lépik túl a 65535, és címeik egészszámok, míg a bemenetek kimenetek bájt és bitcímet is tartalmaznak, és címtartományuk is sokkal nagyobb. WORD méretű mutató szükséges: DB/FC/FB-címnél Időművelet címénél Számláló címénél Példa: L 12 AKKU-1 töltése 12-vel T MW24 AKKU-1 átvitele az MW24-be OPN DB[ MW24] Az MW24-ben lévő tartalom által címzett DB megnyitása: OPN DB12 DWORD méretű mutató szükséges: P/I/Q/M/D/L címzéséhez - A pointer formátuma: A DB/FC/FB/T/C esetében a pointer egy egészszám P/I/Q/M/D/L esetében az első három bit a változó bitcíme 0...7) a 4-es bittől kezdve a 18-asig a változó bájtcíme - A pointer elhelyezése: A pointer elhelyezése szempontjából beszélhetünk táron keresztüli ill. címző regiszteren keresztüli indirekt címzésről. Az első eseten a mutató (pointer) a tár valamely területén, a második esetben az AR1 vagy AR2 címzőregiszterben található. A tár valamely területe vagy belső változó (MD...) vagy adatmodul (DBD...) lehet. A két különböző lehetőség különféle előnyökkel jár. A táron keresztüli egyszerűbben érthető, a regiszteren keresztüli áttekinthetőbb, rövidebb és főleg a címek manipulálásánál célszerűbb, mert a két címzőregiszter különféle műveleteket tesz lehetővé. - A pointer hatásterülete: Ez a tulajdonság arra vonatkozik, hogy a mutató a program szövegében megadott egyetlen tárterületre mutathat (P/I/Q/M/L) vagy un. területen (tartományon) átnyúló címzést tesz lehetővé. A tartományon átnyúló címzéssel gyakorlatilag a teljes bemeneti/kimeneti és adatterület egy utasításban indexelhető (elérhető). STEP 7, magasabb szintű STL műveletek 8

A fenti fogalmak alkalmazása a gyakorlatban WORD méretű mutató L 12 AKKU-1 töltése 12-vel T MW24 AKKU-1 átvitele az MW24-be OPN DB[ MW24] Az MW24-ben lévő tartalom által címzett DB megnyitása: OPN DB12 vagy L 8 AKKU-1 töltése 8-cal T DBW 22 AKKU-1 átvitele a DBW22-be A T [DBW22] A DBW22-ben lévő tartalom által címzett időművelet állapotának lekérdezése (T8) DWORD méretű mutató/ indirekt címzés táron keresztül (bájt töltése) L 2 AKKU-1 töltése 2-vel SLD 3 Az AKKU-1 tartalmának eltolása három bittel balra, hogy az a pointer bájt-pozíciójába jusson T MD34 a kész pointer áttöltése az index-regiszterbe (indirekt címzés táron keresztül) L IB [MD34] Az MD34-ben lévő tartalom által címzett bemeneti bájt beolvasása az AKKU1-be: L IB2 Az MD34 képe: DWORD méretű mutató/indirekt címzés táron keresztül (bit olvasása) L 4 AKKU-1 töltése 4-gyel SLD 3 Az AKKU-1 tartalmának eltolása három bittel balra, hogy az a pointer bájt-pozíciójába jusson L 3 AKKU-1 töltése 3-mal +I AKKU-1 összeadása az AKKU-2-vel: bitpozíció töltése T MD48 a kész pointer áttöltése az index-regiszterbe (indirekt címzés táron keresztül) A I [MD48] Az MD48-ban lévő tartalom által címzett bemeneti bit olvasása : A I4.3 STEP 7, magasabb szintű STL műveletek 9

DWORD méretű mutató/indirekt címzés táron keresztül, mutató típusú változó töltése (bit olvasása) Az előző példákban a STEP7 által elvárt mutató-formátumot bit-manipulációval hozták létre (SLW stb.). A mutató-szerű bitelrendezés azonban történhet úgy is, hogy az indexregiszterbe így nevezik azt a tárterületet, ahol az indirekt cím található eleve egy pointer típusú változót töltenek. Ennek jele a P#. Ez azt üzeni a fordítóprogramnak, hogy a következő címet mutató-formátumban kell az AKKU-1-be tölteni. Így szükségtelenné válik a bitek manipulációja. Az L P#8.7 utasítás hatására, az akkumulátor azonnal pointer-formátumban töltődik A pointer másik előnye, hogy aritmetikai műveleteket lehet rajta végrehajtani, pl. másik pointer hozzáadása vagy kivonása, ami adatfeldolgozási feladatoknál nagy előnyt jelent (léptetés egy lista elemein). Az aritmetikai művelet során az összeadás/kivonás bit-helyesen történik, azaz pl. az P#M12.1 és a P#M4.5 összeadásából P#M16.6 adódik. Regiszteren (AR1, AR2) keresztüli indirekt címzés tartományon belül Fentebb már említésre került, hogy azt a területet, ahol az indirekt (tehát a direkt címre mutató) címet elhelyezik, indexregiszternek nevezik, és attól függően hogy ez a tárterületen (M vagy D) vagy egy külön erre a célra kijelölt processzor-regiszterben van, beszélhetünk táron keresztüli ill. regiszteren keresztüli címzésről. Az előbbiekben minden esetben táron keresztüli indirekt címzést mutattunk be. A következőkben az un. címzőregiszteren keresztüli címzés és annak előnyei láthatók. Az S7-300 és S7-400-as PLC-k két címzőregiszterrel rendelkeznek: AR1, AR2 (Adressreguster 1. Adressreguster 2.). A két regiszter, amint nevük mutatja címzésre, mégpedig indirekt címzésre szolgálnak, méretük 32 bit. A címzőregiszterek feladata a pointerek (mutatók) befogadása, amelyek hasonlóak az előb látott mutatókhoz, most azonban kiegészülnek egy újabb tulajdonsággal: az általuk lehetővé váló indirekt címzés lehet tartományon belüli vagy tartományon átnyúló. A tartomány a PLC sajátságos tárfelosztását veszi figyelembe, vagyis, hogy a változók teljes területe a felhasználási céloknak megfelelően több részre tagozódik: közvetlen periféria, bemeneti tárkép, kimeneti tárkép, belső változók, lokális veremtár. A címzés egyik, eddig ismertetett módján csak a kiválasztott tárterületen belül lehet mozogni, míg a másik esetben az egyik területről át lehet lépni a másikra. A regiszteren keresztüli indirekt címzésnél az utasítás operandusa ugyanúgy egy címre mutat, amelyen megtalálható az elérni kívánt direkt cím. Ez a mutató azonban most nem a PLC bizonyos tárterületén (M vagy DB), hanem egy regiszterben az AR1 vagy AR2-es címzőregiszterben van kiegészülve egy további mutatóval, amely, ha szükséges egy un. állandó eltolást (offset) tesz lehetővé. A kialakuló indirekt cím e két mutató összegéből adódik. STEP 7, magasabb szintű STL műveletek 10

Az utasítás szintaxisa a következő: LAR1 P#8.1 az AR1-es címzőregiszter töltése a P#8.1 mutatóval A I [AR1, P#1.1] egy bemeneti bit olvasása, amelynek címe az AR1-es címzőregiszterben lévő címtől 10 bittel tovább van (P#1.1 = 10 bit). A cím tehát a címzőregiszter tartalma + 10 bit (P#8.1 + P#1.1) A fenti utasítással, bármilyen cím is kerül az AR1 regiszterbe, csak bemeneteket lehet lekérdezni. Ez már abból is látszik, hogy a bemenet kódja, az I az szögletes zárójelen kívül van, így futás közben nem változtatható. A fordító program azonban ezt nem ebből a tényből állapítja meg, hanem a 31-es bit 0 állapotából. Ez ugyanis azt jelenti: tartományon belüli címzés. Regiszteren (AR1, AR2) keresztüli tartományon átnyúló indirekt címzés A regiszteren keresztüli indirekt címzésnél az utasítás operandusa ugyanúgy egy címre mutat, amelyen megtalálható az elérni kívánt direkt cím. Ez a mutató azonban most nem a PLC bizonyos tárterületén (M vagy DB), hanem egy regiszterben az AR1 vagy AR2-es címzőregiszterben van kiegészülve egy további mutatóval, amely, ha szükséges egy un. állandó eltolást (offset) tesz lehetővé. A kialakuló indirekt cím e két mutató összegéből adódik.a tartományon átnyúló indirekt címzés azonban azt jelenti, hogy az indirekt tulajdonságot a változó fajtájára (I/Q/P/M/DBW/L) is kiterjesztik, vagyis az, hogy I/Q/P/M/DBW/L az AR1 címzőregiszterben döntenek ill. döntöttek a 31- es bit segítségével: ha ez a bit nulla, akkor mint előbb nincs tartományon átnyúlás, ha 1, akkor van, azaz a programnak futás közben ki kell értékelni a címzőregiszter 24,25,26-os bitjeit, mert ezek mondják majd meg, mely változófajtáról van szó. Az utasítás szintaxisa: LAR1 P#I 8.1 az AR1-es címzőregiszter töltése a P#I 8.1 mutatóval A [AR1, P#1.1] egy bemeneti bit olvasása, amelynek címe az AR1-es címzőregiszterben lévő címtől 10 bittel tovább van (P#1.1 = 10 bit). A cím tehát a címzőregiszter tartalma + 10 bit (P#8.1 + P#1.1) STEP 7, magasabb szintű STL műveletek 11

A fenti ábrán látható, hogy a 31-es bit 1, ami azt jelenti, hogy az rrr jelű 26,25,24-es biteket is ki kell értékelni a programnak, mert ezek határozzák meg a tartományt, vagyis a változó fajtáját. A következő táblázat mutatja a kódokat: Hexadecimális kód Tártartomány Leírás b#16#80 P A be/kimenetek perifériatartománya b#16#81 I A bemenetek tárképe b#16#82 Q A kimenetek tárképe b#16#83 M Belső változók (merker) b#16#84 DB Adatmodulok b#16#85 DI Instant-adatmodulok (FB-nél) b#16#86 L Lokális változók (L-Stack) b#16#87 V Előző lokális adatok A hexa-kód az indexregiszter (AR1) teljes első bájtjára vonatkozik, vagyis a 8-as a 31-es bit 1 jelállapotát jelenti, a második szám adja vissza az rrr bitek értékét. Ezért látható a fenti AR1-tartalomban az rr1, vagyis balról a teljes első bájtban a b#16#81. A tartományon átnyúló regiszteren keresztüli indirekt címzés tehát lehetővé teszi a PLC teljes változótartalmának elérését. A megoldások lehetővé teszik, hogy ugyanazt a célt több módon is lehessen programozni. A következőkben egy egyszerű feladaton láthatók a megoldások és az egyes megoldások előnyei. Példa: egy adatterületre (itt DB) bevitt számok sorba rendezése a fenti megoldásokkal bemutatva: STEP 7, magasabb szintű STL műveletek 12

3. Többszörös elágazás (case) Az elágazás döntés. Ezen vagy azon az ágon haladjon tovább a program végrehajtása. Van azonban olyan döntési helyzet, amikor nem csak két, hanem sok lehetőség is van a program végrehajtására. Ez a többszörös elágazás, vagy a magasabb nyelveken case-szerkezet. A STEP7 ilyen eljárást (case) nem tartalmaz, de rendelkezik egy viszonylag egyszerű makroprogrammal, ami mégis megkönnyíti a többszörös elágazás programozását. A többszörös elágazás lényegében többszörös ugrás: A következő példán követhető a többszörös elágazás programozása és működése. Feladat: Ha az IB 2-es bemeneti bájt tartalma 1 akkor a QB6 kimeneten legyen AA - - 2 - - BB - - 3 - - CC - - 4 - - DD Természetesen ezt a feladatot, főleg, ha a sor tovább folytatódna, indirekt címzéssel szokták megoldani. Ha a lehetőségek száma néhány (itt 4), akkor kínálkozik a többszörös elágazás is, mint egyszerű megoldás. A lehetőségeket számként be kell tölteni az AKKU-1-be. Ez általában egy változón keresztül történik, pl. MB100 L MB100 //tartalmazza az elágazás számát (itt: 1,2,3,4) JL SOK //ha 0 vagy több mint 4, akkor a SOK cimkére JU A //ha MB100 = 1, akkor A JU B //ha MB100 = 2, akkor B JU C //ha MB100 = 3, akkor C JU D //ha MB100 = 4, akkor D SOK: JU VEGE A: L B#16#AA // B#16#AA töltése az AKKU-1-be T QB6 // kiküldése a kijelzőre JU VEGE // ugrás a VEGE-re B: L B#16#BB T QB6 JU VEGE C: L B#16#CC T QB6 JU VEGE D: L B#16#DD T QB6 VEGE: BE STEP 7, magasabb szintű STL műveletek 13

4. Regiszterműveletek Akkumulátorműveletek Az S7-300 két darab 32-bites akkumulátorral, az S7-400 4 darab 32-bites akkumulátorral rendelkezik. Számítási műveletekhez azonban mindkét típus két akkumulátort használ (AKKU1 és AKKU2). Az akkumulátorok, amelyek a mikroprocesszor regiszterei, más feladatra is alkalmazhatók. A következőkben felsorolásra kerülő műveletek némelyike csak az S7-400-ban létezik. ENT és LIVE művelet (csak S7-400) A két művelettel a következőket lehet végrehajtani: az ENT az akkumulátortartalmakat tolja eggyel hátrább, tehát az AKKU-2 az AKKU-3-ba, az AKKU-3 pedig az AKKU-4-be, a LEAVE az akkumulátortartalmakat eggyel előbbre hozza, tehát az AKKU-3 az AKKU-2-be, az AKKU-4 pedig az AKKU-3-ba. A műveleteket a következő ábra mutatja: Az AKKU4 tartalma a művelet során elveszik, az AKKU1 és AKKU2 tartalma változatlan marad. STEP 7, magasabb szintű STL műveletek 14

Az AKKU2 tartalma a művelet során elveszik, az AKKU1 és AKKU4 tartalma változatlan marad. Példa a műveletek felhasználására: Feladat: a következő műveletet kell végrehajtani DBD16 = DBD0 + DBD4/DBD8 - DBD12 L DBD 0 DBD0 duplaszó töltése az AKKU-1-be L DBD 4 DBD4 duplaszó töltése az AKKU-1-be, egyidejűleg AKKU-1 másolása az AKKU-2-be +R AKKU-1 és AKKU-2 összeadása, eredmény tárolása az AKKU-1-ben L DBD 8 DBD8 duplaszó töltése az AKKU-1-be, egyidejüleg AKKU-1 másolása az AKKU-2-be ENT az AKKU-3 másolása az AKKU-4-be, egyidejüleg az AKKU-2 másolása az AKKU-3-ba, azaz a korábbi közbenső eredmény másolása az AKKU-3-ba L DBD 12 DBD12 duplaszó töltése az AKKU1-be, egyidejüleg AKKU-1 másolása az AKKU-2-be -R AKKU-1 kivonása az AKKU-2-ből, eredmény tárolása az AKKU-1-ben, egyidejűleg az AKKU-3 másolása az AKKU-2-be /R AKKU-2 osztása az AKKU-1 tartalmával, eredmény az AKKU-1-be T DBD 16 A fenti program az ENT utasítás használatát mutatta be S7-400-as PLC-ben, de néhány különleges tulajdonságot is lehetett látni (ami az S7-300-asnál nem lehetséges, mert csak két akkumulátora van). STEP 7, magasabb szintű STL műveletek 15

A négyakkumulátoros PLC-knél (S7-400 és WINAC) az aritmetikai műveletek elvégzésekor egyidejüleg az AKKU-3 az AKKU-2-be, az AKKU-4 pedig az AKKU-3-ba kerül. A TAK művelet A TAK művelet felcseréli a számításokban résztvevő AKKU 1 és AKKU 2 tartalmát. Az AKKU 2 tartalmához nem lehet közvetlen utasítással hozzáférni. Az L MD24 utasítás mindig az AKKU-1-be tölt, a T MD12 utasítás mindig az AKKU1 tartalmát küldi ki. Ha ilyen esetben mert pl. a két kiküldendő érték a két akkumulátorban található, vagy a műveletvégzés során az éppen szükséges érték a 2-es akkumulátorba került, lehet alkalmazni a TAK utasítást. L PIW20 L 10 -I T QW40 TAK L 20 -I T QW42 STEP 7, magasabb szintű STL műveletek 16