INTERPRETER
 

 

 

 



Kazalo

Kazalo_ 3

Uvod_ 4

Programska in strojna orodja_ 4

Nastavitve zaslonskega programa_ 5

Povezovalni kabel 5

Atmelov procesor AtmegaXX_ 5

Interpreter 6

Funkcionalna zasnova_ 6

Primerjava ATmega163 in ATmega323_ 7

Poraba toka_ 7

Sintaksa_ 7

Programiranje_ 8

Izpis programa_ 8

Poganjanje programa_ 8

Izpis spremenljivk_ 8

Matematične operacije_ 9

Prirejanje_ 9

Oklepaji 10

Konec ukaza_ 10

Pogojni stavki 10

Primerjanje_ 10

Komentar 10

Boolova algebra_ 11

Logični in_ 11

Logični ali 11

Obratna vrednost 11

Vhodni biti 11

Izhodni biti 11

Dinamični biti 12

Mešani izrazi 12

PI regulator 12

Splošno_ 12

Analogni vhodi 12

Analogni izhodi 13

Parametri PI regulatorja_ 13

Funkcije 13

Uvod_ 13

Histereza_ 13

Dinamični bit 14

Spremenljivke 14

r 0..9_ 14

s 0..9_ 14

e 0..9_ 14

f 0..9_ 14

t 0..9_ 14

p 0..9_ 14

u 0..9_ 15

i 0..9_ 15

o 0..9_ 15

b 0..9_ 15

d 0..9_ 15

h 0..9_ 16

c 0..9_ 16

Primeri 16

Primer 1_ 16

Primer 2_ 17

Primer 3_ 17

Primer 4_ 18

Primer 5_ 18

Primer 6_ 18

Primer 7_ 19

Primer 8_ 19

Namesto zaključka_ 19

 

Uvod

Pred nami je »Interpreter« , procesor z vgrajenim učinkovitim interpreterskim jezikom. Za programiranje rabimo računalnik s prostim serijskim priključkom in enega od standardnih zaslonskih programov. Z uporabo npr. HiperTerminala, ki je standarden program Windows operacijskega sistema, lahko zaslonsko upravljamo »interpreter«. Enostavna in zelo učinkovita sintaksa omogoča enostavno in hitro učenje in pisanje programov. Programe pišemo z enim od standardnih ASCII urejevalnikov. Seveda nas prav nič ne omejuje za delo pod katerim koli operacijskim sistemom. Številni zgledi pomagajo hitremu prvemu programu potem pa gre ponavadi  pospešeno naprej.  »Interpreter« na enostaven in pregleden način rešuje analogne, digitalne in časovne probleme. 

Programska in strojna orodja                                                                                                    

 

Program je napisan v Bacicu, z uporabo Bascom-AVR prevajalnika . Program je razvit s pomočjo Atmelove razvojno ploščico STK500. Napravo z vgrajenim interpreterjem lahko prosto programiramo, izvajamo program in spremljamo spremenljivke, vse to preko serijskega porta. Hex koda programa je prosto dostopna.

 

Nastavitve zaslonskega programa

 

Zaslonski program moramo nastaviti na 9600 bit/S, podatkovni biti 8, Parnost brez, nadzor pretoka ni nadzora. Dodatno moramo pri ASCI nastavitvi prenosa nastaviti Zakasnitev vrstic na 150 mS, kolikor procesor rabi da spravi vrstico z ukazi v svoj EEPROM pomnilnik.

 

Projektni pristop

 

Za povezavo serijske komunikacije rabimo tri žice. Če je povezava izvedena po RS 232C standardu uporabimo direktno povezavo brez prepletanja, to pomeni Pin 2 na strani računalnika gre na Pin 2 na strani Interpreterja, Pin 3 na strani računalnika gre na Pin 3 na strani Interpreterja in Pin 5 na strani računalnika gre na Pin 5 na strani Interpreterja.  Seveda je projektiranje naprav veliko bolj kreativen in odprt proces. V realni napravi moramo poskrbeti še za ISP in funkcionalne dodatke,  ki napravo naredijo uporabno.

 

Pin

Ime

Pin

Ime

1

Prosto

6

Prosto

2

TX(Procesor tu oddaja - RX od PC)

7

Prosto

3

RX(Procesor tu sprejema – TX od PC)

8

Prosto

4

Prosto

9

Prosto

5

GND

 

 

 

Atmelov procesor AtmegaXX

 

AVR 8-bit RICS tehnologijo uporablja Atmel na celi paleti procesorjev.

 

Atmelova procesorja ATmega163 in ATmega323 sta v 40 DIP in 44 TQFP ohišju. Slika nam prikazuje 40 DIP ohišje, nogice in imena za oba procesorja. Razporeditev nogic pri obeh omenjenih procesorjih je enaka.

 

