====== S7 változótípusok, OB-k ====== en: S7 Software Ebben a fejezetben a német szintaktikát alkalmazom (azaz nem A, mint AND, hanem U, mint UND a parancs például). További kapcsolódó oldalak: \\ [[hu:s7:plc_szoftver_alapfogalmak|S7 szoftver alapfogalmak]] \\ [[hu:s7:awl_leiras#start|S7 AWL utasításkészlet]] ===== A Simatic Step 7 változótípusai ===== A változótípusok csoportosítása hosszuk szerint: ^Bit (1 bit)^Byte (8 bit)^Szó (16 bit)^Duplaszó (32 bit)^64 bit| | [[#bool|BOOL]] | [[#byte|BYTE]] | [[#word|WORD]] | [[#dword|DWORD]] | | | | [[#char|CHAR]] | | | | | | | [[#int|INT]] | [[#dint|DINT]] | | | | | [[#date|DATE]] | | | | | | [[#s5time|S5TIME]] | | | | | | | [[#real|REAL]] | | | | | | [[#time|TIME]] | | | | | | [[#tod|TOD]] | | | | | | | [[#date_and_time|DT]] | | | |[[#timer|TIMER]]\\ COUNTER\\ BLOCK_FB\\ BLOCK_FC\\ BLOCK_DB\\ BLOCK_SDB| | | A fentiektől eltérő hosszú paraméter-típusok: POINTER (3 szó), [[#any|ANY]] (5 szó) Egyéb (változó hosszú) deklarációk: [[#array|ARRAY]], [[#struct|STRUCT]], [[#udt|UDT]], [[#String|STRING[n]]] ===== Simatic S7 változójegyzék ===== ==== ANY ==== Az ANY típussal összefüggő adatmezők definiálhatók, az alábbi struktúra szerint: p# [kezdőcím BYTE.BIT] [Adattípus] [Ismétlési faktor] Legjellemzőbb alkalmazása a BLKMOV funkció hívása. == Példák az ANY típus megadására == ^Megadott ANY paraméter^Leírása| |p# M 70.0 BYTE 11|10 byte-os merker terület kijelölése\\ MB70 - MB80| |p# DB22.DBX5.0 S5TIME 3|Három, a DB22-be lementett S5TIME változó kijelölése (az S5TIME szó hosszú változó)\\ DB 22 Byte 5 - DB 22 Byte 10.| |p# A 21.3 BOOL 4|4 bit kijelölése a kimeneten\\ A 21.3 - A 21.6| == SCL ANY típus definició == FUNCTION FC111 : INT VAR_TEMP Quelle : ANY; i : DINT; test : WORD; QuellPointer AT Quelle : STRUCT SyntaxID : BYTE; Datentyp : BYTE; Laenge : INT; db_Nummer : INT; BytePointer : DWORD; END_STRUCT; END_VAR //AnyPointer kezelese QuellPointer.SyntaxID := b#16#10; QuellPointer.Datentyp := b#16#4; // Datentyp WORD QuellPointer.Laenge := 10; // 10 szo QuellPointer.db_nummer := 100; // peldaul DB100 QuellPointer.BytePointer := dw#16#84000000 OR SHL(IN := DINT_TO_DWORD(i),N:=3); FC111 := 100; END_FUNCTION ==== ARRAY ==== Az array-jel tömböt lehet definiálni, mely maximum 6 dimmenziós lehet, és csak egy változótípust tartalmazhat. Az alábbi paraméter típusokat NEM tartalmazhatja: TIMER, COUNTER, BLOCK_FB, BLOCK_FC, BLOCK_DB, BLOCK_SDB, POINTER, ANY. Az ARRAY indexe nem eshet kívül az alábbi tartományon: -32768 - +32767. A típus nem dinamikus, és legalább két elemet kell, hogy tartalmazzon. Minden dimmenzió két határértékkel definiálható, pl: ARRAY [a1..a2]. A két határérték lehet negatív, pozitív érték vagy nulla, de az a2-nek mindenképpen nagyobbnak kell lennie, mint az a1-nek. Erre néhány példa: Egy dimmenziós tömb: ARRAY [-10..-1] Három dimmenziós tömb: ARRAY [1..12, 0..1, -5..-2] A lenti példán egy kezdőérték megadás látható, ahol az 5 elsődleges dimmenzió rendre 0.0, +100.0, 0.0 értékekkel kerül feltöltésre: Meres : ARRAY [1 .. 5, 1 .. 3 ] OF REAL := 0.0, +100.0, 0.0, 0.0, +100.0, 0.0, 0.0, +100.0, 0.0, 0.0, +100.0, 0.0, 0.0, +100.0, 0.0; ==== BOOL ==== Bit változó típus. A bit a legkisebb egység a plc-n, értéke TRUE vagy FALSE lehet. Az AWL-ben elvégezhető bit logikai műveleteket itt találja: [[hu:s7:awl_leiras#bit_logik|S7 AWL Bit logikai műveletek]] ==== BYTE ==== A byte 8 bitet tartalmaz. A biteket hátulról előre számozzuk, a byte 0.bitje mindig a legutolsó.\\ Egy byte értéke 0 -- 255 --ig terjedhet (B#16#0 - B#16#FF). {{:wiki:comm:msb_lsb.png|MSB / LSB}} A byte felső és alsó 4 bitjét rendre [[hu:comm:comdict#msb|MSB]] (Most Significant Bit) és [[hu:comm:comdict#lsb|LSB]] (Least Significant Bit) nevek­kel illetjük. ==== CHAR ==== A karakter változótípust plc-n meglehetősen ritkán alkalmazzuk. Általában az [[hu:comm:bus_rs232#rs-232|RS-232]]-vel kommunikáló egységek kapcsán szokott felbukkanni ez a típus. Ebben az esetben is, mint a byte-nál, a változó 8 bitből áll, és 0 - 255 közötti értéket vehet fel. Az ASCII kódtáblázat szerinti hozzárendeléssel egy byte -- egy char -- egy karakter. ==== DATE ==== A dátum típus 2 byte-on, előjel nélkül a napok számát adja a kezdeti időponttól. A kezdet az S7 esetén 1990.01.01, ezen időpont előtti dátum ezzel a típussal nem írható le. A maximálisan leírható dátum pedig: 2168.12.31.\\ A biteket ebben az esetben is hátulról előre számozzuk: | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ==== DATE_AND_TIME (DT) ==== {{anchor:dt}} A típus 64 bites, és BCD formátumban tartalmazza az információkat az alábbi tagolás szerint: ^0. byte^1. byte^2. byte^3. byte^4. byte^5. byte^6. byte^7. byte^ | Év\\ 90 .. 89 | Hónap\\ 01 .. 12 | Nap\\ 01 .. 31 | Óra\\ 00 .. 23 | Perc\\ 00 .. 59 | Másodperc\\ 00 .. 59 | MSec\\ 00 .. 99\\ (MSD) | **[[hu:comm:comdict#msb|MSB]]**\\Msec\\ 0 .. 9\\ (LSD) | **[[hu:comm:comdict#lsb|LSB]]**\\Munkanap\\ 1 .. 7 | ^ **Év**\\ (0.byte) | 90-nel indul (1990) és 89-nel ér véget (2089) | ^ **Hónap**\\ (1.byte) | Január -- December | ^ **Msec**\\ (6.byte és 7.byte [[hu:comm:comdict#msb|MSB]]) | A milliszekundum egy 3 jegyű szám (000 -- 999). A [[hu:s7:plc_szoftver_alapfogalmak#s7_bcd|BCD]] egy byte-on csak két számjegyet „engedélyez”. Ezért a felső két számjegyet a 6.byte tartalmazza, a hiányzó, legkisebb helyiértéket a 7.byte felső (MSB) 4 bitje tartalmazza. | ^ **Munkanap**\\ (7.byte LSB) | A munkanap kódját a 7.byte alsó (LSB) négy bitje tartalmazza:\\ 1: vasárnap\\ 2: hétfő\\ 3: kedd\\ 4: szerda\\ 5: csütörtök\\ 6: péntek\\ 7: szombat | A DT típus alkalmazási intervalluma: DT#1990-1-1-0:0:0.0 - DT#2089-12-31-23:59:59.999. **BCD kód**: a számjegyeknek azok kettes számrendszerbeli értéke felel meg. Egy számjegyet 4 helyi értéken ábrázolunk. Bővebb leírása [[hu:s7:plc_szoftver_alapfogalmak#s7_bcd|itt]] található. ==== DINT ==== Dupla integer (32 bit), működése megegyezik az [[#int|integer]]-rel, azaz, [[hu:s7:plc_szoftver_alapfogalmak#s7_kettes_komplementer|Kettes komplementer képzés]]sel lehet „bevinni” az értéket, és az első bit itt is az előjel, a többi pedig a számértéket tartalmazza. A változó csak egész számokra (de: Ganzzahl) alkalmazható.\\ A DINT minimuma -2.147.483.648, a maximuma +2.147.483.647. (Egyszerűbben megjegyezhető az, hogy a DINT nagyjából mínusz kétmilliárdtól plusz kétmilliárdig használható). A DINT felépítése: |**7**|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0| | 0. byte |||||||| 1.byte |||||||| 2.byte |||||||| 3.byte |||||||| Az első pozícióban (0. byte 7. bit) található bit az előjel (0: plusz, 1: mínusz).\\ Látható, hogy a biteket hátulról előre, míg a byte-okat előről hátrafelé számozzuk. ==== DWORD ==== A DWORD 32 bitet tartalmaz. A bitek számot „nem írnak le”, tartalma pusztán bitek halmaza. |7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0| | 0. byte |||||||| 1.byte |||||||| 2.byte |||||||| 3.byte |||||||| Intervalluma: ^formátum^minimuma^maximuma| |bineáris|0|1111 1111 1111 1111 1111 1111 1111 1111| |hexadecimális|DW#16#0000 0000|DW#16#FFFF FFFF| |BCD|0|9999 9999| |előjel nélküli decimális|B#(0,0,0,0)|B#(255,255,255,255)| A típus lényege, hogy tartalmára nem vonatkozik formai megkötés.\\ Két -- egymást követő - [[hu:s7:valtozotipusok_es_ob_k#word|WORD]] típusú változó egy DWORD-öt ír le. ==== INT ==== Az integer (16 bit) működése megegyezik a [[#dint|DINT]]-tel, azaz, [[plc_szoftver_alapfogalmak#kettes_komplementer_kepzes|kettes komplementer képzés]]sel lehet „bevinni” az értéket, és az első bit itt is az előjel, a többi pedig a számértéket tartalmazza. A változó csak egész számokra (Ganzzahl) alkalmazható. Az INT minimuma -32.768, a maximuma +32.767. (Egyszerűbben megjegyezhető az, hogy az INT nagyjából mínusz harminckétezertől plusz harminckétezerig használható). Az INT fel­építése: |**7**|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0| | 0. byte |||||||| 1.byte |||||||| Az első pozícióban (0. byte 7. bit) található bit az előjel (0: plusz, 1: mínusz). Látható, hogy a biteket hátulról előre, míg a byte-okat elölről hátrafelé számozzuk. ==== REAL ==== A real típus 32 biten a számokat [[hu:s7:plc_szoftver_alapfogalmak#s7_lebegopontos|lebegőpontos számábrázolás]]-sal tárolja. A belső szerkezet kialakítása az IEEE FP32 szabványa szerint történik. (Például 2334.342487e-6) Az IEEE (Institute for Electrical and Electronics Engineers) standard 754. definiálja a lebegőpontos (en: floating point) számok tárolását és feldolgozását, erről bővebben [[hu:s7:plc_szoftver_alapfogalmak#s7_lebegopontos|itt]] olvashat. A REAL típusú számok tárolási határai: ^ **Minimum pozitív:** ^ **Maximum pozitív:** | | +1.175495e-38 | +3.402823e+38 | ^ **Minimum negatív:** ^ **Maximum negatív:** | | -1.175495e-38 | -3.402823e+38 | A Real típus felépítése: |7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0| | 0.byte |||||||| 1.byte |||||||| 2.byte |||||||| 3.byte |||||||| |elő\\ jel|Karakterisztika\\ 8 bit||||||||Mantissza\\ 23 bit||||||||||||||||||||||| * Az előjel 1: negatív szám, 0: pozitív szám * Karakterisztika: 0-255 közötti számérték, e + 127 --tel kerül megjelenítésre. Decimális szám. * Mantissza: A szám kerekített pontosságú leírása ==== S5TIME ==== Az S5time (16 bit) típus még az S7 előtti S5 termékcsaládból öröklődött. Kissé körülményesebb használni, mint a normál idődefiníciót, ezért viszonylag ritkán bukkan fel. Felépítése: ^ 0.byte ^^^^^^^^ 1.byte ^^^^^^^| | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ^ szó ^^^^^^^^^^^^^^^| | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | | üres || Időköz || 2.BCD |||| 1.BCD |||| 0.BCD |||| Az idő definiciójánál 4 időbázis közűl választhatunk, melyeknek a felbontása és a teljes definiálható időhossza eltérő. A bázist a 12. és 13. bitekkel definiálhatjuk: ^ időbázis\\ (felbontás) ^bineáris kód\\ (12 - 13 bit)^teljes definiálható időhossz\\ minimum^ teljes definiálható időhossz\\ maximum | |10 ms|00|10MS|9S_990MS| |100 ms|01|100MS|1M_39S_900MS| |1 s|10|1S|16M_39S| |10 s|11|10S|2H_46M_30S| A [[plc_szoftver_alapfogalmak#bcd|BCD kódok]]kal 0 -- 999 --ig definiálhatók számok. A lenti példán a 173 sec megadása látható, másodperces bázisban: {{:wiki:s7:idobazis.png?342x107|BCD definition example: 173 sec}} \\ ==== STRING ==== A String típussal szövegeket tudunk tárolni. Hossza maximum 254 byte, tetszőleges. A String[n] esetén n hosszú szöveg tárolására alkalmas a változó, de a valóságban 2 byte-tal többet foglal el, mert az első byte-ján tárolja a maximális hosszat (n), a második byte-on pe­dig a valós hosszat. Ha például String[6] változónkba a „BUMM” szót tároljuk, akkor a változó 8 byte-ot foglal el, első byte-ja 6-t, második pedig 4-et fog tárolni. A tartalma így néz ki ebben az esetben: ^ 0.byte ^ 1.byte ^ 2.byte ^ 3.byte ^ 4.byte ^ 5.byte ^ 6.byte ^ 7.byte | | 6 | 4 | „B” | „U” | „M” | „M” | | | ==== STRUCT ==== A struktúra egy összegző adattípus, melyben maximum 8 szint mélységig lehet változó-struktúrákat definiálni. A Struct az alábbi paraméter típusokat NEM tartalmazhatja: TIMER, COUNTER, BLOCK_FB, BLOCK_FC, BLOCK_DB, BLOCK_SDB, POINTER, ANY. A típusnak legalább két komponenst kell tartalmaznia. A struktúra definiciója a STRUCT és az END_STRUCT kulcsszavak között található. A Struct alkalmazását tekintve gyakorlatilag megegyezik az UDT-vel. A lenti példán egy "kezel" nevű struktúra definiciója és kezelése látható az AWL editorban: {{:wiki:s7:s7_struct1.png?700x432|S7 Sturture in AWL-editor}} \\ //"kezel" struktúra definiciója és felhasználása az FC1-ben// ==== TIME ==== A különböző időfunkciókhoz leginkább a Time típusú definíciót szokás használni. A típus 32 bites, gyakorlatilag egy előjeles egész számot tartalmaz, melynek értéke -65.535 és +65.535 között változhat. Ez az érték a milliszekundumokat jelenti, és hogy ne legyen ilyen bonyolult az életünk (v.ö.: minden időt milliszekundumban kellene megadni), a definíciónál megengedi a „részletes” időleírást, mint például **T#2d1h12m32s210ms**, mely 2 nap, 1 óra, 12 perc 32 másodperc és 210 milliszekundum jelentéssel bír. * A megadható idő maximuma: T#+24d20h31m23s647ms * A megadható idő minimuma: T# -24d20h31m23s648ms Persze nem kell mindig, minden paramétert kitölteni, érvényes definíció a **T#12h23s** és a **T#123ms** is. A „time” típus felépítése: |**7**|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0| | 0. byte |||||||| 1.byte |||||||| 2.byte |||||||| 3.byte |||||||| A 0.byte 7.bitje az előjelet tartalmazza. Képzése megegyezik a [[#dint|Dint]] típussal -- [[plc_szoftver_alapfogalmak#kettes_komplementer_kepzes|kettes komplementer képzés]]sel állítja elő a negatív számokat. ==== TIME_OF_DAY (TOD) ==== {{anchor:tod}} A TOD típus 32 bites, tartalma egy előjel nélküli egész szám, mely a milliszekundumokat tárolja. A típus az egy napon belüli pontos idő definiálására alkalmas, így értéke a TOD#00:00:00.000 és TOD#23:59:59.999 értékek között változhat. A milliszekundum megadása a definícióban nem kötelező. Érvényes megadás például a **TOD#21:12:10** és a **TOD#05:14:22.100** is. Felépítése: |7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0| | 0. byte |||||||| 1.byte |||||||| 2.byte |||||||| 3.byte |||||||| ==== TIMER ==== Az időfunkciók legegyszerűbb kezelési módja a timer. Gyakorlatilag minden időméréshez független timer funkció rendelhető, saját egyedi beállításokkal. A FUP 256 timer alkalmazását engedi meg, de mert ezek önálló memóriaterületet foglalnak, melynek mérete hardware-függő, így a timer-ek számát a CPU típusa határolja be. ==== UDT ==== en: user definied type, hu: Felhasználó által definiált típus A típus gyakorlatilag a magas szintű nyelvek cluster változó-típusának felel meg, a többi típustól annyi eltéréssel, hogy ezt a változót gyakorlatilag az FB-n / FC-n kívül, a Simatic Manager / Bausteine ablakban kell definiálni, csakúgy, mint a "normál" FB-ket, FC-ket. (Gyakorlatilag az ablakra bökve a jobb egérgomb alatt a //Neues Objekt Einfügen// » //Datentyp// pontot kell választani, és az UDT adatait meg kell adni.) Az UDT megadható az AWL editorban, vagy file-ból is generálható, a lényeg, hogy az adott számú (vagy szimbolikus nevű) UDT létezzen, amire a programban hivatkozunk. {{:wiki:s7:s7_udt1.png?544x276|S7 UDT}} \\ //UDT1 definiálása az AWL editorban// A már létrehozott UDT-t a strukturához hasonló hivatkozással, a többi változóval megegyező módon alkalmazhatjuk, mint ahogy a lenti ábra is szemlélteti. {{:wiki:s7:s7_udt2.png?679x323|S7 UDT}} \\ A fent definiált UDT 1 felhasználása az FC 1-ben, IN típusú változóként ==== WORD ==== A Word (Wort) típus 16 bitet tartalmaz. A bitek számot „nem írnak le”, tartalma pusztán bitek halmaza. {{:wiki:comm:msb_lsb_word.png|WORD MSB-LSB}} Intervalluma: ^formátum^minimuma^maximuma| |bineáris|0|1111 1111 1111 1111| |hexadecimális|W#16#0|W#16#FFFF| |BCD|0|9999| |előjel nélküli decimális|B#(0,0)|B#(255,255)| A típus lényege, hogy tartalmára nem vonatkozik formai megkötés.\\ Két -- egymást követő - Word típusú változó egy [[#dword|Dword]] -öt ír le. ==== A Simatic Step 7 változóknál konstansok megadása ==== Konstansok megadásánál figyelni kell a pontos formátumra, mert amennyiben ezt nem sikerül eltalálnunk, teljesen más számértékeket fogunk találni az elvártak helyett. ^ Formátum ^ Megadási forma ^ Típus | | bináris | TRUE vagy FALSE\\ 0 vagy 1 | [[#bit|BOOL]] | | Előjel nélküli 16 bites egész szám | B#(0,0) -től\\ B#(255,255) - ig | [[#word|WORD]] | | Előjel nélküli 32 bites egész szám | B# (0,0,0,0) -től\\ B#(255, 255,255,255) -ig | [[#dword|DWORD]] | | Előjeles 16 bites egész szám | -32768 -tól\\ 32767 --ig | [[#int|INT]] | | Előjeles 32 bites egész szám | -2.147.483.648 -tól\\ +2.147.483.647 --ig | [[#dint|DINT]] | | Hexadecimális\\ megadás | B#16#0 -től\\ B#16#FF -ig | [[#byte|BYTE]] | | B#16#0 -től\\ B#16#FFFF -ig | [[#word|WORD]] | | B#16#0 -től\\ B#16#FFFFFFFF --ig | [[#dword|DWORD]] | | Dual megadás | 2#0 -től\\ 2#1111111111111111 -ig | [[#word|WORD]] | | 2#0 -től\\ 2#11111111111111111111111111111111 -ig --ig | [[#dword|DWORD]] | | IEEE típusú törtszám | +1.175495e-38 (pozitív minimum)\\ +3.402823e+38 (pozitív maximum)\\ -1.175495e -38 (negatív minimum)\\ -3.402823e +38 (negatív maximum) | [[#real|REAL]] | | BCD megadás | C#0 -tól\\ C#999 --ig | [[#word|WORD]] (BCD formában) | | S5TIME | S5T#0ms -tól\\ S5T#2h46m30s --ig | [[#s5time|S5TIME]] | | CPU idő konstans\\ TIME | T# -24d20h31m23s647ms -tól\\ T#+24d20h31m23s647ms --ig | [[#time|TIME]] | | T# -65535ms -tól\\ T#+65535ms --ig | [[#time|TIME]] | | CPU idő konstans\\ DATE | D#1990-01-01 -tól\\ D#2168-12-31 --ig | [[#date|DATE]] | | CPU idő konstans\\ TIME_OF_DAY | TOD#00:00:00.000 -tól\\ TOD#23:59:59.999 --ig | [[#tod|TIME_OF_DAY]] | | CPU idő konstans\\ DATE_AND_TIME | DT#89-12-31-23:59:59.999 | [[#date_and_time|DATE_AND_TIME]] | | karakter | „a”\\ (ASCII kód) | [[#char|CHAR]] | | karakterlánc | 2-től 254 karakterig a vezérlőkarakterekkel együtt\\ Vezérlőkarakterek:\\ $L : soremelés\\ $P : oldaltörés\\ $R : fej vissza\\ $T : tabulátor | [[#string|STRING]] | | Pointer\\ konstansok | P#x.y (megadott tartományon belül) | POINTER | | P#[tartomány]x.y | POINTER | | P#[tartomány]x.y TYPE z (típusmegjelöléssel) | ANY | === Néhány példa a konstansok alkalmazására === ^ Példa a konstans alkalmazására\\ (több sor esetén azonos az eredmény) ^ Leírás | | L + 12 | Egy előjeles egész szám (16 bit) betöltése az AKKU1-L-L-be. | | L 1.2345e-2\\ L 0.012345 | Egy IEEE formátumú törtszám (32 bit) betöltése az AKKU1-be | | L 2#1010101010101010 | Bináris szó konstans (16 bit) betöltése az AKKU1-L-be | | L B#(12,22) | Két előjel nélküli byte (16 bit) betöltés az AKKU1-L-be | | L B#(12,22,32,42) | Négy előjel nélküli byte (32 bit) betöltés az AKKU1-be | | L B#16#FF | 8 bites hexadecimális konstans betöltése az AKKU1-L-L-be | | L W#16#FFFF | 16 bites hexadecimális konstans betöltése az AKKU1-L-be | | L DW#16#FFFFFFFF | 32 bites hexadecimális konstans betöltése az AKKU1-be | | L S5T#20.4 S | 20,4 sec betöltése S5T formátumban az AKKU1-L-be | | L C#123 | 123 betöltése BCD formátumban az AKKU1-L-be | | OW W#16#AAAA | VAGY szóművelet hexadecimális „AAAA”-val. Az érték az AKKU1-L-be kerül. | ===== Adatterületek csoportosítása az S7 esetén ===== ^ Operand terület ^ Megnevezés ^ S7\\ jelölés ^ Jellemzés | | Bementi változók Prozessabbild der\\ Eingänge | Bemenet (bit)\\ Eingang | **E** | Minden ciklus kezdetén a CPU beolvassa a bemeneteket a bemeneti változókba. | | Bemeneti byte\\ Eingangsbyte | **EB** | | Bemeneti szó\\ Eingangswort | **EW** | | Bemeneti duplaszó\\ Eingangsdoppelwort | **ED** | | Kimeneti változók Prozessabbild der\\ Ausgänge | Kimenet (bit)\\ Ausgang | **A** | Minden ciklus végeztével a CPU a kimeneti változókat kiadja a kimenetekre. | | Kimeneti byte\\ Ausgangsbyte | **AB** | | Kimeneti szó\\ Ausgangswort | **AW** | | Kimeneti duplaszó\\ Ausgangsdoppelwort | **AD** | | Merker\\ Merker | Merker (bit)\\ Merker | **M** | Merker memória | | Merkerbyte\\ Merkerbyte | **MB** | | Merker-szó\\ Merkerwort | **MW** | | Merker-duplaszó\\ Merkerdoppelwort | **MD** | | Idők\\ Zeiten | Timer\\ Zeit | **T** | Időfunkciók | | Számlálók\\ Zähleren | Számláló\\ Zähler | **Z** | Számláló funkciók | | DB\\ Datenbaustein | | | Adatterületek, melyek lehetnek global és instant típusúak | | Global DB\\ Global Datenbaustein\\ AUF DB-vel hívható | **DB** | Globális DB jelölések\\ Global Datenbaustein Notation | | DB bit\\ Datenbit | **DBX** | | DB byte\\ Datenbyte | **DBB** | | DB szó\\ Datenwort | **DBW** | | DB duplaszó\\ Datendoppelwort | **DBD** | | Instant DI\\ Instanz Datenbaustein\\ AUF DI-vel hívható | **DI** | Instant DB változók\\ Instanz Datenbaustein Notation | | DI bit\\ Datenbit | **DIX** | | DI byte\\ Datenbyte | **DIB** | | DI szó\\ Datenwort | **DIW** | | DI duplaszó\\ Datendoppelwort | **DID** | | Lokális változók\\ Lokaldaten | Lokális bit\\ Lokaldatenbit | **L** | A lokális változók az OB-ken és FC-ken belül definiált változók. | | Lokális byte\\ Lokaldatenbyte | **LB** | | Lokális szó\\ Lokaldatenwort | **LW** | | Lokális duplaszó\\ Lokaldatendoppelwort | **LD** | | Periféria bemenetek\\ Peripheriebereich:\\ Eingänge | Periféria bemeneti byte\\ Peripherieeingangsbyte | **PEB** | A periféria be- és kimenetek direkt hozzáférést nyújtanak a központi egységre és a decentralizált egységre csatolt kártyákhoz. | | Periféria bemeneti szó\\ Peripherieeingangswort | **PEW** | | Periféria bemeneti duplaszó\\ Peripherieeingangsdoppelwort | **PED** | | Periféria kimenetek\\ Peripheriebereich:\\ Ausgänge | Periféria kimeneti byte\\ Peripherieausgangsbyte | **PAB** | | Periféria kimeneti szó\\ Peripherieausgangswort | **PAW** | | Periféria kimeneti duplaszó\\ Peripherieausgangsdoppelwort | **PAD** | ===== S7 OB-k teljes jegyzéke, leírással ===== ^OB\\ száma^megnevezés^leírás^PLC\\ megkötésesk| ^OB1|ciklikus végrehajtás\\ Zyklisches Programm|Az OB1 a PLC-n ciklikusan kerül végrehajtásra. Ha véget ért, PLC elküldi a Global-adatokat és lezárja a ciklust.\\ Ez a legalacsonyabb prioritású OB, azaz minden más OB ennek a futását szakítja meg. [[soft_basic#ob1|További információ itt található.]]|minden PLC típuson fut| ^OB10 -\\ OB17|egyszeri vagy periodikus hívású\\ OB-k\\ Uhrzeitalarm-OBs|Ezeknek az OB-knak a hívás-sűrűsége az alábbiak szeint állítható:\\ egyszeri percenkénti óránkénti naponta hetente havonta évenként hónap végén Az OB-k beállítását az SFC 28 "SET_TINT", aktiválásukat az SFC 30 "ACT_TINT" végzi.|minden PLC típuson fut, de a 300-asokon csak az OB10 áll rendelkezésre.| ^OB20 -\\ OB23|Késleltetett hívású OB-k\\ Verzögerungsalarm-OBs|Késleltetett indítású OB-k. Az OB-kat az SFC 32 "SRT_DINT" -en keresztül lehet indítani. A késleltetési idő álló PLC-n nem fut, és minden hidegindítás újra indítja a késleltetést.|A 300-as PLC-ken jellemzően csak az OB20 hívható, és csak a 317/319-en érhető el az OB21.| ^OB30 -\\ OB38|időzített OB-k \\ Weckalarm-OBs| A wekker OB-k meghatározott idok szerint kerülnek hívásra. A magasabb prioritású OB-k az alacsonyabb prioritással rendelkezoket megszakítják. (Az OB1-et alapértelmezés szeint mindegyik megszakítja). Az alapértelmezett idők átállíthatók.\\ OB _ default idő-raszter _ Prioritás \\ OB30 _ 5s _ 7 \\ OB31 _ 2s _ 8 \\ OB32 _ 1s _ 9 \\ OB33 _ 500ms _ 10 \\ OB34 _ 200ms _ 11 \\ OB35 _ **100ms** _ **12** \\ OB36 _ 50ms _ 13 \\ OB37 _ 20ms _ 14 \\ OB38 _ 10ms _ 15 |A 300-as PLC-ken jellemzően csak az OB35 hívható, és csak a 317/319-en érhető el az OB32, 33, 34.| ^OB40 -\\ OB47|Folyamat OB-k\\ Prozessalarm-OBs|Folyamatokhoz köthető ezeknek az OB-knak a futtatása. Jellemzően az I/O vagy FM kártyákon definiált csatornák értékváltásai tudják aktiválni a hozzájuk rendelt folyamat OB-t.|Az S7- 300-asokon csak az OB40 áll rendelkezésre.| ^OB55|DPV1-állapot OB\\ Statusalarm-OB|Akkor aktiválódik, ha valamelyik, DPV1-gyel aktivált slave állapotváltozás jelzéssel (például RUN » STOP) kiváltja azt. A kiváltó eseményeket a DPV1 slave egység dokumentációjából lehet kibogarászni.|Csak a DP-s CPU-kon áll rendelkezésre - S7-300-asokon is.| ^OB56|DPV1 update OB\\ Update-Alarm-OB|Akkor aktiválódik, ha valamelyik, DPV1-gyel aktivált slave paraméterváltozás jelzéssel (ez történhet helyi- vagy távoli eléréssel) kiváltja azt. A kiváltó eseményeket a DPV1 slave egység dokumentációjából lehet kibogarászni.|Csak a DP-s CPU-kon áll rendelkezésre - S7-300-asokon is.| ^OB57|DPV1 gyártóspecifikus OB\\ OB für herstellerspezifische Alarme|Akkor aktiválódik, ha valamelyik, DPV1-gyel aktivált slave valamilyen gyártóspecifikus jelzéssel kiváltja azt. A kiváltó eseményeket a DPV1 slave egység dokumentációjából lehet kibogarászni.|Csak a DP-s CPU-kon áll rendelkezésre - S7-300-asokon is.| ^OB 60|Multicomputingalarm-OB|Ezzel a OB-vel elérhető, hogy egy adott eseményre több CPU szinkronizáltan egyszerre reagáljon. Az OB aktiválását az SFC 35 "MP_ALM" funkcióval lehet elérni az összes , adott busz-szegmensben elérhető CPU-n, ha azokon nincs aktiválva a letiltó hatályú SFC 39 "DIS_IRT", vagy a késleltető SFC 41 "DIS_AIRT".|S7-300-as PLC-n nem áll rendelkezésre.| ^OB 61-\\ OB 64|DP-szinkron OB-s\\ Taktsynchronalarm-OBs|Az OB lehetővé teszi a DP hivásokkal szinkronban történő végrehajtást.|S7-300 esetén csak az OB61, és csak a CPU315-2PN/DP / 317 / 319 -n futtatható.| ^OB 65|Technologiesynchronalarm-OB|Az OB lehetővé teszi, hogy a technológiai DB aktualizálásával szinkronban futtasunk programot.|Csak a "T" PLC-ken érhető el.[[hard_basic#T_s_CPUk|Ezekről bővebben itt.]]| ^OB 70|Peripherie-Redundanzfehler-OB|A H-CPU akkor hívja fel az OB-t, ha redundancia-kiesés lép fel a Profibus-DP-n ( például buszkiesés az aktív DP-master-en, vagy hiba a DP-Slave-re váltáskor). Amennyiben az OB70 felhívásra került, a PLC nem áll le, hanem redundáns módban marad.|Csak H-s PLC-ken érhető el.[[hard_basic#H_s_CPUk|Ezekről bővebben itt.]]| ^OB 72|CPU-Redundanzfehler-OB|Az OB72 futását az alábbi események válthatják ki: Redundanciakiesés a CPU-n Tartalék - Master átkapcsolás Szikronizációs hiba Hiba egy SYNC modulban Átváltás megszakítása Hasonlítási hiba (RAM, PAA) |Csak H-s PLC-ken érhető el.[[hard_basic#H_s_CPUk|Ezekről bővebben itt.]]| ^OB 73|Kommunikations-Redundanzfehler-OB|A H-CPU az első "H"-s S7-kapcsolat (S7-Verbindung) kiesésésnél hívja fel az OB-t. A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül.|Csak a 417-4H-n érhető el, a V2.0.x firmware verziótól| ^OB 80|Ciklusidő túllépés OB\\ Zeitfehler-OB|Ciklusidő túllépés (Überschreiten der Zykluszeit) esetén kerül meghívásra az OB. A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül. Amennyiben azomban az adott ciklusban másodszor is meghívásra kerül az OB, a STOP elkerülhetetlen. (Végtelenített ciklusokra az OB nem ad megoldást.)| | ^OB 81|Tápellátás hiba OB\\ Stromversorgungsfehler-OB|Az OB a tápellátás hiba ("Fehler in der Stromversorgung")bekövetkezése vagy az akkumlátor kiesése esetén kerül meghívásra. A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül. Az OB futását az akkumlátor hiba ("Batteriefehler") is kiváthatja, ha az akkumlátor ellenőrzését a BATT.INDIC-kel aktiváltuk.|csak s7-400-on működik| ^OB 82|diagnózis hiba OB\\ Diagnosealarm-OB|Az OB-t a beérkező (kommendes Ereignis) és a kifutó (gehendes Ereignis) hibák aktiválják. Ezek a hibák azokról a modulokról érkezhetnek, amiken a diagnózishibák kezelése (Diagnosealarm) engedélyezett.| | ^OB 83|Ki / Becsatlakoztatás OB\\ Ziehen/Stecken-OB|Az OB az alábbi esetekben kerül meghívásra: Projektált kártya kihúzása vagy beillesztése esetén CiR-re alkalmas kártya menet közbeni beillesztése esetén A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül.|az s7-300 esetén csak az alábbi típusokon:\\ CPU IM151, 315PN és 317PN| ^OB 84|CPU-Hardwarefehler-OB|Az OB az alábbi esetekben kerül meghívásra: Memóriahiba beazonosítása esetén S7-400H esetén: csökkent átviteli képesség a redundáns CPU-k között a redundanciát biztosító csatornán WinAC RTX esetén: Hiba a PC operációs rendszerével (pl. kék halál) A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül.\\ Az OB működését az SFC 39 - SFC 42 befolyásolhatja.| | ^OB 85|Programmablauffehler-OB|Az OB az alábbi esetekben kerül meghívásra: meghívás egy be nem töltött OB-re (kivétel: OB 80, 81, 82, 83, 86) egy (pl. meghívott) program-modul nem hívható meg. periféria aktualizálási hiba A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül.| | ^OB 86|Baugruppenträgerausfall-OB|Az OB az alábbi esetekben kerül meghívásra: ha kiesik egy bővítőegység (pl. ET) ha kiesik egy DP-Master-rendszer ha kiesik egy decentrális periféria (Profibus DP vagy ProfiNet IO) A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül.\\ Az OB működését az SFC 39 - SFC 42 befolyásolhatja.|Csak a DP-s és PN-IO-s CPU-kon áll rendelkezésre \\ S7-300 PLC-ken nem érhető el.| ^OB 87|Kommunikationsfehler-OB|Az OB kommunikációs hiba hatására kerül meghívásra. A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB 87 meghívásra kerül. S7-400 CPU esetén Az OB működését az SFC 39 - SFC 42 befolyásolhatja.| | ^OB 88|Bearbeitungsabbruch-OB|Az OB akkor kerül meghívásra, ha a program-modul (Programmbaustein) feldolgozása valamilyen oknál fogva megszakad. Ennek oka lehet: a túl mély struktúra szinkron-hibát okoz túl mély struktúra eljáráshívásnál (U-Stack kiakadás) hiba lép fel a lokális adatok (Lokaldaten) allokálásánál A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül.\\ Az OB működését az SFC 39 - SFC 42 befolyásolhatja.| | ^OB 90|Hintergrund-OB|Az S7 felügyeli a maximális ciklusidőt és garantálja annak minimális szintjét. Amennyiben az aktuális ciklusidő kisebb - minden egyéb OB megszakítással és a rendszer által foglalt időkkel - mint a minimális ciklusidő, akkor ha a CPU-ra fel lett töltve az OB90, akkor meghívja azt ha a CPU-n nem található az OB, akkor a rendszer késlelteti a következő OB1 indítást, ezáltal tartja a garantált minimum ciklusidőt\\ Amennyiben a minimális ciklusidő és a ciklus felügyeleti idő egymáshoz közel lettek definiálva, az OB 90-ből felhívott SFB-k és SFC-k váratlan leállást is eredményezhetnek.| | ^OB\\ 100 -\\ OB\\ 102|felfutás OB-k\\ Anlauf-OBs|A felfutás lehetséges oka, és az ezáltal meghívott OB: Ismételt felfutás (Wiederanlauf) : **OB 101** Újraindítás (Neustart - Warmstart) : **OB 100** Hideg indítás (Kaltstart) : **OB 102** |Az ismételt felfutás (Wiederanlauf) S7-300 és S7-400H esetén nem lehetséges.| ^OB\\ 121|programozói hiba OB\\ Programmierfehler-OB|Programozói hiba fellépése esetén az OB 121 kerül meghívásra. Ennek oka lehet: Olyan program felhívása, ami nem került a CPU-ra letöltésre Kicímzés a DB-ből Pontatlan pointer-használat A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül.\\ Az SFC 36 "MSK_FLT", SFC 37 "DMSK_FLT" és SFC 38 "READ_ERR" segítségével a befutó hibák maszkolhatók.| | ^OB\\ 122|Peripheriezugriffsfehler-OB|Periféria olvasási hiba esetén az OB meghívásra kerül. Ha az OB a hiba bekövetkezésének idején le van töltve a CPU-ra, akkor a CPU nem megy STOP-ba, egyébként viszont igen.\\ Az SFC 36 "MSK_FLT", SFC 37 "DMSK_FLT" és SFC 38 "READ_ERR" segítségével a befutó hibák maszkolhatók.| | Minden OB-nak van lokális adatterülete, ahonnan a részletes információk kiolvashatók. A fellépő hibákról és a meghívott OB-król a CPU diagnózis is tájékoztatást ad. A hibakezelő OB-k használata fejlesztés alatt nem előnyös, mert ilyenkor sokkal egyszerűbben visszakereshető egy hiba forrása, ha a PLC rögtön, a hibát követően kiesik és a CPU diagnózisból visszakövethető az események sora.