Untitled - REMAX CZ sro

Transkript

Untitled - REMAX CZ sro
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
všechna 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 navržen 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 možné 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ž øešení pomocí jazyka Simple V2 (pøedchùdce
verze 4) bylo znaènì komplikované a vyžadovalo pomìrnì vysokou erudici programátora.
Jazyk pøebírá od svých pøedchùdcù (Simple) všechny pozitivní rysy a ve znaèné míøe je
rozšiøuje a pøináší s sebou i nìkterá novátorská øešení mezních situací vyskytujících se v
oblasti programování.
Vzhledem k tomu, že jazyk SIMPLE V4 je navržen pro øešení prùmyslových
øídících algoritmù, 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 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 každý
programový øádek, vyjma speciálních konstrukcí, se vždy 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 øešení dané právì programovými nástroji jazyka SIMPLE V4.
1.1
Mùj první pøíklad
Ukažme 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èí však 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)
; Uložení 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í
posloužit 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ì možné 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øíslušné 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 vždy platná hodnota, se stará mikroprocesor automatu.
Komentáø k øádku "var word Vykon" a øádku "var safe word Pumpa"
Jak je již možná zøejmé ze zápisu øádkù zdrojového textu, jedná se o tzv deklaraci
promìnných. Toto zdánlivì složité 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é však
nestaèí. Abychom tu èi onu promìnnou mohli odlišit 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 každou 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 ještì další deklaraèní sekce,
pro které je také vyhrazeno pøíslušné klíèové slovo.
Komentáø k øádku /* Funkce....*/
Všechny 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 použité 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 øešení
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
použijeme pro výpoèty uvnitø funkce. Je-li možné 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 (spouští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ùležitì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é ještì podotknout, že nepravdivá èást podmínìného
pøíkazu není pro jeho zápis povinná a tudíž je možné 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 použit 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 øešeny 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 uložení 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ì využita. Pøedstavme si, že pro uložení hodnoty promìnné využijeme 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 však 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 našeho
programového algoritmu se nestane, že by hodnota uvažované promìnné pøekroèila 255.
Jak bude v takovém pøípadì využit 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
udržovat. Dá se tedy øíci, že pro uvedený pøípad je pamì pro uložení specifických hodnot
promìnné využita velmi neefektivnì. Existuje však 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 uložení hodnoty
nedostateèné. V takovém pøípadì dochází k tzv. pøeteèení.
Ukažme si pøeteèení na jednoduchém pøíkladu. Pøedstavme si, že naše
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 však 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 uvažované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 uvažované 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á. Ještì horší pøípad nastane, když stejného principu využijeme 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 øešit ?
Jsou v zásadì dvì základní možnosti. Buï se s touto vlastností smíøíme (a nìkdy
to mùže být i výhodné) a nebo pro každou použitou promìnnou vyhradíme dostatek
prostoru v pamìti.
Co však znamená pojem dostatek prostoru v pamìti ?
Tato otázka je neøešitelná, nebo pamìové obvody jsou zatím stále koneèné
kapacity a o nekoneènosti si mùžeme nechat jenom zdát. V našich 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 øešena rùznì popø. není øešena vùbec a je ponecháno zcela na vùli
programátora jak, tyto mezní stavy v použité aritmetice ošetøí.
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 však
pøinášejí typy promìnných øadu výhod. Poèítáme mezi nì možnost optimálního využití
pamìového prostoru (ten je vždy nìjak omezen), výrazného urychlení výpoètu v
celoèíselném zobrazení než v zobrazení napø. v plovoucí øádové èárce. Možnosti 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ší odlišnost jsou však v øešení 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 øešeno i tzv. podteèení, kdy se do promìnné dosadí nejnižší možná
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 øešit 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 použití bezpeèných typù promìnných. Použijeme-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 však 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 našem pøípadì tyto závislosti
nejsou známy nebo do dìlení vstupují vždy 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 ošetø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 využití 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. Každý zdrojový øádek
mùže být maximálnì 512 znakù dlouhý a je složen 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 vždy písmenem nebo podtržítkem.
K èemu identifikátory slouží ?
V zápise programu je vždy 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 možné pracovat v symbolickém tvaru.
Uveïme jednoduchý pøíklad s nímž se dozajista každý 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 však 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 možné 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 však 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 ještì 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 složitìjších algoritmù popøípadì pøi
øešení 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 použití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
totožného algoritmu pro oba stroje s tím, že do výpoètu zadáme vždy hodnoty pro øízení
prvního nebo druhého stroje. Získáme tak dva výsledky výpoètu a pro jejich uložení
použijeme 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ž udržujeme 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
rozlišujeme hlavnì proto, že je možné 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 okamžiku
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
Použijeme-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 možné 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
odlišný 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 vždy uvozen dvojicí
znakù 0x nebo 0X, za níž pak následuje zápis hexadecimálního èísla. Tím je jednak odlišeno,
že se jedná o hexadecimální formát a souèasnì se tím automaticky dodržuje 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ùležitý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é
možnosti 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í možné 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øeložený program je vždy psán se zámìrem, aby mohl být spuštìn
na tom èi onom poèítaèi (programovatelném automatu). Každý 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øevyšovala 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 všechny
pøíchozí zmìny dat (uvažujeme zcela asynchronní tok dat vùèi jejich vzorkování systémem).
Z uvedeného plyne, že program píšeme tak, abychom využili optimálnì
výpoèetní výkon procesoru, který bude program zpracovávat. Velmi jednoduchým
zpùsobem je možné 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ìtšinou platí, že èím menší je èíselný
rozsah typu promìnné, tím rychleji s ní procesor pracuje. Programovací jazyk rozlišuje 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 øešení 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 možné 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
použití 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í možné 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
možné 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 možné 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. Zapišme 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 okamžiku 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øíslušný 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 okamžiku, 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 možné jejich vykonání z rùzných míst
programu. Kdyby však nebylo možné takto zapsané posloupnosti pøíkazù ovlivòovat bylo by
použití podprogramù èi funkcí znaènì omezeno. Aby šlo vykonávání pøíkazù uvnitø
podprogramù èi funkcí ovlivòovat, je možné 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 použití podmínìných pøíkazù
ovlivòovat zpracování jednotlivých pøíkazù.
&
SIMPLE V4 - popis jazyka
03.2004
94 stran
&
Z hlediska použití pak rozlišujeme podprogram a funkci. Odlišnost spoèívá v
tom, že funkce tzv. vrací hodnotu tj. z hlediska syntaxe jazyka mùže být použita (volána) na
místì operandu výrazu. Podprogram hodnotu nevrací a tudíž nemùže stát volání
podprogramu ve výrazu. S použití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øerušení 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
možné uvnitø podprogramu mìnit
const
oznaèuje promìnnou, kterou není možné 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í uvažovat 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 všech
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 vždy 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 složené 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í položky datového pole
]
ukonèující znak pro urèení položky 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ùležitou 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 však 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øeškù starší verze jazyka Simple. Tyto prohøešky 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 uživatelù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 považují 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ù považová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
zjednodušenì 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
každý použitý identifikátor (pojmenování) pøekladaèi pochopitelný tj. musí být tzv.
deklarován. Nevyžaduje se ve shodì s moderními koncepcemi programovacích jazykù, aby
byl identifikátor deklarován pøed tím, než se použije. Je tedy možné 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 použiji, musí být již deklarován (urèen, znám).
Dùležitou 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ù umožnì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 možné 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 však musí mít na
pamìti, že použije-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 možné, protože 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 však platí jediná vyjímka a ta se týká identifikátorù
podprogramù. Identifikátory podprogramù mohou být v jedné úrovni totožné. 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
zajišovat napø. výpis hodnot na displej. Jak víme, na displeji automatu je možné zobrazit
alfanumerické znaky. Je tedy možné zobrazovat nejen texty, ale i hodnoty promìnných.
Hodnoty promìnných však není možné zapsat na displej pøímo. Pøed jejich výpisem se musí
zkonvertovat na text tj. na posloupnost znakù èíslic. Text je ale možné zobrazovat pøímo.
Chceme-li tedy problém øešit 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 použití 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 však ø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
"
øešení 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 ještì 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 všechno 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, použije pøekladaè pravidlo pro
kompatibilitu typù. Detailnì je uvedena kompatibilita typù níže. Zatím pouze telegraficky.
Podle zjištìné hodnoty literálu použije pøekladaè volání podprogramu jehož typ nejblíže
odpovídá zadané hodnotì. V našem 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 všechny 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í
možné v tìchto typech uvažovat desetinná èísla. Tyto typy jsou mikroprocesoru použitém v
automatech nejbližší a proto s nimi probíhají veškeré operace pomìrnì rychle.
Nejmarkantnìji se vlastnost celoèíselnosti tìchto typù projeví pøi aritmetické
operaci dìlení. Použijeme-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ì. Uvažujeme-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í vždy
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 použito ve spolupráci z operací pro zjištì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 vždy zaokrouhlen na celé
desítky a ponecháváme laskavému ètenáøi prostor pro promyšlení 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 všechny základní aritmetické a relaèní
operátory. Odlišnost 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. Všimnìme si
že pro aritmetické promìnné nejsou definovány bitové logické operátory.
Proè ?
Je patrnì zcela nesmyslné zjišovat napø. hodnotu tøetího bitu promìnné float.
3.4
Jednoduché promìnné
Pojmem jednoduché promìnné oznaèujeme všechny 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 umožnit konstrukci promìnné,
která sestává z jednotlivých položek stejného typu. Jednotlivé položky takové promìnné je
možné jednoduchým zpùsobem indexovat a zpracovávat položku po položce a nebo zajistit
obecný pøístup k položce 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 položky typu byte.
Položky jsou èíslovány ( indexace ) od 0 a nejvyšší platný index je pak roven 2. Pro
indexaci je možné 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
použit 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 uložena 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 možné 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 možné do tohoto parametru pøedat libovolnì dlouhé pole bajtù.
Uveïme si pøíklad použití 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í možnosti volání:
var byte a[20] : byte b[30]
Tiskni ( a, "text" )
Tiskni ( b, "jiny text")
Další možnost pro použití stringu skýtají tabulky. Zde se však stringy pøipouštì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ùležité jak bude zapsaný výraz vyhodnocen
a jakým postupem výraz zapsat. V programovacím jazyce SIMPLE V4 jsou dodržena
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
neodlišují 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 možné 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 øešení vyhodnocování logický výrazù je taková, že v okamžiku, 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 použita 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ì øešení 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 odlišnì. 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 možné 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 umožnìn pouze posun o
konstantní pøedem známý poèet bitù. Není tedy možné øí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 vždy
promìnné-operátory a typ promìnné-typ promìnné.
øešena
na
úrovni
typ
Kompatibilita na úrovni typ promìnné-operátor vyjadøuje, zda je možné 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 použití 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 øešena 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, jestliže jeden z typù operandu je
nadmnožinou 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 totožnosti 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 ukažme 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 ovšem kompatibilní) z tìch typù, které jsou
ve výrazu použity. Ze zápisu však 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ù, ovšem 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 øešení, 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 prohlašme, že je
kompatibilní s typem int i word. Tento typ rozlišuje èí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 ještì 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 každý 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 použití 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 možné 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øíslušné promìnné na zaèátku podprogramu nebo
funkce nastaví na požadované 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 použita 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 použita inicializace promìnné byte hodnotou z promìnné typu
longword. Aby bylo možné 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 každý typ promìnné je možné 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 položky 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 položek, 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 uživatelských typù. Novému typu je pøiøazen identifikátor,
který je možno 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
považovat 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
použití definovaných typù v deklaraci promìnných
var
complex_int z
const R = 0
const J = 1
a následnì použití 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é složky komplexních èísel a J pro odkaz na složku 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 vždy 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 však být volány rekurzivnì a
poèet vnoøení nesmí pøesáhnout povolenou úroveò.
Rozlišujeme 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 možné 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í možné 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 možné zapsat
deklarace takto:
subroutine s ( float f : byte b )
subroutine s ( byte b : float f)
V tomto pøípadì však musíme dávat pozor, abychom do podprogramu s
nepøedali parametry tak, že není možné 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é, protože 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 použije se
;druhá z uvedených deklarací
ss(1, float(1));i v tomto pøípadì je volání vyhodnoceno jako
;správné nebo je možné 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 možné 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í použit 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 možné 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
možné 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 všech
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 požadujeme, 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
!&
Použijeme-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
Všimnì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
zapišme si ji tak, že použijeme èá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í uvažovat, že je splnìna podmínka "i=0". Za tohoto
pøedpokladu se vždy vykoná "pøíkaz2" nezávisle na hodnotì promìnné "i". V této situaci už
uvedené øešení nesouhlasí s požadavky zadání.
Další možností jak situaci øešit je použití složené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é øešení ú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é øešení 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 složenou ze dvou výrazù popø. vložený podmínìný pøíkaz do jiného podmínìného
pøíkazu. Z hlediska funkce jsou tedy øešení 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øešky z jazyka Simple. Všechny 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 však platí, že v okamžiku, kdy pøi rozvoji jazyka
zaènou syntakticky vadit a znemožòovat tak udržení 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, protože 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 (považujícího znak
nového øádku, tj. konec øádku pøedchozího, za oddìlovaè).
Syntaxe moderních jazykù považují pøechod na novou øádku za bezvýznamný
syntaktický prvek. Tento moderní pohled pak umožòuje uživateli 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øešit problematiku konce øádky
bezbolestnì. Jsou však pøípady, kdy to nebylo možné a v tìchto pøípadech je pøíkaz konce
øádky implementován. Všechny 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 složený 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 možný tj. mùžeme opìt
zapsat:
if KBCODE=K_ENT then NewID=0100 : POINTER=OFS+10 : STACK=CurrID
Do budoucna však 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 umožnì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 použijeme 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 použité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 zajišují 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 považovat za související.
Použití tohoto pragmatu mùžeme pøipodobnit k funkci vložit, kterou dnes podporuje již snad
každý 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 okamžiku, kdy pøekladaè neví jak pøeložit zdrojový text.
Abort
tento typ chyby je generován pøi nestandardním ukonèení pøekladu.
Typickou situací pøi níž nastane je okamžik, kdy je nalezena
konstrukce generující "chybu v chybì".
Fatal
chyba se generuje v pøípadì, že v pøekladu není možné 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ì odlišitelné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 možnost jak chybu opravit.
""
SIMPLE V4 - popis jazyka
03.2004
94 stran
""
Chyby závažné (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. Došlo 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 došlo 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 vašeho 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 spuštìn se vstupním souborem v
nevhodném nebo neznámém modelu pamìti cílového automatu.
Proveïte upgrade vašeho 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øíslušný generátor
kódu. Proveïte upgrade vašeho 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øíslušný 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í možné spustit,
když došlo 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 použití direktivy
include.
Pøíliš mnoho 'include' souborù
V prùbìhu pøekladu bylo vloženo 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 došlo 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áø) požadované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 manažer
projektu ví tj. ty, které jsou vloženy do projektu právì pomocí projekt
manažeru. Soubory, které jsou do zdrojového textu vloženy 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í možné otevøít.
Provìøte hloubku volání direktivy include, provìøte pøípadnou rekurzi této
direktivy. Zkuste uzavøít ostatní spuštì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 požadované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 došlo 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í spuštì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 použito,
odstraòte odøádkování v direktivì include.
Chybná klazule include
Použití èi syntaxe klauzule (direktivy) include chybnì
Provìøte zda zápis odpovídá tvaru:
$include (cesta\soubor.pøípona)
Pøíliš složitý výraz
Oznaèený výraz není schopen pøekladaè pøeložit, protože svou složitostí
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 použili 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í možné zpracovat.
Provìøte zda soubor vkládaný pomocí direktivy $Library je skuteènì
souborem obsahujícím knihovnu tj. souborem který vygeneroval pøekladaè
spuštì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 použita pro soubor knihovny
Provádíte generování knihovny ze zdrojového souboru, který obsahuje
klauzuli (direktivu) $Include. Použití této direktivy není v tomto pøípadì
dovoleno.
Pokud potøebujete pro definici knihovních datových struktur nìkteré
informace obsažené 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í možné 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ý
Použitý výraz je zapsán tak, že se jedná ve skuteènosti o výraz logický. Výraz
je použit na místì, kde je vyžadová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 okamžiku, 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 možné, ž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 použit znak otazník "?", který realizuje pøístup ke
zvolenému bitu v celoèíselné promìnné. Bit však 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í možné 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 vložte 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 však 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á možnost 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. Použijte 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 složený typ do funkce, použijte pøedání odkazem
(v deklaraci parametrù použijte 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 použili 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ì dodržovat 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í použití
odlišných datových typù ve výrazu. Jedná se napøíklad o souèet promìnné
typu byte s promìnnou typu word. To však 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
ještì typ "float". Chyba nejèastìji vzniká opomenutím specifikace dané
položky u strukturovaných typù promìnných popø. polí nebo vlastních typù
promìnných.
Ovìøte zda použité operandy odpovídají definicí aritmetickému typu.
Operandy musí být typu int
Ve výrazu jste použili operandy, které nejsou celoèíselné. Typicky jsou
celoèíselné operandy požadovány v indexu pole. Za celoèíselné operandy
jsou všechny typy promìnných vyjma typu "float" a "bit".
Ovìøte zda použitý datový typ odpovídá celoèíselnému typu promìnné. Pozor
na položky 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í
možné použít pro pøiøazení nebo promìnná je pøeložena 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 položku pole.
Obdobnì to platí i pro struktury a uživatelské 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í položku po položce.
#
SIMPLE V4 - popis jazyka
03.2004
94 stran
#
Výraz není kompatibilní pro pøiøazení
Chyba oznaèuje situaci, kdy není možné 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 použit 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 požadová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í (uživatelské) typy
promìnných, struktury nebo pole. Vìtšinou se jedná o opomenutí
specifikovat položku struktury nebo pole. Pozor též na použití 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 požadavku na celoèíselný výraz. Chyba
mùže být zpùsobena použití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 použitý ve výrazu musí být aritmetického typu tj. nesmí být typu bit
popø. uživatelského typu, strukturou nebo polem. V aritmetickém výrazu jste
patrnì použili typ "bit".
Opravte datový typ operandu.
Operand musí být typu int
Oznaèený operand neodpovídá požadavku na celoèíselný typ opetrandu.
Patrnì jste použili 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, však na dùsledky operace
pøetypování.
Operand musí být typu bit
Na uvedeném místì požaduje pøekladaè operand typu "bit". V zápise
zdrojového textu je použit jiný operand. Chyba se též mùže vyskytnout v
logickém výrazu, pokud není použit znak porovnání a operand je použit bez
pøíslušného aritmetického výrazu.
Opravte typ operandu. Mùžete popøípadì použít pøetypování.
Operand musí být konstantní výraz
Použili jste promìnnou èi nekonstatní výraz na místì, kde je vyžadován
konstantní operand. Chyba se objevuje v zápisu direktivy "absolute", kdy na
pravé stranì klíèového slova je použito 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øíslušné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 použili 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í použijete na místì
parametru èíselnou konstantu.
Chybu opravíte buï tak, že použijete promìnnou a nebo tak, že konstantu
explicitnì pøetypujete tak, aby pøekladaè mohl volanou funkci rozlišit.
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í možné
pøedat odkazem.
Chybu opravíte buï tak, že k pøedání použijete 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 použili 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 vyžadováno typem parametru.
Opravte volání funkce tak aby typ parametru a pøedávané promìnné èi
výsledek funkce byl požadované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 použití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 použijte
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 všech 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 okamžiku, kdy voláme pøetìžovanou funkci s èíselnými
parametry.
Upravte volání funkce tak, aby bylo možné 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 použili 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 složitìjší pøípady mùžete využít definici
vlastního typu promìnné s následnou deklarací parametru funkce, který bude
vlastního (uživatelské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í
umožnìna, z dùvodu, že by nebylo možné 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 použijte ji
pøímo. Všechny 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 možností jak pøedat síovou promìnnou do funkce
je deklarovat parametr funkce jako pøedávaný hodnotou tj. musí být použita
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 použijete 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 použity 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 napište s použitím pouze bezpeèných
promìnných totožného typu.
Upravte operand ve výrazu pøetypováním nebo pøepracujte výraz tak, aby
používal totožné 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" došlo 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 použity 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 <>
Použitá relaèní operace (logický výraz podmínky) mezi operandy typu bit je
odlišná 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 možné 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 použito pro
oznaèení jméno, které je totožné se jménem použitým na pøedchozích øádcích
zdrojového textu.
V deklaraci použijte odlišné 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 použit celoèíselný výraz, jehož výsledná hodnota
pøesahuje možnosti použití 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 našel pøekladaè rekurzi.
Chyba mùže nastat napøíklad v pøípadì jsou-li ve výrazu použity 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.
Použití nepøiøazené promìnné
Pøekladaè nalezl typickou chybu, která je obvykle opomenutím programátora.
Deklarovali jste sice promìnnou, ale první použití 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 použití 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 zajišuje 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
vyžadová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 použití promìnné, která není pole na místì, kde je
promìnná typu pole vyžadová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 použití promìnné, která není struktura na místì, kde je
promìnná typu struktura vyžadována.
Opravte zápis zdrojového textu, tak aby promìnná byla typu struktura.
Index mimo meze pole
Použili jste index položky pole, který je vìtší než deklarovaný poèet položek
pole.
Upravte velikost indexu nebo pøepracujte deklaraci pole.
Inicializaèní výraz musí být string
V tabulce konstantních øetìzcù je použit 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ísovaná 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 použit 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 použije 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 možné použít z dùvodu malého rozsahu promìnné.
Odstraòte pøebyteèné výrazy nebo zvìtšete rozsah promìnné napø. u pole
zvìtšete index v deklaraci.
Nedefinovaný identifikátor
Oznaèený identifikátor není definován tj. pøekladaè nenašel 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è našel, ž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.
Použijte konstantní index síové promìnné.
Nedovolené použití typu string
Typ string je možné použít pouze jako parametr do procedury, funkce nebo
systémové funkce napø. Display.
Opravte použití typu string.
$
SIMPLE V4 - popis jazyka
03.2004
94 stran
$
Nedeklarovaná položka struktury
Ve zdrojovém textu procujete s položkou struktury, která není deklarována.
Nejèastìji se jedná o pøeklep.
Opravte neznámé jméno položky na odpovídající jméno uvedené v deklaraci.
Identifikátor neoznaèuje typ
V zápisu deklarace je použito jméno oznaèující typ promìnné (patrnì
uživatelský 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é použití 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 použili 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 použitá konkrétní varianta programovì nedostupná a kód který
oznaèuje bude neproveditelný.
Opravte konstrukci programového pøepínaèe.
Absolutní adresa musí ležet v datech
Jedná se o chybu vìtšinou na pravé stranì direktivy "absolute". Zde jste
použili 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. použijte
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ï totožný 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 požadavkùm.
Absolutní adresa je mimo rozsah promìnné
Pøi použití direktivy "absolute" jste použili 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 použití 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. Použijeme direktivu "absolute" a
zapíšeme mapování ve zdrojovém textu takto:
var posledni_byte absolute stav + 4
Zde vznikne chyba, protože 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 použití
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 použití direktivy "absolute".
Nedovolené použití typu safe v absolutní adrese
V direktivì "absolute" jste použili bezpeèný typ promìnné vpravo od klíèového
slova "absolute". Ovšem 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. Použití direktivy "absolute"
pro bezpeèné typy promìnných se však 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í.
Snižte rozsah a množství 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 nepoužitých pøetìžovaných funkcí nebo napø.
využitím konstrukce programového pøepínaèe (switch) místo vícenásobného
podmínìného pøíkazu if.nebo vypuštìním nepotøebných stringù.
Zkrate 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í možné v cílovém PLC za podmínek daných
programovacím modelem vypoèítat.
Zjednodušte oznaèený výraz.
Vyèerpán datový prostor funkce pro uložení pracovních registrù modelu
Ve volané funkci došlo k pøekroèení velikosti datového prostoru vyhrazeného
pro uložení pomocných výsledkù z pracovních registrù. Volání funkce je
zaøazeno do pøíliš složité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.
Zjednodušte výraz a volání funkce. Použijte napøíklad pomocnou promìnnou
na uložení mezivýsledku.
Chyba generátoru kódu
Žádná z tìchto chyb by nemìla u uživatele 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 øešení, je tøeba vždy kontaktovat firmu MICROPEL, popsat
situaci v níž k chybì došlo 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 požadovaný 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ì došlo. Z hlediska pokud možno 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ì došlo.
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 složitì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 každého diagramu je uvedeno vždy 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 možnost 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 použiro 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 použití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
povšimnìme, že v inicializaèním seznamu mùžeme uvést buï výraz nebo další inicializaèní
seznam. Další inicializaèní seznam je však možné použít tehdy, když to odpovídá typu
tabulky. Jednotlivé položky 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 použijeme jeden ze dvou možných diagramù podle
kontextu, ve kterém deklaraci uvádíme. Oba diagramy by bylo možné 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
%
Použití direktivy 'absolute'
Direktiva absolute umožòuje mapování jednotlivých promìnných na stejnou
adresovou lokaci. Pøestože v pøedchozím pøíkladì odpovídá její použití 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í nepovažujeme 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 uložehí
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 uložení hodnoty typu longint
tj. hodnoty promìnné "výstup". Pokud tedy použijeme zápis z pøedchozího pøíkladu
var byte[4] pole
var longint vystup absolute pole
je vše v poøádku, protože 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 uložení 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 však na zápis
int j absolute pole[3]
Pøestože 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 použití direktivy absolute mùžeme ve výrazu na pravé stranì použít i
aritmetický výraz. Výraz je však 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ì". Použití 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ì, protože 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 položku 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 možné uvést formální parametry pokud jsou požadová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 totožná s deklarací funkcí. Odlišnost
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 složeným pøíkazem.
PØÍKAZ
JEDNODUCHÝ PØÍKAZ
SLOŽENÝ 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 totožné. 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í
použito. Volání funkce mùže být použito 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
Použití pøíkazu exit v modifikované funkci pocitej
function int pocitej (int a,b)
if (a > b) then exit (a-b)
return (b-a)
Složený pøíkaz
Sem poèítáme pøíkaz begin-end, pøíkaz øádka a podmínìný pøíkaz
SLOŽENÝ 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é
využití 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 použit pøechod na novou øádku (dùvodem pro toto omezení je zpìtná
kompatibilita zdrojových textù) a musí za ním následovat složený pøíkaz. Nepovinou èástí
%%
SIMPLE V4 - popis jazyka
03.2004
94 stran
%%
pøíkazu je èást else. Pokud je však uvedena musí za klíèovým slovem else následovat pøíkaz.
CR
PODMÍNÌNÝ PØÍKAZ
if
then
LOG. VÝRAZ
CHYBA
SLOŽENÝ PØÍKAZ
else
PØÍKAZ
Pøíklad
Zápis složené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 použit 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 ještì syntaktický diagram pro vložení 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 použití knihovny ve zdrojovém textu ovšem s tím
rozdílem, že zdrojový text je použit pøímo v textové formì zatímco knihovna v binárním
pøedzpracovaném tvaru. Pro vkládání souboru je též použito 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øí možný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 použito
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 všech
pøeddefinovaných názvù vstupù a výstupù i speciálních funkèních promìnných.
Rovnìž chování všech speciálních funkcí zajišovaný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 ještì 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. Všechny promìnné, které mají speciální funkce, mají
napevno pøiøazeny symbolické názvy. Doporuèujeme všude v programu používat tyto
symboly - klesá potom možnost omylù.
I když vìtšina 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 vždy po zapnutí automatu
a též vždy po spuštì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 však tøeba poèítat s tím, že po každé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. Všech osm èasovaèù je zcela nezávislých a se shodnými
funkcemi. Každý è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 každého èasovaèe souvisí se samostatnou šesticí funkèních bitù TENn,
TPAn, TOEn, TOFn, TDMn, kde n = 0~7 specifikuje pøíslušný è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 dosažení 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 uživateli 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
uživateli, kterým dnem bude zaèínat týden. Provede-li se však 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 však 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 protože se nikde neinicializuje (a ani to nelze,
protože proces èítání století nesmí být narušen 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 vždy
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 všechny vstupy trvá zhruba 700 ms. Analogové vstupy pro
mìøení odporu mají tuto èasovou konstantu ještì delší. Aktuální hodnoty jsou do
promìnných I0..Ix pøepsány vždy 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 možnost 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 vždy hodnota 10000. Tato hodnota je chápána jako 1.0000 - a mùže
být mìnìna uživatelský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 každý kanál, lze tedy chápat pøevod
každé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 vždy stejná.
Klávesnice
Vstupní informace z klávesnice je kódována do funkèního registru KBCODE tak,
že každé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í vždy 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 všech 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 však 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 možné
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
možné automaticky indikovat krátkým pípnutím vestavìného bzuèáku. Funkce se zapíná
nastavením bitu KBSOUND (je automaticky nastaven vždy 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 všech 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
uživatelské symboly se vždy 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 použitý 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, ovšem 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
položky za sebou, není tøeba poèítat nové hodnoty do promìnné POSITION, nebo obsah
této promìnné se automaticky po tisku každé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 možné všechny 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á ovšem
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 ještì formát pro tisk èísla ve formì
znaku (podle tabulky znakù použité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 všechny 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, každá pozice má svùj pevný
význam a rozsah hodnot 0-15 (na rozdíl od dekadického vyjádøení, kde každá pozice má
rozsah jen 0-9). Na nejvyšší pozici èísla formátu je vždy 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:
každá èí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 vše 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 vždy 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ší užiteè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.
Všechny 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 všech 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 režimu 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 režimu 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 režimu se do
promìnné POSITION nevrací pùvodní hodnota, je tedy nutné ji pøed dalším tiskem opìt
nastavit.
Každý 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á vše 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 uživatelský program èekat, až se skuteènì vytiskne na displej nìjaký
'
SIMPLE V4 - popis jazyka
03.2004
94 stran
'
delší text, došlo by v daném bodì k jeho nepøijatelnému zdržení. 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 nezdržuje hlavní program, avšak 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 okamžik obslužný program
zase v bodì, kdy do inkriminované oblasti opìt píše mezery... Obraz potom rùznì chaoticky
problikává.
Øešení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 zajištìno, že vytištì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 ovšem 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 každé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 možno volat jakkoli rychle, protože všechny položky mají
své pevné poøadí a místo, nic se nepøekrývá (tedy až do okamžiku, 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 každé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øíslušnì
upravená, pokud došlo 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 použitím
editoru nastavit i promìnnou FORMAT, aby èíslo zobrazené na displeji bylo v požadované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) ještì 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 jednoduše pøetypovat).
Všechny výše uvedené promìnné jsou sdílené všemi automaty v síti a díky nim
je možbá 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í položka 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

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í...

Více

Programovací jazyk Simple 4

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...

Více

Návrh aplikací průmyslového řídicího

Návrh aplikací průmyslového řídicího zaøízení, obsahuje hlavnì informace odkud se mají zjišovat hodnoty vstupù a kam se mají nastavovat hodnoty výstupù øídicího systému. Z hlediska projektování øídicího systému je nejdùležitìjší jmén...

Více

Nokia 7610

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í»...

Více

Miniaturní programovatelnę terminál Uĺivatelská p íruţka 01.2007

Miniaturní programovatelnę terminál Uĺivatelská p íruţka 01.2007 Reálný èas/kalendáø a dostateèné kapacity pamìti pro uživatelský 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...

Více

Vodní hospodářství

Vodní hospodářství vodou splachovaných odpadù, se kterými si vodní ekosystém poradí, aniž by došlo k jeho narušení, se nazývá únosnost. Je-li pøekroèena únosnost, ekosystém se poškodí, nìkdy i nenávratnì a samoèistíc...

Více

Modulární programovatelné automaty MPC300

Modulární programovatelné automaty MPC300 zástavbu na lišty 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 lištami DIN. Pro zástavbu do pøedního panelu zaøízení...

Více