Untitled - REMAX CZ sro
Transkript
SIMPLE 4
Popis programovacího jazyka SIMPLE verze 4
pro vývoj aplikací s PLC MICROPEL
edice 03.2004
2. verze dokumentu
doplnìn popis editorù
doplnìn popis spec. funkcí
doplnìn popis sdílených síových promìnných
© MICROPEL 03.2004
vechna práva vyhrazena
kopírování publikace dovoleno pouze bez zmìny textu a obsahu
http://www.micropel.cz
SIMPLE V4 - popis jazyka
03.2004
94 stran
OBSAH
5
1. Programovací jazyk SIMPLE V4
1.1 Mùj první pøíklad
5
1.2 Mezní stavy a vlastnosti promìnných
9
1.3 Promìnné a mezní stavy
10
12
2. Konstrukce programu
2.1 Lexikální symboly
12
2.2 Identifikátory
13
2.3 Celoèíselné literály
14
2.4 Èíselné literály v pohyblivé øádové èárce
15
2.5 Klíèová slova
15
2.6 Typy promìnných
15
2.7 Klíèová slova a speciální znaky logických výrazù
17
2.8 Klíèová slova pro podprogramy a funkce
18
2.9 Dalí vyhrazená slova a jejich významy
19
2.10 Komentáøe
20
2.11 Oddìlovaèe øádek
21
22
3. Sémantika
3.1 Identifikátory a jejich vlastnosti
22
3.2 Celoèíselné promìnné
25
3.3 Aritmetické promìnné
26
3.4 Jednoduché promìnné
26
3.5 Pole
27
3.6 String
27
3.7 Výrazy
28
3.8 Kompatibitita typù promìnných
30
4. Zápis zdrojového textu v SIMPLE V4
33
!
4.1 Deklarace konstant
33
4.2 Deklarace promìnných
33
4.3 Pole promìnných a jejich deklarace
34
4.4 Definice typù
34
4.5 Deklarace tabulek
35
4.6 Deklarace podprogramù a funkcí
36
SIMPLE V4 - popis jazyka
03.2004
94 stran
!
4.7 Pøíkazy jazyka SIMPLE V4
37
4.8 Umìle zavedené pøíkazy
40
4.9 Makra
42
44
5. Chyby
5.1 Chybová hláení generovaná pøekladaèem
44
6. Syntaktické diagramy
67
7. Vstupy/výstupy, speciální registry
82
"
7.1 RESET
82
7.2 Rychlost systému
82
7.3 Èasovaèe
82
7.4 Reálný èas
83
7.5 A/D pøevodník
85
7.6 Obsluha displeje a klávesnice
85
7.7 Funkce DISPLAY
87
7.8 Formátování tisku hodnot na displej
88
7.9 Formát pro tisk znakù
90
7.10 Definování vlastních grafických symbolù
90
7.11 Jak funguje zobrazování
91
7.12 Editace hodnot
93
7.13 Síové promìnné
93
7.14 Seznam speciálních funkèních promìnných
94
SIMPLE V4 - popis jazyka
03.2004
94 stran
"
1.
Programovací jazyk SIMPLE V4
Programovací jazyk SIMPLE V4 byl navren pro programování prùmyslových
øídících automatù MICROPEL øady MPC300, PES-K a vyích. Jazyk v maximální míøe
usnadòuje vývoj øídících algoritmù a jejich implementaci ve zmínìných automatech. Pomocí
programovacího jazyka SIMPLE V4 je moné nyní plnì vyuít technických prostøedkù
implementovaných v automatech. Jazyk umoòuje s vysokým programovacím komfortem
navrhnout a odladit i takové aplikace, jejich øeení pomocí jazyka Simple V2 (pøedchùdce
verze 4) bylo znaènì komplikované a vyadovalo pomìrnì vysokou erudici programátora.
Jazyk pøebírá od svých pøedchùdcù (Simple) vechny pozitivní rysy a ve znaèné míøe je
roziøuje a pøináí s sebou i nìkterá novátorská øeení mezních situací vyskytujících se v
oblasti programování.
Vzhledem k tomu, e jazyk SIMPLE V4 je navren pro øeení prùmyslových
øídících algoritmù, zachovává si vechny charakteristiky jazyka bezpeèného programování a
bìhu programu v reálném èase. Program je vdy vykonáván od zaèátku a do pøíkazu END
odkud se bìh programu vrací zpìt na první pøíkaz. Vzhledem k tomu, e jazyk SIMPLE V4
není syntakticky vybaven na programování interních programových smyèek a neumoòuje
programovat ádné skoky, je program vytvoøený v tomto jazyce imunní vùèi vzniku tzv.
fatálních chyb jako je napø. zacyklení èi bloudìní. Z výe uvedeného vyplývá, e kadý
programový øádek, vyjma speciálních konstrukcí, se vdy v prùbìhu hlavní programové
smyèky vyhodnocuje. Konstrukce jazyka tak nutí programátora pouívat programovací
obraty, které odpovídají struktuøe tzv. stavového stroje. Výsledný program se pak znaènì
blíí konstrukci logického automatu z klasických logických obvodù, pøi zachování znaèné
variability øeení dané právì programovými nástroji jazyka SIMPLE V4.
1.1
Mùj první pøíklad
Ukame si obecné vlastnosti jazyka SIMPLE V4 na jednoduchém pøíkladu.
Pøedstavme si, e mìøíme výkon èerpacího zaøízení a podle hodnoty tohoto výkonu øídíme
nìjakou pomocnou pumpu apod. Pøíklad je pouze ilustrativní a kolský. Postaèí vak na
demostrování stylu zápisu jazyka a ukázání jeho nìkterých specifických vlastností.
#
SIMPLE V4 - popis jazyka
03.2004
94 stran
#
Pøíklad
I0 # Mereni_vykonu
; Oznaèení pøeddefinované promìnné jménem
var word Vykon
; Promìnná pro pomocný výpocet výkonu
var safe word Pumpa
; Promìnná pro stanovení øízení pomocné pumpy
/*
Funkce pro výpoèet a pøekalibrování výkonu
*/
Function word Zjisti_Vykon (word Vstup)
return ( Vstup * 5 / 3 + 15 ) ;
; Zde zaèíná hlavní smyèka
Vykon = Zjisti_Vykon (Mereni_vykonu)
; Uloení pøekalibrované hodnoty výkonu do promìnné Výkon
if (Vykon < 50) then pumpa = pumpa+1
else pumpa = pumpa-1
;podmínìný pøíkaz pro nastavení øídící velièiny pomocné pumpy
end
V zápisu zdrojového textu uvedeného pøíkladu mùeme najít nìkolik oddílù.
Nejprve je nutné zapsat s jakými promìnnými budeme v programu pracovat. V aplikacích s
automaty MICROPEL máme kromì obyèejných promìnných pro potøeby výpoètù a
uchování hodnot i promìnné, pøes které jsou navázána nìkterá data z interních obvodù
automatù. Tyto speciální promìnné jsou pøeddefinovány v tzv. konfiguraèních souborech
standardními jmény. Tìmto standardním pojmenováním promìnných jdou, pro pøehlednost
pøi zápisu zdrojového textu, pøiøadit jména smysluplnìjího významu, která více odpovídají
povaze aplikace. Abychom nastínili vlastnosti programovacího jazyka SIMPLE V4 uvedeme
podrobný komentáø jednotlivých øádkù zdrojového textu programu. Tyto komentáøe mají
poslouit k základnímu nástinu a rozhodnì nejsou vyèerpávajícím popisem jazyka.
Komentáø k øádku "I0 # Mereni_vykonu"
Zápis na tomto øádku realizuje oznaèení pøeddefinované vstupní promìnné I0
jménem Mereni_vykonu. Je samozøejmì moné pøistupovat k hodnotì vstupní promìnné
pøes její jméno I0, ale z hlediska pøehlednosti a pochopitelnosti programu i po delí odmlce,
je taková praxe nevýhodná. Promìnná se standardním oznaèením I0 obsahuje v automatu
hodnotu analogovì-digitálního pøevodu z pøísluné vstupní svorky automatu. Dá se tedy
$
SIMPLE V4 - popis jazyka
03.2004
94 stran
$
øíci, e nás informuje o velikosti analogového napìtí na svorce I0. O to, aby v této promìnné
byla vdy platná hodnota, se stará mikroprocesor automatu.
Komentáø k øádku "var word Vykon" a øádku "var safe word Pumpa"
Jak je ji moná zøejmé ze zápisu øádkù zdrojového textu, jedná se o tzv deklaraci
promìnných. Toto zdánlivì sloité slovní spojení oznaèuje skuteènost, e si pøejeme
pracovat s promìnnými typu "word" a typu "safe word". Oznaèit pouze typ promìnné vak
nestaèí. Abychom tu èi onu promìnnou mohli odliit my i pøekladaè zdrojového textu od
jiné stejného typu, musíme ji pojmenovat. Jak je z obou øádkù vidìt, tak jsme jedné
promìnné pøisoudili jméno Vykon a druhé jméno Pumpa. Pøed kadou deklarací promìnné
èi bloku promìnných je nutné uvést slovo var. Toto slovo oznaèuje v deklaraci tzv. sekci
promìnných. Mimo sekce promìnných má jazyk SIMPLE V4 jetì dalí deklaraèní sekce,
pro které je také vyhrazeno pøísluné klíèové slovo.
Komentáø k øádku /* Funkce....*/
Vechny texty uvedené mezi dvojicí dvojznakù /* a */ nejsou do pøekladu
zdrojového textu zahrnuty a jsou urèeny pro umístìní tzv. blokového èi víceøádkového
komentáøe. Komentáø slouí k vepsání poznámek programátora. Komentáø obvykle
zpøehledòuje a vysvìtluje pouité programové konstrukce. Kromì blokového komentáøe
existuje v jazyce SIMPLE V4 i jednoduchý komentáø tj. komentáø, který zaèíná znakem ";" a
konèí s pøechodem na dalí øádku zdrojového textu.
Komentáø k øádku "Funciton word ...."
Na tomto øádku deklarujeme tzv. funkci. Funkce je programová konstrukce, s
její pomocí obvykle øeíme èasto se opakující programové konstrukce tj. posloupnosti
jednotlivých pøíkazù.
Funkce mùe mít deklarovány parametry tj. promìnné, které potøebuje pro øeení
zapsaných pøíkazù. V uvedeném zápisu má funkce jeden parametr, který je nazván Vstup.
Toto jméno mùe být zcela libovolné a slouí pouze k identifikaci parametru, pokud ho
pouijeme pro výpoèty uvnitø funkce. Je-li moné parametry pøipodobnit vstupùm, pak
funkèní hodnota (tj. výsledek, který se ve funkci vypoèítá a z funkce pøedá dál) je obdobou
výstupu.
Komentáø k øádku "return ( Vstup * 5 / 3 + 15 )"
Na tomto øádku se specifikují souèasnì dvì vìci. První z nich je aritmetický výraz
(výpoèet) uvedený v závorkách. Tohoto výpoètu se zùèastòují konstanty 5, 3 a 15 a aktuální
hodnota parametru Vstup. Druhou specifikací je pak pøedání vypoèítané hodnoty z výrazu.
Pøedání specifikujeme (spoutíme) pomocí slova return.
%
SIMPLE V4 - popis jazyka
03.2004
94 stran
%
Komentáø k øádku "Vykon = Zjisti_Vykon (Mereni_vykonu)"
Tento øádek je ji souèástí hlavní programové smyèky. Vystupuje zde volání
funkce Zjisti_Vykon, které se pøedává jako parametr hodnota promìnné Mereni_vykonu tj.
hodnota analogovì digitálního pøevodu ze svorky I0. Výstupní hodnota z funkce je pomocí
pøiøazovacího pøíkazu "Výkon = ...." zapsána do promìnné Výkon.
Komentáø k øádku "if (Vykon < 50) then......"
Øádek je zápisem tzv. podmínìného pøíkazu. Podmínìný pøíkaz je jedna z
nejdùleitìjích konstrukcí jazyka SIMPLE V4. Pomocí podmínìného pøíkazu realizujeme
logiku rozhodování v konstruovaném programu. Pro podmínìný pøíkaz jsou vyhrazena tzv.
klíèová slova "if", "then", "else". Klíèové slovo "if" uvozuje podmínìný pøíkaz a za tímto slovem
je oèekáván tzv. logický výraz. Logický výraz je oddìlen od dalí èásti podmínìného pøíkazu
slovem then. V pøípadì, e výsledek vyhodnocení logického výrazu je pravdivý vykoná se
èást programu mezi klíèovým slovem then a else. V opaèném pøípadì se vykoná èást
podmínky za klíèovým slovem else. Schematicky to situaci mùeme vyjádøit takto:
if [logický výraz] then [pravdivá èást] else [nepravdivá èást]
K uvedenému zápisu je nutné jetì podotknout, e nepravdivá èást podmínìného
pøíkazu není pro jeho zápis povinná a tudí je moné ji v pøípadì potøeby vynechat vèetnì
klíèového slova else, které ji uvozuje. Pravdivá a nepravdivá èást se mùe skládat z vìtího
poètu samostatných pøíkazù a ty pak musí být uzavøeny mezi klíèová slova "begin" a "end".
Komentáø k øádku "end"
Øádek end je ukonèovacím øádkem celé programové smyèky. Od tohoto bodu se
vrací vykonávání programu opìt na první øádek hlavní programové smyèky.
Kometáø k pøiøazovacím pøíkazùm
Ve zdrojovém textu je pouit mimo jiné i pøiøazovací pøíkaz "pumpa = pumpa+1" a
pøíkaz "pumpa = pumpa-1". V zásadì se jedná o triviální aritmetické výpoèty pøièítání a
odeèítání jedné. Na tìchto výpoètech by nebylo nic zajímavého, pokud by nebyly realizovány
s promìnnou typu "safe". Tento typ promìnné je specialitou jazyka SIMPLE V4 a jedná se o
tzv. bezpeènou promìnnou. Pomocí bezpeèné promìnné jsou øeeny tzv. mezní stavy.
Podívejme se na mezní stavy a vlastnosti promìnných ponìkud podrobnìji.
&
SIMPLE V4 - popis jazyka
03.2004
94 stran
&
1.2
Mezní stavy a vlastnosti promìnných
Velkou skupinou tzv. klíèových slov jazyka je skupina pouívaná pro oznaèení
typu promìnných. Promìnnou mùeme chápat jako pamìové místo pro uloení aktuální
(pro jednoduchost) èíselné hodnoty. Øíkáme obvykle, e promìnná nabývá hodnoty. V øadì
pøípadù nepotøebujeme ukládat do promìnné velký èíselný rozsah a spokojíme se napø. s
rozsahem hodnot od 0 do 255. Uvedenému rozsahu pøesnì odpovídá kapacita jedné
pamìové buòky tak, jak je obvodovì realizována. V tomto pøípadì, je pak pamìová buòka
stoprocentnì vyuita. Pøedstavme si, e pro uloení hodnoty promìnné vyuijeme dvì
pamìové buòky.
Co tím získáme ?
V první øadì se rozíøí rozsah hodnot, které jsme schopní v tìchto buòkách
zobrazit na rozsah od 0 do 65535. V druhé øadì se vak musíme smíøit s potøebou pouít
pro zobrazení hodnot dvou pamìových bunìk. Pøedstavme si nyní, e pøi bìhu naeho
programového algoritmu se nestane, e by hodnota uvaované promìnné pøekroèila 255.
Jak bude v takovém pøípadì vyuit pamìový prostor vyhrazený pro tuto
promìnnou ?
Jedna pamìová buòka reprezentující vyí øády hodnot bude po celou dobu
bìhu programu obsahovat nulu a tudí bude konstantní. Z tohoto dùvodu pak mùeme
hodnotu této pamìové buòky kdykoliv urèit, ani bychom ji potøebovali neustále v pamìti
udrovat. Dá se tedy øíci, e pro uvedený pøípad je pamì pro uloení specifických hodnot
promìnné vyuita velmi neefektivnì. Existuje vak i druhý extrém, který mùe v prùbìhu
programu nastat. Jedná se o situaci, kdy je vyhrazené místo v pamìti pro uloení hodnoty
nedostateèné. V takovém pøípadì dochází k tzv. pøeteèení.
Ukame si pøeteèení na jednoduchém pøíkladu. Pøedstavme si, e nae
promìnná má pro zobrazení hodnoty vyhrazenu právì jednu pamìovou buòku a pojme
tedy zobrazení èísel v rozsahu od 0 do 255. Pøedpokládejme, e aktuální hodnota promìnné
je 255. Pøièteme-li k této hodnotì èíslo 1, mìla by promìnná obsahovat hodnotu 256. Tuto
hodnotu vak ve vyhrazeném pamìovém prostoru naí promìnné zobrazit nelze.
Jakou hodnotu bude tedy obsahovat promìnná ?
Hodnota bude odpovídat výsledku po pøeteèení. Princip pøeteèení mùeme
vyjádøit v uvaovaném pøípadì vzoreèkem:
Y = X-256 ,kde
X je hodnota vìtí ne 255 a vznikla napø. výe uvedeným souètem èísla 255 a 1,
Y je pak výsledná hodnota zobrazená v uvaované promìnné. Dosadíme-li do vzorce naí
výslednou hodnotu 256 obdríme výsledek 0. To znamená, e hodnota naí promìnné bude
najednou nulová. Jetì horí pøípad nastane, kdy stejného principu vyuijeme pro
'
SIMPLE V4 - popis jazyka
03.2004
94 stran
'
zobrazení znaménkových èísel. V takovém pøípadì mùe napø. pøi souètu dvou kladných
èísel dojít k pøeteèení a výsledná hodnota bude najednou èíslo záporné.
Jak takovou situaci mùeme øeit ?
Jsou v zásadì dvì základní monosti. Buï se s touto vlastností smíøíme (a nìkdy
to mùe být i výhodné) a nebo pro kadou pouitou promìnnou vyhradíme dostatek
prostoru v pamìti.
Co vak znamená pojem dostatek prostoru v pamìti ?
Tato otázka je neøeitelná, nebo pamìové obvody jsou zatím stále koneèné
kapacity a o nekoneènosti si mùeme nechat jenom zdát. V naich pøíkladech tedy naráíme
na problematiku zobrazení èísel v koneèném rozsahu vzhledem k výsledkùm výpoètù, které
mohou tento rozsah pøekroèit. Situace s pøekroèením rozsahu zobrazení je známa od
ranných poèítaèových dob a není nièím výjimeèným. V rùzných programovacích jazycích je
tato situace øeena rùznì popø. není øeena vùbec a je ponecháno zcela na vùli
programátora jak, tyto mezní stavy v pouité aritmetice oetøí.
Shròme nyní výhody a nevýhody zavedení rùzných typù promìnných. Hlavní
nevýhodou zavedení typù promìnných je (promìnných s omezeným a rùzným rozsahem
zobrazení èísel), jak u bylo nastínìno, problematika mezních stavù. Naproti tomu vak
pøináejí typy promìnných øadu výhod. Poèítáme mezi nì monost optimálního vyuití
pamìového prostoru (ten je vdy nìjak omezen), výrazného urychlení výpoètu v
celoèíselném zobrazení ne v zobrazení napø. v plovoucí øádové èárce. Monosti zpracovávat
velièiny v takovém formátu v nìm se s nimi dobøe poèítá apod.
1.3
Promìnné a mezní stavy
V programovacím jazyce SIMPLE V4 jsou zavedeny rùzné typy promìnných od
tìch nejjednoduích tzv. bitových, kdy promìnná mùe nabývat pouze dvou hodnot 0 nebo
1 a po promìnné zobrazované v plovoucí øádové èárce pokrývající rozsah v exponentu od
10E-38 po 10E38.
Tím se jazyk principiálnì nelií od vyích programovacích jazykù typu C nebo
Pascal apod. Výraznì vìtí odlinost jsou vak v øeení tzv. mezních stavù. Nìkteré z tìchto
stavù jsme popsali v pøedchozí kapitole.
"Bezpeèné" typy promìnných
V jazyce jsou zavedeny tzv. bezpeèné typy promìnných, které se svými
vlastnostmi více blíí realitì reálného svìta regulací. Má-li pøi aritmetické operaci dojít k
pøeteèení, dosadí se do promìnné maximální zobrazitelná hodnota v daném typu.
Analogicky je pak øeeno i tzv. podteèení, kdy se do promìnné dosadí nejnií moná
hodnota.
SIMPLE V4 - popis jazyka
03.2004
94 stran
Dalí zajímavou mezní situací z hlediska programování je dìlení nulou.
V poèítaèích typu PC lze tuto situaci programátorsky øeit obsluhou tzv. vyjímky.
Porozhlédneme-li se po rùzných aplikaèních programech na tento typ poèítaèù najdeme
mizivé procento programù, které tento problém øeí. V daleko vìtí míøe se programátoøi
spoléhají na to, e zmínìná situace nenastane. Programovací jazyk SIMPLE V4 øeí tento
problém automaticky pøi pouití bezpeèných typù promìnných. Pouijeme-li bezpeèné typy
promìnných, pak je dìlení nulou povolená operace a její výsledek je buï kladná nebo
záporná maximální hodnota zobrazitelná v daném typu promìnné. O znaménku výsledku v
tomto pøípadì dìlení rozhoduje znaménko èitatele (dìlence).
S dìlením nulou vak souvisí i dalí mezní stav.
Jedná se o pøípad, kdy nulu dìlíme nulou. Je-li znám trend hodnot èi funkèní
závislost èitatele a jmenovatele, pak se ve vyí matematice poèítá tzv. limita. V pøípadì, e
nejsou známy zmínìné závislosti, tak se úloha neøeí. V naem pøípadì tyto závislosti
nejsou známy nebo do dìlení vstupují vdy pouze dvì konkrétní hodnoty. Z tohoto dùvodu
je v jazyce SIMPLE V4 výsledek dìlení nuly nulou striktnì definován jako nulový. Tento
výsledek simuluje napø. elektrický zkrat dìlièe napìtí apod. V daném pøípadì se nedá øíci, e
by takto definovaný výsledek byl matematicky správnì, ale zdá se, e jako oetøení
popisovaného mezního stavu je vhodný.
SIMPLE V4 - popis jazyka
03.2004
94 stran
2.
Konstrukce programu
Následující odstavce jsou vìnovány zápisu a konstrukci programu. Kapitoly jsou
èlenìny podle struktury jazyka a postupují od popisu jednotlivých výrazových prostøedkù
urèených pro zápis programových øádek a po popis chyb, speciálních konstrukcí a
pravidel.
2.1
Lexikální symboly
Pojmem lexikální symboly oznaèujeme základní konstrukèní prvky jazyka pomocí
nich, za vyuití definovaných pravidel (gramatiky), vytváøíme zápis algoritmu programu.
Pod pojmem program míníme textový soubor, který se skládá z tzv. øádek
zdrojového textu a obvykle ho oznaèujeme pojmem zdrojový text. Kadý zdrojový øádek
mùe být maximálnì 512 znakù dlouhý a je sloen právì z lexikálních symbolù oddìlených
oddìlovaèi.
Pojmem oddìlovaè oznaèujeme vyhrazený znak èi vyhrazenou skupinu znakù
uívanou k oddìlení jednotlivých lexikálních symbolù. Oddìlovaè není urèen pouze k
jakémusi estetickém uspoøádání øádky, ale jeho význam je hlubí. Umoòuje toti rozpoznat
jednotlivé lexikální symboly. Jeho funkce je obdobná jako funkce mezer mezi slovy tohoto
textu.
V jazyce SIMPLE V4 jsou definovány tyto oddìlovaèe (separátory) :
mezera
tabulátor
komentáø
oddìlovaèe øádek
V jazyce SIMPLE V4 jsou definovány následující lexikální symboly:
identifikátory
celoèíselné literály
èíselné literály zapsané v pohyblivé øádové èárce
øetìzce
znakové literály
speciální symboly
klíèová slova
oddìlovaèe øádek (pouze v nìkterých konstrukcích)
Klíèové slovo, identifikátor a èíslo musí být od jiného klíèového slova,
identifikátoru nebo èísla oddìleno oddìlovaèem.
SIMPLE V4 - popis jazyka
03.2004
94 stran
2.2
Identifikátory
Identifikátory jsou posloupnosti písmen, èíslic a znaku podtrítko. Písmena
pøedstavující èeskou diakritiku nejsou pro zápis identifikátorù povolena. Identifikátory musí
zaèínat vdy písmenem nebo podtrítkem.
K èemu identifikátory slouí ?
V zápise programu je vdy nutné oznaèit nìjaké èásti èi prvky srozumitelným
jménem. Jedná se napøíklad o promìnné, funkce, podprogramy apod. S takto oznaèenými
programovými prvky je pak moné pracovat v symbolickém tvaru.
Uveïme jednoduchý pøíklad s ním se dozajista kadý setkal. V matematice je
pro výpoèet obvodu èi plochy kruhu pouíváno Ludolfovo èíslo. Hodnota tohoto èísla je
obecnì známa alespoò na dvì desetinná místa, tedy 3.14. Ve vzorcích pro zmínìné výpoèty
se vak tato konstanta oznaèuje øeckým písmenem pí. Je to èásteènì z dùvodu
jednoduího zápisu, ale podstatné je to, e Ludolfovo èíslo je moné uvádìt na rùzný poèet
desetinných míst a jak víme jeho koneèná hodnota dodnes není pøesnì známa. Tento
problém vak pøenecháme matematikùm a vezmeme si pouze jedno ponauèení. Urèitou
hodnotu mùeme vyjádøit snadno zapamatovatelným symbolem a jako symbol ji pak
vyjadøovat ve zdrojovém textu programu.
Pozastavme se jetì nad významem podtrítka, které je zaøazeno do výètu znakù
pouívaných pøi zápisu identifikátorù. Pøi konstrukci sloitìjích algoritmù popøípadì pøi
øeení problémù s mnoha vstupními a výstupními promìnnými nevystaèíme obvykle s
jednoslovným oznaèením. Vzhledem k tomu, e mezera má vyhrazený význam oddìlovaèe a
nelze ji tak ve jménu identifikátoru pouít, vypomùeme si u víceslovných názvù právì
symbolem podtrítka. Uveïme pøíklad zápisu víceslovného identifikátoru bez a s pouitím
podtrítka:
totojeidentifikátorprogramu
toto_je_identifikátor_programu
Z uvedeného pøíkladu je význam podtrítka pro zpøehlednìní zápisu zcela zøejmý.
Uveïme praktiètìjí pøíklad. Pøedstavme si, e regulujeme dva identické stroje tj. stroje
stejného typu, které se od sebe lií pouze svým umístìním v místnosti. Hodnoty potøebné k
øízení tìchto strojù je nutné nejprve vypoèítat a pak je pøedat. Pro výpoèet mùeme uít
totoného algoritmu pro oba stroje s tím, e do výpoètu zadáme vdy hodnoty pro øízení
prvního nebo druhého stroje. Získáme tak dva výsledky výpoètu a pro jejich uloení
pouijeme dvì výstupní promìnné symbolicky oznaèené napø. takto:
motor_dolniho_stroje
motor_horniho_stroje
;pro první stroj
;pro druhý stroj
Takto oznaèené promìnné, v nich udrujeme výsledky výpoètù øídícího
algoritmu, se pak mnohem hùøe zamìní s jinými promìnnými, které s uvedeným stroji tøeba
vùbec nesouvisí.
!
SIMPLE V4 - popis jazyka
03.2004
94 stran
!
Identifikátory, jak je zøejmé z uvedených v pøíkladù, tedy pouíváme pro
identifikaci jednotlivých prvkù programu, jako jsou promìnné, podprogramy, konstanty a
typy.
2.3
Celoèíselné literály
Obecnì oznaèujeme pojmem literál zápis konstantního prvku programu tj. prvku,
jeho hodnota èi tvar se nemìní v celém zdrojovém textu. Pøíkladem mùe být libovolná
konstanta. Celoèíselné literály jsou tedy zápisy konstant z celoèíselné øady èísel. Pojmovì je
rozliujeme hlavnì proto, e je moné zapsat i literály jiných typù a pøekladaè musí
porozumìt, jaký druh literálu máme na mysli. Jak pøekladaè pozná ná úmysl bude zøejmé v
kapitolách vìnovaných klíèovým slovùm a speciálnì typùm promìnných. V tomto okamiku
berme na vìdomí, e celoèíselné literály jsou zápisy èísel z øady celých èísel tj. nejblií èísla
se lií o 1 a neobsahují desetinnou èást. Pro zápis celoèíselných literálù mùeme pouít buï
dekadického nebo hexadecimálního formátu. V dekadickém zápisu je dovoleno pouít èíslic
od 0 do 9. Uveïme pøíklady zápisu èísla 12 jako celoèíselného literálu v dekadické soustavì:
012
00012
pozn. znaménka + a - napsaná pøed èíslem nejsou souèástí literálu, ale patøí k tzv. unárním
operátorùm
Pouijeme-li pro zápis celoèíselných literálù soustavu hexadecimální mùeme v
zápisu pouít èíslice od 0 do 9, písmena od A do F (od a do f). Znakù pro vyjádøení
znaménka v této soustavì pouít nemùeme nebo nejsou pro zápis literálù definována.
Souèasnì hexadecimální zápis musí mít takový formát, aby bylo moné ze zápisu literálu
jednoznaènì urèit v jaké soustavì je zapsán.
Co se týèe hodnoty, tak je rozdíl zapíeme-li 12 v soustavì dekadické a 12 v
soustavì hexadecimální. Porovnáme-li tyto hodnoty pøes soustavu dekadickou zjistíme, e
dekadických 12 je skuteènì 12, ale hexadecimálních 12 je dekadicky 18 a to je ponìkud
rozdíl. Z uvedeného dùvodu pro zøejmou identifikaci hexadecimálních èísel byl zvolen
odliný formát zápisu. Vzorem byl zápis implementovaný v dnes hojnì pouívaném
programovacím jazyce C. Hexadecimální zápis celoèíselného literálu je vdy uvozen dvojicí
znakù 0x nebo 0X, za ní pak následuje zápis hexadecimálního èísla. Tím je jednak odlieno,
e se jedná o hexadecimální formát a souèasnì se tím automaticky dodruje syntaktické
pravidlo o zápisu celoèíselných literálù a to, e zápis celoèíselného literálu musí zaèínat
èíslicí. Uveïme nyní pøíklad zápisu celoèíselného literálu v hexadecimální soustavì:
0x12
0xC
(18 dekadicky)
(12 dekadicky)
Dalím dùleitým parametrem zápisu celoèíselných literálù je dovolený èíselný
rozsah v nìm se musí zápis nacházet. Pro zápis hodnot celoèíselných literálù je v jazyce
SIMPLE V4 definován èíselný rozsah oznaèovaný symbolicky jako 4G resp. 0xFFFFFFFF.
"
SIMPLE V4 - popis jazyka
03.2004
94 stran
"
Uvedené zápisy oznaèují shodnì, e zapsaná èísla musí být z intervalu -2147483648 do
+2147483647 decimálnì tj. 0x00000000 a 0xFFFFFFFF hexadecimálnì.
2.4
Èíselné literály v pohyblivé øádové èárce
Obdobnì, jako mùeme ve zdrojovém textu programu pouívat zápisu
celoèíselných literálù, mùeme pouít i konstanty zapsané ve formátu pohyblivé øádové
èárky. Pro vyjádøení hodnot v plovoucí øádové èárce je dovoleno pouívat èíslic od 0 do 9,
znaku desetinné teèky . znamének + a - a znaku E pro oddìlení exponentu. Znaménko + je
implicitní a není nutné ho psát pro vyjádøení kladných hodnot. Zápis literálu v pohyblivé
øádové èárce musí vyhovovat formálnímu tvaru zápisu:
zx.xEzxx
,kde
písmeno x zastupuje posloupnost èíslic od 0 do 9, písmeno z oznaèuje
znaménko. Nìkteré èásti zápisu nejsou povinné. Jedná se o kladné znaménko pro vyjádøení
kladných èísel. Desetinnou teèku v pøípadì, e za ní následují pouze nulové èíslice a èást
obsahující zápis exponentu v pøípadì, e hodnota exponentu je rovna nule. Uveïme nìkteré
monosti zápisu literálù v pohyblivé øádové èárce. Èíslo 0.125 mùeme zapsat napø. tìmito
zpùsoby:
0.125
1.25E-1
12.5E-2
125E-3
2.5
Klíèová slova
Klíèová slova jsou vyhrazená jména, které není moné pouít pro zápis jiných
prvkù programu. Klíèová slova mají pøiøazen zcela pevný a jednoznaèný význam. Jsou
vyhrazena pro oznaèení typu promìnných, uvození a ukonèení rùzných logických konstrukcí
zdrojového textu, oznaèují i nìkteré operace s èísly, oznaèují v øadì pøípadù i speciální
vlastnosti programových prvkù pøedevím promìnných.
2.6
Typy promìnných
Zavedení rùzných typù promìnných má v programovacích jazycích zcela zøejmé
odùvodnìní. Výsledný pøeloený program je vdy psán se zámìrem, aby mohl být sputìn
na tom èi onom poèítaèi (programovatelném automatu). Kadý poèítaè disponuje
výpoèetním výkonem takovým na jaký byl zkonstruován. Vzhledem k tomu, e tento výkon
není nikdy neomezený, snaíme se obvykle program psát tak, aby rychlost zpracování
vstupních dat pøevyovala rychlost s jakou tato data do systému pøicházejí. Teorie øíká, e
musíme mít k dispozici takový výkon, aby rychlost zpracování dat byla v nejhorím pøípadì
#
SIMPLE V4 - popis jazyka
03.2004
94 stran
#
rovna rychlosti jejich toku. Pouze v takovém pøípadì jsme schopni zpracovat vechny
pøíchozí zmìny dat (uvaujeme zcela asynchronní tok dat vùèi jejich vzorkování systémem).
Z uvedeného plyne, e program píeme tak, abychom vyuili optimálnì
výpoèetní výkon procesoru, který bude program zpracovávat. Velmi jednoduchým
zpùsobem je moné takou optimalizaci zajistit právì výbìrem vhodných typù promìnných.
Vycházíme z toho, e zpracování napø. souètu trvá napø. pro promìnnou typu byte výraznì
kratí dobu ne pro promìnnou typu long apod. Vìtinou platí, e èím mení je èíselný
rozsah typu promìnné, tím rychleji s ní procesor pracuje. Programovací jazyk rozliuje typy
promìnných uvedené v následující tabulce.
TYP (Klíèové slovo)
bit
ÈÍSELNÝ ROZSAH
0/1
byte
0 - 255
word
0 - 65535
int
longword
-32768 - 32767
0 - 4294967296
longint
-2147483648 - 2147483647
float
-10E38 - 10E38
string
(má specifické vlastnosti)
Nìkteré typy z popisovaného výètu promìnných jsou svázány s klíèovým slovem
"safe". Tímto klíèovým slovem sdìlujeme pøekladaèi, e má k takto oznaèené promìnné
pøistupovat s uváením øeení mezních stavù a vyjímek tak, jak bylo popsáno výe v
odstavci "Promìnné a mezní stavy".
Klíèové slovo safe je moné pouít spoleènì s typy word, int, longword, a
longint. Pro ostatní typy tj. pro typ bit, byte, float a string nemá toto klíèové slovo význam
nebo typ bit je vlastnì logická promìnná (nìkdy té relé), typ byte je prioritnì zaveden pro
pouití v kontextu jednotlivého znaku textových øetìzcù, implementovaná aritmetika
promìnných typu float se sama o sobì chová jako bezpeèná a typ string jde pouít pouze
jako vstupní typ promìnné tj. není moné do promìnné tohoto typu zapsat a dopustit se tak
nìjakého problému.
$
SIMPLE V4 - popis jazyka
03.2004
94 stran
$
2.7
Klíèová slova a speciální znaky logických výrazù
Pod pojmem logický výraz máme na mysli zápis, který se vyhodnocuje tak, e se
zkoumá jeho pravdivost èi nepravdivost. Podle výsledku vyhodnocení se pak v programu
rozhodujeme, jaký pøíkaz se má vykonat. Logický výraz tak úzce souvisí s (rozhodovacími)
podmínìnými pøíkazy. Klíèovými slovy svazujeme do logických podmínek výrazy u nich je
moné rozhodnout, zda jsou pravdivé èi ne. Speciální symboly jsou, pak urèeny pro
vyhodnocení jednotlivých výrazù vstupujících do logického výrazu.
Uveïme jednoduché pøíklady. Pøedstavme si, e máme k dispozici promìnnou
typu byte. Jak ji víme, mùe tato promìnná nabývat hodnotu v rozmezí od 0 do 255. Z
tìchto hodnot není obecnì zøejmé, která je z hlediska logického vyhodnocení pravdivá èi
nepravdivá. O pravdivosti hodnoty je moné rozhodnout pouze na základì nìjakého typu
porovnání. Porovnáme-li napø. aktuální hodnotu promìnné vùèi hodnotì 100, pak podle
typu porovnání umíme rozhodnout zda hodnota promìnné porovnání vyhovuje nebo ne tj.
zda je hodnota pravdivá nebo ne.
Uveïme pøíklad. Zapime porovnání napø. takto:
PROMENNA > 100 ,kde
promìnná oznaèuje aktuální hodnotu promìnné, která vstupuje do porovnání. V
uvedeném pøíkladì je tedy aktuální hodnota promìnné porovnána vùèi hodnotì 100.
Uvedený výraz je pak vyhodnocen jako pravdivý tehdy, kdy aktuální hodnota promìnné je
vìtí jak hodnota 100. V opaèném pøípadì je výraz vyhodnocen jako nepravdivý. Pro zápis
porovnání jsou vyhrazeny speciální znaky uvedené v následující tabulce:
ZNAK
VÝZNAM
<
mení ne
<=
mení nebo rovno
>
vìtí
>=
vìtí nebo rovno
<>
rùzný
Jednotlivé výrazy vstupující do logických podmínek pak sváeme pomocí
klíèových slov logických operací.
%
SIMPLE V4 - popis jazyka
03.2004
94 stran
%
V následující tabulce jsou uvedeny klíèová slova pro zápis logických podmínek:
KLÍÈOVÉ SLOVO
VÝZNAM
and
logický souèin výsledkù vyhodnocených výrazù
or
logický souèet výsledkù vyhodnocených výrazù
not
negace výsledku vyhodnoceného výrazu
Uveïme na tomto místì pouze pro ilustraci jednoduchý pøíklad zápisu logického
výrazu (detailní popis je uveden v odstavcích vìnovaných syntaxi jazyka):
if TEPLOTA < 20 and VYKON < 50 then
V uvedeném pøíkladì je mezi klíèovými slovy if a then uveden logický výraz,
který je vyhodnocen jako pravdivý tehdy, kdy aktuální hodnota promìnné TEPLOTA je nií
ne 20 a ve stejném okamiku je aktuální hodnota výkonu topení mení jak 50. V ostatních
pøípadech je výraz nepravdivý. Na výsledek vyhodnocení tj. na pravdivost èi nepravdivost
výrazu jsou pak navázány jednotlivé výkonné èásti podmínìného pøíkazu if-then-else.
2.8
Klíèová slova pro podprogramy a funkce
Podprogram a funkce jsou èásti programu tj. posloupnosti pøíkazù. Oznaèíme-li
takovou posloupnost ve shodì se syntaxí jazyka SIMPLE V4 jménem, definujeme buï
podprogram nebo funkci. V podprogramu nebo funkci mùeme deklarovat tzv. lokální
promìnné tj. takové promìnné jejich platnost je omezena pouze na pøísluný podprogram
nebo funkci. Mimo tìlo podprogramu je lokální promìnná neznámá a tudí i neplatná.
Podprogram èi funkce dobøe poslouí v okamiku, kdy v nìkolika èástech
hlavního programu potøebujeme vykonat stejné posloupnosti pøíkazù. Výhoda slouèení
pøíkazù do podprogramu nebo funkce tedy spoèívá v tom, e tyto posloupnosti pøíkazù jsou
umístìny v pamìti pouze jednou a pøesto je moné jejich vykonání z rùzných míst
programu. Kdyby vak nebylo moné takto zapsané posloupnosti pøíkazù ovlivòovat bylo by
pouití podprogramù èi funkcí znaènì omezeno. Aby lo vykonávání pøíkazù uvnitø
podprogramù èi funkcí ovlivòovat, je moné pøedat do podprogramu nebo funkce tzv.
parametry. Pod pojmem parametry máme na mysli aktuální hodnoty zvolených
promìnných. Uvnitø podprogramù èi funkcí pak mùeme za pouití podmínìných pøíkazù
ovlivòovat zpracování jednotlivých pøíkazù.
&
SIMPLE V4 - popis jazyka
03.2004
94 stran
&
Z hlediska pouití pak rozliujeme podprogram a funkci. Odlinost spoèívá v
tom, e funkce tzv. vrací hodnotu tj. z hlediska syntaxe jazyka mùe být pouita (volána) na
místì operandu výrazu. Podprogram hodnotu nevrací a tudí nemùe stát volání
podprogramu ve výrazu. S pouitím funkcí a podprogramù souvisí následující klíèová slova:
KLÍÈOVÉ SLOVO
VÝZNAM
subroutine
oznaèuje, e následuje jméno podprogramu
function
oznaèuje, e následuje jméno funkce
return
oznaèuje konec, návrat z podprogramu, funkce
exit
oznaèuje pøeruení provádìní pøíkazù podprogramu
a tím jeho pøedèasné ukonèení
var
v souvislosti s definicí parametrù oznaèujepromìnnou její hodnotu je
moné uvnitø podprogramu mìnit
const
oznaèuje promìnnou, kterou není moné pouít na levé stranì
pøiøazovacího pøíkazu
2.9
Dalí vyhrazená slova a jejich významy
Syntaxe jazyka SIMPLE V4 obsahuje dalí klíèová slova a symboly, které jsou
nezbytné pro zápisy nìkterých speciálních podmínek zpracování pøíkazù jazyka. Jedná se o
klíèová slova:
library
absolute
table
type
'
oznaèuje, e pro pøeklad se mají uvaovat definice, podprogramy,
funkce apod. uvedené v knihovnì specifikovaného jména.
oznaèuje e dvì nebo více specifikovaných promìnných má pøekladaè umístit na spoleènou adresu v datové pamìti. Zmìníme-li hodnotu jedné z takto oznaèených promìnných zmìní se hodnota i ve vech
ostatních umístìných na zmínìnou spoleènou adresu v datové
promìnné.
klíèovém slovo pro deklaraci tabulek konstant v kódové pamìti.
Konstanta typu table je vdy chápána jako pole konstantních hodnot
zvoleného typu. Typem mùe být libovolný ze základních pøedefinovaných typù nebo struktura definovaná na jejich základì.
klíèové slovo umoòující definovat promìnné tzv. vlastních typù.
Jedná se pøedevím o struktury dat sloené z více promìnných
standardního (základního) typu.
SIMPLE V4 - popis jazyka
03.2004
94 stran
'
Dalí speciální znaky definované v jazyce SIMPLE V4 jsou uvedeny v tabulce:
ZNAK
VÝZNAM
(
uvozující znak deklarace seznamu, parametrù podprogramu a funkce, závorkování výrazù
)
ukonèující znak deklarace seznamu, parametrù podprogramu a funkce, závorkování výrazù
[
uvozující znak pro urèení poloky datového pole
]
ukonèující znak pro urèení poloky datového pole
0
oddìlovací znak seznamu deklarací a seznamù
:
oddìlovací znak pøíkazù
?
znak odkazu na bit v promìnné napø. byte apod.
!
bitová inverze v promìnné napø. byte apod.
'
bitová negace
#
oznaèení makropøíkazu
&
znak pro operaci bitového logického souèinu
^
znak bitové logické operace výhradní nebo (exclusive-or)
|
znak bitové operace nebo (bitový logický souèet)
~
znak bitové logické operace pro bitovou negaci
+
znak aritmetického souètu
-
znak aritmetického rozdílu
*
znak aritmetického souèinu
/
znak aritmetického podílu
%
znak pro zbytek po deloèíselném podílu
<<
znak pro aritmetický posun vlevo
>>
znak pro aritmetický posun vpravo
2.10
Komentáøe
Komentáøe jsou dùleitou souèástí jazyka. Umoòují zpøehlednit zápis programu
a mnohdy jsou jediným vodítkem programátora k pochopení zápisu programu pøi jeho revizi
po uplynutí dostateènì dlouhé doby. V jazyce jsou definovány dva typy komentáøù. Prvnímu
z nich mùeme øíkat øádkový.
Tento typ komentáøe je uvozen znakem ";" a od tohoto znaku do konce øádku je
pøekladaèem text ignorován. Druhým typem komentáøe je blokový komentáø tj. libovolný
text vèetnì oddìlovaèù øádek umístìný mezi dvojice znakù "/*" (zaèátek komentáøe) a "*/"
(konec komentáøe).
SIMPLE V4 - popis jazyka
03.2004
94 stran
Uveïme si pøíklady obou druhù komentáøù:
;toto je øádkový komentáø a platí dokud neskonèí øádek
/* toto je blokový komentáø
a platí do nalezení ukonèovacího
dvojznaku tøeba i pøes více øádkù
jako v tomto pøíkladu
*/
Zde vak pozor. Z dùvodù zpìtné kompatibility vùèi jazyku Simple V2 je nutné
se smíøit s urèitým zlem. V první øádce blokového komentáøe se nesmí vyskytnout znak
#. Pokud se tak stane, pøekladaè hlásí chybu v znak # makropøíkazu v první øádce
komentáøe. Tato vìc není zámìrnì odstranìna, nebo se poèítá s postupným
odbouráváním syntaktických prohøekù starí verze jazyka Simple. Tyto prohøeky jsou
umìle a zámìrnì zachovány i v jazyce SIMPLE V4 jen a jen z dùvodu zpìtné kompatibility
zdrojových textù. Umoòujeme tak stávajícím uivatelùm bezbolestný pøechod k nové
syntaxi jazyka SIMPLE V4.
2.11
Oddìlovaèe øádek
Oddìlovaèe øádek jsou znaky, které obvykle textové editory nezobrazují, ale pøi
jejich zpracování posouvají kurzor na dalí øádek. V moderních programovacích jazycích se
pøedpokládá, e programátor formátuje text programu podle svých potøeb tj. dìlá si nové
øádky v místech, kde to potøebuje a ne kde to naøizuje syntaxe jazyka. V tìchto pøípadech se
znaku nového øádku povaují za nevýznamné. Vzhledem k tomu, e pøedchozí jazyky pro
programování PLC neodpovídaly této moderní koncepci, byli jsme nuceni pøi snaze
dosáhnout pøenositelnosti zdrojových textù, udìlat urèité vyjímky pøi nich jsou
oddìlovaèe øádkù povaovány za významné znaky. Zmínìné vyjímky se týkají napø.
konstrukce podmínìného pøíkazu if then.
SIMPLE V4 - popis jazyka
03.2004
94 stran
3.
Sémantika
V jazyce SIMPLE V4 je definována celá øada typù promìnných, které mùeme
podle vlastností utøídit do skupin. Tyto skupiny jsou sestaveny obvykle podle jejich
významu pro konstrukci jazyka a podle spoleèných aritmetických vlastností jednotlivých
typù. Rozdìlení se následnì pouívá pro identifikaci skupiny promìnných pøi zápisu
jednotlivých definovaných operací jazyka.
3.1
Identifikátory a jejich vlastnosti
Jak ji bylo vysvìtleno výe pod pojmem identifikátor si pøedstavíme
zjednoduenì jméno (název) nìjakého prvku programu pøes nìj se na potøebný prvek
odvoláváme. Pro identifikátory platí nìkolik jednoduchých pravidel. V první øadì musí být
kadý pouitý identifikátor (pojmenování) pøekladaèi pochopitelný tj. musí být tzv.
deklarován. Nevyaduje se ve shodì s moderními koncepcemi programovacích jazykù, aby
byl identifikátor deklarován pøed tím, ne se pouije. Je tedy moné umístit napø.
podprogram na libovolné místo zdrojového textu tj. napø. za øádek na nìm je od zaèátku
textu poprvé zavolán svým identifikátorem tj. jménem. Tato vlastnost identifikátorù
odstraòuje mnohdy pracný zápis podprogramù, které se volají v takovém poøadí, aby to
vyhovovalo tzv. dopøedné deklaraci. Dopøedná deklarace je princip, e ne nìjaký
identifikátor pouiji, musí být ji deklarován (urèen, znám).
Dùleitou vlastností identifikátorù je jejich zastiòování. Uveïme si jednoduchý
pøíklad. V programátorské praxi se velmi èasto uívá písmenka "j" nebo "i" ve významu
indexu do nìjakého pole. Tyto promìnné mají v jednotlivých èástech programu obvykle
jepièí ivot. Máme tím na mysli, e jejich hodnotu potøebujeme napø. na pár programových
øádkù a pak, u nás nezajímá. Vzhledem, k tomu, e takovou promìnnou musíme
deklarovat, je po jedné deklaraci symbol obsazen. Kdyby tedy identifikátory nemìly
vlastnost zastiòování, pak bychom nemohli pouít identifikátor stejného jména v rùzných
úrovních programu. Uveïme si jednoduchý pøíklad. V hlavním programu deklarujeme
identifikátor "i" pro promìnnou typu int a pouíváme ji ve smyslu indexace pole
promìnných. Pak napíeme podprogram, kde je opìt nìjaká promìnná pro indexaci.
V pøípadì, e neplatí vlastnost zastiòování identifikátorù, správný zápis situace bude:
var int i
subroutine nastav()
var int j
.
....
.
return
Z pøíkladu je zøejmé, e jsme nemohli pouít identifikátor i podruhé, nebo byl ji
deklarován v hlavním programu.
SIMPLE V4 - popis jazyka
03.2004
94 stran
Jak se situace zmìní, kdy je zastiòovámí identifikátorù umonìno ?
Zápis bude vypadat takto:
var int i
subroutine nastav()
var int i
.
....
.
return
Je patrné, e lze pouít stejný identifikátor v hlavním programu i podprogramu.
Jak je to moné a jak si s tím pøekladaè poradí ?
V daném pøípadì rozlií pøekladaè, e podruhé je identifikátor "i" deklarován v
podprogramu. Podprogram je tzv. jiná programová úroveò a pro promìnné deklarované
uvnitø podprogramu platí, e jsou známy pouze lokálnì. Z takto vyhodnoceného kontextu
deklarací je zøejmé, e pøekladaè vyhodnotí dva rùzné identifikátory "i", nebo jeden je
deklarován v hlavním programu a je tzv. globální a druhý je deklarován v podprogramu a je
lokální. Je zøejmé, e pøekladaè oba identifikátory rozlií. Programátor vak musí mít na
pamìti, e pouije-li identifikátor "i" v podprogramu v nìjakém aritmetickém výrazu mìní
tím pouze lokální promìnnou identifikátoru "i". Chce-li se naopak odvolat na hodnotu
globální promìnné identifikátoru "i" není to v podprogramu moné, protoe význam
globálního identifikátoru "i" je zastínìn právì významem lokálního "i".
Posledním pravidlem je to, e v jedné úrovni smí být identifikátor deklarován
pouze jednou. Z tohoto pravidla vak platí jediná vyjímka a ta se týká identifikátorù
podprogramù. Identifikátory podprogramù mohou být v jedné úrovni totoné. Kdy se nad
uvedenou skuteèností zamyslíme zjistíme jednu významnou vlastnost, kterou tato vyjímka
pøináí. Jedná se o tzv. pøetìování podprogramù.
K èemu pøetìování podprogramù slouí ?
Zde je nasnadì typický pøíklad. Jedná se o sadu podprogramù, které budou
zajiovat napø. výpis hodnot na displej. Jak víme, na displeji automatu je moné zobrazit
alfanumerické znaky. Je tedy moné zobrazovat nejen texty, ale i hodnoty promìnných.
Hodnoty promìnných vak není moné zapsat na displej pøímo. Pøed jejich výpisem se musí
zkonvertovat na text tj. na posloupnost znakù èíslic. Text je ale moné zobrazovat pøímo.
Chceme-li tedy problém øeit musíme navrhnout dva podprogramy. Jeden na výpis øetìzce
a druhý na výpis hodnoty.
!
SIMPLE V4 - popis jazyka
03.2004
94 stran
!
V klasickém pojetí zápisu tj. bez pouití pøetíení musíme oba podprogramy
zapsat napø. takto:
subroutine Display_text ( const string S )
.
.
return
subroutine Display_value ( int i )
.
.
return
/*
zde je kousek hlavního programu
*/
Display_text ( text
)
Display_value ( promenna )
V hlavním programu pak musíme podle potøeby volat buï jeden podprogram
nebo druhý. Oba podprogramy vak øeí principiálnì jeden a ten samý úkol, kterým je
zobrazení na displej. Vyjdeme-li z úvahy, e podprogramy se svou funkcí principiálnì nelií,
je pøímo nasnadì nazvat je stejným jménem a pouít tudí pøetíení identifikátoru.
Uveïme nyní pøíklad zápisu
subroutine Display ( const string S ) .
.
.
return
subroutine Display ( int i )
.
.
return
/*
zde je kousek hlavního programu
*/
Display ( text )
Display ( promenna )
Oba podprogramy jsme nazvali stejným jménem. Tím jsme provedli tzv. pøetíení
identifikátoru, které je v øadì programovacích jazykù zcela nepøípustné. Zvykneme-li si je
pouívat, tìko si budeme odvykat. Jak pøekladaè øeí situaci pøetíených identifikátorù. Pro
"
SIMPLE V4 - popis jazyka
03.2004
94 stran
"
øeení takové úlohy musí pøekladaè vykazovat urèitou míru inteligence. V první fázi si
poznamená, e existují pøetíené identifikátory. Pøi volání podprogramù s pøetíeným
identifikátory pak rozhodne podle typu parametu pøedávaného do podprogramu, který z
podprogramù mìl asi programátor na mysli. Proè je zde uvedeno slùvko asi ? V uvedeném
pøíkladì je rozhodování zcela jasné. Pøedstavme si ale, e máme jetì tøetí podprogram
displej na výpis promìnné typu long. Uveïme deklaraci:
subroutine Display ( long i )
.
.
return
A do této chvíle je vechno jasné. Pøedstavme si, e zapíeme nyní volání
podprogramu takto:
Display(1250)
Hodnota 1250 je celoèíselný literál a vyhoví v obou pøípadech podprogramù pro
zobrazení hodnoty tj. pro hodnotu typu int i typu long. V kolizních èi neurèitých pøípadech
volání podprogramu s pøetíeným identifikátorem, pouije pøekladaè pravidlo pro
kompatibilitu typù. Detailnì je uvedena kompatibilita typù níe. Zatím pouze telegraficky.
Podle zjitìné hodnoty literálu pouije pøekladaè volání podprogramu jeho typ nejblíe
odpovídá zadané hodnotì. V naem pøípadì bude zavolán podprogram, jeho parametrem
je hodnota typu int.
3.2
Celoèíselné promìnné
Mezi celoèíselné promìnné poèítáme typy byte, word, int, longword, longint
vèetnì jejich bezpeèných variant oznaèovaných klíèovým slovem safe. Pro tento typ
promìnných jsou definovány vechny základní typy aritmetických, bitových logických a
relaèních operátorù. Základní spoleènou vlastností tìchto typù je jejich celoèíselnost tj. není
moné v tìchto typech uvaovat desetinná èísla. Tyto typy jsou mikroprocesoru pouitém v
automatech nejblií a proto s nimi probíhají vekeré operace pomìrnì rychle.
Nejmarkantnìji se vlastnost celoèíselnosti tìchto typù projeví pøi aritmetické
operaci dìlení. Pouijeme-li operaci dìlení na celoèíselný typ dostáváme celoèíselný
výsledek a tzv. zbytek po dìlení. Mnohdy bývá programátor zaskoèen tím, e po vydìlení
dostává výsledek, který je z hlediska celoèíselného dìlení správný, ale který neoèekával.
#
SIMPLE V4 - popis jazyka
03.2004
94 stran
#
Uveïme si pro názornost pøíklad:
10 / 11 = 0 zbytek 10
Uvedený pøíklad zapsaný v èíselné podobì vypadá zcela triviálnì. Uvaujeme-li
operaci dìlení pro obecné promìnné tj. napø. podle zápisu:
A = A / B
mùe dojít ke znaènému údivu v pøípadì, e výsledek bude v programu trvale
nula i kdy hodnoty promìnných jsou znaènì velké. Musíme tedy mít pøi programování vdy
na pamìti uvedenou vlastnost celoèíselných typù resp. celoèíselného dìlení. V øadì pøípadù
mùe být celoèíselné dìlení výhodné zvlátì je-li pouito ve spolupráci z operací pro zjitìní
zbytku po dìlení. Pøedstavme si pøípad, e chceme celoèíselnou hodnotu promìnné "A"
zaokrouhlit napø. na desítky. V takovém pøípadì mùeme pouít jednoduchého triku a
napíeme:
A = ( A + 5 ) / 10 * 10
Výsledek z uvedeného pøíkladu v promìnné "A" bude vdy zaokrouhlen na celé
desítky a ponecháváme laskavému ètenáøi prostor pro promylení tohoto tvrzení.
3.3
Aritmetické promìnné
Mezi aritmetické promìnné poèítáme promìnné celoèíselné spoleènì s
promìnnými typu float. Aritmetické promìnné jsou tedy promìnné které mohou vstupovat
do aritmetických operací tj. jsou pro nì definovány vechny základní aritmetické a relaèní
operátory. Odlinost této tøídy promìnných oproti celoèíselným promìnným spoèívá právì
v doplnìní typu float tj. typu urèeného pro výpoèty v pohyblivé øádové èárce. Vimnìme si
e pro aritmetické promìnné nejsou definovány bitové logické operátory.
Proè ?
Je patrnì zcela nesmyslné zjiovat napø. hodnotu tøetího bitu promìnné float.
3.4
Jednoduché promìnné
Pojmem jednoduché promìnné oznaèujeme vechny aritmetické promìnné
doplnìné o promìnnou typu bit.
$
SIMPLE V4 - popis jazyka
03.2004
94 stran
$
3.5
Pole
Pojem pole byl do jazyka pro zaveden s cílem umonit konstrukci promìnné,
která sestává z jednotlivých poloek stejného typu. Jednotlivé poloky takové promìnné je
moné jednoduchým zpùsobem indexovat a zpracovávat poloku po poloce a nebo zajistit
obecný pøístup k poloce promìnné nastavením indexu. Uveïme jednoduchý pøíklad
deklarace pole bajtù:
var byte[3] moje
V uvedeném pøíkladu jsme zavedli pole, které obsahuje tøi poloky typu byte.
Poloky jsou èíslovány ( indexace ) od 0 a nejvyí platný index je pak roven 2. Pro
indexaci je moné pouít nejen konstantu, konstantní výraz ale i celoèíselnou promìnnou
(vyjma bitových polí). Promìnnou typu pole mùeme deklarovat z libovolného typu
promìnné. Maximální poèet prvkù pole je dán hodnotou 32768 a je vnitønì omezen. Není
dovoleno deklarovat pole neznámé délky a délku pole pak urèovat pøi bìhu programu.
3.6
String
String je do jisté míry speciální typ promìnné typu pole bajtù. String jako takový
mùe existovat ve tøech podobách. První podobou je string zapsaný jako literál a mùe být
pouit buï v inicializaci konstatního øetìzce znakù nebo mùe být pøedán jako parametr
funkce nebo procedury. Druhou podobou je string definovaný jako konstanta napø.
const s = "text"
V takto uvedeném zápisu zavádíme konstantu "s" a inicializujeme ji literálem
"text". Zde tedy vystupuje string jako konstanta, která oznaèuje string (literál) "text". Takto
zapsaná konstanta "s" je uloena do kódové pamìti tj. spoleènì s programem jako
posloupnost znakù zakonèená nulou a její hodnota je tvoøena adresou na právì tuto
posloupnost znakù. Aby bylo moné pøedávat øetìzec do podprogramu nebo funkce a tam s
ním pracovat, byl vytvoøen speciální typ promìnné string. Zde nám tedy string vystupuje
ve tøetí podobì tj. v podobì formálního parametru jinak øeèeno v podobì formální
promìnné. Dále je nutné poznamenat, e string je kompatibilní, a to je do jisté míry
zvlátnost, s polem bajtù o libovolné délce. Je-li tedy string formálním parametrem
podprogramu, je moné do tohoto parametru pøedat libovolnì dlouhé pole bajtù.
Uveïme si pøíklad pouití stringu jako formálního parametru procedury. Nejprve
deklarace procedury Tiskni.
subroutine Tiskni (var string s1, const string s2)
.
.
return
%
SIMPLE V4 - popis jazyka
03.2004
94 stran
%
A nyní monosti volání:
var byte a[20] : byte b[30]
Tiskni ( a, "text" )
Tiskni ( b, "jiny text")
Dalí monost pro pouití stringu skýtají tabulky. Zde se vak stringy pøipoutìjí
pouze jako literály. Uveïme pøíklad takové tabulky stringù:
table string[2] text = ("text","jiny text")
nebo s volným formátováním textu
table string[2] text = (
"text",
"jiny text"
)
3.7
Výrazy
Výrazy v jazyce SIMPLE V4 se skládají z operandù spojených rùznými
aritmetickými, logickými a relaèními operátory. Pøíklady výrazù:
A+B
B+C-C
A*B+C/D
A*(B+C) - (D-E)*F
(A ^ B)
kde +, -, *, a / jsou aritmetické operátory pro sèítání, odèítání, násobení a dìlení,
operátor ^ pak patøí logické operaci exclusive or, A, B, C, D, E, F pak pøedstavují operandy
(promìnné). Závorky slouí k seskupování operandù a operátorù tak, jako v obyèejné
algebøe.
Z programátorského hlediska je pak dùleité jak bude zapsaný výraz vyhodnocen
a jakým postupem výraz zapsat. V programovacím jazyce SIMPLE V4 jsou dodrena
pravidla o vyhodnocování (výpoètu) výrazu známá z algebry. Zápisy výrazù jsou pak, co se
týèe formátu, jednoznaènì a pøesnì definovány tzv. syntaktickými diagramy, nicménì se
neodliují od bìných pravidel a zvyklostí v ostatních programovacích jazycích.
Pro vyhodnocování logických výrazù v podmínìných pøíkazech je moné pouít
jeden ze dvou postupù. První z nich spoèívá v tom, e se celý logický výraz vyhodnotí a
podle výsledku vyhodnocení se podmínìná èást pøíkazu vykoná nebo nevykoná. Druhá
varianta øeení vyhodnocování logický výrazù je taková, e v okamiku, kdy je výsledek
výrazu ji zøejmý, se jeho vyhodnocování zastaví a podmínìná èást pøíkazu se podle
výsledku vykoná nebo nevykoná. Vzhledem k tomu, e v øadì pøípadù je druhá varianta pøi
&
SIMPLE V4 - popis jazyka
03.2004
94 stran
&
zpracování procesorem rychlejí, byla pouita v implementaci jazyka SIMPLE V4. Uveïme
jednoduchý pøíklad pro osvìtlení principu vyhodnocování logických výrazù. Mìjme logický
výraz podmínìného pøíkazu v následujícím tvaru
if A > 20 and B < 30 then ....
Pøedpokládejme pro uvedený pøíklad, e promìnné mají tyto hodnoty:
A = 20 , B = 10
V první variantì øeení vyhodnocování výrazu se nejprve vyhodnotí obì
porovnání tj. pro hodnotu "A" je porovnání neplatné a pro hodnotu "B" je porovnání platné.
Po tomto vyhodnocení se vyhodnotí logické výsledky pøes logickou funkci and a vyjde
výsledek, e logický výraz je neplatný a tudí podmínìný pøíkaz nebude vykonán.
V druhé variantì (implementované v jazyce SIMPLE V4) se postupuje ve
vyhodnocení ponìkud odlinì. Zjistí se logická hodnota porovnání pro promìnnou "A". Ta,
jak víme, vyjde jako nepravdivá. Vzhledem, k tomu e dalí podmínka výrazu je navázána
logickou funkcí and je zøejmé, e výsledky dalích porovnání u celkový výsledek výrazu
neovlivní a proto se vyhodnocení dále neprovádí a rovnou je rozhodnuto, e podmínìný
pøíkaz nebude proveden.
Dalí typ výrazu, který je do jisté míry specifický, je typ aritmetická hodnota v
logickém výrazu. V jazyce SIMPLE V4 je moné napø. zapsat logický výraz takto:
if A and B then ...
pøièem promìnná "A" a "B" jsou aritmetického typu. Takto zapsaný výraz se
chápe jako relace nonekvivalence vùèi nulové hodnotì. Zápis je tedy rovnocenný s:
if A <> 0 and B <> 0 then ...
Do zápisu výrazù, mimo ji uvedených typù, patøí i operátor aritmetického
posunu bitù celoèíselných promìnných vlevo nebo vpravo ( oznaèuje se dvojznaky "<<" pro
posun vlevo a ">>" pro posun vpravo ). V tìchto typech výrazù je umonìn pouze posun o
konstantní pøedem známý poèet bitù. Není tedy moné øídit posun bitù promìnnou.
Dovolený zápis výrazu je napø.
A << 3
nebo mùeme zapsat napø.
const MAX = 3
A << MAX
Jak je patrné i v druhém pøípadì se jedná o konstantní posun bitù, by je tento
posun zapsán symbolicky.
'
SIMPLE V4 - popis jazyka
03.2004
94 stran
'
3.8
Kompatibitita typù promìnných
Kompatibilita typù promìnných je vdy
promìnné-operátory a typ promìnné-typ promìnné.
øeena
na
úrovni
typ
Kompatibilita na úrovni typ promìnné-operátor vyjadøuje, zda je moné daný typ
promìnné pouít ve vazbì na daný operátor. Unární operátor " ' " (apostrof - bitová negace)
je povolen pouze nad celoèíselnými promìnnými a hodnotou typu bit. Binární operátory "^",
"&", "|", "%", ">>" a "<<" povoleny pouze nad celoèíselnými hodnotami (promìnnými).
Unární operátor "-" a binární operátory "+", "-", "*", "/", "=", "<=", ">=", "<", ">", a "<>" jsou
povoleny pouze nad aritmetickými hodnotami. V uvedené vìtì není pøeklep v operátoru "-".
Tento operátor je skuteènì jak unární, tak binární. Pøíkladem pouití unárního operátoru "-"
mùe být zápis:
B = - A
Podobný pøíklad pro binární operátor "-" je:
B = C - A
pro aritmetické promìnné.
Kompatibilita typu typ promìnné-typ promìnné je øeena na základì pøíbuznosti
typù a na základì zobrazitelnosti hodnoty jednoho typu v typu druhém. Operandy binární
operace jsou z tohoto pohledu kompatibilní pouze tehdy, jestlie jeden z typù operandu je
nadmnoinou druhého typu operandu. Tento typ se stává typem výsledku operace. V jazyce
SIMPLE V4 jsou vzájemnì nekompatibilní napø. tyto dvojice typù:
int-word
int-longword
word-int
word-longint
Stejné pravidlo o kompatibilitì platí i pro pøiøazování hodnoty do promìnné a pro
pøedávání parametrù do podprogramù a funkcí. Pro typy, které jsou kompatibilní je
definována tzv. "vzdálenost".
Co si pod takovým pojmem mùeme pøedstavit ?
Pojmem "vzdálenost" definujeme míru vzájemné kompatibility typù. Podle této
míry se napø. øídí volba nejvhodnìjí pøetìované funkce pro zadanou posloupnost
pøedávaných parametrù. O pøetìovaných funkcích jsme se zmínili v odstavcích vìnovaných
identifikátorùm a jejich totonosti na stejné úrovni pro podprogramy a funkce. Vzdálenost
vyjadøující kompatibilitu nebo chceme-li pøíbuznost typù je dobøe patrná v následující
tabulce.
!
SIMPLE V4 - popis jazyka
03.2004
94 stran
!
Bit
Byte
32K
Word
Int
2G
LWord
LInt
Float
Bit
0
-1
-1
-1
-1
-1
-1
-1
-1
Byte
-1
0
-1
-1
-1
-1
-1
-1
-1
Word
-1
2
0
0
-1
-1
-1
-1
-1
Int
-1
3
1
-1
0
-1
-1
-1
-1
LWord
-1
4
2
2
-1
0
0
-1
-1
LInt
-1
5
3
3
3
1
-1
0
-1
Float
-1
6
4
4
4
2
2
2
0
Sloupce tabulky vyjadøují typ promìnné a øádky vyjadøují typ výrazu. Hodnoty
uvedené v jednotlivých políèkách tabulky, pak urèují míru kompatibility typu promìnné s
výrazem. Hodnota -1 znamená nekompatibilitu, hodnota 0 úplnou kompatibilitu a hodnoty
od 1 do 6 míru kompatibility ve stupnici od nejvìtí po nejmení pøíbuznost typù. Pro
úplnost je tøeba dodat, e kromì definovaných typù jazyka jsou v tabulce uvedeny i interní
typy pøekladaèe, které nejsou veøejnì dostupné (míníme tím dostupné v zápisu zdrojového
textu programu).
V souvislosti s tìmito typy mùe ètenáøe napadnout k èemu se interní neveøejné
typy pouívají. Na takovou otázku je v podstatì jednoduchá odpovìï. Situaci ukame na
pøíkladu. Definujme dvì promìnné, jednu typu word a jednu typu int.
var word w
var int i
nyní proveïme inicializaci promìnných hodnotou 1000 tj. zapíeme pøiøazovací
pøíkazy napø. takto:
w = 1000
i = 1000
Hodnota 1000 je pøiøazována jednou promìnné typu word a jednou promìnné
typu int. Pro hodnotu 1000 v uvedeném pøípadì není zøejmý typ, nebo jak je uvedeno výe,
typ výrazu odpovídá nejvìtímu typu (musí být ovem kompatibilní) z tìch typù, které jsou
ve výrazu pouity. Ze zápisu vak nejde urèit, zda chceme pøiøazovat 1000 typu word nebo
typu int do té èi oné promìnné. Dále je nutné zdùraznit, e promìnné typu word a int nejsou
kompatibilní. Prohlásíme-li èíslo 1000 za typ word, pak bychom druhý øádek museli zapsat
takto:
i = int (1000)
Museli bychom tudí pouít pøetypování. Zkusme to z druhé strany. Prohlásíme
1000 za typ int. Pak vyjde druhý øádek bez problémù, ovem první øádek musíme díky
nekompatibilitì typù v pøiøazovacím výrazu zapsat:
w = word (1000)
tj. s pøetypováním.
!
SIMPLE V4 - popis jazyka
03.2004
94 stran
!
Jak je vidìt oba pøístupy vedou ke stejnì absurdnímu øeení, nebo jsme nuceni
neustále pøetypovávat èíslo 1000 na opaèný typ. Zaveïme tedy pro konstantní výrazy, které
se vyèíslují ve fázi pøekladu interní typ promìnné, nazvìme ho 32K a prohlame, e je
kompatibilní s typem int i word. Tento typ rozliuje èísla pod hodnotu 32767 a nad ni. V
pøípadì, jako je ten uvedený, se nejprve zjistí typ výrazu do nìho spadá i pøiøazení typu
èíslu 1000. Vzhledem k tomu, e èíslo 1000 je mení ne èíslo 32767 je prohláeno za
interní typ 32K, který je kompatibilní s typem int i s typem word.
Je tedy nyní zøejmé, e mùeme zapsat pøiøazení z uvedeného pøíkladu zcela
prostì a tak, jak bychom pøirozenì oèekávali:
w = 1000
i = 1000
Z obdobných dùvodù je zaveden i interní typ 2G.
Konstatní výrazy
Konstantní výrazy jsou takové, které mohou být vyhodnoceny ve fázi pøekladu.
Operandem konstantního výrazu nemùe být prvek tabulky a naopak prvkem tabulky mùe
být pouze konstantní výraz. Typ konstantního výrazu je dán jeho hodnotou. Po vyèíslení je
tato hodnota porovnána s èíselnými rozsahy typù a za typ je zvolen typ s nejmením
rozsahem do nìho se hodnota výrazu jetì vejde. Uveïme pøíklady konstantních výrazù
vèetnì typù, které jim pøekladaè pøidìlí po jejich vyhodnocení.
-1 ; typ int
60000 ; typ word
2000000000 ; typ 2G
!
SIMPLE V4 - popis jazyka
03.2004
94 stran
!
4.
Zápis zdrojového textu v SIMPLE V4
Následující odstavce jsou vìnovány popisu deklarací a definic, pouívání pøíkazù,
podmínìných pøíkazù, volání podprogramù a funkcí. Pro vìtí názornost jsou jsou zápisy
jednotlivých prvkù zdrojového textu komentovány pomocí pøíkladù.
4.1
Deklarace konstant
V deklaraci konstant se identifikátorùm pøiøazují hodnoty dané polohou nebo
konstantním výrazem. Pokud není hodnota konstanty explicitnì zadána, má první
identifikátor v deklaraci hodnotu 0 a kadý dalí pak hodnotu o n vìtí, kde n je pozic
identifikátoru v seznamu.
Pøíklad
Zápis
const a,b,c
je ekvivalentním zápisem deklarace
const a = 0, b = 1, c = 2
Zápis
const d = 1.5, , e, f = "abcd"
je ekvivalentním zápisem deklarace
const d = 1.5, e = 3.5, f = "abcd"
Hodnota konstanty e bude 3.5, nebo v pùvodním zápisu je uvedeno o jednu
èárku navíc mezi deklarací konstanty d a e.
4.2
Deklarace promìnných
V sekci deklarace promìnných uvádíme typ a jméno promìnné. Promìnné
mùeme rozdìlit podle pouití do dvou skupin. Skupina globálních promìnných
deklarovaná v hlavním programu obsahuje pouze výèet promìnných. Skupinu lokálních
promìnných je moné deklarovat pouze uvnitø tìla funkcí a podprogramù. Skupina lokálních
promìnných obsahuje výèet promìnných a mùe obsahovat, tím se lií od skupiny
globálních promìnných, inicializaèní výrazy. Význam inicializaèního výrazu spoèívá v tom,
e pøekladaè automaticky zajistí vygenerování poèáteèního kódu podprogramu nebo funkce.
Pomocí tohoto poèáteèního kódu se pøísluné promìnné na zaèátku podprogramu nebo
funkce nastaví na poadované hodnoty.
Pøíklad
!!
SIMPLE V4 - popis jazyka
03.2004
94 stran
!!
Deklarace globálních promìnných
var byte B1, B2 : int i,j,k
var longint L1, L2 : float F1
dvojteèka je pouita jako symbol pro pokraèování øádku
Deklarace lokálních promìnných v podprogramu
subroutine Proc (longword Lw)
var byte B = byte(Lw)
.
.
return
V deklaraci je pouita inicializace promìnné byte hodnotou z promìnné typu
longword. Aby bylo moné pøiøadit hodnotu z longword promìnné do promìnné typu byte
je nutné provést tzv. pøetypování. Pøetypování zapíeme tak, e nový typ uvedeme do
okrouhlých závorek pøed pøetypovávanou promìnnou.
4.3
Pole promìnných a jejich deklarace
Pro kadý typ promìnné je moné deklarovat tzv. pole. Pole je indexovaný
seznam promìnných stejného typu zaèínající indexem 0. V deklaraci pole uvádíme jeho
rozmìr a vzhledem k tomu, e pole indexujeme od nulového indexu je maximální pøípustný
index poloky pole o jednièku nií ne rozmìr pole. Rozmìr pole musí být konstantní výraz
a uvádíme ho uvnitø hranatých závorek.
Pøíklad deklarace pole promìnných
const MAX = 3
var
int[20] Pole
float[MAX] Jine_pole
V prvním pøípadì deklarujeme promìnou pole typu int o rozmìru 20 poloek, tj.
platný index pole je od 0 do 19. Druhý pøíklad uvádí promìnnou Jine_pole obsahující tøi
hodnoty typu float.
4.4
Definice typù
Programovací jazyk umoòuje definici vlastních specifických typù promìnných a
konstant. Definice vlastních typù je omezena tím, e nový typ mùe být konstruován ze
základních nebo ji definovaných uivatelských typù. Novému typu je pøiøazen identifikátor,
který je mono dále pouít pøi deklaracích. Dále platí, e identifikátor typu nesmí být sám
zadán identifikátorem typu.
Pøíklad
!"
SIMPLE V4 - popis jazyka
03.2004
94 stran
!"
type float[3] float_pole
type int[2] complex_int:
float_pole[3] float_matice
V pøíkladu jsou zadefinovány typy pro oznaèení vícerozmìrných polí. V pøípadì
typu complex_int je zadefinována promìnná obsahující dva prvky typu int a mùeme ji
povaovat za promìnnou pro zobrazení komplexního èísla. První z obou prvkù mùeme
vyhradit reálné èásti a druhý èásti imaginární. Pro takovou promìnnou pak mùeme napsat
celou øadu podprogramù realizujících aritmetiku komplexních èísel. V druhém pøípadì jsme
zadefinovali typ odpovídající matici o rozmìrech 3 krát 3 prvky typu float s pomocí ji
definovaného jednorozmìrného pole s tøemi prvky typu float.
Pøíklad
pouití definovaných typù v deklaraci promìnných
var
complex_int z
const R = 0
const J = 1
a následnì pouití promìnných x,y, a z typu complex_int v programu
z[R] = x[R] * y[R] - x[J] * y[J]
z[J] = x[J] * y[R] + x[R] * y[J]
Z uvedeného zápisu deklarací konstant R a J plyne, e R je pouívána pro odkaz
na reálné sloky komplexních èísel a J pro odkaz na sloku imaginárních èísel. Uvedené dva
programové øádky realizují souèin dvou komplexních èísel x a y s následným pøiøazením
výsledku do promìnné z. Podobnì mùeme realizovat aritmetiku matic pro promìnné typu
matice.
4.5
Deklarace tabulek
Deklarace tabulek slouí k definování konstant, které se uloí do kódové pamìti
procesoru. Tabulka je vdy typu pole konstantní výrazy uvedené v seznamu výrazù nesmí
být v závorkách a jednotlivé parametry musí být oddìleny èárkou.
table
string[3] jmena =
(
"Petr",
"Pavel",
"Jan"
)
Pøíklad deklaruje tabulku textových øetìzcù køestních jmen. Jednotlivá jména z
tabulky mùeme tisknout napø. na displej èi jinak vyhodnocovat.
!#
SIMPLE V4 - popis jazyka
03.2004
94 stran
!#
4.6
Deklarace podprogramù a funkcí
Pro podprogramy a funkce deklarujeme identifikátor a seznam parametrù
uzavøený do kulatých závorek. Pro funkce dále definujeme typ pøedávané hodnoty.
Pøedávaná hodnota z funkce mùe být aritmetického typu. V deklaraci funkce musí být za
závìreèným slovem return výraz kompatibilní s typem výstupní pøedávané hodnoty.
Deklarace podprogramù je ukonèena samostatným slovem return. Podprogramy a funkce
mohou obsahovat vnoøené podprogramy a funkce nemohou vak být volány rekurzivnì a
poèet vnoøení nesmí pøesáhnout povolenou úroveò.
Rozliujeme parametry podprogramù a funkcí volané tzv. hodnotou a
parametry volané odkazem. V pøípadì parametrù volaných hodnotou je do funkce èi
podprogramu pøedávána pøímo hodnota promìnné a pro toto volání platí stejná pravidla
jako pro pøiøazování promìnné. V pøípadì parametrù volaných odkazem je do podprogramu
nebo funkce pøedávána adresa promìnné. Skuteèný parametr tj. promìnná musí být v
stejného typu jako formální parametr. Pokud je promìnná pole, pak musí mít stejný poèet
dimenzí, stejné rozmìry i typ elementu jako formální parametr. Pro promìnnou pøedávanou
odkazem není povolen typ bit. Do podprogramù a funkcí je moné pøedávat konstantní
parametry. Pokud je skuteèný parametr aritmetický, pak se pøedává jako volaný
hodnotou. V opaèném pøípadì tj. pøi volání odkazem musí být skuteèný parametr tabulka
shodného typu jako je formální parametr. Parametry volané odkazem (resp. konstantní
parametry) mohou být typu string. V tomto pøípadì musí být skuteèný parametr pole bytù
(resp. tabulka bytù nebo stringový literál). Formální parametry string se v tìle podprogramù
a funkcí chovají jako pole bytù. Do polí tohoto typu není moné pøiøazovat, pouze z nich èíst
jednotlivé byty. Hodnota indexu se nekontroluje.
Pøetìování podprogramù a funkcí
Pokud je identifikátor podprogramu nebo funkce pøetíen, provádí se výbìr
podprogramu èi funkce na základì urèení vzdáleností z tabulky vzdáleností typù ( viz výe ).
Pokud existuje více funkcí, které mají pro dané volání stejný poèet vzdáleností skuteèných a
formálních parametrù, pak je tento stav vyhodnocen jako chyba. Je tedy moné zapsat
deklarace takto:
subroutine s ( float f : byte b )
subroutine s ( byte b : float f)
V tomto pøípadì vak musíme dávat pozor, abychom do podprogramu s
nepøedali parametry tak, e není moné rozhodnout, která z uvedených deklarací se má
pouít. Uvedeme pøíklady volání podprogramu s.
ss(1,1)
!$
;volání je vyhodnoceno jako chybné, protoe nelze
;rozhodnout, která z uvedených deklarací se má pro
;pøeklad pouít
SIMPLE V4 - popis jazyka
03.2004
94 stran
!$
ss(1,1.0) ;volání je vyhodnoceno jako korektní a pouije se
;druhá z uvedených deklarací
ss(1, float(1));i v tomto pøípadì je volání vyhodnoceno jako
;správné nebo je moné o nìm rozhodnout podle
;pøetypování druhého parametru na typ float
4.7
Pøíkazy jazyka SIMPLE V4
V jazyce SIMPLE V4 existují tyto typy pøíkazù:
pøíkaz pøiøazení
podmínìný pøíkaz
pøíkaz exit
pøíkaz výraz
pøíkaz not
pøíkaz vykøièník
pøíkaz øádka
Z tohoto seznamu pøíkazù je moné vydìlit pøíkazy, které byly do verze V4
umìle zavedeny z dùvodù kompatibility s pøedchozím programovacím jazykem Simple V2.
Jedná se o tyto pøíkazy:
pøíkaz výraz
pøíkaz not
pøíkaz vykøièník
pøíkaz øádka
Tyto pøíkazy nedoporuèujeme pouívat v nových zápisech zdrojového textu
programù, nebo s jejich implementací se v dalích verzích jazyka nepoèítá.
!%
SIMPLE V4 - popis jazyka
03.2004
94 stran
!%
Pøíkaz pøiøazení
Pøiøazovací pøíkaz odpovídá svou konstrukcí a významem obvyklým zvyklostem v
programovacích jazycích. Jedná se o pøiøazení hodnoty výrazu do zvolené promìnné. Na
rozdíl napø. od jazyka C nesmí být pøíkaz pøiøazení pouit v podmínkové èásti podmínìného
výrazu.
Pøíklad
var int i : int j
i = j + 2
Podmínìný pøíkaz
Podmínìný pøíkaz se skládá z podmínkové èásti, èásti pro pravdivou podmínku a
èásti pro nepravdivou podmínku. Podmínkovou èást pøíkazu tvoøí logický výraz. Na základì
vyhodnocení podmínky se vykoná buï èást odpovídající pravdivému vyhodnocení
podmínky nebo èást odpovídající vyhodnocení nepravdivému. Zápis podmínìného pøíkazu
odpovídá formálnímu zápisu:
if podmínka then pravdivá_èást [else nepravdivá_èást]
Nepravdivá èást není v zápisu pøíkazu povinná a proto je ve formálním zápisu
uvedena v hranatých závorkách. Výe uvedený zápis je pouze ilustrativní pøièem pøesný
tvar zápisu mùeme zjistit ze syntaktických diagramù.
Pøíklad
var int i : int j
if j > 0 then i = 0 else i = 1
Pøíkaz exit
Pøíkazem exit je moné pøedèasnì ukonèit vykonávání podprogramu nebo
funkce. Pro pøípad funkce musí být doplnìn o kompatibilní výraz s typem funkce, aby bylo
moné pøedat návratovou hodnotu.
Kdy je vhodné pøíkaz nasadit?
Pøedstavme si, e v podprogramu zpracováváme nìkteré pøíkazy za vech
okolností a zbylé pøíkazy vykonáme pouze tehdy, je-li splnìna podmínka podmínìného
pøíkazu splnìna. Pøedpokládejme, e se jedná o podmínku typu "i <> 0", kde "i" je napø.
promìnná typu int, která je spojena s podmínkou "j = 0" a "j <> 0" pro promìnnou "j" typu
int. Dále poadujeme, aby se v pøípadì, e bude splnìna podmínka "i <> 0", vykonal
"pøíkaz1" pro podmínku "j = 0" a "pøíkaz2" pro podmínku "j <> 0". Pro ostatní varianty se
nemá vykonat ani "pøíkaz1" a ani "pøíkaz2".
!&
SIMPLE V4 - popis jazyka
03.2004
94 stran
!&
Pouijeme-li standardní postup dojdeme ke konstrukci podprogramu je
formálnì odpovídá zápisu
subroutine zkus ( int i )
prikaz_a
prikaz_b
if i <> 0 and j = 0 then prikaz1
if i <> 0 and j <> 0 then prikaz2
return
Vimnìme si, e logický výraz v podmínce je navázán jednak na promìnnou i a
jednak na výraz podle nìho se rozhoduje zda se pøíkaz následující za klíèovým slovem
vykonat má, který se má plnit, kdy je podmínka splnìna. V tìchto pøípadech nelze pro
jednotlivé øádky programu pouít èásti else v podmínìném pøíkazu.
Proè ?
Modelujme si napø. situaci na prvním podmínìném pøíkazu podprogramu a
zapime si ji tak, e pouijeme èást else. Takto zapsaný podmínìný výraz bude formálnì
vypadat takto:
if i <> 0 and vyraz then prikaz1 else prikaz2
Rozebereme-li nyní vlastnosti podmínky v podmínìném pøíkazu zjistíme
následující. V pøípadì, e promìnná i bude skuteènì rùzná od nuly, pak první èást
podmínky platí. A rozhodování, který z pøíkazù se vykoná, je øízeno platností podmínky
"i=0". Z uvedeného vyplývá, e za této situace se podmínìný pøíkaz chová podle zadání.
Zkusme nyní pro vyhodnocení uvaovat, e je splnìna podmínka "i=0". Za tohoto
pøedpokladu se vdy vykoná "pøíkaz2" nezávisle na hodnotì promìnné "i". V této situaci u
uvedené øeení nesouhlasí s poadavky zadání.
Dalí moností jak situaci øeit je pouití sloeného pøíkazu pro splnìnou
podmínku "i <> 0". Zápis nyní bude vypadat takto.
if i <> 0 then
begin
if j = 0 then prikaz1
else prikaz2
end
Takto zapsané øeení úlohy se bude chovat podle zadání.
Nyní budeme demonstrovat zápis pomocí pøíkazu exit.
subroutine zkus ( int i )
prikaz_a
prikaz_b
if i = 0 then exit
if j = 0 then prikaz1 else prikaz2
return
!'
SIMPLE V4 - popis jazyka
03.2004
94 stran
!'
Uvedené øeení s pøíkazem exit vede po pøekladu k nejrychlejímu
generovanému kódu programu, nebo pøi stejném poètu podmínek neobsahuje zápis
podmínku sloenou ze dvou výrazù popø. vloený podmínìný pøíkaz do jiného podmínìného
pøíkazu. Z hlediska funkce jsou tedy øeení ekvivalentní. Z hlediska rychlosti a v øadì
takových pøípadù i délky kódu je nejlepí zápis právì s pøíkazem exit.
4.8
Umìle zavedené pøíkazy
Pomocí umìle zavedených pøíkazù do jazyka SIMPLE V4 se øeí syntaktické
prohøeky z jazyka Simple. Vechny syntaktické konstrukce, které odpovídají zavedeným
umìlým pøíkazùm nebudou v budoucnosti podporovány. Proè jsou tedy podporovány nyní?
Dùvod je prostý. Pøi jejich konstrukci jsme byli vedeni snahou zachovat zpìtnou
kompatibilitu zdrojových textù smìrem k jazyku Simple a usnadnit tak pøechod na nové
syntaktické konstrukce. Pro tyto vyjímky vak platí, e v okamiku, kdy pøi rozvoji jazyka
zaènou syntakticky vadit a znemoòovat tak udrení syntaktické èistoty, budou ze
syntaktických konstrukcí odstranìny. Z tohoto dùvodu doporuèujeme pøejít v nových
aplikacích na novou syntaxi jazyka SIMPLE V4.
Pøíkaz výraz
Jedná se o umìlý pøíkaz zavedený z dùvodu zpìtné kompatibility zdrojových
textù psaných pro jazyk Simple. V nových aplikacích doporuèujeme místo tohoto pøíkazu
pouívat novou syntaxi zápisu, protoe tento pøíkaz (stará syntaktická konstrukce) nebude v
budoucnu podporován. Pøíkaz výraz je zápis pro nastavení bitové promìnné na hodnotu 1.
Pøíklad
var bit vystup
Stará syntaxe zápisu
vvystup
;stará syntaxe jazyka simple nastaví bitovou
;promìnnou na hodnotu 1
Nová syntaxe zápisu
vystup = 1
Pøíkaz not
Jedná se opìt o umìlý pøíkaz zavedený obdobnì jako pøíkaz výraz z dùvodu
zpìtné kompatibility zdrojových textù. Pøíkaz not kopíruje starou syntaxi zápisu nulování
bitové promìnné. V nových zdrojových textech aplikací doporuèujeme opìt pouívat nové
syntaxe, nebo pøíkaz not nebude v budoucnu podporován.
"
SIMPLE V4 - popis jazyka
03.2004
94 stran
"
Pøíklad
var bit vystup
Stará syntaxe zápisu
'vystup
;provede vynulování bitové promìnné vystup
Nová syntaxe zápisu nulování bitu
vystup = 0
Pøíkaz vykøièník
Dalí z umìlých pøíkazù zavedený z dùvodu zpìtné kompatibility. Ve staré syntaxi
se jednalo o zápis negace bitové promìnné tj. o operaci, kdy se hodnota bitu zmìnila na
opaènou.
Pøíklad
var bit vystup
Stará syntaxe zápisu
!vystup
nová syntaxe zápisu
vystup = vystup'
Pøíkaz øádka
Jedná se o umìlý pøíkaz zavedený do jazyka pro z dùvodu zpìtné kompatibility s
jazykem SIMPLE V2, postaveném na principu øádkového pøekladaèe (povaujícího znak
nového øádku, tj. konec øádku pøedchozího, za oddìlovaè).
Syntaxe moderních jazykù povaují pøechod na novou øádku za bezvýznamný
syntaktický prvek. Tento moderní pohled pak umoòuje uivateli volné formátování
zdrojového textu a odstraòuje omezení délky pøíkazu standardní 80-ti znakovou délkou
øádku. V øadì pøípadù se podaøilo v nové syntaxi vyøeit problematiku konce øádky
bezbolestnì. Jsou vak pøípady, kdy to nebylo moné a v tìchto pøípadech je pøíkaz konce
øádky implementován. Vechny pøíklady implementace pøíkazu øádka jsou zahrnuty
v syntaktických diagramech v následující podkapitole tohoto manuálu. Pro jednoduchost
uveïme alespoò jeden typický pøíklad.
V jazyce Simple V2 byl zaveden pokraèovací pøíkaz tj. znak ":" pouívaný na
jedné øádce k oddìlení jednotlivých pøíkazù.
"
SIMPLE V4 - popis jazyka
03.2004
94 stran
"
Uveïme typický pøíklad:
if KBCODE=K_ENT then NewID=0100 : POINTER=OFS+10 : STACK=CurrID
V zápisu vidíme oddìlovaèe ":", které reprezentují vlastnì pokraèovací pøíkaz. V
jazyce SIMPLE V4 byl zaveden místo pokraèovacího pøíkazu pøíkaz sloený ohranièený
klíèovými slovy begin a end. V uvedeném zápisu pak konec øádky vystupuje ve významu
ukonèení podmínìného pøíkazu. Z dùvodu kompatibility byla tato syntaxe zachována.
Z uvedeného vyplývá, e v syntaxi jazyka SIMPLE V4 je tento zápis moný tj. mùeme opìt
zapsat:
if KBCODE=K_ENT then NewID=0100 : POINTER=OFS+10 : STACK=CurrID
Do budoucna vak bude podporována pouze následující konstrukce:
if KBCODE=K_ENT then
begin
NewID=0100
POINTER=OFS+10
STACK=CurrID
end
Z uvedeného zápisu nové syntaxe je zøejmé, e omezení a hlavnì nepøehlednost
zápisu vyplývající z délky øádku je novou syntaxí potlaèeno.
4.9
Makra
Jazyk SIMPLE V4 zavádí novì jazykovou konstrukci tzv. Makra. V jazyce Simple
byla byla umonìna obdobná konstrukce pro pøiøazování symbolù skuteèných vstupù a
výstupù a specifikovaném automatu vùèi identifikátorùm programu. Makro je oznaèeno
speciálním znakem "#", který nesmí být uveden v øetìzci znakù a v komentáøi. Makro musí
být døíve deklarované, ne jej pouijeme ve zdrojovém textu. Na rozdíl od ostatních
identifikátorù napø. jmen promìnných je dovoleno vzájemné volání maker. Makro pøíkaz v
jazyce SIMPLE V4 je pøekládán formou nahrazení øetìzce. Makro musí být vyèíslitelné ve
fázi pøekladu a jeho zápis funguje v pøípadì pøiøazení promìnných obdobnì jako v jazyce
Simple. Z uvedeného vyplývá, e konstrukce pøiøazení jmen pøeddefinovaných promìnných
tj. napø. síové promìnné D, zùstává zachována a vypadá nadále napø. takto:
D32 # Moje_promenna_D
Zápis Makra tedy odpovídá formálnímu tvaru:
jméno_makra # identifikátor
"
SIMPLE V4 - popis jazyka
03.2004
94 stran
"
Pragma
Jedná se o speciální zápis doplòujících informací pro vlastní prùbìh pøekladu.
Pragmata jsou uvozena znakem "$". Slouí ke specifikaci pouitého konfiguraèního souboru
pøekladaèe a souboru vnoøeného. Uveïme pøíklady zápisu:
$config (cesta\jméno_souboru)
$include (cesta\jméno_souboru)
Jak je vidìt z uvedeného zápisu, pragmata zajiují lokální návaznost daného
zdrojového textu na dalí soubory. Pragma config specifikuje návaznost pøekládaného textu
na typ automatu a programovací prostøedí jej do projektu doplòuje automaticky. Není tedy
nutné se jím nikterak zabývat.
Dalím typem pragmatu mùe být pragma include. Tímto pragmatem
oznamujeme pøekladaèi, které soubory má pro následný prùbìh povaovat za související.
Pouití tohoto pragmatu mùeme pøipodobnit k funkci vloit, kterou dnes podporuje ji snad
kadý textový editor. Jinak øeèeno soubor uvedený v pragmatu include se pøi pøekladu
zaèlení do pøekládaného zdrojového textu od místa jeho uvedení v pragmatu include.
"!
SIMPLE V4 - popis jazyka
03.2004
94 stran
"!
5.
Chyby
Následující kapitola je vìnována chybovým hláením, které mohou vznikat pøi
pøekladu. Chyby generované pøekladaèem mùeme rozdìlit na pìt následujících skupin:
Interní chyba pøekladaèe
generuje se v okamiku, kdy pøekladaè neví jak pøeloit zdrojový text.
Abort
tento typ chyby je generován pøi nestandardním ukonèení pøekladu.
Typickou situací pøi ní nastane je okamik, kdy je nalezena
konstrukce generující "chybu v chybì".
Fatal
chyba se generuje v pøípadì, e v pøekladu není moné pokraèovat
díky známým omezením. Typické je pro tento pøípad pøekroèení
rozsahu volné pamìti.
Syntaktická chyba
je generována pøi nalezení konstrukce, která neodpovídá
syntaktickým diagramùm jazyka SIMPLE V4. V tomto pøípadì se
pøekladaè pokusí nastartovat dalí pokraèování pøekladu od
nìkterého jednoznaènì odliitelného bodu zdrojového textu. Ne se
mu to podaøí, mùe dojít ke generování tzv. zavleèených chyb, které
pramení z první nalezené chyby. Je tedy tøeba opravit první chybu a
spustit znovu pøeklad, nebo není vylouèeno, e dalí chyby byly jen
zavleèené a oprava první chyby opraví i chyby následující.
Sémantická chyba
jedná se o typ chyby, která je generována pøi nalezené
nekompatibilitì v operaci.
5.1
Chybová hláení generovaná pøekladaèem
Chybová hláení generovaná v prùbìhu pøekladu mají nìkolik úrovní poèínaje
chybou pøi ní pøeklad ani nezaène, pøes chyby ukonèující pøeklad a po chyby obecné, které
nezpùsobí zastavení pøekladu. V soupisu jsou pouívány tyto symboly:
oznaèuje chybové hláení
oznaèuje popis vzniku chyby
oznaèuje monost jak chybu opravit.
""
SIMPLE V4 - popis jazyka
03.2004
94 stran
""
Chyby závané (typu Abort).
Chybný (neznámý) soubor zdrojového textu
Fatální chyba diskové operace pøi otevírání vstupního souboru zdrojového
textu.
Ovìøte, e vstupní soubor zdrojového není otevøen v nìjakém jiném editoru
napø. WordPAD apod.
Dvojitá chyba.
Fatální chyba pøekladu. Dolo k dvojímu volání pøedèasného ukonèení bìhu
pøekladaèe z dùvodu vzniku dvojiho generování fatální chyby. Tato chyba
mùe vzniknout pouze za situace, kdy dolo k nepøedvídatelné reakci
pøekladaèe. S nejvìtí pravdìpodobností zpùsobil pøekladaè chybu v
dynamickém alokování pamìti nebo v rekurzivních operacích bìhem
pøekladu. Operaèní systém mùe být v nestabilním stavu.
Doporuèujeme provést uzavøení a opìtovné nové otevøení programovacího
prostøedí. Vhodný je té reset operaèního systému, nebo systémová operace
provádìjící bezpodmíneèné ukonèení procesu neprobìhla v poøádku. Pokud
by se chyba opakovala doporuèujeme kontaktovat firmu Micropel sro.
Nekompatibilní 'object' soubor
Soubor vzniklý v prvním bìhu pøekladu není kompatibilní se vstupním
souborem pro generátor kódu.
Proveïte upgrade vaeho vývojového prostøedí popøípadì konzultujte
problém s firmou Micropel sro.
Nekompatibilní model pamìti
Generátor kódu v druhé fázi pøekladu byl sputìn se vstupním souborem v
nevhodném nebo neznámém modelu pamìti cílového automatu.
Proveïte upgrade vaeho vývojového prostøedí popøípadì konzultujte
problém s firmou MICROPEL.
Nedostupný generátortor kódu
Generátor kódu nebyl nalezen a nelze vygenerovat výstupní DNL soubor.
Pokud chyba vznikla po pøedchozím pokusu o pøeklad a ten skonèil "Dvojitou
chybou", proveïte restart poèítaèe. Pokud tomu tak není, chybí ve vaí
instalaci odpovídal¨jící dynamická knihovna obsahující pøísluný generátor
kódu. Proveïte upgrade vaeho vývojového prostøedí.
"#
SIMPLE V4 - popis jazyka
03.2004
94 stran
"#
Zdrojový soubor nenalezen
Soubor se zdrojovým textem nebyl nalezen
Ovìøte zda se nachází pøísluný soubor na disku. K chybì mùe té dojít
tehdy kdy se uvedený soubor nepodaøí vygenerovat z nadstavbových editorù
vývojového prostøedí (grafický editor apod.). Pøeklad není moné spustit,
kdy dolo k chybì preprocesu v nìkterém z tìchto editorù.
Pøíli mnoho vnoøených 'include' (pravdìpodobnì rekurze)
Pøekladaè umoòuje vnoøit maximálnì 50ti souborù pomocí direktivy include.
Poèet vnoøení byl pøekroèen.
Provìøte poèet vnoøení a provìøte zda nedochází k rekurzi pøi pouití direktivy
include.
Pøíli mnoho 'include' souborù
V prùbìhu pøekladu bylo vloeno více jak 50 souborù direktivou include.
Proveïte slouèení nìkterých souborù volaných direktivou include tak aby
celkový poèet vkládaných souborù nepøesáhl poèet 50.
Chyba v souboru
Pøi ètení souboru zdrojového textu dolo k chybì.
Provìøte zda soubor skuteènì obsahuje zdrojový text. Provìøte zda soubor
není otevøen v jiném editoru. Provìøte obsah pevného disku pomocí
programu ScanDisk.
Soubor (adresáø) poadovaného jména neexistuje
Pøekladaè nemùe najít a otevøít soubor zadaného jména. Problém mùe být
zpùsoben pøi kopírování projektu na jiný disk nebo do jiného adresáøe. Pøi
kopírování projektu jsou pøekopírovány pouze soubory, o kterých manaer
projektu ví tj. ty, které jsou vloeny do projektu právì pomocí projekt
manaeru. Soubory, které jsou do zdrojového textu vloeny pomocí direktivy
include, nejsou automaticky kopírovány.
Provìøte zda daný soubor existuje. Pokud tomu tak není doplòte soubor.
Pokud soubor existuje opravte cestu ve volání souboru pomocí direktivy
include.
Pøíli mnoho otevøených souborù
Je otevøeno pøíli mnoho souborù a dalí soubory není moné otevøít.
Provìøte hloubku volání direktivy include, provìøte pøípadnou rekurzi této
direktivy. Zkuste uzavøít ostatní sputìné programy.
"$
SIMPLE V4 - popis jazyka
03.2004
94 stran
"$
Neznámé nastavení
Bylo provedeno volání pøekladaèe s chybným nebo neznámým parametrem.
Kontaktujte firmu MICROPEL a proveïte pøíp. upgrade vývojového prostøedí.
Pøístup odepøen
Systém odepøel pøístup k souboru poadovaného jména.
Provìøte zda není soubor otevøen v jiném programu. Pokud ano program
uzavøete. Pokud ne, zkuste restartovat operaèní systém.
Nespecifikovaná chyba pøi otevøení souboru
Pøi otevírání souboru dolo k nespecifikované chybì.
Objeví-li se nespecifikovaná chyba pøi otevøení souboru, zkuste zavøít a znovu
spustit vývojové prostøedí. Provìøte není-li soubor otevøen v jiném programu.
Pamì dostupná pro pøekladaè byla pøekroèena
Velikost pamìti, kterou má pøekladaè od systému k dispozici není dostateèná
k dokonèení pøekladu.
Uzavøete ostatní sputìné programy a zkuste pøeklad znovu. Provìøte zda
není ve zdrojovém textu rekurze.
Vkládaný soubor nebyl nalezen (chyba include)
Nebyl nalezen soubor specifikovaný direktivou include.
Provìøte a pøíp. opravte direktivu include tj. jméno souboru a cestu.
Jméno vkládaného souboru není specifikováno
Jméno souboru v direktivì include není specifikováno nebo nebylo nalezeno.
Provìøte jméno souboru a syntaxi direktivy include. Pokud je pouito,
odstraòte odøádkování v direktivì include.
Chybná klazule include
Pouití èi syntaxe klauzule (direktivy) include chybnì
Provìøte zda zápis odpovídá tvaru:
$include (cesta\soubor.pøípona)
Pøíli sloitý výraz
Oznaèený výraz není schopen pøekladaè pøeloit, protoe svou sloitostí
pøekroèil povolený poèet rekurzivních volání vyhodnocení výrazu.
Výraz rozdìlte na dva kratí výrazy.
"%
SIMPLE V4 - popis jazyka
03.2004
94 stran
"%
Chyby lexikální a syntaktické
V definici makra chybí jméno makra
Za øídícím znakem # definice makroinstrukce chybí nebo nebylo nalezeno
jméno makra.
Doplòte jméno makra, popøípadì odstraòte odøádkování pøed tímto jménem.
Pøíli mnoho vnoøených maker
V zápisu makroinstrukcí jste pouili více ne 8 úrovní vnoøení.
Provìøte poèet vnoøení maker a sledujte zda se nejedná o rekurzivní volání.
Nekompatibilní verze knihovny
Verze knihovny vkládaná pomocí direktivy $Library je nekompatibilní a tudí ji
není moné zpracovat.
Provìøte zda soubor vkládaný pomocí direktivy $Library je skuteènì
souborem obsahujícím knihovnu tj. souborem který vygeneroval pøekladaè
sputìný s parametrem LIB. Pokud pouíváte knihovnu z neovìøených zdrojù
konzultujte problém s firmou Micropel sro pøípadnì proveïte upgrade svého
pøekladaèe èi vývojového prostøedí.
Klauzule include byla pouita pro soubor knihovny
Provádíte generování knihovny ze zdrojového souboru, který obsahuje
klauzuli (direktivu) $Include. Pouití této direktivy není v tomto pøípadì
dovoleno.
Pokud potøebujete pro definici knihovních datových struktur nìkteré
informace obsaené ve vkládaném souboru, zkopírujte tyto informace do
souboru, z nìho generujete knihovnu. Tím budou tyto definice souèástí
knihovny. Tyto úpravy jsou nutné z dùvodu pøenositelnosti výsledné
knihovny.
Konec souboru v komentáøi
Jedná se o chybu, která èasto vzniká jako chyba zavleèená, tj. chyba vzniklá z
dùvodu vzniku pøedchozích chyb. V takovém pøípadì se nìkdy nepodaøí, aby
pøekladaè správnì odhadl dalí ji bezchybnì napsaný pøíkaz nebo øádek. Jen
v minimu pøípadù se jedná o skuteènì neuzavøený blokový komentáø
zdrojového textu.
Pokud je chyba hláena samostatnì tj. jako jediná, doplòte ukonèovací znaky
blokového komentáøe */. Pokud se pøed touto chybou objevily chyby dalí,
odstraòte nejprve pøedcházející chyby a proveïte pøeklad znovu. Chyba s
nejvìtí pravdìpodobností zmizí.
"&
SIMPLE V4 - popis jazyka
03.2004
94 stran
"&
Nedovolený znak
Oznaèený znak zdrojového textu je v daném pøípadì znak nedovolený.
Opravte zápis zdrojového textu dle syntaktických pravidel.
Konec øádky v øetìzci
Pøekladaè nenalezl ukonèení øetìzce znakù na zpracovávané øádce zdrojového
textu.
Ukonèete øetìzec znakù znakem ". Mùe se jednat té o vnesenou chybu z
chyb pøedchozích.
Pøíli velká hodnota celoèíselné konstanty
Oznaèený zápis celoèíselné konstanty dává pøi jejím vyhodnocení pøíli
velkou hodnotu. Hodnota je sledována i z hlediska typu promìnné nebo
parametru funkce kam je pøedávána.
Opravte zápis konstanty.
Chyba v èíselné konstantì
Chybou je nejèastìji oznaèen znak, který není moné pouít pøi zápisu
konstanty.
Opravte zápis konstanty dle syntaktických pravidel jazyka. Pozor, mùe jít té
o vnesenou chybu z chyb pøedchozích.
Výraz musí být aritmetický
Pouitý výraz je zapsán tak, e se jedná ve skuteènosti o výraz logický. Výraz
je pouit na místì, kde je vyadován výraz aritmetický.
Opravte zápis výrazu. Mùe jít té o vnesenou chybu z chyb pøedchozích nebo
o patnou syntaxi zápisu podmínìného pøíkazu, kdy se výkonná èást
podmínìného pøíkazu vyhodnocuje jako podmínka tj. chybí klíèové slovo
"then".
Oèekává se symbol [symbol]
Chyba je hláena v okamiku, kdy pøekladaè oèekává v zápisu zdrojového
textu symbol. Oèekávaný symbol je uveden spoleènì s chybovým hláením
(viz. hranaté závorky).
Pokud uvedený symbol v zápisu skuteènì chybí, doplòte jej. Chyba mùe být
vnesená a tudí je moné, e vznikla z chyb pøedchozích. Pokud se zdá, e
symbol na uvedeném místì nechybí, opravte pøedchozí chyby a proveïte
nový pøeklad.
"'
SIMPLE V4 - popis jazyka
03.2004
94 stran
"'
Neoèekávaný symbol [symbol]
Pøekladaè nalezl ve zdrojovém textu symbol, klíèové slovo, které na daném
místì zdrojového textu neoèekával. Symbol je uveden spoleènì s chybovým
hláením.
Mùe jít o vnesenou chybu nebo pøeklep èi omyl. Provìøte zda se jedná o
pøeklep a pokud ano, opravte jej. V ostatních pøípadech opravte pøedchozí
chyby a proveïte nový pøeklad zdrojového textu.
Po znaku otazník musí následovat èíslo bitu
V zápisu zdrojového textu je pouit znak otazník "?", který realizuje pøístup ke
zvolenému bitu v celoèíselné promìnné. Bit vak musí být specifikován
konstantním výrazem.
Opravte výraz urèující pozici bitu tak, aby byl konstatní tj. napø.
sepni ? 3
Chyby v deklaraci funkcí
Rekurzivní volání funkce
V rozvoji volání funkce nalezl pøekladaè její rekurzivní volání. Rekurzivní
volání není dovoleno.
Opravte volání funkce tak, aby rekurze byla vylouèena.
VXEURXWLQHDLQWL
EL
]GHYROiPHSRGSURJUDPE
UHWXUQ
VXEURXWLQHELQWL
DL
]GHYROiPH]SWSRGSURJUDPD
UHWXUQ
Volání procedury ve výrazu
V oznaèeném výrazu je volána procedura. Vzhledem k tomu, e procedura
nevrací hodnotu není moné pouít volání procedury v libovolném typu
výrazu nebo v podmínce pøíkazu "if".
Odstraòte volání procedury ve výrazu nebo zmìòte deklaraci procedury na
funkci a do tìla této funkce vlote pøíkaz "return" doplnìný o návratovou
hodnotu.
#
SIMPLE V4 - popis jazyka
03.2004
94 stran
#
Identifikátor není funkce
V zápisu zdrojového textu je uveden identifikátor doplnìný o blok pøedávání
parametrù. Uvedený identifikátor vak nebyl deklarován jako funkce èi
procedura.
Opravte jméno funkce nebo odstraòte blok parametrù, popøípadì doplòte
aritmetický výraz o aritmetickou operaci.
Napø.
test ( 9 + vykon)
zmìòte na
test * ( 9 + vykon)
Jiná monost chybného zápisu:
YDULQWDLQWELQWSDU
E DSDU
"a" je promìnná nikoliv funkce.
Pøíli mnoho parametrù funkce (max 32)
Ve zdrojovém textu byl pøekroèen maximální dovolený poèet 32 parametrù
pøedávaných do funkce.
Pøepracujte funkci tak, aby nebyl tento poèet pøekroèen. Pouijte napø.
globální promìnné nebo strukturované promìnné vlastního typu.
Parametr musí být aritmetického typu
Parametr pøedávaný do funkce hodnotou musí být aritmetického typu, tj.
nesmí to být struktura nebo pole nebo jiný kombinovaný datový typ.
Je-li tøeba pøedat sloený typ do funkce, pouijte pøedání odkazem
(v deklaraci parametrù pouijte pøed typem promìnné klíèové slovo "var".)
Chyby v kompatibilitì typù
Pøiøazením mùe dojít ke ztrátì hodnoty
Ve zdrojovém textu jste pouili pøiøazení znaménkové promìnné do
neznaménkové promìnné a nebo promìnné s vìtím rozsahem hodnot do
promìnné s mením rozsahem hodnot.
Pøiøazením mùe skuteènì dojít ke ztrátì nebo zmatení hodnoty. Pokud
chcete pøesto pøiøazení provést je nutné provést explicitní pøetypování
promìnné nebo výrazu napø.
VAR_BYTE = (byte) VAR_WORD
Doporuèujeme striktnì dodrovat stejné typy promìnných pro vzájemné
pøiøazení hodnot.
#
SIMPLE V4 - popis jazyka
03.2004
94 stran
#
Nekompatibilita v binární operaci
Chyba vzniká tehdy pokud se v binární operaci (výrazu) vyskytnou datové
typy, které nejsou kompatibilní pro pøiøazení tj. znaménkové a neznaménkové
typy, typy s rùzným rozsahem hodnot. V nìkterých pøípadech nevadí pouití
odliných datových typù ve výrazu. Jedná se napøíklad o souèet promìnné
typu byte s promìnnou typu word. To vak platí pouze tehdy, kdy výsledek
je operace pøiøazen do typy word. Pokud tomu tak není dojde k hláení této
chyby.
Ovìøte platnost operace z hlediska datových typù, které do operace vstupují a
opravte zápis operace v souladu se znaménkovými a neznaménkovými typy
promìnných a v souladu s rozsahem hodnot tìchto promìnných. Pomoci
mùe i pøetypování nìkterého z operandù.
Operandy musí být aritmetického typu
Operandy výrazu neodpovídají aritmetickému typu. Operandy, které
oznaèujeme za aritmetické, jsou typu "byte", "word", "int", "longword", "longint"
vèetnì jejich bezpeèných variant typu safe. K uvedenému výètu pøidáváme
jetì typ "float". Chyba nejèastìji vzniká opomenutím specifikace dané
poloky u strukturovaných typù promìnných popø. polí nebo vlastních typù
promìnných.
Ovìøte zda pouité operandy odpovídají definicí aritmetickému typu.
Operandy musí být typu int
Ve výrazu jste pouili operandy, které nejsou celoèíselné. Typicky jsou
celoèíselné operandy poadovány v indexu pole. Za celoèíselné operandy
jsou vechny typy promìnných vyjma typu "float" a "bit".
Ovìøte zda pouitý datový typ odpovídá celoèíselnému typu promìnné. Pozor
na poloky strukturovaných typù promìnných a na pole.
Levá strana pøiøazení není promìnná
Chyba vznikne napøíklad tehdy pokud se pokouíte pøiøadit výsledek
aritmetické operace do promìnné typu "const". Tento typ promìnné není
moné pouít pro pøiøazení nebo promìnná je pøeloena do kódové pamìti
(pamìti programu) a tuto pamì nelze mìnit. Stejnì tak je chyba hláena
pokud se pokusíte pøiøadit výsledek do pole a nespecifikujete poloku pole.
Obdobnì to platí i pro struktury a uivatelské typy promìnných.
Opravte zápis pøiøazení tak, aby levá strana výrazu byla skuteènì promìnná
základního typu. Pozor! Pokud pouíváte napøíklad vlastní typ pro oznaèení
struktury nebo pole, musíte provést vzájemné pøiøazení tìchto struktur nebo
polí poloku po poloce.
#
SIMPLE V4 - popis jazyka
03.2004
94 stran
#
Výraz není kompatibilní pro pøiøazení
Chyba oznaèuje situaci, kdy není moné pøiøadit výsledek výrazu bìhem jeho
zpracování. Pøíkladem mùe být pøiøazení výrazu aritmetického typu do
promìnné typu bit. Takté je chyba hláena tehdy, pokud se pokouíme
pouít direktivu "absolute" uvnitø funkce lokální promìnné této funkce.
Opravte zápis výrazu.
Pravý operand posunu musí být konstantní výraz
Ve výrazu pro aritmetický posun je pouit na místì operandu, který urèuje
délku posunu výraz, který není konstatní. Mezi výrazy, které nejsou
konstantní øadíme i promìnné.
Opravte zápis tak, aby vpravo od operandu posunu byl konstantní výraz nebo
konstanta.
Výraz musí být bez znaménka
Chyba je hláena v pøípadì, e je výraz vyhodnocen jako znaménkový a ve
skuteènosti je poadován výraz bez znaménka. Pøíkladem mùe být pokus
inicializovat konstantu typu byte zápornou hodnotou. Dalím místem, kde
tato chyba vzniká, je pøedávání výsledku funkce klíèovým slovem "return".
Opravte zápis výrazu.
Výraz musí být aritmetického typu
Uvedený výraz musí poskytovat výsledek aritmetického typu. Chyba mùe
vzniknout pøi zápisu výrazu v nìm se pouívají vlastní (uivatelské) typy
promìnných, struktury nebo pole. Vìtinou se jedná o opomenutí
specifikovat poloku struktury nebo pole. Pozor té na pouití promìnných
typu "bit".
Opravte výraz tak, aby byl aritmetického typu.
Výraz musí být typu int
Výraz je zapsán tak, e nevyhovuje poadavku na celoèíselný výraz. Chyba
mùe být zpùsobena pouitím promìnné typu "float" v daném výrazu.
Upravte výraz tak, aby byl celoèíselný.
Výraz musí být konstantní
Uvedený výraz musí být vyhodnotitelný u ve fázi pøekladu. Výraz tedy nesmí
obsahovat promìnné. Pokud pouíváte makroinstrukce musí se jednat o
jména maker, která specifikují konstanty.
Opravte výraz tak, aby nepouíval promìnné.
#!
SIMPLE V4 - popis jazyka
03.2004
94 stran
#!
Operand musí být aritmetického typu
Operand pouitý ve výrazu musí být aritmetického typu tj. nesmí být typu bit
popø. uivatelského typu, strukturou nebo polem. V aritmetickém výrazu jste
patrnì pouili typ "bit".
Opravte datový typ operandu.
Operand musí být typu int
Oznaèený operand neodpovídá poadavku na celoèíselný typ opetrandu.
Patrnì jste pouili operand typu "bit" nebo "float".
Opravte zápis tak, aby oznaèený operand byl celoèíselného typu. Pomoci
mùe napøíklad explicitní pøetypování. Pozor, vak na dùsledky operace
pøetypování.
Operand musí být typu bit
Na uvedeném místì poaduje pøekladaè operand typu "bit". V zápise
zdrojového textu je pouit jiný operand. Chyba se té mùe vyskytnout v
logickém výrazu, pokud není pouit znak porovnání a operand je pouit bez
pøísluného aritmetického výrazu.
Opravte typ operandu. Mùete popøípadì pouít pøetypování.
Operand musí být konstantní výraz
Pouili jste promìnnou èi nekonstatní výraz na místì, kde je vyadován
konstantní operand. Chyba se objevuje v zápisu direktivy "absolute", kdy na
pravé stranì klíèového slova je pouito výrazu pro pole s indexem, který není
konstantní.
Opravte operand tak, aby byl konstantní.
Operand není promìnná
Pokouíte se napøíklad pøedat èíselnou konstantu do funkce, kde je
oèekávána promìnná pøedávaná odkazem.
Pokud se jedná o pøedávání této hodnoty do funkce, pøedejte hodnotu pøe
pomocnou promìnnou a nebo odstraòte v deklaraci funkce u pøísluného
parametru specifikaci pøedávání odkazem tj. odstraòte klíèové slovo "var".
Dìlení nulou
V konstantním výrazu se pokouíte dìlit nulou. Chyba vznikne nejèastìji
tehdy pokud pouíváte makroinstrukce pro oznaèení konstantních hodnot.
Opravte zápis tak, aby nedocházelo k dìlení nulou.
#"
SIMPLE V4 - popis jazyka
03.2004
94 stran
#"
Funkce musí být aritmetického typu
Funkce, kterou jste pouili patrnì v aritmetickém výrazu není aritmetického
typu.
Opravte deklaraci a zápis funkce tak, aby odpovídala aritmetickému typy
popøípadì proveïte pøetypování výsledku funkce pøímo ve výrazu.
Chyby ve volání funkcí a procedur
Nejednoznaèné volání funkce
K této chybì dojde tehdy pokud pøekladaè neumí urèit, kterou ze
stejnojmenných funkcí máte v zápisu na mysli. K tomu jevu dochází napøíklad
tehdy pokud má funkce jeden parametr a vy pøi volání pouijete na místì
parametru èíselnou konstantu.
Chybu opravíte buï tak, e pouijete promìnnou a nebo tak, e konstantu
explicitnì pøetypujete tak, aby pøekladaè mohl volanou funkci rozliit.
Skuteèný parametr není promìnná
Chyba vzniká pøi volání funkce její parametr je pøedáván odkazem tj.
deklarován pomocí "var". Symbol který se pokouíte pøedat do funkce na
místì tohoto parametru není ve skuteènosti promìnná a tudí ho není moné
pøedat odkazem.
Chybu opravíte buï tak, e k pøedání pouijete pomocnou promìnnou a nebo
opravíte deklaraci parametru na pøedávání hodnotou tj. vypustíte klíèové
slovo "var".
Skuteèný parametr není stejného typu
Na pozici parametru, pøi volání funkce, jste pouili výraz obsahující patrnì
dalí volání funkce. Problém je v tom, e výsledek takto volané funkce není
stejného typu jako je vyadováno typem parametru.
Opravte volání funkce tak aby typ parametru a pøedávané promìnné èi
výsledek funkce byl poadovaného typu. Mùete pouít té pøetypování.
Skuteèný parametr není umístìn v kódu
Pokud je daný parametr funkce deklarován jako konstantní a pøedávaný
odkazem, dojde k této chybì pøi volání funkce s pouitím promìnné z datové
pamìti a nebo konstanty na místì tohoto parametru.
Odstraòte v deklaraci parametru funkce klíèové slovo "const" a nebo pouijte
promìnnou deklarovanou jako konstantní tj. s umístìním v kódové pamìti.
##
SIMPLE V4 - popis jazyka
03.2004
94 stran
##
Pøedáno více skuteèných parametrù
K chybì dojde tehdy pokud je daná funkce volána s vìtím poètem parametrù
ne je deklarována. K chybì mùe té dojít v pøípadì, e máme deklarováno
více funkcí stejného jména s rùzným poètem parametrù a pøekladaè vybere
podle typu parametrù nevhodnou funkci. To se mùe stát tehdy pokud
pøedáváme na místì parametrù èíselné konstanty.
Upravte poèet parametrù popøípadì proveïte explicitní pøetypování èíselných
konstant tak, aby pøekladaè mohl vybrat funkci s odpovídajícím poètem
parametrù.
Pøedáno ménì skuteèných parametrù
K chybì dojde tehdy pokud je daná funkce volána s mením poètem
parametrù ne je deklarována. K chybì mùe té dojít v pøípadì, e máme
deklarováno více funkcí stejného jména s rùzným poètem parametrù a
pøekladaè vybere podle typu parametrù nevhodnou funkci. To se mùe stát
tehdy pokud pøedáváme na místì parametrù èíselné konstanty.
Upravte poèet parametrù nebo proveïte explicitní pøetypování èíselných
konstant tak, aby pøekladaè mohl vybrat funkci s odpovídajícím poètem
parametrù.
Neexistuje funkce, která odpovídá volání
V prùbìhu pøekladu hledá pøekladaè mezi jednotlivými deklaracemi funkcí (v
pøípadì pøetíených funkcí) tu, která odpovídá volání funkce jménem, poètem
a typem parametrù. Z vech variant vybírá pøekladaè tu funkci, která má
poèet parametrù shodný s voláním funkce a typy parametrù na
odpovídajících místech volání co nejpodobnìjí typùm parametrù v deklaraci
funkce. K této chybì dojde tehdy pokud pøekladaè není schopen rozhodnout,
která z funkcí je nejblíe svou deklarací k volání funkce. Obvykle je chyba
generována v okamiku, kdy voláme pøetìovanou funkci s èíselnými
parametry.
Upravte volání funkce tak, aby bylo moné jednoznaènì zvolit odpovídající
funkci (v pøípadì pøetìovaných funkcí) nebo opravte typy pøedávaných
promìnných tak, aby odpovídaly deklaraci funkce.
Pøíli mnoho vzájemnì volaných funkcí
Zdrojový text je napsán tak, e byl pøekroèen povolený limit 8 vzájemnì
volaných funkcí.
Pøepracujte zdrojový text tak, aby poèet vzájemnì volaných funkcí nepøekroèil
8.
#$
SIMPLE V4 - popis jazyka
03.2004
94 stran
#$
Deklarace typu promìnné nemùe být parametrem funkce
Ve zdrojovém textu jste pøi zápisu parametru funkce pouili takovou
konstrukci, která je ve skuteènosti deklarací nového typu promìnné. Tato
jazyková konstrukce není dovolena.
Pøepracujte parametry funkce tak, aby byl typ parametru deklarován mimo
deklaraci parametrù funkce. Pro sloitìjí pøípady mùete vyuít definici
vlastního typu promìnné s následnou deklarací parametru funkce, který bude
vlastního (uivatelského) typu.
Síová promìnná nemùe být pøedána odkazem
Ve zdrojovém textu voláte funkci, její parametr je deklarován pro pøedání
odkazem tj. je deklarován s klíèovým slovem "var". Na místì tohoto
parametru se pokouíte pouít síovou promìnnou. Tato konstrukce není
umonìna, z dùvodu, e by nebylo moné zajistit korektní sdílení hodnoty
síové promìnné pro ostatní automaty na síti pesNet.
Pokud potøebujete pracovat se síovou promìnnou uvnitø funkce pouijte ji
pøímo. Vechny síové promìnné a speciální registry automatu jsou
deklarovány jako globální promìnné a tudí jsou pøístupné kdekoliv ve
zdrojovém textu. Jedinou moností jak pøedat síovou promìnnou do funkce
je deklarovat parametr funkce jako pøedávaný hodnotou tj. musí být pouita
deklarace parametru bez klíèového slova "var".
Chyby obecné
Posun je vìtí ne íøka operandu
Ve zdrojovém textu pouíváte na pravé stranì operátoru posunu sice
konstantní výraz nicménì s hodnotou vìtí ne je íøka operandu tj. napø. pro
operand typu byte pouijete posun vìtí ne 7.
Upravte hodnotu posunu.
Index v poli bitù musí být konstantní výraz
Pøístup do pole bitù je povolen pouze s pomocí konstantního indexu. Ve
zdrojovém textu je skuteèný index promìnná.
Opravte index pole bitù tak, aby byl vyjádøen konstantním výrazem.
#%
SIMPLE V4 - popis jazyka
03.2004
94 stran
#%
Operandy musí být explicitnì pøetypovány
Ve výrazu jsou pouity operandy jejich implicitní pøetypování není dovoleno.
Pro tento pøípad je nutné operandy pøetypovat explicitnì. Pokud pouíváte ve
výrazu bezpeèné typy promìnných doporuèujeme výraz upravit tak, aby
pøetypování nebylo nutné, tj. výraz napite s pouitím pouze bezpeèných
promìnných totoného typu.
Upravte operand ve výrazu pøetypováním nebo pøepracujte výraz tak, aby
pouíval totoné typy promìnných.
Relaèní operace mùe být provedena pouze s bity
Ve vyhodnocení podmínky v podmínìném pøíkazu "if" dolo k situaci, e
relaèní výraz specifikuje porovnání mezi výsledky vyhodnocení výrazù nebo
promìnnými, které nejsou typu bit. Dotyèná chyba mùe vzniknout tehdy,
kdy jsou pouity výrazy nekorektnì uzavøené do závorek apod.
Upravte zápis podmínky v podmínìném pøíkazu.
Relaèní operace mezi bity mùe být = nebo <>
Pouitá relaèní operace (logický výraz podmínky) mezi operandy typu bit je
odliná od typu "roven" nebo "rùzný". Pro typ bit není povolena jiná relaèní
operace ne "roven" nebo "rùzný".
Opravte zápis relaèní operace.
Unární mínus je moné pouze se znaménkovými typy promìnných
Unární mínus souvisí se zápisem ve zdrojovém textu typu:
stav = - stav
kde znaménko minus pøedstavuje tzv. unární mínus tj. pøevrácení znaménka
promìnné. Tento typ zápisu je povolen pouze pro promìnné znaménkových
typù tj. napø. "int" nebo "longint".
Odstraòte znaménko minus nebo zmìòte typ promìnné z neznaménkového
na znaménkový.
Druhá deklarace identifikátoru
V oznaèené deklaraci promìnné, symbolu nebo funkce je pouito pro
oznaèení jméno, které je totoné se jménem pouitým na pøedchozích øádcích
zdrojového textu.
V deklaraci pouijte odliné jméno.
#&
SIMPLE V4 - popis jazyka
03.2004
94 stran
#&
Nedovolená hodnota poètu prvkù pole
Ve zdrojovém textu deklarujete nebo se odkazujete do pole, pomocí indexu,
který má hodnotu mimo povolený rozsah <1, 32767 >.
Opravte volání nebo deklaraci pole.
Pøíli velká hodnota celoèíselného výrazu
Ve zdrojovém textu je pouit celoèíselný výraz, jeho výsledná hodnota
pøesahuje monosti pouití tohoto výrazu. Pokud je výsledek pøedáván jako
parametr do funkce, jedná se o pøíli velkou hodnotu parametru. Obdobnì
toto platí napø. pro inicializaci promìnné apod.
Opravte výraz tak, aby výsledná hodnota výrazu nebránila inicializaci
parametru, promìnné apod.
Rekurze pøi výpoètu konstantního výrazu
V prùbìhu vyhodnocování konstantního výrazu nael pøekladaè rekurzi.
Chyba mùe nastat napøíklad v pøípadì jsou-li ve výrazu pouity makra v
úloze pøeddefinovaných hodnot a tato rekurze vychází z deklarace tìchto
maker.
Opravte deklaraci maker popøípadì odstraòte rekurzi ve výrazu.
Pouití nepøiøazené promìnné
Pøekladaè nalezl typickou chybu, která je obvykle opomenutím programátora.
Deklarovali jste sice promìnnou, ale první pouití této promìnné je vpravo od
operace pøiøazení tj. operátoru "=" nebo v podmínce podmínìného pøíkazu "if".
Aby mìlo pouití promìnné smysl musí být její hodnota definována tj.
nejprve musí být promìnná naplnìna tj. musí stát vlevo od operátoru
pøiøazení. Pro síové a systémové promìnné toto pravidlo neplatí, nebo
poèáteèní hodnotu zajiuje u tìchto promìnných pøímo automat.
Doplòte inicializaci promìnné.
Èíslo bitu je pøíli velké
Chyba se mùe vyskytovat za operátorem pøístupu k bitu "?", kde je
vyadován konstantní výraz specifikující èíslo bit v promìnné daného typu.
Pro typ byte mùe být toto èíslo maximálnì 7. Bity jsou èíslovány od nuly.
Obdobnì se mùe tato chyba vyskytnout i v deklaraci direktivy "absolute" a to
na pravé stranì specifikující daný bit.
Opravte výraz v operaci pøístupu k bitu, tak aby nebyl pøekroèen bitový
rozsah promìnné daného typu.
#'
SIMPLE V4 - popis jazyka
03.2004
94 stran
#'
Promìnná není pole
V zdrojovém textu, nejèastìji pøi volání funkce a pøedávání parametrù, jste
vytvoøili jazykovou konstrukci, která neodporuje syntaxi jazyka nicménì ve
svém dùsledku vede k pouití promìnné, která není pole na místì, kde je
promìnná typu pole vyadována.
Opravte zápis zdrojového textu, tak aby promìnná byla typu pole.
Promìnná není struktura
V zdrojovém textu, nejèastìji pøi volání funkce a pøedávání parametrù, jste
vytvoøili jazykovou konstrukci, která neodporuje syntaxi jazyka nicménì ve
svém dùsledku vede k pouití promìnné, která není struktura na místì, kde je
promìnná typu struktura vyadována.
Opravte zápis zdrojového textu, tak aby promìnná byla typu struktura.
Index mimo meze pole
Pouili jste index poloky pole, který je vìtí ne deklarovaný poèet poloek
pole.
Upravte velikost indexu nebo pøepracujte deklaraci pole.
Inicializaèní výraz musí být string
V tabulce konstantních øetìzcù je pouit inicializaèní výraz jiného typu ne
string.
Opravte inicializaèní výraz
Oèekává se seznam inicializaèních výrazù
Konstantní promìnná tj. promìnná umísovaná do kódu je sice deklarovaná,
nicménì její inicializaèní výraz nebo výrazy pøekladaè nenalezl.
Doplòte inicializaèní výraz nebo opravte syntaxi zápisu tak, aby výraz mohl
být správnì pøiøazen konstantní promìnné.
Neoèekávaný seznam inicializaèních výrazù
Ve zdrojovém textu je pouit seznam inicializaèních výrazù v místì, kde to
není oèekáváno. Chyba je hláena napøíklad tehdy, kdy se místo
oèekávaného inicializaèního øetìzce pouije seznam øetìzcù.
Opravte inicializaèní výraz tak, aby odpovídal typu inicializované konstantní
promìnné.
$
SIMPLE V4 - popis jazyka
03.2004
94 stran
$
Pøíli málo inicializaèních výrazù
V seznamu inicializaèních výrazù promìnné (èasto se jedná o pole stringù)
jeden nebo více výrazù chybí. Promìnná by tedy zùstala z èásti
neinicializovaná.
Doplòte inicializaèní výrazy
Pøíli mnoho inicializaèních výrazù
V seznamu inicializaèních výrazù promìnné (èasto se jedná o pole stringù)
jeden nebo více výrazù navíc. Promìnná by tedy byla inicializována a nìkteré
výrazy by nebylo moné pouít z dùvodu malého rozsahu promìnné.
Odstraòte pøebyteèné výrazy nebo zvìtete rozsah promìnné napø. u pole
zvìtete index v deklaraci.
Nedefinovaný identifikátor
Oznaèený identifikátor není definován tj. pøekladaè nenael deklaraci
identifikátoru èi jiný typ jeho urèení.
Doplòte deklaraci identifikátoru nebo urèete identifikátor jinak napø. makrem.
Síové promìnné mohou být pouze aritmetického typu
Vzhledem k povaze chyby, by se chyba nemìla vyskytnout jinde ne v
konfiguraèním souboru. Pøekladaè nael, e promìnná, která je deklarována
jako síová je jiného ne aritmetického typu.
Pokud je chyba hláena v konfiguraèním souboru, byl soubor zmìnìn
(úmyslnì nebo neúmyslnì) a je nutné provést jeho obnovu. V dalích
pøípadech, pokud pùvod chyby nebude zøejmý, kontaktuje firmu MICROPEL.
V síové promìnné je povolen pouze konstantní index
Pokouíte se o pøístup k síové promìnné pomocí indexu tvoøeného
promìnnou. Tato konstrukce není u síových promìnných dovolena z dùvodu
sdílení tìchto promìnných ostatními automaty na lince.
Pouijte konstantní index síové promìnné.
Nedovolené pouití typu string
Typ string je moné pouít pouze jako parametr do procedury, funkce nebo
systémové funkce napø. Display.
Opravte pouití typu string.
$
SIMPLE V4 - popis jazyka
03.2004
94 stran
$
Nedeklarovaná poloka struktury
Ve zdrojovém textu procujete s polokou struktury, která není deklarována.
Nejèastìji se jedná o pøeklep.
Opravte neznámé jméno poloky na odpovídající jméno uvedené v deklaraci.
Identifikátor neoznaèuje typ
V zápisu deklarace je pouito jméno oznaèující typ promìnné (patrnì
uivatelský typ), které ve skuteènosti nebylo deklarováno jako typ promìnné.
Èasto se jedná o pøeklep.
Ovìøte jméno typu promìnné.
Vícenásobné pouití hodnoty v oznaèení varianty
V konstrukci programového pøepínaèe "switch" byla nalezena ta samá
hodnota varianty tj. konstanta za klíèovým sloven "case" nìkolikrát.
Odstraòte vícenásobné oznaèení varianty.
Návìtí 'case' musí být typu int
V konstrukci varianty programového pøepínaèe jste pouili výraz nebo
konstanty, které není celoèíselného typu. Patrnì je uveden symbol nebo
hodnota zapsaná ve tvaru reálného èísla.
Opravte zápis varianty programového pøepínaèe.
Nedostupný kód
V konstrukci programového pøepínaèe jste umístili konkrétní variantu tj.
klíèové slovo "case" a za variantu obecnou oznaèenou klíèovým slovem
"default". Vzhledem k rozvoji programového pøepínaèe do výsledného kódu
bude takto pouitá konkrétní varianta programovì nedostupná a kód který
oznaèuje bude neproveditelný.
Opravte konstrukci programového pøepínaèe.
Absolutní adresa musí leet v datech
Jedná se o chybu vìtinou na pravé stranì direktivy "absolute". Zde jste
pouili symbol, který je deklarován jako konstantní nebo symbol oznaèuje
jméno funkce. Výsledkem je, e se pokouíte adresovì pøekrýt promìnnou,
která bude ve výsledném pøekladu umístìna do kódové pamìti.
Opravte zápis tak, aby absolutní adresace smìøovala do pamìti dat tj. pouijte
promìnné deklarované bez klíèového slova "const".
$
SIMPLE V4 - popis jazyka
03.2004
94 stran
$
Nesouhlas délek promìnných
Chyba se vyskytuje v direktivì "absolute" v pøípadì, e promìnná vlevo od
klíèového slova má vìtí rozsah (zabere vìtí poèet byte) ne promìnná
vpravo od klíèového slova. Rozsah promìnných vlevo a vpravo od klíèového
slova "absolute" musí být buï totoný a nebo promìnná vlevo musí mít
rozsah mení ne promìnná vpravo.
Upravte typy promìnných tak, aby vyhovìly zmínìným poadavkùm.
Absolutní adresa je mimo rozsah promìnné
Pøi pouití direktivy "absolute" jste pouili na levé stranì promìnnou její
velikost v pamìti pøesáhne rozsah promìnné uvedené vpravo. Nejèastìji
chyba vzniká pøi pouití výrazu pro posun adresy. Mìjme napø. promìnnou
stav (longint) a promìnnou poslední_byte (byte). Tuto promìnnou chceme
pøekrýt s nejniím byte promìnné stav. Pouijeme direktivu "absolute" a
zapíeme mapování ve zdrojovém textu takto:
var posledni_byte absolute stav + 4
Zde vznikne chyba, protoe zápis ve skuteènosti specifikuje adresu mapování
mimo rozsah promìnné stav. Správný zápis musí vypadat takto:
var posledni_byte absolute stav + 3
Opravte zápis direktivy absolute.
Nedefinovaná adresa identifikátoru
Chyba se vyskytuje s velkou pravdìpodobností pøi vícenásobném pouití
direktivy "absolute". Chyba mùe vzniknout napøíklad v tomto pøípadì:
var word stav
var byte hi_b absolute lo_b + 1
var byte lo_b absolute stav
Správný zápis tohoto pøípadu je:
var word stav
var byte lo_b absolute stav
var byte hi_b absolute lo_b + 1
Opravte pouití direktivy "absolute".
Nedovolené pouití typu safe v absolutní adrese
V direktivì "absolute" jste pouili bezpeèný typ promìnné vpravo od klíèového
slova "absolute". Ovem na bezpeènou promìnnou nelze mapovat jinou
promìnnou. Opaèný tvar direktivy, (bezpeèná promìnná stojí vlevo), je
povolen. V tomto pøípadì mapujete bezpeènou promìnnou do pamìového
prostoru jiné promìnné a pøekladaè to respektuje. Pouití direktivy "absolute"
pro bezpeèné typy promìnných se vak nedoporuèuje
Opravte zápis direktivy "absolute".
$!
SIMPLE V4 - popis jazyka
03.2004
94 stran
$!
Vyèerpán datový adresní prostor
Zdrojový text obsahuje pøíli mnoho deklarací promìnných. Je nutné uváit,
e i lokální promìnné funkcí jsou alokovány separátnì do pamìti dat tj.
nedochází k jejich pøekrývání.
Snite rozsah a mnoství deklarovaných promìnných.
Vyèerpán kódový adresní prostor
Rozsah programu pøekroèil rozsah kódové pamìti. Program mùete
optimalizovat odstranìním nepouitých pøetìovaných funkcí nebo napø.
vyuitím konstrukce programového pøepínaèe (switch) místo vícenásobného
podmínìného pøíkazu if.nebo vyputìním nepotøebných stringù.
Zkrate a optimalizujte program. Popøípadì zolte typ automatu s vìtím
rozsahem kódové pamìti.
Vyèerpán datový prostor pracovních registrù modelu
Programovací model pøekladaèe obsahuje tzv. pracovní registry tj. jakési
skryté promìnné, které vyuívá pøekladaè pøi rozvoji algoritmù pro výpoèet
jednotlivých výrazù uvnitø PLC. Poèet tìchto registrù byl pøekroèen a
oznaèený výraz není moné v cílovém PLC za podmínek daných
programovacím modelem vypoèítat.
Zjednodute oznaèený výraz.
Vyèerpán datový prostor funkce pro uloení pracovních registrù modelu
Ve volané funkci dolo k pøekroèení velikosti datového prostoru vyhrazeného
pro uloení pomocných výsledkù z pracovních registrù. Volání funkce je
zaøazeno do pøíli sloitého výrazu, na jeho vyhodnocení je tøeba v cílovém
PLC více registrù ne je specifikováno v programovacím modelu.
Zjednodute výraz a volání funkce. Pouijte napøíklad pomocnou promìnnou
na uloení mezivýsledku.
Chyba generátoru kódu
ádná z tìchto chyb by nemìla u uivatele vzniknout.
Jedná se o chyby algoritmu pøekladaèe - v èásti tzv. generátoru kódu. Pøekladaè
má zabudovány samokontrolní mechanismy, které tyto chyby identifikují. Proto u níe
uvedených chyb není uvedeno øeení, je tøeba vdy kontaktovat firmu MICROPEL, popsat
situaci v ní k chybì dolo a nejlépe zaslat zdrojový text, který chybu zpùsobil.
Pro rychlou pomoc doporuèujeme napø. zkusit lokalizovat èást zdrojového textu
zpùsobující problém a tu pøepracovat.
$"
SIMPLE V4 - popis jazyka
03.2004
94 stran
$"
Není definován poadovaný typ parametru
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Neznámý kód binární operace
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Neznámý kód unární operace
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Nenalezeno pravidlo pro generovaní kódu
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Neznámý kód operace s ukazatelem
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Neexistující kód operace
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Neznámý kód adresovacího módu
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Nelze souèasnì naplnit modifikátor FC a AM
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Neznámý datový typ
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Neznámý typ zástupce parametru
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Pøedpis pro generování pøíkazu nenalezen
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Neznámý kód operace porovnání
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Neznámý kód operace s bity
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
$#
SIMPLE V4 - popis jazyka
03.2004
94 stran
$#
Hodnota operace rotace mimo meze
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Nìkteré odkazy pro skoky nenalezeny
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Není definován parametr skoku
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Nenalezen mikrokód [0x????X] pro generování pøíkazu [typ]
Chyba v generátoru strojového kódu. K této chybì by nemìlo nikdy dojít.
Compiler fail in source [file] [line]
Jedná se o chybu fatální chybu v kódu pøekladaèe nebo generátoru. Podaøilo
se vám vykonstruovat takový typ zdrojového textu, který je po formální
stránce správnì tj. syntaxe a sémantika jsou v poøádku a pøesto si pøekladaè
nebo generátor nedokázal se zdrojovým textem poradit. Chyba oznaèuje
soubor zdrojového textu pøekladaèe a generátoru vèetnì øádku na nìm k
chybì dolo. Z hlediska pokud mono rychlého odstranìní chyby èi závady je
nutné kompletní text chyby poznamenat a uschovat v pùbvodní podobì
zdrojový text pøi jeho pøekladu k chybì dolo.
V tomto pøípadì je nutné zaznamenat celý text chyby a konzultovat problém s
firmou MICROPEL.
$$
SIMPLE V4 - popis jazyka
03.2004
94 stran
$$
6.
Syntaktické diagramy
Syntaktické diagramy jsou orientované grafy popisující syntaxi jazyka v
grafickém tvaru. Jsou dobrým pomocníkem pøi zápisu sloitìjích konstrukcí a pøi
odhalování chyb. V následujících odstavcích jsou uvedeny syntaktické diagramy jazyka
SIMPLE V4 vèetnì jejich komentáøù. Základní filozofie grafické podoby diagramù spoèívá v
nìkolika pravidlech. V kulatých a elipsových rámeècích jsou malými písmeny uvedeny
základní symboly jazyka. Míníme tím symboly, které jsou ji koneèné a nejsou rozvíjeny
dalími diagramy.
V obdélnících se zakulacenými rohy jsou velkými písmeny uvedeny odkazy na
navazující syntaktický diagram. U kadého diagramu je uvedeno vdy jeho jméno pouívané
pro oznaèení právì takového odkazu. Struktura uvedených syntaktických diagramù je
implementována v pøekladaèi a jakékoli odchýlení v zápisu programových konstrukcí od
uvedených diagramù vede ke generování chybového hláení.
Program
Program, který je napsán v jazyce SIMPLE V4 se skládá ze seznamu deklarací a
pøíkazù, pøièem tento seznam je ukonèen klíèovým slovem end. Ze syntaktického diagramu
tedy vidíme, e po napsání seznamu deklarací a pøíkazù musíme program ukonèit klíèovým
slovem end. Vzhledem k tomu, e diagram obsahuje pouze jediný prvek uvedený v
obdélníku se zakulacenými rohy, mùeme pokraèovat z uvedeného diagramu pouze jedním
PROGRAM
SEZNAM DEKLARACÍ A PØÍKAZU°
end
smìrem a to do diagramu seznamu deklarací a promìnných
Seznam deklarací a pøíkazù
Diagram je tvoøen dvìma sekcemi a to seznamem deklarací a seznamem
promìnných. Dále je patrné, e seznam deklarací mùe být následován posloupností pøíkazù
a nebo také nemusí.
$%
SIMPLE V4 - popis jazyka
03.2004
94 stran
$%
Za seznamem deklarací a posloupností pøíkazù mùeme diagram buï opustit a
vrátit se do syntaktického diagramu programu a nebo pokraèovat po návratové linii a vrátit
se tak opìt pøed seznam deklarací a posloupnost pøíkazù.
SEZNAM DEKLARACÍ A PØÍKAZU°
SEZNAM DEKLARACÍ
SEZNAM PØÍKAZU°
Seznam deklarací
Seznam deklarací je tvoøen sekcí konstant, typù, tabulek, promìnných a
deklaracemi funkcí a podprogramù. Zpìtná cesta diagramu naznaèuje monost vrátit se z
konce diagramu po zápisu jeho libovolné èásti a pokraèovat dalím zápisem a to opìt
libovolné èásti.
SEZNAM DEKLARACÍ
SEKCE KONSTANT
SEKCE TYPU°
SEKCE TABULEK
SEKCE PROMÌNNÝCH
DEKLARACE FUNKCE
DEKLARACE PODPROGRAMU°
Sekce konstant
Sekce konstant se v jazyce pro skládá z uvozujícího slova const a deklarace
konstant, za kterou mùe být po uvedení oddìlovaè ":" mùe následovat dalí deklarace
konstant
SEKCE KONSTANT
const
DEKLARACE KONSTANT
,
$&
SIMPLE V4 - popis jazyka
03.2004
94 stran
$&
Deklarace konstant
Deklarace konstant se skládá z identifikátoru , který mùe být náskledován
konstantním výrazem za znakem "=". Souèasnì mùe být pouiro oddìlovaèe ","
pouívaného pøi deklaracích posloupností konstant.
Pøíklad
const A = 5,B = 1,,,C,,D
DEKLARACE KONSTANT
=
IDENTIFIKÁTOR
VÝRAZ
Sekce typù
Sekce typù musí zaèínat klíèovým slovem "type". Po tomto slovì musí být
uveden identifikátor a za ním typ uvozený znakem "=". Poté mùe být zápis sekce typù
ukonèen nebo mùeme v zápisu po uvedení oddìlovaèe ":" pokraèovat.
°
SEKCE TYPU
type
IDENTIFIKÁTOR
=
TYP
:
TYP
Typ
byte
Syntaktický diagram
popisuje oznaèení typu v øadì
programových konstrukcí a mimo jiné
i v sekci typù.
int
safe
word
longint
Pøíklad
longword
type
muj = int[3]
tvuj = safe int
jeho = byte
float
bit
string
IDENTIFIKÁTOR TYPU
TYP
$'
SIMPLE V4 - popis jazyka
[
03.2004
KONST. VÝRAZ
94 stran
]
$'
Sekce tabulek
Sekce tabulek musí být uvozena klíèovým slovem table za ní následuje
deklarace tabulky. Po uvedení deklarace tabulky buï sekci tabulek ukonèíme a nebo
pokraèujeme dalí deklarací.
SEKCE TABULEK
table
DEKLARACE TABULKY
:
Deklarace tabulky
Deklaraci tabulky zaèínáme pouitím syntaktického diagramy Typ. Za uvedením
typu pokraèujeme identifikátorem a poté dokonèujeme deklaraci tabulky v diagramu
inicializaèního seznamu. Mezi identifikátorem tabulky a inicializaèním seznamem uvedeme
znak "=".
DEKLARACE TABULKY
TYP
IDENTIFIKÁTOR
=
INICIALIZAÈNÍ SEZNAM
Inicializaèní seznam
Inicializaèní seznam uzavíráme do kulatých závorek. U tohoto diagramu si
povimnìme, e v inicializaèním seznamu mùeme uvést buï výraz nebo dalí inicializaèní
seznam. Dalí inicializaèní seznam je vak moné pouít tehdy, kdy to odpovídá typu
tabulky. Jednotlivé poloky seznamu oddìlujeme èárkami.
Pøíklad
a)
table int[3] moje = (10,(20,30))
b)
table int[2][3] moje = ((10,20,30),(1,2,3))
INICIALIZAÈNÍ SEZNAM
(
INICIALIZAÈNÍ SEZNAM
)
VÝRAZ
,
%
SIMPLE V4 - popis jazyka
03.2004
94 stran
%
Sekce promìnných
Syntaktický zápis sekce promìnných je tvoøen deklaracemi promìnných
oddìlených oddìlovaèen ":".
SEKCE PROMÌNNÝCH
var
DEKLARACE PROMÌNNÝCH
:
Deklarace promìnných
Pro deklaraci promìnných pouijeme jeden ze dvou moných diagramù podle
kontextu, ve kterém deklaraci uvádíme. Oba diagramy by bylo moné slouèit do jednoho,
nicménì jsou pro pøehlednost rozkresleny. Jedná se o diagram pro lokální deklaraci
promìnné, který se od globální deklarace promìnné lií pouze vìtví inicializaèního výrazu
pro automatické generování úvodní inicializaèní sekvence pøíkazù. Deklarace promìnných
mùe obsahovat i vìtev absolute. Tato vìtev je urèena pro pøekrývání promìnné. Konstantní
výraz v tomto pøípadì znamená fyzickou adresu, zatímco pøístup k hodnotì oznaèuje
diagram pomocí nìho mùeme pøekrytí promìnných zapsat symbolicky.
DEKLARACE PROMÌNNÝCH - globální
TYP
IDENTIFIKÁTOR
absolute
KONSTANTNÍ VÝRAZ
PØÍSTUP K HODNOTÌ
DEKLARACE PROMÌNNÝCH - lokální
TYP
IDENTIFIKÁTOR
absolute
=
VÝRAZ
KONSTANTNÍ VÝRAZ
PØÍSTUP K HODNOTÌ
%
SIMPLE V4 - popis jazyka
03.2004
94 stran
%
Pouití direktivy 'absolute'
Direktiva absolute umoòuje mapování jednotlivých promìnných na stejnou
adresovou lokaci. Pøestoe v pøedchozím pøíkladì odpovídá její pouití syntaktickému
diagramu, je nutné uvést nìkterá omezení vyplývající z funkce této direktivy.
Direktiva pracuje vlastnì s konstatním výrazem tj. s výrazem, který musí být
vyèíslitelný ji v prùbìhu pøekladu. Tento výraz musí pøedstavovat adresu. Jedná se tedy o
aritmetický výraz, který pracuje s konstantami typu adresa. Typ adresa není obecnì v jazyce
Pro podporován a vystupuje zde èásteènì ve skryté formì. Pøíkladem mùe být pøedávání
promìnné do podprogramu nebo funkce tzv. odkazem. Druhým pøíkladem mùe být právì
direktiva absolute. Identifilátory promìnných, které vystupují ve výrazech na pravé stranì
direktivy absolute, nyní nepovaujeme za promìnné obsahující nìjakou hodnotu, ale díváme
se na nì jako na symboly oznaèující základní adresu a rozsah pamìti potøebný k uloehí
hodnoty daného typu. Z uvedeného napøíklad plyne to, e promìnná " pole" z pøedchozího
pøíkladu má pøidìlenu poèáteèní (bázovou adresu) a poèínaje touto adresou obsadí v datové
pamìti automatu ètyøi byte. Obdobnì potøebujeme ètyøi byte k uloení hodnoty typu longint
tj. hodnoty promìnné "výstup". Pokud tedy pouijeme zápis z pøedchozího pøíkladu
var byte[4] pole
var longint vystup absolute pole
je ve v poøádku, protoe obì promìnné potøebují stejný rozsah datové pamìti.
Zápis a mapování promìnné " int j" z pøedchozího pøíladu je také v poøádku,
nebo promìnná "int j", potøebuje k uloení své hodnoty pouze 2 byte a tudí se tato
promìnná vejde do pamìti vyhrazené promìnné pole. Obdobnì mùeme pouít zápis:
nebo
int j absolute pole[1]
int j absolute pole[2]
Pozor vak na zápis
int j absolute pole[3]
Pøestoe není v uvedeném zápisu syntaktická chyba, neprobìhne pøeklad bez
chyb a uvedený zápis bude produkovat chybu nesouhlasu velikosti promìnných. Dùvod je
evidentní. Promìnná "int j" pøesáhla svým spodním byte rozsah promìnné pole.
Pøi pouití direktivy absolute mùeme ve výrazu na pravé stranì pouít i
aritmetický výraz. Výraz je vak omezen pouze na souèet a bázovou adresu promìnné.
Správnì je napøíklad výraz:
int k absolute vystup + 2
patnì naopak
int k absolute pole[0] + 2
%
SIMPLE V4 - popis jazyka
03.2004
94 stran
%
Správnì je výraz
int k absolute pole + 2
Ostatní typy výrazù jsou sice syntakticky správnì, ale pøekladaè je nevyhodnotí.
Posledním povoleným typem výrazu je "pøístup k hodnotì". Pouití tohoto typu
výrazu má smysl pøi pøekrývání promìnné bity. Z pøedchozího pøíkladu mùeme pouít zápis
vyjadøující skuteènost, e bitová promìnná je mapována na nejvíce významný bit promìnné
výstup, která je typu "longint".
bit msb absolute vystup ? 7
Èíslo bitu 7 je skuteènì správnì, protoe bity jsou u èíslovány od niích adres k
vyím a od niích bitù v byte k vyím. Nejménì významný bit mùe být mapován
výrazem
bit lsb absolute vystup ? 24
Pøístup k hodnotì
Pøístup k hodnotì mùe být identifikátor nebo jak vyplývá z dalího rozboru
odkaz na poloku pole nebo na èíslo bitu. Zde se dá uvést, e syntaktickému diagramu sice
odpovídá následující zápis pro promìnou a typu word
a?3?2
nicménì zápis se dostává do logického sporu nebo se pøi druhém odkazu,
odkazujeme na druhý bit promìnné typu bit (tj. první odkaz a?3) a ten jak známo není v
tomto pøípadì kde vzít.
PØÍSTUP K HODNOTÌ
IDENTIFIKÁTOR
%!
PØÍSTUP K HODNOTÌ
[
PØÍSTUP K HODNOTÌ
?
SIMPLE V4 - popis jazyka
KONSTATNÍ VÝRAZ
]
ÈÍSLO
03.2004
94 stran
%!
Deklarace funkce
Skládá se z klíèového slova "function" za ním následuje identifikátor. Za
identifikátorem je moné uvést formální parametry pokud jsou poadovány. Dále následuje
seznam deklarací a pøíkazù. Deklaraci funkce ukonèujeme klíèovým slovem return.
Následuje výraz stejného typu jakého je deklarovaná funkce
DEKLARACE FUNKCE
function
IDENT.
FORMÁLNÍ PARAMETRY
°
SEZNAM DEKLARACÍ A PØÍKAZU
return
VÝRAZ
Formální parametry
Formální parametry uzavíráme do okrouhlých závorek. Jednotlivé rùzné typy
promìnných oddìlujeme znakem ":". stejné typy promìnných mùeme uvést za sebou a
pouít oddìlovaèe ",".
Pøíklad
Deklarace funkce pocitej.
function int pocitej (int a,b)
return (a+b)
nebo
function int pocitej (int a : int b)
return (a+b)
FORMÁLNÍ PARAMETRY
(
TYP
const
IDENT.
)
,
var
:
%"
SIMPLE V4 - popis jazyka
03.2004
94 stran
%"
Deklarace procedur
Deklarace procedur je po formální stránce totoná s deklarací funkcí. Odlinost
je pouze v klíèovém slovì subroutine a v tom, e za klíèovým slovem return nesmí být
uveden výraz.
DEKLARACE PROCEDURY
subroutine
IDENT.
FORMÁLNÍ PARAMETRY
°
SEZNAM DEKLARACÍ A PØÍKAZU
return
Posloupnost pøíkazù
Posloupnost pøíkazù je tvoøena pøíkazy oddìlenými buï znakem ":" a nebo
ukonèovaèem øádky (znaky CRLF, klávesa Enter).
PØÍKAZ
:
CR
POSLOUPNOST PØÍKAZU
Pøíkaz
Je tvoøen jednoduchým pøíkazem nebo sloeným pøíkazem.
PØÍKAZ
JEDNODUCHÝ PØÍKAZ
SLOENÝ PØÍKAZ
%#
SIMPLE V4 - popis jazyka
03.2004
94 stran
%#
Jednoduchý pøíkaz
Jednoduchý pøíkaz mùe být pøiøazovací pøíkaz, volání podprogramu (procedura
nebo funkce), pøíkaz exit (pøedèasné ukonèení procedury nebo funkce), pøíkaz vykøièník a
nebo nová obdoba syntaxe pro zápis bitové negace promìnné.
JEDNODUCHÝ PØÍKAZ
PØIØAZOVACÍ PØÍKAZ
VOLÁNÍ PODPROGRAMU
exit
VÝRAZ
VÝRAZ
'
VÝRAZ
!
Pøiøazovací pøíkaz
Je tvoøen identifikátorem, znakem "=" za ním následuje výraz.
PØIØAZOVACÍ PØÍKAZ
=
IDENT.
VÝRAZ
Volání podprogramu a funkce
Volání podprogramu i funkce je zahájeno identifikátorem podprogramu. Za
identifikátorem následují výrazy, které se mají pøedat na místa formálních parametrù. Výrazy
jsou oddìlené èárkou a uzavøené v okrouhlých závorkách. Volání funkce a podprogramu je
tedy totoné. Podprogram se od funkce lií tím, e nevrací ádnou hodnotu. Rozdíl tedy
není po formální stránce ve volání podprogramu nebo funkce ale v tom, kde je toto volání
pouito. Volání funkce mùe být pouito ve výrazu. Volání podprogramu nikoli.
VOLÁNÍ PODPROGRAMU A FUNKCE
IDENT.
(
)
VÝRAZ
,
%$
SIMPLE V4 - popis jazyka
03.2004
94 stran
%$
Pøíklad
Volání funkce pocitej
var int k
k=1
k = pocitej(k,1)
Pøíklad
Pouití pøíkazu exit v modifikované funkci pocitej
function int pocitej (int a,b)
if (a > b) then exit (a-b)
return (b-a)
Sloený pøíkaz
Sem poèítáme pøíkaz begin-end, pøíkaz øádka a podmínìný pøíkaz
SLOENÝ PØÍKAZ
BEGIN-END
ØÁDKOVÝ PØÍKAZ
PODMÍNÌNÝ PØÍKAZ
Pøíkaz begin-end
Pøíkaz slouí k oznaèení bloku pøíkazù, které se mají vykonat spoleènì. Typické
vyuití pøíkazu je v konstrukci podmínìných pøíkazù.
BEGIN-END
begin
LOGICKÝ VÝRAZ
end
Podmínìný pøíkaz
Podmínìný pøíkaz tvoøí podmínka uvozená klíèovým slovem if a ukonèená
klíèovým slovem then. Podmínku mùe tvoøit pouze logický výraz. Za klíèovým slovem then
nesmí být pouit pøechod na novou øádku (dùvodem pro toto omezení je zpìtná
kompatibilita zdrojových textù) a musí za ním následovat sloený pøíkaz. Nepovinou èástí
%%
SIMPLE V4 - popis jazyka
03.2004
94 stran
%%
pøíkazu je èást else. Pokud je vak uvedena musí za klíèovým slovem else následovat pøíkaz.
CR
PODMÍNÌNÝ PØÍKAZ
if
then
LOG. VÝRAZ
CHYBA
SLOENÝ PØÍKAZ
else
PØÍKAZ
Pøíklad
Zápis sloeného pøíkazu
if a > b and a < c then begin
a = c + b
b = b + 1
end
else
b = 0
Pøíkaz øádka
Je zaveden z dùvodu zpìtné kompatibility zdrojových textù s verzí SIMPLE V2.
JEDNODUCHÝ PØÍKAZ
:
CR
PØÍKAZ ØÁDKA
Logický výraz
Logický výraz pouíváme v podmínìném pøíkazu mezi klíèovými slovy if a then.
Podle pravdivosti logického výrazu se rozhodujeme, kterou vìtev podmínìného pøíkazu
budeme vykonávat. V logickém výrazu nesmí být pouit pøíkaz. Logický výraz se skládá z
jednotlivých termù oddìlených klíèovým slovem or.
LOG. TERM
LOG. VÝRAZ
%&
or
SIMPLE V4 - popis jazyka
03.2004
94 stran
%&
Logický term
Logický term se skládá z logických faktorù oddìlených klíèovým slovem and.
LOG. FAKTOR
and
LOG. TERM
Logický faktor
Logický faktor se skládá z operátoru not, výrazu, dvojice výrazù spojených
relaèním operátorem a nebo z logického výrazu uvedeného v okrouhlých závorkách
LOG. FAKTOR
not
LOG. FAKTOR
VÝRAZ
RELAÈNÍ OP.
(
VÝRAZ
LOGICKÝ VÝRAZ
)
Pøíklad
Zápis logického výrazu
a > b and a < c
Výraz
Výraz se skládá z termù oddìlených operátory + a -.
+
TERM
VÝRAZ
%'
+
-
SIMPLE V4 - popis jazyka
03.2004
94 stran
%'
Term
Term se skládá z faktorù oddìlených operátory *, /, %, >> a <<.
FAKTOR
TERM
*
/
%
>>
<<
Faktor
Faktor mùe být tvoøen bitovì negovaným faktorem, literály, voláním funkce,
pøístupem k hodnotì nebo výrazem uzavøeným v okrouhlých závorkách
FAKTOR
'
INT-LITERÁL
FLOAT-LITERÁL
STRING-LITERÁL
CHAR-LITERÁL
VOLÁNÍ FUNKCE
PØÍSTUP K HODNOTÌ
(
VÝRAZ
)
FAKTOR
Pøíklad
-a + b * ( c + d ) / c'
Knihovna
Pro úplnost uveïme jetì syntaktický diagram pro vloení knihovny do
zdrojového textu. Knihovnu vloíme pomocí klíèového slova $library.
KNIHOVNA
$library
&
JMÉNO SOUBORU
SIMPLE V4 - popis jazyka
03.2004
94 stran
&
Vkládání souborù
Vkládání souborù je obdobou pouití knihovny ve zdrojovém textu ovem s tím
rozdílem, e zdrojový text je pouit pøímo v textové formì zatímco knihovna v binárním
pøedzpracovaném tvaru. Pro vkládání souboru je té pouito na rozdíl od knihovny
klíèového slova $include.
VKLÁDÁNÍ SOUBORU
$include
JMÉNO SOUBORU
Jméno souboru
Jméno souboru následuje za direktivou $include (pro vkládání souborù) nebo za
direktivou $library (pro vkládání knihovny). Jméno souboru vèetnì pøípadné absolutní èi
relativní cesty uvádíme do okrouhlých závorek, tak jak odpovídá syntaktickému diagramu.
JMÉNO SOUBORU
(
cesta
soubor
)
Cesta v syntaktickém diagramu naznaèuje jednu ze tøí moných variant, kde
pøekladaè hledá soubor uvedeného jména. Situaci naznaèuje následující výèet sestavený
podle priority cest urèených hledání souboru.
&
a)
Absolutní cesta k souboru (je-li zadána)
b)
Cesta je brána jako relativní vùèi umístìní souboru v nìm je vládání souboru
nebo knihovny pouito
c)
Cesta je brána jako relativní vùèi cestì k hlavnímu souboru projektu èi pøekladu
d)
Cesta je brána jako relativní vùèi adresáøi v nìm je pøekladaè nainstalován tj.
vùèi domovskému adresáøiprogramu StudioWin.
SIMPLE V4 - popis jazyka
03.2004
94 stran
&
7.
Vstupy/výstupy, speciální registry
Jazyk SIMPLE V4 pøebírá z verze SIMPLE V2 kompletní soubor vech
pøeddefinovaných názvù vstupù a výstupù i speciálních funkèních promìnných.
Rovnì chování vech speciálních funkcí zajiovaných v automatu je identické s
verzí SIMPLE V2.
Kromì bìných prostøedkù pro práci se vstupy, výstupy a vnitøními promìnnými
má SIMPLE jetì tzv. speciální funkce. Jsou to vnitøní èasovaèe, reálný èas ,informace o
rychlosti systému ....
Pro realizaci speciálních funkcí se vyuívají nìkteré bity ze sady B0...B127 a
nìkteré registry ze sady W0...W127. Vechny promìnné, které mají speciální funkce, mají
napevno pøiøazeny symbolické názvy. Doporuèujeme vude v programu pouívat tyto
symboly - klesá potom monost omylù.
I kdy vìtina bitù B a registrù W je zatím neobsazena, není vhodné je v
programu vyuívat jako obecné promìnné (z dùvodù kompatibility s dalími verzemi
pøekladaèe SIMPLE do budoucna).
7.1
RESET
Je speciální funkèní bit, který je automaticky nastaven vdy po zapnutí automatu
a té vdy po sputìní programu. Tento bit lze vyuít v programu na poèáteèní inicializace a
pak jej vynulovat, nebo se mùe pouít i jinak, je vak tøeba poèítat s tím, e po kadém
restartu automatu se tento bit nastaví.
7.2
Rychlost systému
Pøi bìhu programu v automatu je prùbìnì aktualizována promìnná SPEED, ve
které je uveden poèet prùchodù celým programem (tedy de-facto poèet obrátek hlavní
smyèky) za sekundu. V aplikacích nároèných na rychlost odezvy lze napø. tento registr
testovat a kontrolovat, zda se regulaèní program nedostává do èasového skluzu.
7.3
Èasovaèe
Èasovaèe jsou reprezentovány speciálními funkèními registry (typu WORD) se
symbolickými názvy T0 a T7. Vech osm èasovaèù je zcela nezávislých a se shodnými
funkcemi. Kadý èasovaè lze kdykoliv pøeèíst, anebo do nìj kdykoliv zapsat (se zapsanou
hodnotou pak opìt probíhá stejný proces èítání).
&
SIMPLE V4 - popis jazyka
03.2004
94 stran
&
Èinnost kadého èasovaèe souvisí se samostatnou esticí funkèních bitù TENn,
TPAn, TOEn, TOFn, TDMn, kde n = 0~7 specifikuje pøísluný èasovaè. Tedy napø. èasovaè
T4 má svoji sadu øídících bitù TEN4, TPA4, TOE4, TOF4, TDM4. Funkci tìchto bitù
naznaèuje následující obrázek.
Èasovaè T a jeho øídící bity :
10 ms
0
0
1
1
T
ÈÍTAÈ 16 bitù
0
TOF
1
1 sec.
TPA
TEN
TD M
TOE
TEN
povolení èítání èasovaèe : TEN=0 èasovaè stojí, TEN=1 èasovaè èítá
TPA
zaøazuje pøeddìliè 1/100 : TPA=0 èasovaè èítá po 10ms, TPA=1 èítá po 1 s
TOE
povoluje èítání pøes pøeteèení
TOE=0
èasovaè zastaví na 65535 (èítá-li nahoru), nebo na 0 (èítá-li dolù)
TOE=1
èasovaè po dosaení meze nezastavuje, ale pøetéká pøes maximální
rozsah èísla (pøi èítání nahoru 65535->0, pøi èítání dolù 0->65535)
TOF
informace o pøeteèení èasovaèe (musí být nulován programem)
TDM
smìr èítání èasovaèe : TDM=0 èasovaè èítá nahoru, TDM=1 èítá dolù
7.4
Reálný èas
V jazyce SIMPLE mohou být programovány automaty systému PES, pokud mají
osazen obvod reálného èasu (modifikace R). V tomto pøípadì jsou uivateli pøístupné ve
speciálních funkèních registrech údaje o sekundách, minutách a hodinách reálného èasu.
Kromì toho jsou k dispozici i registry s informací o dnech v mìsíci, o mìsících, letopoètu a
dnech v týdnu. Hodinové údaje jsou v 24 hodinových cyklech. Kalendáø nectí pøestupné
roky. Dny v týdnu nejsou závislé na datu, èili se jedná o nezávislý èítaè od 1 do 7. Je tedy na
uivateli, kterým dnem bude zaèínat týden. Provede-li se vak nastavení podle systémového
èasu osobního poèítaèe pomocí programu SETPES, potom týden zaèíná nedìlí (Ne=1,
Po=2, Út=3...). Funkèní bit HOLD slouí k zachycení èasu. Po nastavení tohoto bitu se údaje
v èasových registrech nemìní, èas vak nadále bìí na pozadí. Po vynulování tohoto bitu se
opìt v registrech objeví údaje odpovídající reálnému èasu. Nastavením bitu CLRSEC se
zaokrouhluje reálný èas na celé minuty. Je vynulován obsah sekundového registru, a pokud
&!
SIMPLE V4 - popis jazyka
03.2004
94 stran
&!
je pøed nulováním obsah sekundového registru vìtí ne 29, je zároveò inkrementován
obsah minutového registru. Tento funkèní bit je po zaokrouhlení èasu automaticky nulován.
Promìnné vyhrazené pro reálný èas:
SECOND
MINUTE
HOUR
DAY
WEEK
Funkèní bity:
MONTH
YEAR
HOLD
CLRSEC
Sekundy reálného èasu
Minuty reálného èasu
Hodiny reálného èasu
Den v mìsíci
Den v týdnu
Pondìlí=2....)
Kalendáøní mìsíc
Roky ve století
(0 ... 59)
(0 ... 59)
(0 ... 23)
(1 ... 31)
(1 ... 7, Nedìle=1,
(1 ... 12)
(0 ... 99)
Vzorkování reálného èasu
HOLD=0
registry jsou neustále aktualizovány
HOLD=1
registry "drí" poslední hodnoty
Zaokrouhlení na minuty
UPOZORNÌNÍ :
Bity HOLD a CLRSEC nedoporuèujeme v nových programech vyuívat, nebo v dalích
verzích pøekladaèù a operaèních systémù v PLC ji nemusí být podporovány.
Pozn.: Pøi ètení registrù reálného èasu na automatech, kde není obvod reálného
èasu osazen, je tøeba poèítat s tím, e v registrech budou nesmyslné hodnoty.
Údaj letopoètu je pouze dvoumístný a obsáhne tedy pouze rozsah jednoho
století. Je-li z nìjakých dùvodù tøeba obsáhnout vìtí úsek, je nutné naprogramovat
adekvátní softwarovou podporu pro poèítání století.
Pro inspiraci je zde pøíklad :
D10 # TmpYear
D11 # CENTURY
subroutine PocitejStoleti
preteceni roku pres nulu
if (TmpYear > YEAR) then
TmpYear = YEAR
return
; detekujeme
CENTURY = CENTURY+1
Pozn.: Promìnná CENTURY poèítá století, ale protoe se nikde neinicializuje (a ani to nelze,
protoe proces èítání století nesmí být naruen vypínáním a zapínáním automatu) je tøeba ji
jednorázovì nastavit (nejlépe pøi nastavování data a roku).
&"
SIMPLE V4 - popis jazyka
03.2004
94 stran
&"
7.5
A/D pøevodník
U automatù PES s analogovými vstupy se hodnoty tìchto vstupù objevují v
promìnných I0, I1 ..... atd.
Rozsah tìchto hodnot mùe být obecnì 0...65535, jednotky v kterých je daná
velièina mìøena a její max. rozsah je dán typem analogového vstupu (tyto údaje jsou vdy
uvedeny v technických údajích u jednotlivých typù automatù resp. modulù).
U standardních analogových vstupù je provádìna automatická digitální filtrace.
Krok jednoho mìøení pøes vechny vstupy trvá zhruba 700 ms. Analogové vstupy pro
mìøení odporu mají tuto èasovou konstantu jetì delí. Aktuální hodnoty jsou do
promìnných I0..Ix pøepsány vdy na zaèátku programové smyèky a v celém prùbìhu
programu smyèkou se nemìní.
U základních analogových vstupù (první 4 u MPC300, prvních 6 u PES-K1 a
PES-K10, 6 vstupù u M66) je implementována monost kalibrace analogových vstupù. K
tomuto úèelu slouí speciální funkèní promìnné CALIB0 a CALIB7. Po resetu programu je
v tìchto promìnných vdy hodnota 10000. Tato hodnota je chápána jako 1.0000 - a mùe
být mìnìna uivatelským programem od 0.0 do 1.6000 (zápisem hodnot 0..16000 do
promìnných CALIB0 - CALIB7).
Tato hodnota funguje jako násobná pro kadý kanál, lze tedy chápat pøevod
kadého kanálu I N takto :
IN = (nominální hodnota analog. vstupu) x (CALIB N / 10000)
7.6
Obsluha displeje a klávesnice
Kompaktní automaty PES-K a modulární automaty MPC302 mají shodnou
filosofii ovládání displeje a klávesnice - sada funkèních registrù a funkèních bitù vèetnì
jejich øídících funkcí je vdy stejná.
Klávesnice
Vstupní informace z klávesnice je kódována do funkèního registru KBCODE tak,
e kadému tlaèítku odpovídá urèitý èíselný kód. Pokud je stisknuto více kláves souèasnì, je
v promìnné KBCODE èíselný kód jen jedné z nich. Tento kód se do KBCODE nastaví vdy na
zaèátku programové smyèky a na jejím konci se automaticky vynuluje. Promìnná KBCODE
je tedy po stisku klávesy aktivní právì po dobu jednoho prùchodu programovou smyèkou. K
opìtovnému nastavení KBCODE je tøeba tlaèítko pustit a znovu stisknout (výjimkou je
autorepeat - viz dále). Pokud je klávesnice v klidu, je KBCODE=0.
Èíslice a desetinná teèka mají èíselný kód zvolen tak, aby pøesnì odpoovídal
znakové tabulce ASCII, lze je tedy pod tímto kódem pøímo vytisknout na displej.
&#
SIMPLE V4 - popis jazyka
03.2004
94 stran
&#
POZN.:
klávesa
V tabulce je uvedeno vech 21
kláves, které jsou na automatu PES-K10. Typy
s mení klávesnicí (MPC302) mají jen prvních 6
kláves, kódování je vak kompatibilní.
Autorepeat
Aby nebylo nutné pro urèité akce
(napø. pro posuv kursoru, rolování menu
apod.) vícekrát maèkat tuté klávesu, je moné
nastavit "AUTOREPEAT". Pokud stiskneme
nìkteré tlaèítko a dríme je stisknuté, potom po
urèité (nastavitelné) prodlevì bude do KBCODE
znovu nastavován kód tlaèítka (s nastavitelnou
rychlostí opakování). Efekt je tentý jako
bychom neustále rychle tiskli tlaèítko.
Funkce se zapíná nastavením bitu
KBREPEN, poèáteèní prodleva se nastavuje
registrem KBDELAY (v desítkách milisekund) a
délka
intervalu
mezi
jednotlivými
"pseudo-stisky" registrem KBREPEAT
(v desítkách milisekund).
kód v KBCODE ASCII znak
ipka vlevo
1
ipka vpravo
2
ipka nahoru
5
ipka dolù
6
ESC
3
ENT
4
+/-
7
F1
8
F2
9
F3
10
0
48
"0"
1
49
"1"
2
50
"2"
3
51
"3"
4
52
"4"
5
53
"5"
6
54
"6"
7
55
"7"
8
56
"8"
9
57
"9"
46
"."
.
Zapnutí funkce autorepeat s poèáteèní prodlevou
1 sec. a opakováním po 0.2 sec. :
KBREPEN : KBDELAY = 100 : KBREPEAT = 20
Akustická indikace
Stisk tlaèítka (a pøípadnì i "pseudo-stisky" pøi zapnuté funkci AUTOREPEAT) je
moné automaticky indikovat krátkým pípnutím vestavìného bzuèáku. Funkce se zapíná
nastavením bitu KBSOUND (je automaticky nastaven vdy po zapnutí).
&$
SIMPLE V4 - popis jazyka
03.2004
94 stran
&$
Seznam funkèních promìnných, specifických pro klávesnici a displej:
NÁZEV
FUNKCE
POÈ. HODNOTA
TYP/ UMÍSTÌNÍ
POSITION
pozice znaku na obrazovce
nedefinováno
word W34
FORMAT
formát pro tisk (vyjma textù)
nedefinováno
word W35
KBCODE
kód stisknuté klávesy
0
word W36
KBDELAY
autorepeat-startovací prodleva
100
word W37
KBREPEAT
autorepeat-opakovací interval
10
word W38
KBREPEN
zapnutí funkce autorepeat
0 (vypnuto)
bit B50
KBSOUND
zapnutí akustické indikace
1 (zapnuto)
bit B51
7.7
Funkce DISPLAY
Filosofie ovládání displeje je u vech automatù (obsahujících displej) stejná, i
kdy mohou mít LCD s rùzným poètem øádkù a rùzným poètem znakù. Texty, èísla nebo
uivatelské symboly se vdy tisknou na virtuální obrazovku velikosti 4 øádky x 40 znakù.
Pozice znakù na obrazovce se poèítají od levého horního rohu poèínaje nulou. Ve
skuteènosti je potom zobrazeno jen tolik øádkù a sloupcù z virtuální obrazovky, kolik
umoòuje pouitý displej.
Díky tomuto zpùsobu ovládání jsou programy navzájem pøenositelné.
Vytvoøíme-li program pro displej s 4x20 znaky, pobìí úplnì stejnì i na displeji s 2x16
znaky, ovem spodní 2 øádky a poslední 4 znaky ji nebudou zobrazeny.
Pro tisk na displej je vyhrazena speciální funkce DISPLAY, kterou lze kromì
konstant a promìnných tisknout i text (píe se do uvozovek). Pozici, odkud se bude
vypisovat, lze volnì nastavit pomocí funkèní promìnné POSITION. Pokud chceme tisknout
poloky za sebou, není tøeba poèítat nové hodnoty do promìnné POSITION, nebo obsah
této promìnné se automaticky po tisku kadého znaku zvìtí o 1.
Tisk textù je pøímý, tj. to co je napsáno v uvozovkách je zobrazeno od pozice
dané promìnnou POSITION.
Èíslování pozic znakù na virtuální obrazovce
0
39
40
79
80
119
120
159
&%
SIMPLE V4 - popis jazyka
03.2004
94 stran
&%
Pøíklady skuteèného zobrazení na rùzných typech terminálù
displej 2 x 16 znakù
displej 4 x 20 znakù
Díky pøetìování funkcí je moné vechny datové typy tisknout na displej
pouhým zápisem :
DISPLAY(název_promìnné)
Tedy podobným zpùsobem jako u starí verze SIMPLE V2 (která ovem
pracovala pouze s datovým typem WORD).
7.8
Formátování tisku hodnot na displej
o, jakým formátem se dané èíslo vytiskne, je jednoznaènì dáno kódem formátu v
promìnné FORMAT. Kromì formátù pro tisk èísel je jetì formát pro tisk èísla ve formì
znaku (podle tabulky znakù pouitého displeje) a formát pro definování vlastních znakù (viz
dále). Výbìr formátu se provádí zápisem vhodného kódu do promìnné FORMAT (tak jako u
pøedchozí verze SIMPLE2. Formáty pouívané v pøedchozí verzi - SIMPLE V2 fungují beze
zmìny tak jako døíve, lze je pouít na celoèíselné promìnné typu WORD a té i LONGWORD.
FORMÁT 0
Formát 0 má význam univerzálního formátu - s nastavením FORMAT=0 lze
zobrazit vechny datové typy v pøijatelné podobì (není samozøejmì rezervována ádná
konstantní délka pro výpis, v desetinné formì jsou zobrazovány pouze typy FLOAT).
Automaty s podporou pro SIMPLE V4 podporují i rozíøené formátování pomocí
promìnné FORMAT.
Pro nastavení formátu se vyuívá hexadecimální zápis hodnot. Zápis v této formì
má jasnìjí logiku, nebo èíslo má konstantní poèet pozic, kadá pozice má svùj pevný
význam a rozsah hodnot 0-15 (na rozdíl od dekadického vyjádøení, kde kadá pozice má
rozsah jen 0-9). Na nejvyí pozici èísla formátu je vdy 1.
Pøíklad zápisu formátu v hexadecimální formì:
FORMAT = 0x10A4
&&
SIMPLE V4 - popis jazyka
03.2004
94 stran
&&
Pozn. k hexadecimálním èíslicím:
kadá èíslice vyjadøuje hodnoty 0-15 a k jejich vyjádøení se pouívají tyto znaky:
0123456789ABCDEF
Struktura promìnné FORMAT
0 x 1 X Y Z
pole Z - poèet míst za desetinnou teèkou (hodnota 0..F)
pole Y - poèet rezervovaných pozic pro tisk èísla (hodnota 0..F)
pole X - zarovnání, tisk znaménka, módy tisku promìnných FLOAT
Tabulka hodnot a jejich významù pro pole X
Pozn.: pro tisk celých èísel (tedy ve kromì typu FLOAT) má smysl pouívat jen
hodnoty 0..7
pole
X
zarovnání znaménko
"+"
0
vlevo
ne
1
vpravo
ne
2
vlevo
ano
3
vpravo
ano
4
vlevo
ne
5
vpravo
ne
6
vlevo
ano
7
vpravo
ano
8
vlevo
ne
9
vpravo
ne
A
vlevo
ano
B
vpravo
ano
C
vlevo
ne
D
vpravo
ne
E
vlevo
ano
F
vpravo
ano
tisk promìnných FLOAT
tisk celoèíselných
promìnných
AUTO - automatický formát,
DECI
tisk buï v klasickém tvaru
standardní dekadický tvar
(±XXX.XXXX), nebo v exponenciálním
(±X.XXXE±XX). Pole Z udává celkový
poèet platných míst
FIX - tisk s pevným poètem desetin
tisk èísla ve tvaru ±XXX.XXXX
pole Z = poèet desetinných míst
HEX
tisk èísla v
hexadecimálním tvaru
(desetinná místa se
ignorují)
EXP - exponenciální vyjádøení
tisk èísla ve tvaru ±X.XXXXE±XX
pole Z = poèet desetinných míst
mantisy
(exponent je vdy dvoumístný)
DECI
standardní dekadický tvar
HEX
tisk èísla v
hexadecimálním tvaru
(desetinná místa se
ignorují)
Pozn. k poli Y (rezervovaný poèet pozic): zde se rozumí poèet znakù vèetnì
pøípadného znaménka.
&'
SIMPLE V4 - popis jazyka
03.2004
94 stran
&'
7.9
Formát pro tisk znakù
Formát 120 interpretuje vstupní hodnotu jako èíslo znaku a vytiskne na displej 1
znak daný tímto èíslem. Tento formát umoòuje tisknout i znaky, které nejsou bìnì
dostupné a nelze je tedy pøi psaní programu napsat z klávesnice do zadání textu pro textový
výstup. Kód znaku musí být v rozsahu 0 ... 255.
KÓD
TYPY ZNAKÙ
0...7
vlastní pøedefinovatelné znaky, grafické symboly
32...122
abecední a èíslicové znaky, kódované podle standardu ASCII
160...255
dalí uiteèné znaky, specifické pro daný displej (napø. japonská abeceda)
Napø. znak C lze v jazyce SIMPLE vytisknout nìkolika zpùsoby :
a)
DISPLAY("C")
b)
FORMAT = 120 : DISPLAY(67)
c)
D1 = 67 : FORMAT = 120 : DISPLAY(D1)
7.10
Definování vlastních grafických symbolù
Pouívané typy displejù umoòují vytvoøit a 8 vlastních grafických symbolù.
Znaky jsou kódovány pod èísly 0 a 7 a lze je tisknout prostøednictvím formátu 120 (viz
výe). Tuto zajímavou funkci mùeme vyuít napø. pro tvorbu a tisk znakù èeské abecedy.
Vechny znaky jsou tvoøeny maticí z 8 grafických øádkù po 5 bodech. U
standardní pevné sady znakù se spodní øádek nevyuívá. U sady programovatelných znakù
mùeme vyuít vech 8 øádek. Celkem tedy mùeme definovat 64 øádkù, tvoøících 8
kompletních znakù.
Umístìní pozic grafických øádkù :
znak 0
znak 1
znak 2
znak 3
znak 4
znak 5
znak 6
znak 7
0
8
16
24
32
40
48
56
15
23
31
39
47
55
63
1
2
3
4
5
6
7
'
SIMPLE V4 - popis jazyka
03.2004
94 stran
'
Definování znakù zaèíná nastavením hodnoty 121 do promìnné FORMAT. Tím se
displej pøepne do reimu programování znakù. DISPLAY a POSITION mají nyní jinou funkci.
Promìnná POSITION urèuje, který grafický øádek editujeme a funkcí DISPLAY zapisujeme
data, urèující obsah øádku. POSITION se i v tomto reimu po zápisu øádku automaticky
zvìtí o 1 a posune se tak na dalí øádek. Programování znakù ukonèíme nastavením
promìnné FORMAT na jinou hodnotu. Po návratu z programovacího reimu se do
promìnné POSITION nevrací pùvodní hodnota, je tedy nutné ji pøed dalím tiskem opìt
nastavit.
Kadý bod øádku má svoji numerickou váhu (odpovídá binárnímu kódování).
Numerickou reprezentaci jednoho grafického øádku získáme seètením hodnot
odpovídajících jednotlivým bodùm.
Èíselné vyjádøení bodù na grafickém øádku :
16
8
4
2
1
GRAFICKÁ PODOBA
Pøíklad
Chceme zadefinovat grafický symbol (podle
obr.) a zobrazit. Znak zadefinujeme napøíklad pod kódem
2. Nejprve spoèítáme numerické vyjádøení grafických
øádkù (viz obr.), potom napíeme podprogram pro jazyk
SIMPLE, který vykoná ve potøebné :
subroutine TISKNI_OBLUDU
FORMAT=121
POSITION=16
DISPLAY(14)
DISPLAY(31)
DISPLAY(21)
DISPLAY(27)
DISPLAY(31)
DISPLAY(17)
DISPLAY(10)
DISPLAY(14)
FORMAT=120
POSITION=0
DISPLAY(2)
èíslo 2
return
7.11
DATA
14
31
21
27
31
17
10
14
; formát pro definování znakù
; 0. grafický øádek znaku 2
; zápis grafických øádkù
; budeme tisknout znak podle kódu
; na 1. pozici na 1. øádku
; bude se tisknout znak
Jak funguje zobrazování
Tisk na virtuální obrazovku a vlastní fyzický zápis dat do obvodù displeje jsou
dva zcela nezávislé dìje, které bìí v automatu paralelnì. Odezva elektroniky displeje je toti
pomalá a kdyby mìl uivatelský program èekat, a se skuteènì vytiskne na displej nìjaký
'
SIMPLE V4 - popis jazyka
03.2004
94 stran
'
delí text, dolo by v daném bodì k jeho nepøijatelnému zdrení. Celý tisk pomocí funkce
DISPLAY se proto uloí do pamìti RAM (zde je ta virtuální obrazovka) a zároveò s
programem bìí na pozadí automatický proces, který odtud stále ète znaky a posílá je na
displej. Tato metoda vùbec nezdruje hlavní program, avak skýtá jednu záludnost.
Chceme-li napøíklad smazat øádek displeje a vytisknout na nìj novou informaci, mùeme to
provést napø. takto :
subroutine NOVY_RADEK
POSITION=40
DISPLAY("
POSITION=40
DISPLAY("NOVY TEXT")
return
; budeme pracovat s 2. øádkem
") ; tisk mezer pøes celý øádek
; na zaèátek øádku nový text
Pøepsání celého displeje trvá asi 200 ms. Pokud budeme tuto proceduru volat
èasto (alespoò 3x a 4x za sekundu), mùe se stát, e zrovna po vytisknutí prázdného øádku
se nìkolik tìchto znakù pøenese na displej a bude trvat asi 200 ms, ne dojde k jejich
pøepisu novou hodnotou. A shodou náhod mùe být v tento okamik obsluný program
zase v bodì, kdy do inkriminované oblasti opìt píe mezery... Obraz potom rùznì chaoticky
problikává.
Øeením je buï omezit frekvenci volání takové procedury (max. 2x za sekundu),
nebo tisknout na displej tak, aby nedocházelo bezprostøednì po sobì k pøepisu tých pozic
rùznou informací. Napø. takto :
subroutine NOVY_RADEK
POSITION=40
DISPLAY("NOVY TEXT
return
; budeme pracovat s 2. øádkem
") ; tisk textu a mezer a do konce
Dalí metodou, která tento problém zcela øeí, je dùsledné pouívání formátù
rezervujících urèitý prostor pro tisk èísla (viz kap. Formátování tisku èíselných hodnot). Tím
je zajitìno, e vytitìné èíslo zabere na displeji stále stejný poèet znakù (tisková funkce jej
doplní mezerami) bez ohledu na svou momentální èíselnou velikost (pokud ovem zvolíme
dostateènou rezervu). Pak mùeme jednotlivé textové a èíselné elementy naskládat na
displej tìsnì vedle sebe. Tím pádem k ádnému pøepisování a mrkání nebude docházet ani
kdy budeme zobrazování hodnot provádìt v kadém prùchodu smyèky.
Napøíklad :
subroutine ZobrazKusy
POSITION=43
FORMAT=0x1130
;
DISPLAY("Pocet:")
DISPLAY(Kusy)
;
;
DISPLAY(" ks")
;
return
'
; podprogram tisku na displej
rezervuji se 3 znaky, zarovnani vpravo
; text
cislo - promenna Kusy
(predpoklad, ze je mensi nez 999)
text
SIMPLE V4 - popis jazyka
03.2004
94 stran
'
Tento podprogram je mono volat jakkoli rychle, protoe vechny poloky mají
své pevné poøadí a místo, nic se nepøekrývá (tedy a do okamiku, kdy promìnná Kusy
bude vìtí ne 999).
Je tøeba na druhou stranu poèítat s tím, e tisk na displej (pøiøazování do
promìnné DISPLAY) zabere pomìrnì dost strojového èasu a pøíli mnoho tiskù v kadém
prùchodu programové smyèky výraznì zvýí dobu prùchodu programu a sníí tak celkovou
rychlost.
7.12
Editace hodnot
Jazyk SIMPLE V4 (a firmware pro PLC od èísla verze 3.664) umoòují i editaci
èísel na displeji pomocí integrované klávesnice na automatu. K tomuto úèelu lze pouít
vestavìné funkce editorù, do kterých je pøedána hodnota a tato hodnota (pøíslunì
upravená, pokud dolo k editaènímu zásahu z klávesnice) je na výstupu funkce. Pozn.: na
klávesy reagují editaèní funkce tak, e ètou obsah promìnné KBCODE. Editaèní funkce
zároveò tisknou na displej pøesnì stejnì jako funkce DISPLAY (je tedy tøeba pøed pouitím
editoru nastavit i promìnnou FORMAT, aby èíslo zobrazené na displeji bylo v poadovaném
tvaru). Pokud je volána nìkterá editaèní funkce, zobrazuje se automaticky na displeji blikající
kurzor na editované pozici.
funkce editorù vypadají takto:
7.13
function byte EditB(byte dato)
- pro editaci typu byte
function word EditW(word dato)
- pro editaci typu word
function int EditI(int dato)
- pro editaci typu int
function longword EditLW(longword dato)
- pro editaci typu longword
function longint EditLI(longint dato)
- pro editaci typu longint
function float EditF(float dato)
- pro editaci typu float
Síové promìnné
Jazyk SIMPLE V4 zavádí kromì sdílených promìnných D32..D63 (word) a
M64..M127 (bit) jetì dalí prostor: pole 256 4-bytových promìnných L[0]..L[255] typu
longword (pro pøenos jiných typù ne longword staèí promìnnou jednodue pøetypovat).
Vechny výe uvedené promìnné jsou sdílené vemi automaty v síti a díky nim
je mobá snadná komunikace mezi PLC v síti.
'!
SIMPLE V4 - popis jazyka
03.2004
94 stran
'!
7.14
Typ
BIT
WORD
'"
Seznam speciálních funkèních promìnných
Symbol
Umístìní
Popis funkce
TEN0..TEN7
B0..B7
povolení èítání
TDM0..TDM7
B8..B15
èítání dolù
TPA0..TPA7
B16..B23
pøeddìliè stem
TOE0..TOE7
B24..B31
èítání pøes pøeteèení
TOF0..TOF7
B32..B39
pøíznak pøeteèení
CLK0..CLK7
B40..B47
asynchronní impuls na èasovaè
HOLD
B48
vzorkování reálného èasu.
CLRSEC
B49
zaokrouhlení na minuty.
KBREPEN
B50
zapnutí funkce autorepeat
KBSOUND
B51
zapnutí akustické indikace
RESET
B126
poèáteèní inicializace systému
T0..T7
W0..W7
SECOND
W8
sekundy reálného èasu. (0~59)
MINUTE
W9
minuty reálného èasu. (0~59)
HOUR
W10
hodiny reálného èasu. (0~23)
DAY
W11
dny v mìsíci. (1~28..31)
MONTH
W12
kalendáøní mìsíc. (1~12)
YEAR
W13
roky století. (0~99)
WEEK
W14
dny v týdnu (1~7)
SPEED
W15
rychlost systému
STACK
W16
aktuální poloka zásobníku
POINTER
W17
ukazatel do zásobníku
CALIB0..CALIB7
W18..W25
ADCMODE
W26
nastavení módu A/D pøevodníku
POSITION
W34
pozice znaku na obrazovce
FORMAT
W35
formát pro tisk (vyjma textù)
KBCODE
W36
kód stisknuté klávesy
KBDELAY
W37
autorepeat-startovací prodleva
KBREPEAT
W38
autorepeat-opakovací interval
estnáctibitové èasovaèe
kalibrace základních analogových vstupù
SIMPLE V4 - popis jazyka
03.2004
94 stran
'"
Podobné dokumenty
SIMPLE3 - Popis jazyka
Uživatelský program je tvořen, tak jak je běžné u programovacích jazyků,
sledem deklarací, definicí, direktiv a příkazů jazyka, zakončený klíčovým slovem
END. Textový soubor resp. soubory, obsahují...
Programovací jazyk Simple 4
zachovává si všechny charakteristiky jazyka bezpečného programování a běhu programu v
reálném čase. Program je vždy vykonáván od začátku až do posledního příkazu a od tohoto bodu
se vrací vykonáván...
Návrh aplikací průmyslového řídicího
zaøízení, obsahuje hlavnì informace odkud se mají zjiovat hodnoty vstupù
a kam se mají nastavovat hodnoty výstupù øídicího systému. Z hlediska projektování øídicího systému je nejdùleitìjí
jmén...
Nokia 7610
Abyste mohli pou¾ívat telefon, musíte mít od
provozovatele bezdrátových slu¾eb zaji¹tìnu odpovídající
slu¾bu. Provoz mnoha funkcí tohoto pøístroje je závislý na
funkcích v bezdrátové síti. Tyto Sí»...
Miniaturní programovatelnę terminál Uĺivatelská p íruţka 01.2007
Reálný èas/kalendáø a dostateèné kapacity pamìti pro uivatelský program i data
umoòují vyuít MT201 jako inteligentní terminál, nebo i jako hlavní øídicí automat systému. Mùe být i vhodnou náhra...
Vodní hospodářství
vodou splachovaných odpadù, se kterými si vodní
ekosystém poradí, ani by dolo k jeho naruení, se
nazývá únosnost. Je-li pøekroèena únosnost, ekosystém se
pokodí, nìkdy i nenávratnì a samoèistíc...
Modulární programovatelné automaty MPC300
zástavbu na lity DIN 35mm (jistièe, chránièe atd...) a lze je tedy pøímo pouít do
mnoha typù bìnì komerènì dostupných plastových rozvodnic s litami DIN.
Pro zástavbu do pøedního panelu zaøízení...