Interpreter

 

Interpreter je procesor ATmega163 ali ATmega323, ustrezen program in ustrezna strojna osnova. Strojna osnova je 4MHz glavni kristal, 32768 urni kristal, 4 polna (GND, VCC, SDA, SCL) povezava s panelnim prikazovalnikom in RS232C standardna serijska povezava.

 

Funkcionalna zasnova

 

Pin

Ime

Uporaba

Pin

Ime

Uporaba

1

PB0

Digitalni izhod o0

21

PD7

Digitalni vhod i3

2

PB1

Digitalni izhod o1

22

PC0

Serijska ura (SCL)

3

PB2

Digitalni izhod o2

23

PC1

Serijski podatki (SDA)

4

PB3

Digitalni izhod o3

24

PC2

Digitalni vhod i4

5

PB4

Digitalni izhod o4

25

PC3

Digitalni vhod i5

6

PB5

Digitalni izhod o5

26

PC4

Digitalni vhod i6

7

PB6

Digitalni izhod o6

27

PC5

Digitalni vhod i7

8

PB7

Digitalni izhod o7

28

PC6

Kristal 32768 Hz

9

RESET

100 uF proti GND

29

PC7

Kristal 32768 Hz

10

VCC

+ 4 .. 5,5V

30

AVCC

Analogni +4 .. 5,5V

11

GND

Digitalna masa

31

AGND

Analogna masa

12

XTAL2

Kristal 4MHz,20pF na GND

32

AREF

Prosto

13

XTAL1

Kristal 4MHz,20pF na GND

33

PA7

Analogni vhod u7

14

PD0

Serijski sprejem (RXD)

34

PA6

Analogni vhod u6

15

PD1

Serijska oddaja (TXD)

35

PA5

Analogni vhod u5

16

PD2

Digitalni vhod i0

36

PA4

Analogni vhod u4

17

PD3

Digitalni vhod i1

37

PA3

Analogni vhod u3

18

PD4

Napetostni PWM izhod Ui1

38

PA2

Analogni vhod u2

19

PD5

Napetostni PWM izhod Ui2

39

PA1

Analogni vhod u1

20

PD6

Digitalni vhod i2

40

PA0

Analogni vhod u0

 

Interpreter ima 8 digitalnih vhodov, 8 analognih 10 bitnih vhodov, 8 digitalnih izhodov in 2 digitalna 10 bit PWM izhoda.

 

Primerjava ATmega163 in ATmega323

 

Procesor

Flash

EEPROM

SRAM

ATmega163

16 kB

512 B

1 kB

ATmega323

32 kB

1 kB

2 kB

 

ATmega323 ima glede na mlajšega brata ATmega163 dvakrat več vseh spominov. Zato ima ATmega323 večje zmogljivosti. Programa v obeh procesorjih sta navzdol kompatibilna. To pomeni da ima ATmega323 nekatere dodane funkcije , ki jih v ATmega163, preprosto zaradi premalo spomina, ni bilo mogoče vgraditi. Možnosti ki so dosegljive samo v ATmega323 procesorju so posebej označene. Predvsem so to funkcije skaliranja, komuniciranje s panelnimi prikazovalniki, časovno tabeliranje, časovno registriranje, več spremenjivk in večja zmogljivost programskega pomnilnika.

 

Poraba toka

 

Atmega163 in Atmega323 sta moderno zasnovana procesorja z RISC jedrom. Vgrajeni mehanizmi omogočajo večji nadzor porabe toka.  Ko poženemo program z ukazom c3 ni dileme, procesor mora delati s svojo polno močjo in porabi 20 mA pri napetosti napajanja 5V. Ko program zaustavimo z ukazom c2 se poraba spusti na 10mA pri napetosti napajanja 5V. Takrat se tudi ustavi odštevanje časovnikov t0 - t9 in preračunavanje PI regulatorja. Seveda so to podatki za porabo procesorja, če ni zunanjih porabnikov.

Sintaksa

 

Sintaksa jezika interpreter je izredno enostavna. Sestavljena je iz dvo znakovnih spremenljivk in osnovnih matematičnih operacij. Spremenljivke so predznačene celoštevilčne in bolean. Predznačene celoštevilčne spremenljivke imajo zalogo vrednosti –32768 do +32767. Boolean spremenljivke imajo zalogo vrednosti 0 in 1. Ukazovna vrstica je lahko dolga 14 znakov.  »Interpreter« pozna dva osnovna stanja: run in stp. Ko je »interpreter« v stanju run se izvaja program. Na terminalu izgine značilen znak »>«. Med izvajanjem programa lahko povsem brez omejitev izvajamo ročne komande. Ročna komanda ima prednost pred napisanim programom. seveda je problematičen izpis na terminal, če namreč naš program neprestano nekaj izpisuje na terminal, bo mešanica programiranih izpisov in našega tipkanja precej pokvarila zaslonsko sliko. Izvajanje programa zaustavimo s sistemskim ukazom c2(stp). Na terminalu se pojavi značilen znak »>«.

 

