1.  Nyelv

Az új nyelvi motor nem gyorsabb csupán, de rengeteg új nyelvi elemmel is bővült és megszűntek a korábbi korlátok például az indexelésnél. Lehetőség van továbbá a nyelv szintaxisának a megválasztására. Jelenleg a megszokott és a korábbi változatokkal kompatibilitást biztosító XSDL mellett Pascal-ban és C-ben programozható a rendszer, de fejlesztés alatt áll a Java, ill. Javascript és az Xcode. Nemsokára mindenki olyan nyelven programozhatja a VISION-t, ami a legjobban fekszik neki. Nézzük a részleteket.

1.1.   Új XSDL nyelvi elemek

Nyelvi elem

Leírás, példa

Case utasítás

Megjelent a case utasítás (C-ben switch):

 

  case idx of

    1: szivattyu1=1;

       Szivattyu2=2;

    4: szivattyu1=2;

    9: szivattyu1=3;

  end

 

Az érték nem csak szám lehet, de szövegkonstans is! Amellett, hogy egyszerűbb elágazni a programban így, a case utasítás jóval gyorsabb is, mivel csak az értéknek megfelelő feltételes ág értékelődik ki a végrehajtás során. Break nem kell az utasítások végére (mint a C-ben).

Konstans tömb

const2[8]:=[101,102,103,104,105,106,107,108];

 

Felsorolhatjuk tehát egyszerűen a tömbelemeket.

Változó felsorolás

Lehetővé vált a változó megadásánál a felsorolás, azaz egyszerre több változót is megadhatunk ugyanarra a típusra:

 

i[10],j,k,l: integer;

 

Ez a megadási mód a VISION változófájlban is megengedett:

 

Kond_1, Kond_2: 300,133920,20,Kond,m,1,0,0,6,0,6,0,0,0,8065 'Kondenz

Direkt típusmegadás

A változófájlban ezentúl hivatkozhatunk a típusra közvetlenül is, vagyis nem kell többé a változókat típus szerint csoportokba rendezni:

 

Integertrends

  Kond_1:  300,133920,20,Kond,m,1,0,0, 6,0,6,0,0,0,8065 'Kondenz

 

Helyett írható ez is:

  Kond_1: Tintegertrend 300,133920,20,Kond,m,1,0,0, 6,0,6,0,0,0,8065

 

Ennek a megadási módnak az a fő előnye, hogy a változók sorrendjét teljesen függetleníti a változók típusától.

Variant

Megjelent a variant típus:

 

  v: Variant;

 

Ennek az az érdekessége, hogy a típusa az értékadásnál dől el (v=false; v=123; v=”szöveg”). Tartalmazhat bool, integer, real, string változót, sőt változó objektumot is!

Univerzális Xnumerics, Xdigits, Xstrings

Az Xnumerics, Xdigits, Xstrings típusok ezentúl használhatók függvények, eljárások argumentumában is, vagyis a cím szerinti univerzális változó-átadás teljesen általánosan használhatóvá vált (korábban csak szimbólumok és képek argumentumai között lehetett szerepeltetni, eljárásokban nem).

Változó-átadás bármilyen mélységben

Nincs többé korlát a paraméter átadást illetően szimbólumok és képek egymásba ágyazásakor, mivel valódi cím szerinti átadás történik. Bármilyen mélységben is ugyanúgy hivatkozhatunk tehát a változóra és annak összes elemére (Min, Max, Dim, Mean…).

Break

Megjelent a break utasítás, amivel ciklusokból lehet kiugrani:

 

  break;

 

Egyaránt használható for, repeat-until és do-while ciklusokban.

Nem kötelező az eljárás-paraméter

Eljárásoknál és függvényeknél ezentúl nem kell kötelező argumentum (korábban legalább 1 paramétert kellett szerepeltetni a function/procedure/ kulcsszó után):

 

  datum:: string function

  begin

    datum=Date;

  end

 

Strukturált változók kiterjesztése

Az X9-ben a strukturált változóknak csak az első tagját lehetett átadni a Tstructure típusú paraméternek. Az X10-ben bármelyik részét.

 

Például a Bpest.IVker.fiok1.gozsziv változónak egyaránt áthadó a Bpest, a Bpest.IVker, vagy a Bpest.IVker.fiok1 tagja, míg korábban csak a Bpest–et lehetett struktúra prefixnek tekinteni.

 

Az X10 valódi szöveg behelyettesítéssel operál.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Emellett a belső string műveletek mind unicode-ban történnek (bármilyen nyelv) és a szöveghossz sem korlátozott 255 karakterre, mint korábban. Egy-egy közbülső szöveg lehet akár 2^31 karakter hosszúságú is. Persze a stringváltozó mérete továbbra is korlátozza, hogy mennyi tárolható el ebből.

Az X10 eljárások és függvények realtime környezetben is megkötés nélkül használhatók, mivel bármelyik szálból újrahívhatók (reentráns). Ez korábban csak azoknál az eljárásoknál volt lehetséges, amelyek nem használtak lokális változókat az eljárástömbön belül. Ezek ui. a taszk szintjén globális változók voltak, így pl. ugyanazt a ciklusszámlálót használta volna két különböző szálból hívott eljárás. Ez a megkötés megszűnt, mivel minden paraméter és lokális változó is a stack-ben van.

 

1.2.   Új változó típusok

Van pár hasznos új változó típus. Ezek a következők:

Változó típus

Leírás

BCD

Analóg, azaz skálázható BCD szó (OMRON)

BCDtrend

Analóg trend, azaz skálázható és trendelhető BCD szó (OMRON)

Extended

10 - bájtos lebegőpontos szám extra pontosságú műveletekhez

 

 

 

 

 

1.3.   Új objektum típusok

Van pár új objektum típus is:

Objektum típus

Leírás

TStringList

Klasszikus stringlist szövegfájlok programból való feldolgozására

TCSV

Cella szerkezetű objektum CSV és XLS fájlok adatainak cellánkénti feldolgozására (csv: TCSV; csv.Cells[1,2]=123;)

TDataSet

SQL utasítások eredményhalmazainak a hatékonyabb feldolgozására szolgál

(ds: TDataSet; ds=sql “DATA.Table”,”select * from Table”; ds.Field(“Adat”).AsString…; ds.Next…)

 

 

 

 

 

 

Ezeket az objektumokat is pont úgy hozhatjuk létre, mint a képi objektumokat. Például:

Csv: Tcsv;

A megszüntetéséről nem kell külön gondoskodni (ahogy a képi objektumok megszüntetéséről sem).

A hagyományos objektumokhoz képest az a nagy különbség, hogy ezekben nem csak tulajdonságokat, de metódusokat és függvényeket is megtalálhatunk. Például:

csv.LoadFromFile(“c:\Doksik\Adatok.csv”);

További részletek a kibővített teljes dokumentációban.