6. Laborgyakorlat
Aritmetikai és logikai műveletek. Adattömb kezelése. A gyakorlat célja A gyakorlatban továbbfejlesztjük a PLC programozási ismereteinket, megismerkedünk az aritmetikai és logikai műveletekkel LAD és STL programozási nyelvben. A változók strukturált tárolására alkalmasak az adattömbök. Az elemi adattömbkezelési lehetőségeket is átvesszük a gyakorlat során. Elméleti bevezető Az S7-es PLC-k háromtípusú aritmetikai műveletet tudnak kezelni, ezek az elemi adattípusoktól függnek. Ennek megfelelően van: − Integer – tehát szóhosszúságú adattípusokkal műveletek − Double Integer - tehát két szó hosszúságú adattípusokkal műveletek − Real – valós számokkal végzett műveletek. Az adattípusok:
Integer műveletek: − ADD_I Add Integer - Összeadás − SUB_I Subtract Integer - Kivonás − MUL_I Multiply Integer - Szorzás − DIV_I Divide Integer - Osztás
PLC laboratóriumi gyakorlat - 6
Kutasi Nimród
Dupla integer műveletek: − ADD_DI Add Double Integer − SUB_DI Subtract Double Integer − MUL_DI Multiply Double Integer − DIV_DI Divide Double Integer − MOD_DI Return Fraction Double Integer – Az osztás törtrésze Az alábbi példán az MW10 memóriazónát összeadja az MW12-vel. Ha az eredmény az INT határain belül marad, akkor elvégzi a szorzást is, éspedig megszorozza az MW14-et kettővel.
Ha túlcsordulás van, akkor a STATUS WORD-ban az OV bit-1 re vált. Valós műveletek − ADD_R Add Real – összeadás − SUB_R Subtract Real – kivonás − MUL_R Multiply Real – szorzás − DIV_R Divide Real – osztás − ABS – Absolute Value – abszolút érték − SQR – Square – négyzetre emelés − SQRT – négyzetgyökvonás − LN – Natural Logarithm – e alapú logaritmus − EXP – e alapú exponenciális − SIN, ASIN – sinus, arcus sinus − COS, ACOS – cosinus, arcus cosinus − TAN, ATAN – tangent, arcus tangent
PLC laboratóriumi gyakorlat - 6
Kutasi Nimród
Példa
STL aritmetikai műveletek Egész tipusú műveletek: − +I Add ACCU 1 and ACCU 2 as Integer (16-Bit) − -I Subtract ACCU 1 from ACCU 2 as Integer (16-Bit) − *I Multiply ACCU 1 and ACCU 2 as Integer (16-Bit) − /I Divide ACCU 2 by ACCU 1 as Integer (16-Bit) − + Add Integer Constant (16, 32 Bit) − +D Add ACCU 1 and ACCU 2 as Double Integer (32-Bit) − -D Subtract ACCU 1 from ACCU 2 as Double Integer (32-Bit) − *D Multiply ACCU 1 and ACCU 2 as Double Integer (32-Bit) − /D Divide ACCU 2 by ACCU 1 as Double Integer (32-Bit) − MOD Division Remainder Double Integer (32-Bit) Ugyanazok a műveletek, mint LAD esetben, a műveleteke mindig az ACCU1 és ACCU2 között végzi a CPU. Ezért előbb az operandusokat betöltjük az ACCU-ba, majd elvégezzük a műveleteket. Példa
PLC laboratóriumi gyakorlat - 6
Kutasi Nimród
A fenti példában feltöltjük az ACCU1-et MW10-el, utána az ACCU1-et áttoljuk az ACCU2-be és az ACCU1-be betesszük az MW14-et, összeadjuk mint egész számok és az eredményt betöltjük az MW14-be. Megvizsgáljuk a túlcsordulást, ha volt akkor elugrik a program az END címkéhez, ha nem volt túlcsordulás akkor a kapott eredményt megszorozzuk 2-vel. A JC (Jump Conditional) akkor ugrik, ha a RLO 1-ben van. Hasonlóan a valós számoknál: − +R Add ACCU 1 and ACCU − -R Subtract ACCU 1 from ACCU 2 − *R Multiply ACCU 1 and ACCU 2 − /R Divide ACCU 2 by ACCU 1 − ABS Absolute Value − SQR Generate the Square − SQRT Generate the Square Root − EXP Generate the Exponential Value − LN Generate the Natural Logarithm − SIN Generate the Sine of Angles − COS Generate the Cosine of Angles − TAN Generate the Tangent of Angles − ASIN Generate the Arc Sine − ACOS Generate the Arc Cosine − ATAN Generate the Arc Tangent Logikai műveletek A logikai műveletek két memóriazóna bitjei között végezhetők, az S7-es PLC-k szó és duplaszó hosszúságú adatok között tud logikai műveleteke elvégezni. − WAND_W (Word) AND Word - És − WOR_W (Word) OR Word - Vagy − WXOR_W (Word) Exclusive OR Word – Kizáró vagy − WAND_DW (Word) AND Double Word – És két szó − WOR_DW (Word) OR Double Word – Vagy két szó − WXOR_DW (Word) Exclusive OR Double Word - Kizáró vagy két szó
PLC laboratóriumi gyakorlat - 6
Kutasi Nimród
A fenti példa beolvassa a a 124-es címtől kezdődő digitális bemeneteke és lemaszkolja az alsó négyet, tehát a többi nem érdekes ebben az esetben. Tehát az MW10-be csak az első négy bemenet kerül. Adattömb kezelés Az adattömbök strukturált memóriazónák, amit a felhasználó az adatok tárolására használ. Az adattömbök a RAM-ban bemásolódnak, ha a program futtatásánál relevánsak. Ha nem releváns akkor át kell másolni a tárolt adatokat amikor szükséges. Két típusú adattömb létezik, a megosztott (Shared DB) és az Instance DB, vagyis egy függvény saját memóriazónája. Mi most a megosztott adattömböt vizsgáljuk.
PLC laboratóriumi gyakorlat - 6
Kutasi Nimród
Amint látjuk az adattömbbe különböző adatokat tárolunk. A fenti példán van három WORD tipusú változó és egy tömb, aminek az elemei STRUCT típusúak, tehát egy struktúra. Ez egy receptet tartalmaz, amiben a program neve és a recept két összetevője van. Ebből a receptből 10-et tároltunk a DB1 adattömbbe. Az adatok megcímezése: − DB1.DBX1.0 – bit típusú címzés − DB1.DBB1 – byte típusú − DB1.DBW1 – word típusú − DB1.DBD – double word típusú Például a fenti DB1-ből kiolvasom az áramot, és átírom a DB2-be: L DB1.DBW2 T DB2.DBW10 Az adattömbök adataihoz hozzáférünk úgy is, hogy megnyithatjuk az adattömböt és utána csak a benne levő címre hivatkozunk:
Feladat Töltsetek fel egy adattömbbe 10 mért értéket, ami egy 16-bites AD konverzió eredmény egyenként (az analóg bementre PIWxxx cimmel hivatkozunk, pl. PIW256). Skálázzátok át az értékeket 0-1000 tartományba, és az eredményt tegyétek át egy másik adattömbbe. Ha az első három digitális bemeneten a decimális 7-nek megfelelő bináris érték van, akkor generáljátok a mért értékek szinuszát és mentsétek el az eredményt.
PLC laboratóriumi gyakorlat - 6
Kutasi Nimród