Programiranje

 

Programirati začnemo s sistemskim ukazom c1. Nato vpisujemo programske vrstice. Programska vrstica je lahko dolga do 14 znakov. ATmega163 sprejme do 30, ATmega323 pa do 58 programskih vrstic. Programiranje zaključimo s sistemskim ukazom c2. Za hitrejše programiranje je smiselno napisati ASCII datoteko v katerem od standardnih ASCII urejevalnikov. Microsoftov Notepad je tudi primeren. Nato v zaslonskem programu izberemo pošiljanje tekstualne datoteke. Datoteko pošljemo na »interpreter«. Nastavitev terminala mora zagotavljati 150 mS premora med pošiljanjem posameznih vrstic. Ta čas je potreben, da procesor zapiše ukazno vrstico v svoj EEROM. Vrstice v datoteki kamor pišemo program so lahko dolge do 30 znakov. »Interpreter« bo vse znake od petnajstega dalje enostavno ignoriral.

 

>c1

t0:t0=10

c2

>

Izpis programa

 

Napisan program izpišemo s sistemskim ukazom c4. Program lahko izpišemo tudi če izvajamo program. Vedeti moramo le na to, da vsi ukazi ki veliko izpisujejo (tudi c5, ki izpiše vrednosti vseh spremenljivk), za trenutek ustavijo izvajanje programa, če se ta izvaja.

 

>c4

t0:t0=16

o0=t0<16

o1=t0<14

o2=t0<12

o3=t0<10

o4=t0<8

o5=t0<6

o6=t0<4

o7=t0<2

>

Poganjanje programa

 

Napisan program poženemo s sistemskim ukazom c3. Na zaslonu izgine značilen znak >, kar je znak, da se izvaja program. Med izvajanjem programa lahko neovirano izvajamo svoje komande, ki imajo tudi prednost izvajanjem programa. Težava nastopi le, če naš program nekaj izpisuje na zaslon. V takem primeru naše komande pokvarijo zaslonsko sliko. Izvajanje programa zaustavimo s sistemskim ukazom c2. Ko se program izvaja se status izvajanja zapiše v procesorjev EEROM, zato se program izvaja tudi če vmes procesor ponovno poženemo.

 

>c3

 

Izpis spremenljivk

 

>r0

r0=1234

>

 

Ukaz ki je sestavljen iz imena spremenljivke nam izpiše vrednost le-te. Drugi znak imena spremenljivke je vedno številka od 0 do 9, ki nam označuje zaporedno številko spremenljivke. Za izpis prav vseh spremenljivk imamo na voljo sistemski ukaz c5.

 

>c5

r=0,0,0,0,0,0,0,0,0,0,

s=0,0,0,0,0,0,0,0,0,0,

e=40,0,0,0,0,0,0,0,0,0,

f=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,

t=0,0,0,0,0,0,0,0,0,0,

p=-1,-1,-1,-1,-1,-1,0,0,0,0,

u=360,333,357,254,214,195,236,290,0,0,

i=1,1,1,1,1,1,1,1,1,1,

o=1,1,1,1,1,1,1,1,1,1,

b=0,0,0,0,0,0,0,0,0,0,

h=0,0,0,0,0,0,0,0,0,0,

>

 

Matematične operacije

 

V formulah lahko uporabljamo pet osnovnih matematičnih operacij in dve primerjanji .

 

 

Funkcija

Komentar

+

Seštevanje

Vsota dveh spremenljivk

-

Odštevanje

Razlika dveh spremenljivk

*

Množenje

Množenje dveh spremenljivk

/

Deljenje

rezultat celoštevilčnega deljenja

\

Deljenje po modulu

celoštevilčni ostanek

>

Večje kot

Prvi večji kot drugi, rezultat 1

<

Manjše kot

Drugi manjši kot drugi, rezultat 1

 

Prirejanje

 

r0=1234

 

Ukaz priredi spremenljivki r0 vrednost 1234. Prirejanje celo številčnih spremenljivk je v mejah –32768 do +32767. Pri celoštevilčnem izračunavanju moramo paziti na kolobarjenje celoštevilčnega števila. Spremenljivke tipa boolean imajo vrednost 0 ali ena. Če je rezultat izraza različen od 0 dobi boolean spremenljivka vrednost 1 drugače pa 0.

 

r0=r0+12*r1

 

Zgornja formula se računa od znaka = na desno stran. Prioriteta računanja odstopa od matematičnih pravil in je sledeča. Najprej je izraz vrednost spremenljivke r0, nato se izrazu prišteje vrednost 12 in končno se vsota r0 + 12 pomnoži z vrednostjo r1. Poenostavljeno povedano izraz se računa od znaka = na desno brez upoštevanja matematičnih prioritet.

Oklepaji

 

r0=[r0+12]*r1

 

V izrazu lahko uporabimo zaviti oklepaj. Prioriteta računanja je v tem primeru sledeča. Najprej je izraz vrednost spremenljivke r0 , nato se izrazu prišteje vrednost 12. Dobimo vrednost znotraj oklepaja , ki je r0 + 12. Končno to vrednost pomnožimo z vrednostjo r1. Interpreter pozna samo eno globino oklepajev

Konec ukaza

 

r0=r5;r5=r4-1

 

V primeru, da uporabljamo tako kratke ukaze, da jih lahko dva ali več napišemo v eno vrstico , moramo ukaze ločiti z znakom ; .

 

Pogojni stavki

 

r0:r0=100

 

Ukaz ali ukazi za : se izvede(jo) če je vrednost spremenljivke r0 enaka 0.

 

r0!r0=100

 

Ukaz ali ukazi za ! se izvede(jo) če je vrednost spremenljivke r0 različna 0.

Primerjanje

 

b0=r0<r1

 

b0  je odvisen od vrednosti števil r0 in r1. Če je r0 manjše od r1 potem dobi b0 vrednost 1 , v nasprotnem primeru pa 0

 

r0=b0-b1>b5

 

r0 se izračuna na sledeč način. Od b0 se odšteje vrednost b1. b0 minus b1 nam da vrednosti 1, 0 ali –1. Če je razlika b0 minus b1 večja od b5 potem dobi r0 vrednost 1 v nasprotnem primeru pa 0.

 

Komentar

 

r0=r5%pazi se

 

V primeru da želimo imeti res kratek komentar po koncu našega ukaza ukaz zaključimo z %. To »interpreter« razume kot brezpogojni konec vrstice. Če uporabljamo v originalnem programu vrstice dolžine do 30 znakov in imamo od 15 znaka dalje svoje dolge komentarje (do 15 znakov) je dobro ukaz zaključiti s %, ker s tem preprečimo interpretiranje presledkov, kar seveda upočasni izvajanje programa.

Boolova algebra

 

Bolova algebra je rešena z uporabo matematičnih znakov. Obratna vrednost se napiše z veliko črko imena spremenljivke. Poljubno lahko mešamo celoštevilčne in boolean spremenljivke.

Logični in

 

b0=b1*b2

 

Spremenljivke b so ram biti. Zgornji izraz je ena če sta bita b1 in b2 enaka 1 drugače je rezultat množenja nič.

Logični ali

 

b0=b1+b2

 

Zgornji izraz je ena če je bit b1 ali bit b2 enak 1. Pri spremenljivkah tipa bit velja, da dobijo vrednost ena če je rezultat izraza različen od nič (lahko je tudi negativen) in je nič če je rezultat enak 0.

Obratna vrednost

 

b0=B3

 

Če spremenljivko tipa bit napišemo z veliko črko to pomeni njeno obratno vrednost. Zgornji izraz priredi spremenljivki b0 obratno vrednost spremenljivke b3.

Vhodni biti

 

bo=i0

 

Bitna spremenljivka dobi vrednost i0. i0 je spremenljivka direktno vezana na digitalni vhod . Če v izrazu uporabimo veliko črko I pomeni to negirano vhodno vrednost. Vhodne spremenljivke i ne moremo nastavljati.

 

Ime spremenljivke

Funkcija

Port

i0

Digitalni vhod

Pind.2

i1

Digitalni vhod

Pind.3

i2

Digitalni vhod

Pind.6

i3

Digitalni vhod

Pind.7

i4

Digitalni vhod

Pinc.2

i5

Digitalni vhod

Pinc.3

i6

Digitalni vhod

Pinc.4

i7

Digitalni vhod

Pinc.5

i8

Pulz vsako sekundo

 

i9

Pulz vsako minuto

 

 

Izhodni biti

 

o0=b0

 

o0 je spremenljivka direktno vezana na izhod . Če v izrazu uporabimo veliko črko O pomeni to obratno izhodno vrednost.

 

Ime spremenljivke

Funkcija

Port

o0

Digitalni izhod

Portb.0

o1

Digitalni izhod

Portb.1

o2

Digitalni izhod

Portb.2

o3

Digitalni izhod

Portb.3

o4

Digitalni izhod

Portb.4

o5

Digitalni izhod

Portb.5

o6

Digitalni izhod

Portb.6

o7

Digitalni izhod

Portb.7

o8

Rezervirano

Rezervirano

o9

Rezervirano

Rezervirano

 

Dinamični biti

 

b0=i0;d0!t0=10

 

Prvi ukaz postavi vrednost vhodnega bita i0 v ram bit b0. Drugi ukaz se izvede če je dinamični bit d0 različen od 0 in postavi časovnik t0 v vrednost 10. d dinamični biti so vezani na b ram bite.d je ena samo takrat ko je bilo stanje ustreznega b bita ob prejšnji uporabi bita d različno od sedanjega.

Mešani izrazi

 

B0=r0-b1*b2

 

Interpreter omogoča povsem preprosto mešanje bitnih in celoštevilčnih spremenljivk. Izraz ima vrednost r0 od katere odštejemo 0 ali 1 , pač glede na vrednost spremenljivke b1. nato vse skupaj pomnožimo z 0 ali 1, glede na vrednost bitne spremenljivke b2. B0 , kar je obratna vrednost spremenljivke b0, dobi vrednost 0 če je skupni izraz 0 in vrednost 1 če je skupni izraz različen od nič.

 

PI regulator

Splošno

 

»Interpreter« ima vgrajena dva PI regulatorja. Vsak PI regulator ima svoj izhod neposredno vezan na 10 bitni PWM izhod (PD4 in PD5). Regulatorja se  izračunavata časovno enakomerno v prekinitvenem programu. Oba regulatorja se izračunata vsake 0,131072 S, pri frekvenci kristala 4 MHz.  

Analogni vhodi

 

V spremenljivkah u0 do u7 imamo vrednosti 10 bitne AD pretvorbe. 0 pomeni 0V na vhodu in 1023 pomeni natančno 2.5575V na vhodu. Napetost lahko merimo na 2.5 mV natančno. Če dodamo na vhod upor 100 E lahko merimo tokove 0 – 25,6 mA, kar je ravno primerno za industrijski standard 4-20 mA

 

Ime spremenljivke

Funkcija

Port

u0

Napetostni vhod U0

Pina.0

u1

Napetostni vhod U1

Pina.1

u2

Napetostni vhod U2

Pina.2

u3

Napetostni vhod U3

Pina.3

u4

Napetostni vhod U4

Pina.4

u5

Napetostni vhod U5

Pina.5

u6

Napetostni vhod U6

Pina.6

u7

Napetostni vhod U7

Pina.7

 

Analogni izhodi

 

V spremenljivkah u8 in u9 imamo izhode obeh PID regulatorjev. Izhodi so v mejah 0 do 1023 kar je primerno za dva PWM (Pulse Wide Modulation) izhoda. Vrednosti spremenljivk u8 in u9 se avtomatsko preneseta na ta dva PWM izhoda. S pomočjo zunanjega analognega filtra 1. reda lahko zelo enostavno dobimo napetostni izhod v mejah 0V do napajalne napetosti.

 

Ime spremenljivke

Funkcija

Port

u8

Napetostni PWM izhod Ui1

Portd.4

u9

Napetostni PWM izhod Ui2

Portd.5

 

Parametri PI regulatorja

 

PI parametri dveh regulatorjev so spravljeni v spremenljivkah p0 do p3. To so celoštevilčne Eram spremenljivke. Razlika Reference in vhoda PI regulatorja je programsko limitirana na -+166. P in I parametra sta lahko v mejah -+99. Če postavimo I parameter na 0 se integralni člen postavi na nič, to pomeni, da predhodno stanje integralnega člena ne vpliva na izhod PI regulatorja.

 

Funkcije

Uvod

 

Pod pojmom funkcije razumemo program, ki ga pokličemo z uporabo posebnih spremenljivk. Rezultat, ki se zapiše v posebno spremenljivko ob njeni uporabi je posledica preračunavanj formule z vhodnimi parametri. Vhodni parametri so ustrezne navadne spremenljivke. Ko uporabljamo posebne spremenljivke, se za vhodni parameter vedno uporabi ustrezna navadna spremenljivka z istim indexom.

 

 Histereza

 

Vhod : r,s in e

Izhod: h ali H

 

h so posebne spremenljivke in so biti histereze. Na bit h je vezana spremenljivka r , s in e. Ob zagonu so h biti nič. Biti h dobijo vrednost ena ko je s in e manjše od r. Biti h dobijo vrednost nič ko je s minus e večje od r. Če ima spremenljivka e manjšo vrednost od 0 dobi ob prvi uporabi h bita vrednost 0. h0 ustrezajo vrednosti s0, r0 in e0. podobno velja za vse naslednje h bite.

 

Dinamični bit

 

Vhod: b

Izhod: d ali D

 

d so posebne spremenljivke in so dinamični biti vezani na stanje b ram bitov. d je ena samo takrat ko se je vrednost ustreznega bita b spremenila glede na stanje ob predhodni uporabi spremenljivke d.

 

Spremenljivke

r 0..9

 

r je celoštevilčna ram spremenljivka. Ob zagonu ali prekinitvi napajanja se postavijo vrednosti na nič.

s 0..9

 

s je celoštevilčna ram spremenljivka. Ob zagonu ali prekinitvi napajanja se postavijo vrednosti na nič.

 

e 0..9

 

e je celoštevilčna Eram spremenljivka. Ob zagonu ali prekinitvi napajanja ohranja svojo vrednost. Zaradi narave EEROM pomnilnika, ki ga lahko vpišemo samo 100.000 krat, spremenljivke ne smemo dinamično spreminjati. Seveda jo lahko neomejeno beremo.

f 0..9

 

f je celoštevilčna Eram spremenljivka. Ob zagonu ali prekinitvi napajanja ohranja svojo vrednost. Zaradi narave EEROM pomnilnika, ki ga lahko vpišemo samo 100.000 krat, spremenljivke ne smemo dinamično spreminjati. Seveda jo lahko neomejeno beremo.

t 0..9

 

t je celoštevilčen ram časovnik. Ko postavimo t na neko vrednost , začne časovnik avtomatsko odštevati do 0. t uporabljamo za relativna merjenja čas. Časovniki se zmanjšajo za ena ob prekinitvi na vsake 0,065536 Sek pri frekvenci kristala 4 MHz.

 

p 0..9

 

p so parametri dveh PID regulatorjev. p0 do p5 se vpise v Eram. PID regulatorja imata izhod direktno na PWM izhod. Vrednost lahko preberemo v spremenljivkah u8 in u9.

 

 

Funkcija

Limite

p0

P člen 1.PID regulatorja

+99 .. –99 (vpis v eram)

p1

P člen 2.PID regulatorja

+99 .. –99 (vpis v eram)

p2

I člen 1.PID regulatorja

+99 .. –99 (vpis v eram)

p3

I člen 2.PID regulatorja

+99 .. –99 (vpis v eram)

p4

eram spremenljivka

 

p5

eram spremenljivka

 

p6

Referenca 1.PID regulatorja

0 .. 1023

p7

Referenca 2.PID regulatorja

0 .. 1023

p8

Vhod 1.PID regulatorja

0 .. 1023

p9

Vhod 2.PID regulatorja

0 .. 1023

 

u 0..9

 

u so spremenljivke, ki jih lahko samo beremo.

 

 

Funkcija

Limite

u0

Napetostni vhod U0

0 .. 1023 (0 .. 2,56 V)

u1

Napetostni vhod U1

0 .. 1023 (0 .. 2,56 V)

u2

Napetostni vhod U2

0 .. 1023 (0 .. 2,56 V)

u3

Napetostni vhod U3

0 .. 1023 (0 .. 2,56 V)

u4

Napetostni vhod U4

0 .. 1023 (0 .. 2,56 V)

u5

Napetostni vhod U5

0 .. 1023 (0 .. 2,56 V)

u6

Napetostni vhod U6

0 .. 1023 (0 .. 2,56 V)

u7

Napetostni vhod U7

0 .. 1023 (0 .. 2,56 V)

u8

Napetostni izhod PID-a Ui1

0 .. 1023 (0 .. Vcc)

u9

Napetostni izhod PID-a Ui2

0 .. 1023 (0 .. Vcc)

 

i 0..9

 

i so neposredno vhodni biti. Vrednosti se ne shranjujejo tako , da se prebere stanje vhoda vedno ko spremenljivko uporabimo v formuli. Spremenljivki ne moremo nastavljati vrednosti. Če v formuli uporabimo veliko črko I to pomeni obratno vrednost.

o 0..9

o so neposredno izhodni biti. Vrednosti se ne shranjujejo tako , da se stanje izhoda spremeni takoj  ko spremenljivko uporabimo v formuli. Če v formuli uporabimo veliko črko O to pomeni obratno vrednost.

 

b 0..9

 

b so ram biti. Če v formuli uporabimo veliko črko B to pomeni obratno vrednost. Na b so vezani dinamični biti d .

d 0..9

 

d so posebne spremenljivke in so dinamični biti vezani na stanje b ram bitov. d je ena samo takrat ko se je vrednost ustreznega bita b spremenila glede na stanje ob predhodni uporabi spremenljivke d.

h 0..9

 

h so posebne spremenljivke in so biti histereze. Na bit h je vezana spremenljivka r , s in e. Ob vklopu so h biti nič. Biti h dobijo vrednost ena ko je s in e manjše od r. Biti h dobijo vrednost nič ko je s minus e večje od r. Če ima spremenljivka e manjšo vrednost od 0 dobi ob prvi uporabi h bita vrednost 0. h0 ustrezajo vrednosti s0, r0 in e0. podobno velja za vse naslednje h bite.

c 0..9

 

c so posebne »spremenljivke« ki so namenjene sistemskim ukazom.

 

 

Funkcija

Opombe

c0

Pomoč, spisek posebnih funkcij , spisek spremenljivk

Lahko odtipkamo tudi samo c

c1

Začetek programiranja

Program je lahko dolg do 28 programskih vrstic dolžine 14 znakov

c2

Konec programiranja ali zaustavitev izvajanja programa , stop

 

c3

Izvajanje programa , run

 

c4

Izpis programa , list

 

c5

Izpis vrednosti vseh spremenljivk

 

c6

Izpis časa

format hh:mm:ss

c7

Izpis datuma

format mm/dd/yy

c8

Vrtenje bitov o0 .. o7 levo

o7 se preslika v o0

c9

Vrtenje bitov o0 .. o7 desno

o0 se preslika v o7

 

Primeri

 

Primer 1

 

c2% stp

c1% prg

o0=i0*i1% in

o1=i0+i1% ali

o2=I0*I1

o3=I0+I1

o4=[i0*i1]+I2

c2% stp

c3% run

 

Najprej ustavimo izvajanje programa z ukazom »c2«. Nato začnemo vpisovati nov program z ukazom »c1«. Ukaz o0=i0*i1 pomeni logični in vhodov i0 in i0 v izhod o0. Ukaz o0=i0+i1 pomeni logični ali vhodov i0 in i0 v izhod o0. Program zaključimo z ukazom »c2«. Program poženemo z ukazom »c3«.

Pri pisanju programov moramo upoštevati, da je lahko ena ukazna vrstica dolga 14 znakov, komentar pa lahko pišemo do 30. vrstice. Napišemo lahko do 29 vrstic , dolgih do 14 znakov, programa. Programe imamo lahko spravljene na računalniku in jih po potrebi vpišemo v »interpreter«

Zgornji program nam demonstrira prižiganje in ugašanje digitalnih izhodov o0 do o4 glede na stanje digitalnih vhodov i0 do i3. 

 

Primer 2

 

c2% stp

r1=0%          stevec=0

c1% prg

b0=i0;O0=t0%   ko pritisnem i0

d0!t0=100%     se o0 prizge za 100 enot

r0!r0=r0-1%    vsakih 100 ciklov

r0:r1=r1+1;r1% se poveca in izpise

r0:r0=100%     vrednost r1

c2% stp

c3% run

 

Najprej ustavimo izvajanje programa z ukazom »c2«. Z drugim ukazom nastavimo števec r1 na 0 Tu vidimo, da lahko nastavitve spremenljivk opravimo preden vpišemo nov program.  Nato začnemo vpisovati nov program z ukazom »c1«. Prva vrstica programa b0=i0;O0=t0 vpise vrednost digitalne vhodne  spremenljivke i0 v bitno ram spremenljivko b0 in postavi obratni digitalni izhod O0 na vrednost časovnika t0. To pomeni da je vrednost O0 enaka 0 če je časovnik t0 enak 0 in je O0 enak 1 če je časovnik t0 različen od nič. Druga vrstica programa d0!t0=100 je pogojni stavek. časovnik t0 se postavi v vrednost 100 če je d0 enak 1 (različen od nič). do je dinamičen bit vezan na ram bit b0. Ko se vrednost b0 spremeni glede na prejšnjo uporabo dinamičnega bita do, dobi samo ob prvi uporabi d0 vrednost 1.

Zgornji program se izvaja približno na 4 mS

Primer 3

 

c2% stp

c1% prg

b0=i0;O0=t0

b8=d0*B0

b8!t0=20%      b0 prehod 1 v 0

b1=t0;O1=t1

b8=d1*B1

b8!t1=20%      b1 prehod 1 v 0

b2=t1;O2=t2

b8=d2*B2

b8!t2=20%      b2 prehod 1 v 0

b3=t2;O3=t3

b8=d3*B3

b8!t3=20%      b3 prehod 1 v 0

b4=t3;O4=t4

b8=d4*B4

b8!t4=20%      b4 prehod 1 v 0

b5=t4;O5=t5

b8=d5*B5

b8!t5=20%      b5 prehod 1 v 0

b6=t5;O6=t6

b8=d6*B6

b8!t6=20%      b6 prehod 1 v 0

b7=t6;O7=t7

b8=d7*B7

b8!t7=20%      b7 prehod 1 v 0

r0!r0=r0-1

r0:r1=r1+1

ro:r0=100;c6

c2% stp

c3% run

 

Primer 3 so leteče lučke. Ob prehodu digitalnega vhoda i0 iz 1 v 0 se sproži vlak ničel od b0 do b7. Še morda komentar k drugemu ukazu b8=d0*B0. b8 bo 1 takrat, ko bo ena d0 in B0,to je pa ob prehodu bita b0 iz 1 v 0. Zadnji trije ukazi nam vsakih 100 izvajanj programa izpišejo tekočo relativno uro v formatu hh:mm:ss. Med izvajanjem programa lahko seveda beremo in spreminjamo vrednosti katere koli spremenljivke.

Primer 4

 

c2             *stop*

p0=50          P clen 1.PID

p2=0           I clen 1.PID

p6=0           Ref 1.PID-a

p8=166         Vhod 1.PID-a

p1=99          P clen 2.PID

p3=0           I clen 2.PID

p7=100         Ref 2.PID-a

p9=266         Vhod 2.PID-a

c1             *program*

u8             izpis 1.izh

u9             izpis 2.izh

c2             *stop prg*

c3             *run!*

 

Pri tem programu gre za nastavljanje parametrov, vhodne vrednosti in reference za oba PI regulatorja. Sam program izpisuje izhodne vrednosti PI regulatorja u8 in u9. Primer je uporaba P regulatorja zato se vrednosti s časom ne spreminjajo.

Primer 5

 

c2             *stop*

p0=0           P clen 1.PID

p2=99          I clen 1.PID

p6=0           Ref 1.PID-a

p8=2           Vhod 1.PID-a

p1=0           P clen 2.PID

p3=99          I clen 2.PID

p7=0           Ref 2.PID-a

p9=10          Vhod 2.PID-a

c1             *program*

u8             izpis 1.izh

u9             izpis 2.izh

c2             *stop prg*

c3             *run!*

 

Pri tem programu gre za nastavljanje parametrov, vhodne vrednosti in reference za oba PI regulatorja. Sam program izpisuje izhodne vrednosti PI regulatorja u8 in u9. Primer je uporaba I regulatorja zato se vrednosti s časom spreminjajo od 0 do največje vrednosti regulatorja to je 1023.

 

Primer 6

 

c2% stp

c1% prg

i8!t0=5%       vsako sek

O0=t0%         1/3 sek on

i9!t1=15%      vsako min

O1=t1%         1/60 min on

r0!r0=r0-1

r0:r1=r1+1

ro:r0=100;c6  

c2% stp

c3% run

 

Prve dve vrstici programa prižigata izhodni bit o0 vsako sekundo za 1/3 sekunde, tretja in četrta vrstica prižigata izhodni bit o1 vsako minuto za 1 sekundo. Zadnje vrstice vsakih 100 ciklov izpišejo trenutno uro v obliki hh:mm:ss.

Primer 7

 

c2% stp

c1% prg

t0:t0=16

o0=t0<16

o1=t0<14

o2=t0<12

o3=t0<10

o4=t0<8

o5=t0<6

o6=t0<4

o7=t0<2

c2% stp

c3% run

 

Prvi ukaz nam v primeru , da je časovnik t0 enak 0 nastavi vrednost le-tega na 16. Ostalih osem ukazov prižiga izhodne bite o0 do o7, pač glede na vrednost časovnika t0.

 Primer 8

 

c2% stp

e0=20

c1% prg

h0:r0=r0+1

h0!r0=r0-1

o0=h0

c2% stp

c3% run

 

Najprej nastavimo vrednost spremenljivke e0 na 20. Prva vrstica programa nam, dokler je histerezni bit h0 enak 0, prišteva spremenljivko r0 za ena. Ko je izpolnjen pogoj s0 + e0 < r0 dobi h0 vrednost 1. Druga ukazna vrstica odšteva ena od spremenljivke r0 , če je h0 različen od nič. Tretji ukaz preslika vrednost histereznega bita h0 v izhodni bit o0. Izhodni bit utripa v frekvenci preklapljanja histereznega bita h0. Frekvenco lahko spreminjamo s spreminjanjem spremenljivke e0.

 

Namesto zaključka

 

Zelo neresno bi bilo kakršno koli razmišljanje v smislu opravljenega dela. »interpreter« je šele začetek zelo obsežnega dela, ki mu ni videti konca. Pomaga pa lahko s svojo eleganco in enostavnostjo rešiti marsikateri razvojni problem in nas hitreje postavi pred nov problem. Majhne spremembe postanejo izredno nevarne, to je pa že dober znak, za naprej.

 

Boštjan Šuhel

Laško , september 2001

Moj elektronski naslov: