84
UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA FAKULTETA ZA MATEMATIKO IN FIZIKO Program: fizika - tehnika ENJE PROGRAMSKEGA JEZIKA C++ NA PRIMERIH S PODROýJA MERJENJA IN KRMILJENJA DIPLOMSKO DELO Mentor: dr. Slavko KocijanþLþ, izr. prof. Kandidat: Primož Hladnik Somentor: dr. Boštjan Murovec, doc. Ljubljana, september, 2008

DiplomaPrimozHladnik Upravljanje Pisano u c++

Embed Size (px)

Citation preview

Page 1: DiplomaPrimozHladnik Upravljanje Pisano u c++

UNIVERZA V LJUBLJANI

PEDAGOŠKA FAKULTETA

FAKULTETA ZA MATEMATIKO IN FIZIKO

Program: fizika - tehnika

ENJE PROGRAMSKEGA JEZIKA C++NA PRIMERIH S PODRO JA MERJENJA

IN KRMILJENJADIPLOMSKO DELO

Mentor: dr. Slavko Kocijan , izr. prof. Kandidat: Primož Hladnik

Somentor: dr. Boštjan Murovec, doc.

Ljubljana, september, 2008

Page 2: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

II

Page 3: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

III

ZahvalaNajprej bi se rad zahvalil mentorju, izrednemu profesorju dr. Slavku Kocijan u,

za potrpežljivo branje diplomskega dela in vseh predlaganih popravkov; dr.

Boštjanu Murovcu za vso pomo pri literaturi, programiranju in za moralno

vzpodbudo. Zahvala pa gre seveda tudi ženi Mojci in staršem, ki so me ves as

spremljali in me vzpodbujali pri študiju.

Page 4: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

IV

Page 5: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

V

Povzetek

Programski jezik C++ velja za enega najbolj univerzalnih programskih jezikov. V

okviru brezpla nega programskega razvojnega okolja Microsoft Visual C++

Express, ki je del Microsoft Visual Studio Express 2008, je odli no razvojno

orodje C++ dostopno komurkoli.

Diplomsko delo, za razliko od tradicionalnega spoznavanja sintakse

programskega jezika, temelji na u enju preko že narejenih osnovnih primerov

programske kode, temelje ih na ra unalniškem krmiljenju in merjenju. Prvi koraki

v u enje jezika temeljijo na prižiganju posameznih LED diod (lu k), branju stanja

stikal, signalov s potenciometra ali fotoupora itd. Pri tem je osnova USB vhodno-

izhodni merilno-krmilni vmesnik eProDas-SC1, v nadaljevanju vmesnik, razvit v

okviru projekta ComLab.

Klju ne besede: eProDas, u enje programiranja, C++, merjenje, krmiljenje,

programiranje, ra unalništvo, pou evanje robotike

Page 6: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

VI

Abstract

Learning programming language C++ based on dataacquisition examples

The C++ Programming language is known to be one of the most universal

programming languages. Within the framework of Microsoft Visual Studio

Express 2008, it is possible to obtain a free copy of Microsoft Visual C++ Express

2008, which is an excellent development tool accessible to everybody.

Contrary to traditional teaching of programming languages, this thesis

approaches teaching through prepared pieces of code, based on computer data

acquisition system. First steps into teaching starts with turning on LED diodes,

reading of switches as well as signals from potentiometer, photo resistor etc. An

USB data acquisition module eProDas-SC1, which was developed within the

ComLab Project, is used for the task of communication between personal

computer and attached periphery.

Keywords: eProDas, learning programming, C++, data acquisition,

microcontroller, programming, teaching robotics

Page 7: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

VII

Kazalo

1 Uvod...............................................................................................................12 Programski jezik C++ .....................................................................................3

2.1 Zgodovina C++........................................................................................4

2.2 C++ v šolstvu ..........................................................................................5

2.3 C++ v Industriji ........................................................................................5

2.4 Prednosti in slabosti jezika C++ ..............................................................6

3 Koncept u enja programskih jezikov na primerih s podro ja merjenja inkrmiljenja. ..............................................................................................................74 Priprava programske opreme.......................................................................11

4.1 Namestitev vmesnika eProDas-SC1 .....................................................12

5 Primeri vzor nih nalog v Visual C++.............................................................135.1 Prvi koraki .............................................................................................13

5.2 Nastavljanje enega bita – prižiganje ene LED diode – DOutBit.............15

5.3 Prižiganje ve LED diod hkrati – DOutNum...........................................17

5.4 Branje digitalnega vhoda - DInBit..........................................................18

5.5 Branje bitov na celem portu – DInNum..................................................20

5.6 Prikaz smeri vrtenja motorja - DOutDir..................................................22

5.7 Branje analognega vhoda – AIn10bNum in izpis zajetega števila .........24

5.8 Branje analognega vhoda – AIn10bVol in izpis napetosti......................26

5.9 Utripa ...................................................................................................27

5.10 Povzetek ukazov za vmesnik ................................................................28

5.11 Krmiljenje kora nega motorja................................................................29

6 Za etek novega projekta ..............................................................................326.1 Gradnja programa »Model uli ne razsvetljave« ....................................35

6.2 Lu ke Knight Rider................................................................................41

6.3 Iskalec svetlobe.....................................................................................45

7 Sestava programov v konzoli .......................................................................497.1 Naloge za izpis v konzoli .......................................................................50

7.2 Digitalni izhod........................................................................................52

7.2.1 Prižiganje lu ke (Digitalni izhod) ....................................................52

7.2.2 Prižiganje ve lu k .........................................................................54

7.2.3 Prižiganje ve lu k naenkrat ..........................................................55

Page 8: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

VIII

7.2.4 Utripanje lu k ................................................................................ 56

7.2.5 Utripanje lu k (for zanka) .............................................................. 58

7.3 Digitalni vhod........................................................................................ 59

7.3.1 Vklop LED diode s stikalom........................................................... 59

7.3.2 Prekinitev utripanja lu k s stikalom ............................................... 61

7.4 Analogni vhod....................................................................................... 62

7.4.1 Branje numeri ne vrednosti in izpis na zaslon .............................. 62

7.4.2 Branje analognega vhoda in izpis napetosti na zaslon.................. 64

7.4.3 Model uli ne razsvetljave v konzolskem na inu ............................ 65

7.5 Shranjevanje podatkov meritev ............................................................ 66

7.5.1 Shranjevanje vrstice v datoteko .................................................... 66

7.5.2 Shranjevanje meritve praznjenja kondenzatorja v datoteko .......... 67

8 Zaklju ek ..................................................................................................... 699 Viri: .............................................................................................................. 7010 Priloge na zgoš enki ................................................................................... 72

Kazalo slik

Slika 3.1: Diagram delovanja in komunikacije....................................................... 8

Slika 3.2: Diagram eProDas ................................................................................. 9

Slika 4.1: Spletna stran za prenos Visual C++ 2008 Express Edition................. 11

Slika 4.2: Dodamo datoteko eProDasCPPLib.h v mapo..................................... 12

Slika 5.1: Izbira za etnega programa ................................................................. 13

Slika 5.2: Start Debugging .................................................................................. 14

Slika 5.3: Aplikacija Start .................................................................................... 14

Slika 5.4: Vezava diode ...................................................................................... 15

Slika 5.5: Okno DOutBit...................................................................................... 15

Slika 5.6: DOutNum program.............................................................................. 17

Slika 5.7: Shema vezave ve LED diod .............................................................. 17

Slika 5.8: Shema vezave stikala ......................................................................... 18

Slika 5.9: Vezava stikala 5 V levo, 0 V desno..................................................... 18

Slika 5.10: DInBit okno - stanje na bitu 0 ............................................................ 19

Slika 5.11: Shema priklopa ve mikrostikal......................................................... 20

Page 9: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

IX

Slika 5.12: Okno za prikaz DInNum.....................................................................20

Slika 5.13: Okno Vrtenje motorja – DOutDir ........................................................22

Slika 5.14: Enosmerni motor v pogonu................................................................22

Slika 5.15: 1 - izhod na vmesniku (8 bitov iz PortD), 2 - DC napajanje 9 V na H-

krmilju, 3 - vhod na H-krmilje, 4 - Izhodi iz H-krmilja...........................................23

Slika 5.16: Vezava potenciometra .......................................................................25

Slika 5.17: Okno programa AIn10bNum ..............................................................25

Slika 5.18: Okno programa AIn10bVol ................................................................26

Slika 5.19: Utripa ...............................................................................................27

Slika 5.20: Vezava kora nega motorja ................................................................29

Slika 5.21: Krmiljenje kora nega motorja ............................................................30

Slika 6.1: Za etek novega projekta......................................................................32

Slika 6.2: Okno Windows Forms Application .......................................................32

Slika 6.3: Dodamo datoteko eProDasCPPLib.cpp...............................................33

Slika 6.4: Dodajanje eProDasCPPLib.cpp...........................................................33

Slika 6.5: Vpis knjižnic eProDasCPPLib.h in windows.h......................................34

Slika 6.6: Vezava fotoupora.................................................................................35

Slika 6.7: Izbira forme Form1.h............................................................................35

Slika 6.8: Prazna forma Form1............................................................................36

Slika 6.9: Dodajanje asovnika timer1.................................................................37

Slika 6.10: asovnik pod formo...........................................................................38

Slika 6.11: Nastavitve asovnika .........................................................................39

Slika 6.12: Program Model uli ne razsvetljave in koda........................................40

Slika 6.13: Knight Rider .......................................................................................41

Slika 6.14: Vezava osmih LED diod.....................................................................41

Slika 6.15: Iskalec svetlobe .................................................................................45

Slika 6.16: Shema iskalca svetlobe .....................................................................46

Slika 7.1: Izbira novega projekta v konzoli...........................................................50

Slika 7.2: Izbira nastavitev projekta .....................................................................51

Slika 7.3: Dodajanje nove CPP datoteke.............................................................51

Slika 7.4: Brezvija ne sponke (ang. Cage-clamp) ...............................................52

Page 10: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

X

Slika 7.5: Vezava svetle e diode ........................................................................ 52

Slika 7.6: Vezava stikala in LED diode, vklop pri + 5 V....................................... 59

Slika 7.7: Vezava stikala in LED diode, vklop pri 0 V.......................................... 60

Slika 7.8: Vezava stikala na vmesnik + 5 V in 0 V. ............................................. 61

Slika 7.9: Vezava modela uli ne razsvetljave ..................................................... 65

Slika 7.10: Vezava vezja za merjenje praznjenja kondenzatorja ........................ 67

Kazalo tabel

Tabela 5.1: Analogni vhodi in poimenovanje na vmesniku ................................. 24

Tabela 5.2: Vsi prototipi ukazov za krmiljenje napreave..................................... 28

Tabela 5.3: Povzetek rabe argumentov funkcij vmesnika................................... 28

Tabela 5.4: Koraki kora nega motorja................................................................ 29

Kazalo programskih kod

Programska koda 5.1: Primer uporabe ukaza DOutBit ....................................... 16

Programska koda 5.2: Uporaba ukaza DOutNum .............................................. 17

Programska koda 5.3: Uporaba ukaza DInBit..................................................... 19

Programska koda 5.4: Uporaba ukaza DInNum ................................................. 21

Programska koda 5.5: Prikaz uporabe ukaza Da DoutDuir ................................ 23

Programska koda 5.7: Primer uporabe ukaza AIn10bNum................................. 25

Programska koda 5.8: Primer uporabe ukaza AIn10bVol ................................... 26

Programska koda 5.9: Koda programa Utripa ................................................... 27

Programska koda 5.10: Utripa .......................................................................... 27

Programska koda 5.11: Primer krmiljenja kora nega motorja ............................ 31

Programska koda 6.1: Zgenerirana koda ob dvokliku na formo.......................... 36

Programska koda 6.2: V pripravljeno kodo vstavimo ukaz ................................. 36

Programska koda 6.3: Zgenerirana koda po dvojnem kliku na ikono timer1...... 38

Programska koda 6.4: Vstavljanje kode med zavita oklepaja ............................. 38

Programska koda 6.5: Koda za vklop asovkinka ob kliku na gumb .................. 39

Page 11: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

XI

Programska koda 6.6: Koda za ustavitev asovnika ob kliku na gumb ...............40

Programska koda 6.7: Koda programa Knight Rider ...........................................42

Programska koda 6.8: Prototip for zanke ............................................................44

Programska koda 6.9: Koda programa Iskalec svetlobe .....................................47

Programska koda 7.1: Primer kode za konzolo ...................................................49

Programska koda 7.2: Prižiganje lu ke na digitalnem izhodu..............................53

Programska koda 7.3: Prižiganje ve lu k naenkrat ............................................54

Programska koda 7.4: Prižiganje ve lu k naenkrat for zanka ............................55

Programska koda 7.5: Utripanje lu k...................................................................56

Programska koda 7.6: Utripanje lu k...................................................................56

Programska koda 7.7: Utripanje lu k s for zanko ................................................58

Programska koda 7.8: Vklop LED diode s stikalom.............................................60

Programska koda 7.9: prekinitev utripanja lu k s stikalom ..................................61

Programska koda 7.10: Branje numeri ne vrednosti in izpis na zaslon...............63

Programska koda 7.11: Branje analognega vhoda in izpis napetosti na zaslon ..64

Programska koda 7.12: Model uli ne razsvetljave...............................................65

Programska koda 7.13: Shranjevanje vrstice v datoteko.....................................66

Programska koda 7.14: Zapis meritve praznjenja kondenzatorja v datoteko.......68

Page 12: DiplomaPrimozHladnik Upravljanje Pisano u c++
Page 13: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

1

1 UvodPrvi koraki pri u enju in pou evanju programiranja predstavljajo velik izziv.

Problem predstavlja predvsem motivacija in precejšnja koli ina znanja, ki je

potrebna za prve uspehe. Pomembna ugotovitev anket na Fakulteti za

Ra unalništvo in informatiko je tudi dejstvo, da je v zadnjih desetih letih mo no

upadlo znanje programiranja pri srednješolski populaciji. Delež študentov, ki ob

vpisu na študij ra unalništva nima nobenih izkušenj iz programiranja, že presega

50 odstotkov (leta 1995 je bilo takih študentov samo 2,56%) [1].

Zakaj je pou evanje programiranja tako zahtevno? Kdaj naj se lotimo pou evanja

programiranja [2]?

Koncepti robotike so dostopni že otrokom od 12 leta dalje. Mednarodna podjetja,

kot so LEGO ali FischerTechnik, razvijajo pakete, ki že vsebujejo vse potrebno za

sestavljanje in programiranje robotov. Paketi so vnaprej pripravljeni in precej

dragi.

Primer takšnega paketa je LEGO Mindstorms, ki že vsebuje enote z motorji,

senzorji, LED diodami, gonili (osi, gredi, zobniki, jermeni … ) in seveda LEGO

kockami, ki se jih lahko sestavlja med sabo in programira z razli nimi

programskimi jeziki, ki že pridejo s paketom, lahko pa jih programiramo tudi z

drugimi popularnimi programskimi jeziki, med drugim tudi C in C++ [3].

S pedagoškega stališ a je bilo spoznano, da je možnost za transfer znanja z

uporabo teh paketov precej slaba. Uporabljena programska orodja so specifi na

(LEGO ponuja RCX kodo, ki je že vklju ena v LEGO Mindstorms, ter ROBOLAB,

ki temelji na programskem jeziku LabWiev, razvit na univerzi Tufts v Bostonu,

ZDA). Otroci se tako ne morejo veliko nau iti o konstrukcijah, elektroniki in

mehanskih sistemih [4]. Poleg tega so vsi deli že izdelani iz primernih materialov,

tako spoznavanje lastnosti le-teh ter njihova obdelava izgublja pomen v osnovni

šoli. V pouk se vklju ujejo dragi in skopi paketi, ki vsebujejo le vzorce razli nih

materialov. Prav tako se je število ur namenjenih tehniki in tehnologiji v zadnjem

asu zmanjšalo.

Page 14: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

2

Za u enje programiranja je na in dela jasen: e želimo pou evati programiranje,

se je le-tega treba lotiti na prakti nih primerih. Na žalost je ve ina knjig, ki u ijo

programiranje napisanih na na in, ki u ence ne motivira dovolj. Tipi ni za etek

enja programskega jezika se za ne s prikazom vrstice »Hello World!«, nato

sledi razlaga novih ukazov, funkcij, orodij. Pri tem je potrebna razlaga vsake

vrstice kode posebej (npr. #include "eProDasCPPLib.h", std::cout<<,

return();, zakaj se vsaka ukazna vrstica kon a s »;« itd. ).

Alternativni pristop k za etkom u enja programiranja in uvajanju v krmiljenje in

merjenje, ki je predmet diplomske naloge, že vsebuje vrsto napisanih kratkih

primerov kode v jeziku C++. Izhajamo iz tega, da otroci že poznajo okolje

Windows, obvladajo miško in lahko uporabijo tudi znanje iz Worda (spreminjanje

pisave, vnos slik, oblikovanje). Zato so naloge vizualne, u enci pa spoznavajo

pomen kode tako, da spreminjajo parametre, kombinirajo razli ne primere kode,

dodajajo gumbe, ponavljajo vrstice, s poskusi ugotavljajo pravilnost napisane

kode in se na ta na in bolj izkustveno nau ijo programiranja v jeziku C++. Pri

tem se ni potrebno nau iti ukazov na pamet (sicer je zaželeno, ker na ta na in

programiranje poteka hitreje).

Vizualni in izkustveni pristop programiranja otroke bolj motivira, saj nekaj tega že

poznajo iz vsakdanje uporabe ra unalnika in nameš ene programske opreme.

Kon ni izdelek pa je zelo podoben tistemu, kar že poznajo. Na ta na in lahko s

kratkimi ukazi hitro pridejo do želenih rezultatov (vrte ega motorja, utripanja lu k

itd.), kar jim vlije pogum, da raziskujejo, spoznavajo in samostojno iš ejo rešitve

za naloge, ki so jim predstavljene. Za pedagoško delo je zaželeno, da u enje

poteka v parih, ki se tekom pou evanja programiranja preko vmesnika tudi

izmenjujejo. Na ta na in dosežemo pri pou evanju ve jo efektivnost, vloga

posameznika v paru je natan no dolo ena in razdeljena, zato so rezultati na

koncu veliko bolje vidni - ve ji odstotek u encev uspešno dokon a delujo

program ali vsaj delno delujo program; odstotek tistih, ki ga ne dokon ajo, ali pa

je neuporaben oz. nedelujo , pa se zelo zmanjša [5].

Page 15: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

3

2 Programski jezik C++

Programski jezik C++ je splošno namenski programski jezik, kjer so vsi

podatkovni tipi stati ni, zapis kode je preprost, jezik sam pa podpira

ve paradigmati no, proceduralno programiranje, podatkovno abstrakcijo ter

objektno usmerjeno in generi no programiranje.

C++ je eden izmed najširše uporabljenih programskih jezikov. Je tudi eden izmed

najve jih programskih jezikov, ki so bili kadarkoli zasnovani. Bjarne Stroustrup je

kot enega izmed kriterijev pri na rtovanju jezika dolo il, da med C++ in strojno

kodo ne sme biti prostora za jezik na nižji ravni. Zelo malo programerjev

uporablja najnižjo raven jezika C++ in mnogi sploh ne vedo, da obstaja klju na

beseda »asm«, ki omogo a podporo pisanju kode v zbirnem jeziku [6].

Page 16: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

4

2.1 Zgodovina C++

V šestdesetih letih, ko so bili ra unalniki še v povojih, so se pojavili mnogi novi

programski jeziki. Med njimi ALGOL 60, ki se je razvil kot alternativa

FORTRANU, a je od njega vzel nekaj konceptov strukturnega programiranja, ki je

kasneje navdihnilo ve proceduralnih jezikov, kot sta CPL in njegovi nasledniki

(npr. C++). ALGOL 68 je neposredno vplival na razvoj podatkovnih tipov v C.

Vendar je bil ALGOL 68 nespecifi en jezik in njegova abstraktnost je bila

neprakti na za reševanje ve ine komercialnih nalog.

V letu 1963 se je CPL (Combined Programming Language) pojavil z idejo biti bolj

specifi en za reševanje konkretnih problemov kot ALGOL ali FORTRAN.

Kakorkoli že, ista specifi nost ga je naredila za velik programski jezik, zato je

težak za u enje in implementacijo [7].

V letu 1967 je Martin Richards razvil BCPL (Basic Combined Programming

Language), ki je pravzaprav poenostavitev jezika CPL, ampak je ohranil najbolj

pomembne zna ilnosti, ki jih je jezik ponujal. eprav je bil tudi abstrakten in

nekoliko velik jezik [7].

Leta 1970 se je Ken Thompson potopil v razvoj UNIX-a v Bellovih laboratorijih

(Bell Labs) in razvil jezik B. To je bil del jezika BCPL za specifi ne naprave in

sisteme (DEC PDP-7 in UNIX) in je bil prilagojen za njegov okus in potrebe.

Kon ni rezultat je bila še ve ja poenostavitev CPL, eprav odvisna od sistema.

Imela je veliko omejitev, recimo zaradi specifi nega sestavljanja strojne kode, so

bile izvršljive datoteke po asnejše in tako je bil jezik neprimeren za izdelavo

operacijskih sistemov. Zaradi tega je Dennis Ritchie iz Bellovih laboratorijev za el

z razvojem prevajalnika jezika B (ang. Compiler), ki je med drugim bil sposoben

direktno izdelati izvršljivo kodo. Ta »novi B«, kon no imenovan C, je med drugim

dodal nove koncepte, kot so podatkovni tipi, npr. »char«.

Page 17: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

5

V letu 1973 je Dennis Ritchie razvil osnove jezika C: vklju evanje podatkovnih

tipov, ravnanje z njimi, izboljšanje polj (ang. arrays), kazalcev (ang. pointers) …

Vse te nadgradnje so, s kasnejšimi zmožnostmi prenosljivosti, prispevale k

razvoju jezika C. Povzeto je bilo v knjigi The C Programming Language, ki je

postala de facto standard do formalne objave ANSI standarda leta 1989.

Programski jezik C++ je leta 1983 razvil Bjarne Stroustrup, ki je delal v Bellovih

laboratorijih. C++ je naslednik oziroma nadgradnja programskega jezika C. Ime

izhaja iz oznake »++«, ki pomeni »pove anje«, v matemati nem smislu pa

pove anje pomeni naslednika ne esa. Prav zato bi lahko ime prevedli tudi v

»Naslednik jezika C«[6]. Prva komercialna izdaja jezika C++ se je pojavila hkrati

s knjigo The C++ Programming Language, ki jo je spisal prav Bjarne Stroustrup.

Od takrat vsakih nekaj let sledijo nove izdaje standarda, popravki in izboljšave

[7].

2.2 C++ v šolstvu

V Sloveniji pouk programskega jezika C++ poteka na srednjih tehni nih šolah

(npr. Šolski center Ptuj) ter fakultetah, kot sta Fakulteta za Elektrotehniko in

Fakulteta za Ra unalništvo in Informatiko. V osnovnih šolah se ga ne uporablja,

ker je za za etnike zaradi pomanjkanja motivacije in obilice znanja, ki je potrebno

za pou evanje tega univerzalnega jezika, prezahtevno.

2.3 C++ v Industriji

C++ se najve krat uporablja za programiranje zahtevnih aplikacij, operacijskih

sistemov ali naprav, ki zahtevajo dobro izkoriš eno ra unsko mo in jih poganjajo

mikrokrmilniki. Za enostavne probleme se lahko uporabi katerikoli programski

jezik. Ko pa pride do kompleksnejših problemov, potrebujemo zmogljiv jezik.

Vsaka odlika programskega jezika C++ obstaja samo zato, ker se je izkazala za

zelo uporabno na dolo enih podro jih industrijskega programiranja [8].

Page 18: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

6

Programerje v realnem svetu bolj zanimajo problemi kot jezik sam; programski

jezik je tako samo pod do rešitve problema, poti pa je lahko ve . Ko je

uporabljena pravilna mešanica jezikov in njihovih zmogljivosti, je rešitev problema

mnogo lažje opisati in implementirati z boljšimi rezultati.

C++ ne ostaja pomembno orodje za razvijalce programov zato, ker bi kdorkoli

mislil, da je najboljše, pa pa zato, ker je prenosljiv jezik, ki deluje bolje kot

njegove alternative na mnogih podro jih [9].

2.4 Prednosti in slabosti jezika C++

Jezik C++ je po sintaksi enostaven, uporablja veliko logi nih operaterjev, veliko

paleto že standardiziranih knjižnic, funkcij, razli nih orodij, knjižnic za skoraj vse

mikrokrmilnike. Slaba stran univerzalnosti je zahtevnost jezika (npr. raba

znakovnih nizov in podatkovnih tipov je zahtevnejša kot pri drugih programskih

jezikih). Prav zato je pou evanje tega jezika zahtevnejše.

Page 19: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

7

3 Koncept u enja programskih jezikov na primerih s podro jamerjenja in krmiljenja.

Pred 25 leti so mikrora unalniki postali dostopni za vse nivoje izobraževanja

zaradi nizke cene in sorazmerne funkcionalnosti. Spomnimo se ZX spectruma,

Commodore itd.

Ti ra unalniki so bili dobro sprejeti med otroci od desetega leta starosti dalje.

Programski jeziki kot je Basic, so bili del mikrora unalnika in so imeli vlogo

operacijskega sistema. Vendar pa je u enje programiranja, ki je bilo v za etku

razvoja informacijske tehnologije precej popularno, postopoma izgubilo

privla nost. Zmogljivosti današnjih osebnih ra unalnikov so neprimerljivo boljše,

inkovita programska podprtost je dostopna tako komercialno kot prosto in na

pokušino preko spleta.

Te aji programiranja konceptualno težko sledijo naglemu razvoju IKT

(informacijsko-komunikacijski tehnologiji), še posebej kar se ti e motivacije

encev ali študentov. eprav se koncept programskih jezikov kot so Basic, C,

C++, Pascal idr. ni kaj dosti spremenil, so vaje, ki so bile uporabljene za

pou evanje jezikov postale zastarele, neuporabne in nevzpodbudne. Aplikacije

za u enje programiranja na spletu so sicer bolj privla ne, vendar je spletno

programiranje preve specifi no in kompleksno (npr. Java Script) [10].

Splošna okolja za programiranje, kot so Visual Basic, C++, Delphi itd., utegnejo

priskrbeti bolj temeljne in prenosljive veš ine programiranja. Da bi priskrbeli bolj

privla ne in vzpodbudne naloge za u ence v srednjih tehni nih šolah, je bil

izdelan te aj osnovan na merilno-krmilnem vmesniku eProDas-SC1, ki je zgrajen

na mikrokrmilniku PIC18F4550 podjetja Microchip [11].

Naprava in firmware (program, ki je zapisan na mikrokrmilniku, na njem tudi te e

in skrbi za komunikacijo med PC in mikrokrmilnikom preko USB povezave (Slika

3.1), na mikrokrmilnik se ga naloži s pomo jo programatorja) sta bila razvita na

Fakulteti za Elektrotehniko Univerze v Ljubljani v sodelovanju s Pedagoško

Fakulteto Univerze v Ljubljani v okviru programa Leonardo da Vinci, projekt

Comlab 2 [12].

Page 20: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

8

Slika 3.1: Diagram delovanja in komunikacije

Naprava je namenjena splošni rabi. Izkazalo pa se je, da se zaradi svoje

zahtevnosti za za etnike (dokumentacija obsega ez 300 strani [11]) ni obnesla.

Zato je bila izdelana dodatna datoteka eProDasHL.dll, odvisna od že obstoje e

eProDas.dll (HL pomeni High Level), ki vsebuje nabor najosnovnejših funkcij za

krmiljenje naprave. Za ciljne programske jezike Visual Basic, Labview in Delphi

so bile izdelane knjižni ne datoteke (eProDasVBLib.vb za Visual Basic,

eProDasBDLib.pas za Borland Delphi in eProDas sub VI funkcije za Labview).

Kon ni izdelki vseh programskih jezikov so tako enako funkcionalni (Slika 3.2).

Naloge ki so predstavljene v diplomskem delu že obstajajo za programske jezike

Visual Basic, Labview in Delphi na strani Comlab [13]. Poleg teh pa so v

diplomski pripravljene še dodatne naloge in naloge napisane v konzolskem

na inu.

Page 21: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

9

Slika 3.2: Diagram eProDas

Namen izdelave in organizacije te ajev je bilo seznanjanje srednješolskih in

osnovnošolskih u iteljev s problemskih pristopom k u enju programiranja. Za to

pa je seveda potrebna cenovno ugodna in robustna strojna oprema, ki je bila

razvita ravno v ta namen.

Seminarji z naslovom Ra unalniško podprto laboratorijsko delo s podro ja

elektrotehnike in elektronike – srednje poklicno izobraževanje so bili izvedeni na

štirih šolskih centrih (Šolski center Ptuj, Šolski center Celje, Šolski center Novo

Mesto in Šolski center Kranj). Udeleženih je bilo skupaj 57 osnovnošolskih in

Page 22: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

10

srednješolskih u iteljev. Odzivi in ocene povzete po anketah so bili zelo pozitivni

(ocena 5 od 6). Za izvedbo in primernost so izvajalci te aja dobili same pohvale.

Komentar enega izmed udeležencev na anketnem vprašalniku, na katerega so

odgovarjali po zaklju ku seminarja: »Eden redkih koristnih seminarjev, ki je zelo

prakti no obarvan.« Kritike in predlogi so bili le na ra un opremljenosti in

primernosti prostorov ter pomanjkanje asa za izvedbo zahtevnejših vsebin.

Za seminarje Robotike za osnovnošolske u itelje sta se uporabljala programska

jezika Visual Basic in Bascom, za tehniške šole pa Visual Basic in Labview.

S seminarji pa se celoten projekt ni zaklju il. Po seminarjih so u itelji samostojno

pripravili projekte v obliki seminarskih nalog z uporabo vmesnika. Nekaj od teh je

bilo predstavljenih tudi na mednarodni konferenci Comlab 2, kjer so se izkazali z

iznajdljivimi rešitvami, kot je npr. krmiljenje trofaznega motorja [14].

Izkušnje iz seminarjev so pokazale, da za te aje manjka programski jezik C++ in

da bi tudi za C++ bilo smiselno napraviti enako podporo kot za preostale tri

jezike.

Page 23: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

11

4 Priprava programske opreme

Za programiranje je v našem primeru uporabljen programerski paket Microsoft

Visual Studio 2008 Express Edition, ki je prosto dostopen na internetu (Slika 4.).

Brezpla na je tudi registracija. Iz paketa izberemo Visual C++ 2008 Express

Edition, prenesemo na lokalni ra unalnik, zaženemo in namestimo.

Celotno u enje je osnovano na tem izdelku.

Slika 4.1: Spletna stran za prenos Visual C++ 2008 Express Edition

Page 24: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

12

4.1 Namestitev vmesnika eProDas-SC1

Celotno programsko opremo z gonilniki, osnovnimi knjižnicami, nadgradnjo

programske opreme (firmware) za vmesnik, lahko naložimo iz priložene

zgoš enke ali iz spletne strani Comlab [15].

Za namestitev gonilnikov za vmesnik prenesemo datoteko

eProLab_200X_XX_XX.exe, jo poženemo in namestimo.

Celoten potek namestitve (v angleš ini), se nahaja na spletni stran projekta

Comlab [16].

Poleg namestitve potrebujete za C++ še dve datoteki, datoteko

eProDasCPPLib.h in datoteko eProDasCPPLib.cpp (datoteki se nahajata na

priloženi zgoš enki).

Datoteko eProDasCPPLib.h dodate v mapo include (Slika 4.2), ki se nahaja v

namestitveni mapi Visual Studia, ki smo ga predhodno namestili.

Slika 4.2: Dodamo datoteko eProDasCPPLib.h v mapo

To je potrebno narediti na vsakem ra unalniku ob namestitvi samo enkrat.

Page 25: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

13

5 Primeri vzor nih nalog v Visual C++

Vzor ne naloge so nadaljevanje in dopolnjevanje projekta Comlab. Na spletni

strani Comlab se nahajajo primeri, ki že opisujejo postopke programiranja

vmesnika v programskih jezikih Visual Basic, Borland Delphi in LabWiev. V

nadaljevanju so enake naloge predstavljene v Visual C++.

5.1 Prvi koraki

Preden pri nemo s programiranjem, poglejmo, kako delati z že obstoje o Visual

C++ aplikacijo, ki upravlja z vmesnikom. Iz priložene zgoš enke prenesemo

mapo primeri, poiš emo mapo Start (Slika 5.1) in v njej poženemo datoteko Start

s kon nico .sln, ki je datoteka tipa Microsoft Visual Studio Solution. POZOR:

Kon nice v Windows okolju so privzeto skrite, zato je potrebno spremeniti

nastavitve mape (Folder Options).

Slika 5.1: Izbira za etnega programa

Z dvojnim klikom na to datoteko, se nam odpre prva aplikacija. e ne vidite

osnovne forme programa, izberite Form1.h. V meniju Solution Explorer. e ni niti

tega menija, potem izberite Wiew Solution Explorer ali izberite Ctrl+Alt+L.

Program lahko sedaj zaženemo na dva na ina. To je s pritiskom na funkcijsko

tipko F5 ali pa kliknemo na zelen trikotnik Start Debugging (Slika 5.2).

Page 26: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

14

Slika 5.2: Start Debugging

Po pritisku na Start Debugging gumb (ang. »za ni razhroš evanje«) se program

najprej prevede v strojni jezik, pri emer preveri vse napake in nas v slednjem

primeru nanje tudi opozori, izpiše vrstico z napako, prevajanje v strojni jezik pa

prekine. e je vse v redu in koda ne vsebuje napak, se nam prikaže forma

programa Start (Slika 5.3).

S tem programom lahko prižigamo LED diode in beremo analogne vhode in

izhode na vmesnik. Uporabimo ga zato, da preverimo pravilno delovanje naprave

in njenih digitalnih vhodov in izhodov ter analognih vhodov.

Slika 5.3: Aplikacija Start

Page 27: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

15

5.2 Nastavljanje enega bita – prižiganje ene LED diode –DOutBit

DOutBit(unsigned int Port, char nBit, char BitState);

Z vmesnikom lahko krmilimo lu i, motorje, releje, integrirana vezja itd. Digitalni

izhod lahko vklju i ali izklju i lu , požene motor naprej, nazaj ali ga ustavi.

Poglejmo si naslednji primer kako kontroliramo eno samo LED diodo.

Najprej pripravimo vezje z LED diodo in uporom, kot kaže slika (Slika 5.4):

Slika 5.4: Vezava diode

Nato poženemo datoteko DOutBit.sln, podobno kot pri predhodni vaji (Slika 5.5).

Po pritisku na gumb prižgi, se prižge prva LED dioda priklopljena na PortB (B0).

Slika 5.5: Okno DOutBit

Page 28: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

16

Programska koda 5.1: Primer uporabe ukaza DOutBit111112113114115116117118119120121122

private: System::Void Form1_Load(System::Object^ sender,System::EventArgs^ e) {eProDasInit(1);}private: System::Void button1_Click(System::Object^ sender,System::EventArgs^ e) {DOutBit(PortB, 0,1);}private: System::Void button2_Click(System::Object^ sender,System::EventArgs^ e) {DOutBit(PortB, 0, 0);}

Koda pisana krepko je tista, ki prižge in ugasne LED diodo. V oklepaje za

funkcijami vpisujemo parametre in v našem primeru so to Device_Index, ki

ozna uje številko naprave. e imamo samo en vmesnik priklopljen na ra unalnik,

ima vrednost 0. Naslednji parameter je Port, (od PortA do PortE), ki ozna uje

skupine bitov z oznako nBit. Na vsakem portu pa jih je ve in jih izbiramo s števili

od 0 do 7. Zadnji parameter je stanje v katerem je bit. Le-ta je lahko le 0 ali 1.

Pozor! Za pravilno delovanje vmesnika je potrebno na za etku vsakega

programa vmesnik povezati z ra unalnikom. To naredimo z ukazom

»eProDasInit(InfoPrint);«, kjer je število InfoPrint lahko 0, 1 ali 2.

e za parameter InfoPrint vpišemo število 2, bo program ob zagonu

prikazal stanje, verzijo firmwarea, in verzijo .dll datoteke.

e vpišemo število 1, se izpiše opozorilno okno »Check connection!« v

primeru, da vmesnik ni priklopljen na USB vrata.

e vpišemo 0, potem ne dobimo opozorila. Program se še vedno zažene,

vendar v primeru, da ni povezave z ra unalnikom preko USB vrat, naprava

ne bo delovala.

Page 29: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

17

5.3 Prižiganje ve LED diod hkrati – DOutNum

DOutNum(unsigned int Port, char Num);

Za prikaz tega poženimo naslednjo vajo - DOutNum.sln.

Po prevajanju datoteke se zažene program (Slika 5.6).

Slika 5.6: DOutNum program

Kot pri prejšnji vaji tudi pri tej vaji prižigamo LED diode na vmesniku. Tokrat jih

prižigamo ve naenkrat z ukazom DOutNum. Vežemo jih tako kot kaže slika

(Slika 5.7). S parametrom Num zapišemo na PortB števila od 0 do 255.

Slika 5.7: Shema vezave ve LED diodProgramska koda 5.2: Uporaba ukaza DOutNum111112113114115116117118

private: System::Void button1_Click(System::Object^ sender,System::EventArgs^ e) {DOutNum(PortB, 7);}private: System::Void button2_Click(System::Object^ sender,System::EventArgs^ e) {DOutNum(PortB, 0);}

Page 30: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

18

5.4 Branje digitalnega vhoda - DInBit

DInBit(unsigned int Port, char nBit);

Za branje digitalnega vhoda potrebujemo izvor napetosti, ki jo priklju imo na

napravo tako, da le-ta lahko zajema napetost, ki predstavlja logi no ni ali logi no

ena. Tipi en predstavnik za to je stikalo, ki ima dve stanji – e je vklju eno,

potem lu sveti, e je izklju eno, je lu ugasnjena.

Stikalo vežemo kot na sliki (Slika 5.8). Stikalo lahko vežemo na dva na ina in

sicer tako, da ob vklopu kaže logi no 1 in ob izklopu logi no 0, ali pa ob vklopu

kaže logi no 0 in ob izklopu logi no 1 (Slika 5.9).

Slika 5.8: Shema vezave stikala

Slika 5.9: Vezava stikala 5 V levo, 0 V desno

Page 31: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

19

Poženimo datoteko DInBit.sln in prevedimo program (Slika 5.10).

Slika 5.10: DInBit okno - stanje na bitu 0

Programska koda 5.3: Uporaba ukaza DInBit111112113114

private: System::Void timer1_Tick(System::Object^ sender,System::EventArgs^ e) {label2->Text=(DInBit(PortD, 0));}

Stanje se zapisuje na oznako label2 ob vsakem proženju asovnika timer1 z

ukazom label2->Text=(DInBit(PortD,0));. Zapisana vrednost na napravi

eProDas je prebrana z ukazom DInBit(PortD,0).

Za vajo lahko dodaš v formo še eno oznako (label) in jo spreminjaš tako, da

priklju iš na napravo še eno mikrostikalo.

Page 32: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

20

5.5 Branje bitov na celem portu – DInNum

DInNum(unsigned int Port);

Za izvedbo potrebujemo ve mikrostikal vezanih na eProDas. Priklju imo jih na

PortD kot kaže shema (Slika 5.11).

Slika 5.11: Shema priklopa ve mikrostikal

e imamo stikal dovolj, lahko zapolnimo celoten PortD.

Zaženimo datoteko DInNum.sln. Po zagonu zopet prevedimo program ek in si

podrobneje oglejmo kodo programa.

Slika 5.12: Okno za prikaz DInNum

Page 33: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

21

Programska koda 5.4: Uporaba ukaza DInNum111112113114

private: System::Void timer1_Tick(System::Object^ sender,System::EventArgs^ e) {label1->Text="Stanje na PortD=" + DInNum(PortD);}

Da se sproti izpisuje desetiško število, vrednost funkcije DInNum, smo zopet

uporabili asovnik.

Page 34: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

22

5.6 Prikaz smeri vrtenja motorja - DOutDir

DOutDir(unsigned int Port, char nBitB, char nBitB, char Bitstate);

Ta funkcija ima vlogo upravljanja z enosmernim elektromotorjem (Slika 5.14).

Dolo imo dva bita in tri možna stanja v katerih se nahajajo.

Slika 5.13: Okno Vrtenje motorja – DOutDir

POZOR! Za ve je tokove je potrebno dodati oja evalno vezje. Za vmesnik se

uporabi H-krmilje (H-bridge), ki potrebuje zunanje napajanje (od 5 do 9 V) in

uporabi izhodni portD (Slika 5.15).

Slika 5.14: Enosmerni motor v pogonu

Page 35: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

23

Slika 5.15: 1 - izhod na vmesniku (8 bitov iz PortD), 2 - DC napajanje 9 V na H-krmilju,3 - vhod na H-krmilje, 4 - Izhodi iz H-krmilja

Programska koda 5.5: Prikaz uporabe ukaza Da DoutDuir111112113114115116117118119120121122

private: System::Void button1_Click(System::Object^ sender,System::EventArgs^ e) {

DOutDir(PortD, 0, 1, Plus); }

private: System::Void button2_Click(System::Object^ sender,System::EventArgs^ e) {

DOutDir(PortD, 0, 1, Minus); }

private: System::Void button3_Click(System::Object^ sender,System::EventArgs^ e) { DOutDir(PortD, 0, 1, Off);

}

Page 36: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

24

5.7 Branje analognega vhoda – AIn10bNum in izpis zajetegaštevila

AIn10bNum(unsigned int Ch);

Vmesnik je opremljen tudi z analognimi vhodi. Le-teh je 12 in eden z referen no

napetostjo +5 V. Vseh 12 analognih vhodov na vmesniku je zapisanih tabeli

(Tabela 5.1):Tabela 5.1: Analogni vhodi in poimenovanje na vmesniku

ADC vhod (na vmesniku)

Ch0 A0

Ch1 A1

Ch2 A2

Ch3 zunanja napetost +5 V

Ch4 A5

Ch5 E0

Ch6 E1

Ch7 E2

Ch8 B2

Ch9 B3

Ch10 B1

Ch11 B4

Ch12 B0

Oznaka »10b« v imenu funkcije pomeni, da zajemamo z desetimi biti. Število, ki

ga pri tem dobimo, predstavlja dvojiško število od 20 do 210. Funkcija tako vrne

število od 0 do 1023. Na analogni vhod vežemo potenciometer ali fotoupor kot

kaže slika (Slika 5.16).

Page 37: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

25

Slika 5.16: Vezava potenciometra

e tako poženemo AIn10bNum.sln in poženemo debug, zagledamo naslednje

okno (Slika 5.17).

Slika 5.17: Okno programa AIn10bNum

Programska koda 5.6: Primer uporabe ukaza AIn10bNum111112113114115116117118119120121

private: System::Void Form1_Load(System::Object^ sender,System::EventArgs^ e) {

eProDasInit(1); }

private: System::Void timer1_Tick(System::Object^ sender,System::EventArgs^ e) {

label1->Text="Stevilo na vhodu je:" +AIn10bNum(Ch0);

}

Page 38: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

26

5.8 Branje analognega vhoda – AIn10bVol in izpis napetosti

AIn10bVol(unsigned int Ch);

Zajete podatke iz analognih vhodov lahko predstavimo tudi z napetostjo med 0 in

+5 V. Potenciometer ali upor vežimo enako kot na sliki (Slika 5.16). Poženimo

torej AIn10bVol.sln in prevedimo program prikazati se mora okno, v katerem je

zapisana trenutna napetost na Ch0 v voltih (Slika 5.18).

Slika 5.18: Okno programa AIn10bVol

Ker ta napetost ni ni drugega kot prera unana 10-bitna vrednost, je njena

natan nost omejena na korake po približno 0,0049 V (Ena ba 5.1).

5V 0,00491024bitov

V

Ena ba 5.1: Lo ljivost 10-bitnega analognega vhoda

To pomeni, da tretja decimalka v dobljenem rezultatu ni ve natan na.

Programska koda 5.7: Primer uporabe ukaza AIn10bVol112113114115116117118119

private: System::Void Form1_Load(System::Object^ sender,System::EventArgs^ e) {

eProDasInit(1); }

private: System::Void timer1_Tick(System::Object^ sender,System::EventArgs^ e) {

label1->Text=AIn10bVol(Ch0) + "V"; }

Page 39: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

27

5.9 Utripa

Wait(double dbDelay);

Naslednji program bo ob pritisku na gumb Utripanje na vmesniku na portu PortB

petkrat utripnil s tremi LED diodami vezanimi kot na sliki (Slika 5.7). Vsak utrip in

mrk trajata po 0,5 s. Poženimo program Utripac.sln in prevedimo program (Slika

5.19). Program bi se brez funkcije Wait(0.5) za vsakim prižigom lu i v trenutku

izvršil in bi videli samo en kratek utrip. S funkcijo Wait() pa zadržimo trenutno

stanje na izhodih vmesnika.

Slika 5.19: UtripaProgramska koda 5.8: Koda programa Utripa

private: System::Void button1_Click(System::Object^ sender,System::EventArgs^ e) {

DOutNum(PortB, 7); Wait(0.5); DOutNum(PortB, 0); Wait(0.5); DOutNum(PortB, 7); Wait(0.5); DOutNum(PortB, 0); Wait(0.5);

DOutNum(PortB, 7); Wait(0.5); DOutNum(PortB, 0); Wait(0.5); DOutNum(PortB, 7); Wait(0.5); DOutNum(PortB, 0);

Wait(0.5); DOutNum(PortB, 7); Wait(0.5); DOutNum(PortB, 0);

}

Programska koda 5.9: Utripa

Do zdaj smo spoznali vse funkcije, ki krmilijo napravo eProDas. Pa jih

povzemimo še enkrat.

Page 40: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

28

5.10 Povzetek ukazov za vmesnik

Povzetek vseh ukazov se nahaja v tabeli (Tabela 5.2)

Tabela 5.2: Vsi prototipi ukazov za krmiljenje napreaveeProDasInit(unsigned InfoPrint)

DOutBit(unsigned int Port, char nBit, char BitState)

DOutNum(unsigned int Port, char Num)

DOutDir(unsigned int Port, char nBitA, char nBitB, char DirState)

DInNum(unsigned int Port)

DInBit(unsigned int Port, char nBit)

AIn10bNum(unsigned int Ch)

AIn10bVol(unsigned int Ch)

Wait(double dbDelay)

eProDasClose()

Razlaga parametrov se nahaja v tabeli (Tabela 5.3).

Tabela 5.3: Povzetek rabe argumentov funkcij vmesnika

InfoPrint: 0-brez sporo ila ob zagonu, 1-javi odsotnost naprave ob zagonu,

2-informacije o napravi

Port: PortA, PortB, PortC, PortD, PortE

nBit: števila od 0 do 7

nBitA in nBitB: od 0 do 7, vendar za smotrnost morata biti oba bita razli na

BitState: 0 ali 1

DirState: 0 za mirovanje, 1 za vrtenje v + smer, 2 za vrtenje v – smer

Num: število od 0 do 255

Ch: od Ch0 do Ch12, glej tabelo (Tabela 5.1)

dbDelay: katerokoli pozitivno število npr 5, 5.543, 0.227 ... Decimalna

mesta v programski kodi lo imo z decimalno piko.

Page 41: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

29

5.11 Krmiljenje kora nega motorja

Za krmiljenje kora nega motorja potrebujemo na vmesnik pritrjeno H-krmilje, in

kora ni motor. Program poženemo s klikom na

Kora ni motor vežemo na vmesnik tako, kot kaže slika (Slika 5.20).

Slika 5.20: Vezava kora nega motorja

rn vodnik vežemo na D0, zelen vodnik na D1, rde vodnik na D2 in rjav vodnik

na D3.

Enostaven primer kora nega motorja ima štiri korake (Tabela 5.4):

Tabela 5.4: Koraki kora nega motorja

korak D0 D1 D2 D3

1 rna 1 0 1 0

2 zelena 1 0 0 1

3 rde a 0 1 0 1

4 rjava 0 1 1 0

e zamenjamo vrstni red korakov, se motor za ne vrteti v nasprotno smer.

Hitrost vrtenja nadziramo s asom v katerem je dolo eno stanje na pinih.

Page 42: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

30

Poženimo Krmiljenje_kora nega_motorja.sln in prevedimo program (Slika 5.21).

Slika 5.21: Krmiljenje kora nega motorja

Page 43: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

31

Programska koda 5.10: Primer krmiljenja kora nega motorjaint smer; //globalna spremenjivkaprivate: System::Void Form1_Load(System::Object^ sender,System::EventArgs^ e) {

eProDasInit(1); //inicializacija vmesnikatimer1->Enabled=true; //zagon asovnika

}private: System::Void button1_Click(System::Object^ sender,System::EventArgs^ e) {

smer=1; //smer, ki jo dolo i klik na gumb}private: System::Void button2_Click(System::Object^ sender,System::EventArgs^ e) {

smer=2; //smer, ki jo dolo i klik na gumb}private: System::Void button3_Click(System::Object^ sender,System::EventArgs^ e) {

smer=0; //ustavimo kora ni motor}private: System::Void timer1_Tick(System::Object^ sender,System::EventArgs^ e) {

if (smer==1){ //pogoj, koda v zavtih oklepajih se izvrši vprimeru, da je smer enaka 1

DOutNum(PortD, 5);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);//števko,

ki nam jo vrne trackbar1 moramo konvertirati v decimalni zapis (double)DOutNum(PortD, 9);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);DOutNum(PortD, 10);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);DOutNum(PortD, 6);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);}if (smer==2){//pogoj, koda v zavitih oklepajih se izvrši v

primeru, da je smer enaka 2DOutNum(PortD, 6);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);DOutNum(PortD, 10);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);DOutNum(PortD, 9);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);DOutNum(PortD, 5);Wait(System::Convert::ToDouble(trackBar1->Value)/1000);}

}private: System::Void Form1_FormClosing(System::Object^ sender,System::Windows::Forms::FormClosingEventArgs^ e) {

DOutNum(PortD, 0); //vse pine postavimo na stanje 0eProDasClose(); //odklopimo vmesnik

}

Prva vrstica int smer; deklarira globalno spremenljivko, ki jo spreminjamo s kliki

na gumbe.

Page 44: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

32

6 Za etek novega projekta

Za za etek novega projekta sledimo navodilom in slikam.

Nov projekt za nemo tako, da kliknemo file>New>Project (Slika 6.1). Odpre se

nam novo pogovorno okno, v katerem izberemo Windows Forms Aplication,

vpišemo ime novega projekta in pritisnemo gumb OK (Slika 6.2).

Slika 6.1: Za etek novega projekta

Slika 6.2: Okno Windows Forms Application

Page 45: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

33

V nov projekt moramo vklju iti kazalce na funkcije naprave, to naredimo tako, da

dodamo datoteko eProDasCPPLib.cpp med Source Files (izvorne datoteke)

(Slika 6.3 in Slika 6.4).

Slika 6.3: Dodamo datoteko eProDasCPPLib.cpp

Slika 6.4: Dodajanje eProDasCPPLib.cpp

Page 46: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

34

Preden pri nemo s pisanjem našega novega programa, je potrebno vklju iti še

knjižnice. To storimo tako, da vpišemo v datoteko stdafx.h vse knjižnice, ki jih

potrebujemo (Slika 6.5). Zaenkrat potrebujemo le knjižnico naše naprave, ki jo

vpišemo z ukazom #include "eProDasCPPLib.h", ter knjižnico "windows.h", ki jo

potrebujemo za komunikacijo z DLL knjižnicami (Dynamic Link Library), ki smo jih

namestili z namestitvijo programskega paketa eProLab.

Slika 6.5: Vpis knjižnic eProDasCPPLib.h in windows.h

Page 47: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

35

6.1 Gradnja programa »Model uli ne razsvetljave«

V tem poglavju je napisan postopek gradnje programa »Model uli ne

razsvetljave«. Ta program vklju i lu , ko se stemni in jo izklju i, ko je svetlo. Za

vajo moramo na vmesniku priklju iti naslednje elemente:

Fotoupor in 1k upor, ki ga vežemo kot kaže slika (Slika 6.6). Princip delovanja

je enostaven. e na fotoupor pada mo nejša svetloba, bo izhodna napetost

ve ja.

Torej priklju imo en konec fotoupora na +5 V, drugo konec na A0, upor 1k pa

vežemo med A0 in GND.

Slika 6.6: Vezava fotoupora

Formo programa gradimo tako, da najprej izberemo formo Form1.h (Slika 6.7)

Slika 6.7: Izbira forme Form1.h

in dvokliknemo nanjo. Pokaže se nam prazna forma (Slika 6.8), v katero lahko

povle emo gradnike iz orodjarne (ang. Toolbox) po principu povleci in spusti. V

formo Form1 spustimo želene gumbe (ang. Button), oznake (and. Label), in

druge želene elemente.

Page 48: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

36

Slika 6.8: Prazna forma Form1

Preden pa za nemo z dodajanjem gumbov je potrebno dodati ukaz za

inicializacijo vmesnika. Visual C++ nam postreže z rešitvijo. Ob dvokliku na

prazno formo Form1 se nam prikaže dogodek (Programska koda 6.1):

Programska koda 6.1: Zgenerirana koda ob dvokliku na formoprivate: System::Void Form1_Load(System::Object^ sender,System::EventArgs^ e) {

}

Med zavite oklepaje zapišemo tisto, kar se mora zgoditi ob nalaganju tega

programa. V našem primeru je najbolj smotrno, da v istem trenutku, ko se naloži

program, vmesnik povežemo z ra unalnikom z ukazom eProDasInit(1);. Ta

vrstica mora sedaj izgledati tako:

Programska koda 6.2: V pripravljeno kodo vstavimo ukazprivate: System::Void Form1_Load(System::Object^ sender,System::EventArgs^ e) {

eProDasInit(1); }

Page 49: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

37

Krepko je natisnjena koda, ki smo jo dodali ro no, ostalo se samodejno zgenerira

ob dvokliku na Form1.

Preidimo k bistvu našega programa. Program mora biti zasnovan tako, da

neprestano gleda in preverja jakost svetlobe. Ko pade jakost pod dolo eno mejo,

se vklopijo lu i. V ta namen uporabljamo asovnik (Timer), ki ga prav tako

povle emo in spustimo v formo (Slika 6.9).

Slika 6.9: Dodajanje asovnika timer1

Ker asovnik ni viden objekt v formi, se nam pojavi v okvirju pod formo (Slika

6.10).

Page 50: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

38

Slika 6.10: asovnik pod formo

Dvokliknemo nanj in zgenerira se nam koda, ki proži dogodek ob vsakem taktu

oziroma intervalu asovnika (Programska koda 6.3).

Programska koda 6.3: Zgenerirana koda po dvojnem kliku na ikono timer1private: System::Void timer1_Tick(System::Object^ sender,System::EventArgs^ e) { }

Med zavita oklepaja dodamo kodo, ki preveri, e je še dovolj svetlobe na

fotouporu, priklju enem na A1 (Ch0) (Programska koda 6.4).

Programska koda 6.4: Vstavljanje kode med zavita oklepajaprivate: System::Void timer1_Tick(System::Object^ sender,System::EventArgs^ e) {

if ( AIn10bNum(Ch0)<200 ){ DOutNum(PortB, 7); }else DOutNum(PortB, 0);

}

Page 51: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

39

asovnik je privzeto ustavljen (stop). Mi ga bomo zagnali s pritiskom na gumb. Z

drugim gumbom pa ga bomo ustavili (Slika 6.12). Zato dodamo na Form1 dva

gumba.

Gumb povle emo na Form1, izberemo in ga lahko nato poljubno oblikujemo in

nastavimo želeno velikost pisave.

Ob dvojnem kliku na gumb Visual C++ samodejno pripravi vrstico v Form1.h, ki

sproži dogodek. Potrebno je samo vpisati, da je asovnik (timer1) zagnan.

Programska koda 6.5: Koda za vklop asovkinka ob kliku na gumbprivate: System::Void button1_Click(System::Object^ sender,System::EventArgs^ e) {

timer1->Start(); }

Tako smo povedali s pritiskom na gumb asovniku, naj se za ne. Privzeto se

asovnik sproži vsakih 100 ms. To nastavitev lahko tudi popravimo v nastavitvah

asovnika (Slika 6.11).

Slika 6.11: Nastavitve asovnika

Page 52: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

40

Postopek ponovimo še za drugi gumb, ki bo asovnik ustavil (Programska koda

6.6).

Programska koda 6.6: Koda za ustavitev asovnika ob kliku na gumbprivate: System::Void button2_Click(System::Object^ sender,System::EventArgs^ e) {

timer1->Stop(); }

Slika 6.12: Program Model uli ne razsvetljave in koda

Za pregled že napisane kode poženemo Model ulicne razsvetljave.sln v mapi

primeri.

Page 53: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

41

6.2 Lu ke Knight Rider

Verjetno vas ve ina pozna ameriško nadaljevanko Knight Rider (Slika 6.13), kjer

ima avtomobil Davida Hasselhoffa na sprednjem delu avtomobila lu ke, ki se

prižigajo in ugašajo od sredine navzven in/ali iz enega dela na drugi del. Naša

naslednja naloga je, da spišemo takšen program ek, ki bo LED diode na PortB

izrisoval v ve razli nih zaporedjih, odvisno od tega na kateri gumb bomo

pritisnili. Diode vežemo zaporedno z uporom tako kot na sliki (Slika 6.14: Vezava

osmih LED diod).

Imamo torej osem LED diod in sestavimo program, ki bo lu ke prižigal tako kot

na tem avtomobilu. Sestavimo ga tako, da bomo umestili tri gumbe. S prvim

sprožimo LED diode tako, da se bodo prižigale od enega do drugega konca. Z

drugim gumbom pa bomo ugasnili prvi na in prižiganja lu k in sprožili drugi

na in. Tretji na in pa bo enak kot prvi s to razliko, da bo zapisan krajše, s for

zanko.

Slika 6.13: Knight Rider

Slika 6.14: Vezava osmih LED diod

Page 54: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

42

Programska koda 6.7: Koda programa Knight Riderprivate: System::Void button1_Click(System::Object^ sender,System::EventArgs^ e) {

for(int i=0;i<10;i++){ Wait(0.1); DOutBit(PortB, 3, 1); DOutBit(PortB, 4, 1); Wait(0.1); DOutBit(PortB, 3, 0); DOutBit(PortB, 4, 0); DOutBit(PortB, 2, 1); DOutBit(PortB, 5, 1); Wait(0.1); DOutBit(PortB, 2, 0); DOutBit(PortB, 5, 0); DOutBit(PortB, 1, 1); DOutBit(PortB, 6, 1); Wait(0.1); DOutBit(PortB, 1, 0); DOutBit(PortB, 6, 0); DOutBit(PortB, 0, 1); DOutBit(PortB, 7, 1); Wait(0.1); DOutBit(PortB, 0, 0); DOutBit(PortB, 7, 0); Wait(0.1); DOutBit(PortB, 0, 1); DOutBit(PortB, 7, 1); Wait(0.1); DOutBit(PortB, 0, 0); DOutBit(PortB, 7, 0); DOutBit(PortB, 1, 1); DOutBit(PortB, 6, 1); Wait(0.1); DOutBit(PortB, 1, 0); DOutBit(PortB, 6, 0); DOutBit(PortB, 2, 1); DOutBit(PortB, 5, 1); Wait(0.1); DOutBit(PortB, 2, 0); DOutBit(PortB, 5, 0); DOutBit(PortB, 3, 1); DOutBit(PortB, 4, 1); Wait(0.1); DOutBit(PortB, 3, 0); DOutBit(PortB, 4, 0); } }

private: System::Void button2_Click(System::Object^ sender,System::EventArgs^ e) {

for(int i=0; i<10; i++){ DOutNum(PortB, 1); Wait(0.1); DOutNum(PortB, 2); Wait(0.1); DOutNum(PortB, 4);

Page 55: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

43

Wait(0.1); DOutNum(PortB, 8); Wait(0.1); DOutNum(PortB, 16); Wait(0.1); DOutNum(PortB, 32); Wait(0.1); DOutNum(PortB, 64); Wait(0.1); DOutNum(PortB, 128); Wait(0.1); DOutNum(PortB, 64); Wait(0.1); DOutNum(PortB, 32); Wait(0.1); DOutNum(PortB, 16); Wait(0.1); DOutNum(PortB, 8); Wait(0.1); DOutNum(PortB, 4); Wait(0.1); DOutNum(PortB, 2); Wait(0.1); DOutNum(PortB, 1); Wait(0.1); }

DOutNum(PortB, 0); }

private: System::Void button3_Click(System::Object^ sender,System::EventArgs^ e) {

for(int i=0; i<8; i++){//za nemo šteti pri i=0 izvedemo stavke in i pove ujemo za 1 dokler jemanjši od 8// i je v vsakem krogu/zanki število nBit, se pravi številka bita

DOutBit(PortB, i, 1); Wait(0.1); DOutBit(PortB, i, 0); }for(int i=6; i>-1; i--){

//za nemo šteti pri i=6 (7 lu ka od 8), in i zmanjšujemo za 1 dokler jeve ji od -1//i je v vsakem krogu/zanki enak nBit, se pravi številki bita na portuPortB

DOutBit(PortB, i, 1); Wait(0.1); DOutBit(PortB, i, 0); }

For zanka je zelo uporabna, saj nam prihrani veliko pisanja takrat, ko se del kode

pove a ali pomanjša za 1. For zanka je oblike kot v programski kodi (Programska

koda 6.8).

Page 56: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

44

Programska koda 6.8: Prototip for zankefor(za etništevec; pogoj; pove anještevca){stavek;stavek;…}

Takoj za oklepajem se nahaja stavek z za etnim števcem, številom, ki mu

dolo imo za etno vrednost; nato primerjamo v drugem stavku vrednost s

pogojem, ki smo ga postavili (npr.: i<8; ) in nazadnje še pove amo ali

pomanjšamo števec za 1, da se le-ta z vsakim naslednjim obhodom približa

pogoju (npr.:i++ ali i--).

Za pregled že napisane kode poženemo Knight rider.sln v mapi primeri.

Page 57: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

45

6.3 Iskalec svetlobe

V tej nalogi bomo uporabili vse dosedanje znanje programiranja vmesnika.

Sestavimo napravo Iskalec svetlobe (Slika 6.15). Napravo bomo krmilili tako, da

bo obra ala son ne celice proti izvoru svetlobe, da le-te ujamejo najve svetlobe

na svojo površino in tako proizvedejo im ve ji tok. Za pogon bomo uporabili

kora ni motor, ki ga krmilimo preko H-krmilja, ki nam omogo a ve je tokove,

primerne za poganjanje manjših nizkonapetostnih motorjev. Klju ni sestavni deli

na sliki (Slika 6.15): 1 - varnostno stikalo, 2 - son ne celice, 3 - fotoupor, 4 -

kora ni motor, 5 - izhod iz son nih celic, 6 - sponke, priklopljene na analogni

vhod Ch1 s katerimi merimo napetost na son nih celicah.

Slika 6.15: Iskalec svetlobe

Page 58: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

46

Za varnost konstrukcije pa uporabimo stikalo, ki se sproži, e se celice preve

obrnejo v eno ali drugo smer. Shema vezave je na sliki (Slika 6.16).

Slika 6.16: Shema iskalca svetlobe

Osnovna ideja ja, da se smer vrtenja motorja spremeni, e se po primerjavi

zadnjih dveh meritev svetlobe vrednost na analognem vhodu, ki meri jakost

svetlobe, zmanjša. Koda s komentarji in razlago je v programski kodi

(Programska koda 6.9).

Page 59: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

47

Programska koda 6.9: Koda programa Iskalec svetlobe/////////////deklaracija globalnih spremenljivk//////////////////////int svetloba1, svetloba2, svetloba3, smer;/////////////globalne funkcije, ki jih kli emo v asovniku///////////void test(){

if (DInBit(PortB, 0)==1) obrni(); //proženje varnostnstenga stikala}void obrni(){

Wait(0.1);if (smer==1) smer=2;else if (smer==2) smer=1;

}void branje(){ //branje iz izpis na zaslonsvetloba1=svetloba2;svetloba2=AIn10bNum(Ch0);label1->Text= "Svetlost= " + System::Convert::ToString(svetloba2);label3->Text= "Napetost= "+ System::Convert::ToString(AIn10bVol(Ch1))+" V";}void smer1(){

DOutNum(PortD, 5); Wait(0.1); DOutNum(PortD, 9); Wait(0.1); DOutNum(PortD, 10); Wait(0.1); DOutNum(PortD, 6); Wait(0.1); }

void smer2(){ DOutNum(PortD, 6); Wait(0.1); DOutNum(PortD, 10); Wait(0.1); DOutNum(PortD, 9); Wait(0.1); DOutNum(PortD, 5); Wait(0.1); }

//////////////////////konec globalnih funkcij///////////////////////////////////////////////// asovnik, jedro programa////////////////////////private: System::Void timer1_Tick(System::Object^ sender,System::EventArgs^ e) {

branje(); //bere analogne vhodeif (smer==1) smer1();//požene v desnoif (smer==2) smer2();//požene v levotest(); //preveri varnostno stikalobranje();if ((svetloba1>svetloba2)) {//primerjava zadnjih dveh meritev

svetlobeobrni();}

}private: System::Void button1_Click(System::Object^ sender,System::EventArgs^ e) {

smer=1;

Page 60: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

48

timer1->Enabled = true; }

private: System::Void button2_Click(System::Object^ sender,System::EventArgs^ e) {

timer1->Enabled=false; }

private: System::Void Form1_Load(System::Object^ sender,System::EventArgs^ e) {

eProDasInit(1); }

private: System::Void Form1_FormClosing(System::Object^ sender,System::Windows::Forms::FormClosingEventArgs^ e) {

DOutNum(PortD, 0); eProDasClose();

}};}

Za pregled že napisane kode poženemo Iskalec svetlobe.sln v mapi primeri.

Page 61: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

49

7 Sestava programov v konzoli

Vsak programski jezik ima dolo eno sintakso, pravila, kako pišemo program. Kaj

vsebuje vsaka programska koda jezika C++? Vsebuje »zaglavje« (ang. header),

ki vsebuje vrstice #include. Tu programska koda sporo i prevajalniku C++ naj

uporabi imena iz knjižnic, katerih ime (npr. <iostream> ali "eProDasCPPLib.h"

itd.) sledi programska koda (na primer Programska koda 7.1). Prazne vrstice

prevajalnik spregleda in nimajo posebnega pomena. Uporabne so v kolikor

izboljšajo preglednost in na pogled lo ijo »zaglavje« od ostalega dela kode.

Sledi bistvo programa, ki se za ne s funkcijo void main() ali int main().

Funkcijo main prevajalnik tudi prepozna kot za etek programa, ki smo ga napisali

ne glede na to, kje v programski kodi se nahaja.

Pomemben del so z zeleno barvo ozna eni //komentarji, ki jih dodamo

programski kodi, kadar želimo pove ati njeno preglednost in razumljivost, ozna iti

pomembna mesta in razložiti pomen napisanih vrstic. Komentarji se nahajajo za

dvema poševnicama “//” ali med “/*” in “*/”, z njimi pa postanejo kompleksnejši

programi razumljivejši tudi drugim.

V konzolnem na inu se danes programi zdijo neobi ajni, vendar nekateri v tem

vidijo tudi prednost, ker se tako laže vidi sintakso in se posve a le njej. Gumbi,

drsniki in podobni drugi objekti pa tu nimajo pomena, saj je vhodna enota

tipkovnica ali vmesnik

Programska koda 7.1: Primer kode za konzolo//datoteka je bila ustvarjena 25.7.2008#include "eProDasCPPLib.h" // knjižnica, ki upravlja z napravo eProDas#include <iostream> //standardna knjižnica, upravlja s podatki vkonzolivoid main() { eProDasInit(1); //zaženi eProDas napravo

DOutBit(PortB, 1, 1); //to je glavni del našega programa Wait(5); //po akamo 5 sekund eProDasClose();//odklopi eProDas napravo in po isti za seboj}

Page 62: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

50

7.1 Naloge za izpis v konzoli

Naloge so zastavljene tako, da je najprej opisan namen naloge, kaj naj bi bil pri

konkretni nalogi cilj oziroma kon ni rezultat programiranja, nato sledi seznam

potrebnih elektri nih elementov (diod, uporov, stikal, fotouporov itd.). Navodilom

sledi primer celotne kode za program s komentarji in za kodo razlaga novih

ukazov. Podobno kot pri grafi nem na inu se lotimo gradnje tudi za konzolni

na in.

Nov projekt za nemo (Slika 7.1). Izberemo Win32 console application (Slika 7.2),

ga poimenujemo in kliknemo OK, nato next, izberemo Console application in

Empty project ter kliknemo Finish.

Slika 7.1: Izbira novega projekta v konzoli

Vsi primeri programov v konzoli se nahajo v mapi primeri/konzola/ (zaženete

datoteke .sln) in so poimenovani enako kot naslov naloge.

Page 63: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

51

Slika 7.2: Izbira nastavitev projekta

Slika 7.3: Dodajanje nove CPP datoteke

V projekt dodamo še eProDasCPPLib.cpp datoteko (Slika 6.4).

Naloge so razdeljene v štiri sklope:

digitalni izhod, pri katerem se seznanimo s prižiganjem lu k

digitalni vhod, ki ga prožimo s stikalom

analogni vhod za branje napetosti na elementih

izpis meritev v tekstovno datoteko

Page 64: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

52

7.2 Digitalni izhod

Na vmesniku vodnike in elektri ne elemente priklapljamo na brezvija ne sponke,

ozna ene s rko in številko (Slika 7.4).

Slika 7.4: Brezvija ne sponke (ang. Cage-clamp)

7.2.1 Prižiganje lu ke (Digitalni izhod)

Namen naloge:

Napisati program, s katerim vklopimo LED diodo.

Potrebujemo:

LED diodo in upornik med 300 in 1 k .

Najprej je potrebno na vmesnik eProDas priklju iti lu ke. V našem primeru so to

svetle e diode. Za svetle e diode je pomembno, kako jih vežemo. Daljšo nogico

na upor in krajšo na digitalni izhod na PortB (Slika 7.5) in (Slika 5.4).

Slika 7.5: Vezava svetle e diode

Page 65: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

53

Pri predstavljanju sintakse se izogibamo podrobni razlagi vsake vrstice. Zaenkrat

so za nas pomembne samo vrstice, ki dajo na napravo eProDas viden rezultat.

Le-te so v nadaljevanju natisnjene krepko.

Prvo vajo bomo za eli neposredno na vmesniku eProDas. Prepišemo naslednje

vrstice v C++ program in poskušamo doumeti, kaj katera vrstica kode po ne. V

tej prvi nalogi je predstavljena klju na vrstica, ki prižge prvo LED diodo na

»PortB« (na vmesniku ozna eno z B0-B7) na prvem pinu, B0.

Programska koda 7.2: Prižiganje lu ke na digitalnem izhodu//Prižiganje lu ke (digtalni izhod)#include "eProDasCPPLib.h"void main() {

eProDasInit(1); //zaženi eProDas napravo

DOutBit(PortB, 0, 1);//Prižgemo prvo LED diodo na PortB, pin 0 eProDasClose();//odklopi eProDas napravo in po isti za seboj}

Page 66: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

54

7.2.2 Prižiganje ve lu k

Namen naloge:

Napisati program, s katerim vklopimo ve LED diod.

Potrebujemo:

LED diode in upori med 300 in 1k .

Najprej na vmesnik eProDas priklopimo LED diode kot v prejšnji vaji (Slika 5.7),

ali pa priklopimo 8 LED diod na PortB, kot kaže slika (Slika 7.4).

Programska koda 7.3: Prižiganje ve lu k naenkrat//Prižiganje ve lu k naenkrat#include "eProDasCPPLib.h"void main(){ eProDasInit(1); DOutBit(PortB, 0, 1); DOutBit(PortB, 1, 1); DOutBit(PortB, 2, 1); eProDasClose();}

e želimo prižgati še ve lu k, potem samo dodamo vrstice, kar pa je zamudno,

e prižigamo vse lu ke na PortB, pa tudi prižgejo se isto asno, zato obstaja

na in, kako prižgati ve LED diod hkrati v eni vrstici.

Page 67: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

55

7.2.3 Prižiganje ve lu k naenkrat

Namen naloge:

Napisati program, s katerim vklopimo ve LED diod hkrati v eni vrstici.

Potrebujemo:

LED diode in upornike med 300 in 1k . Vežemo jih tako kot pri prejšnjih vajah

(Slika 5.7).

Programska koda 7.4: Prižiganje ve lu k naenkrat for zanka//Prižiganje ve lu k naenkrat#include "eProDasCPPLib.h"void main(){

eProDasInit(1); //zaženi eProDas napravo DOutNum(PortB, 3);

eProDasClose(); //odklopi eProDas napravo }

Prižgali sta se dve LED diodi. Število 3 predstavlja številko, ki se na napravi

eProDas pokaže kot dvojiško. e vpišemo 1 se prižge prva LED dioda, e

vpišemo 15, prve štiri, e vpišemo 255, se prižgejo vse.

Page 68: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

56

7.2.4 Utripanje lu k

Namen naloge:

Napisati program, s katerim vklapljamo in izklapljamo ve LED diod hkrati, tako

da le-te utripajo. Potrebujemo LED diode in upornike med 300 in 1k . Vežemo

jih tako kot pri prejšnjih vajah (Slika 5.7).

Programska koda 7.5: Utripanje lu k//Utripanje lu k#include "eProDasCPPLib.h"void main(){

eProDasInit(1); //zaženi eProDas napravo DOutNum(PortB, 7); DOutNum(PortB, 0); DOutNum(PortB, 7); DOutNum(PortB, 0); DOutNum(PortB, 7); DOutNum(PortB, 0); DOutNum(PortB, 7); DOutNum(PortB, 0); eProDasClose(); //odklopi eProDas napravo }

Utripanja lu k ni opaziti, ker le-te utripajo z zelo veliko frekvenco, zato se uporabi

funkcija Wait(), ki ustavi program za dolo eno število sekund. Med tem asom pa

lu ke na digitalnih izhodih svetijo. V našem primeru lu ke svetijo pol sekunde.

Programska koda 7.6: Utripanje lu k#include "eProDasCPPLib.h"//naloži knjižnicovoid main(){ eProDasInit(1); //zaženi eProDas napravo DOutNum(PortB, 7);Wait (0.5); //po akaj 0.5 sekunde DOutNum(PortB, 0);Wait (0.5); DOutNum(PortB, 7);Wait (0.5); DOutNum(PortB, 0);Wait (0.5); DOutNum(PortB, 7);Wait (0.5); DOutNum(PortB, 0);Wait (0.5); eProDasClose(); }

Page 69: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

57

Lu ke spreminjajo stanje na 0,5 s.

e napišimo program, v katerem bodo lu ke utripnile desetkrat, stokrat ali

ve krat, bomo imeli kar precej dela. V primeru, da se isto stanje ponavlja, je bolj

smiselno, da uporabimo zanko.

V naslednjem primeru bo zanka opravila dvajset ponovitev vklopa in izklopa lu k.

Page 70: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

58

7.2.5 Utripanje lu k (for zanka)

Namen naloge:

Napisati program, s katerim vklapljamo in izklapljamo ve LED diod hkrati tako,

da le-te utripnejo dvajsetkrat.

LED diode in upornike med 300 in 1k vežemo enako kot pri prejšnjih nekaj

vajah.

Programska koda 7.7: Utripanje lu k s for zanko//Utripanje lu k s for zanko#include "eProDasCPPLib.h"void main(){//naloži knjižnicoeProDasInit(1); //zaženi eProDas napravofor (int i=0; i<20; i++){

DOutNum(PortB, 7);Wait(0.5);DOutNum(PortB, 0);Wait(0.5);

}eProDasClose();}

For zanka (Programska koda 7.7, natisnjena krepko) deluje tako, da na za etku

postavi spremeljivko i na ni , potem preveri, e je spremeljivka i manjša od 20,

izvrši kodo med zavitima oklepajema, nato pa i pove a za ena. Ta postopek

ponavlja dokler je i manjši od 20. Ko i doseže število 20 se zanka prekine.

Zanko lahko za vajo spremenimo tudi tako, da bo ponovila svoj potek tridesetkrat.

Page 71: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

59

7.3 Digitalni vhod

Pri teh nalogah je digitalni vhod v vseh primerih prožen z mikrostikalom. Proženje

dogodkov je možno na ve na inov:

dogodek proži napetost +5 voltov ali napetost 0 V na digitalnem vhodu (logi na 1

ali 0), pri tem stikalo vežemo na dva na ina, kot kaže slika (Slika 5.9) in shemi

(Slika 7.8).

dogodek proži prehod na digitalnem vhodu iz 0 na +5 V (Slika 7.6)

dogodek proži prehod na digitalnem vhodu iz +5 na 0 V (Slika 7.7)

7.3.1 Vklop LED diode s stikalom

Namen naloge:

Napisati program, s katerim vklapljamo LED diodo s pritiskom na stikalo.

Potrebujemo:

LED diodo, dva upornika med 300 in 1k ter stikalo vezano kot kaže shema

(Slika 7.6).

Slika 7.6: Vezava stikala in LED diode, vklop pri + 5 V

Vežemo lahko še na drug na in, tako, da se zgodi vklop pri 0 V (Slika 7.7).

Page 72: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

60

Slika 7.7: Vezava stikala in LED diode, vklop pri 0 V

Pri tej nalogi se sre amo s pogojem, da se mora ob sklenjenem stikalu prižgati

LED dioda (Programska koda 7.8).

Programska koda 7.8: Vklop LED diode s stikalom//Vklop LED diode s stikalom#include "eProDasCPPLib.h"void main(){//naloži knjižnicoeProDasInit(1); //zaženi eProDas napravofor (;;){

if (DInBit(PortD, 0)==1)DOutBit(PortB, 0, 1);

else DOutBit(PortB, 0, 0);}}

Za for zanko nismo podali nobenega pogoja, zato se le-ta ponavlja v nedogled

(Programska koda 7.8).

Page 73: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

61

7.3.2 Prekinitev utripanja lu k s stikalom

Namen naloge:

Napisati program, s katerim bodo lu ke neprestano utripale na 0,5 s. Utripanje pa

prekinemo s pritiskom na stikalo.

Potrebujemo:

dva upora od 300 do 1k , mikrostikalo, LED diodo.

Programska koda 7.9: prekinitev utripanja lu k s stikalom#include "eProDasCPPLib.h"void main(){ eProDasInit(1); //zaženi eProDas napravodo {

DOutNum(PortB, 255);Wait(0.5);DOutNum(PortB, 0);Wait(0.5);

}while (DInBit(PortD, 0)==1);//zanka se prekine, e je stikalovklopljenoeProDasClose();}

Program ek prekinemo s pritiskom na stikalo, ki je priklopljeno na D0 in + 5 V

(Slika 7.8 - levo). Stikalo nastavimo tako, da ob pritisku preide iz stanja + 5 V na

stanje 0 V. Kako izgleda vezje in programska koda, e se zanka prekine, ko je

stanje na D0 + 5 V?

Slika 7.8: Vezava stikala na vmesnik + 5 V in 0 V.

Page 74: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

62

7.4 Analogni vhod

Vseh 12 analognih vhodov na napravi eProDas-SC1 je zapisanih v tabeli na

za etku (Tabela 5.1)

Z analognim vhodom lahko merimo napetosti od 0 do + 5 V. V ta namen

uporabimo ukaz AIn10bNum(Ch0), ki prebere in zapiše 10-bitno vrednost

(210=1024) ali ukaz AIn10bVol(Ch0), ki vrnjeno numeri no vrednost že prera una

v napetost po ena bi (Ena ba 5.1).

7.4.1 Branje numeri ne vrednosti in izpis na zaslon

Namen naloge:

Napisati program, ki bo pogledal na analogni vhod in ga izpisal na zaslon.

Prenehanje branja prekinemo s pritiskom na stikalo.

Potrebujemo:

fotoupor, dva 1k upora, stikalo.

Za naslednjo nalogo priklopite na vmesnik fotoupor. Za fotoupor je zna ilno, da

spremeni svoje lastnosti, kadar ga osvetlimo. Osvetljenemu se upornost zmanjša,

zatemnjenemu pa pove a. Fotoupor je lahko vezan na dva na ina, tako kot kaže

slika (Slika 6.6). Vezava na levi strani vrne število bolj proti 1023, ko je fotoupor

osvetljen. Ko ni osvetljen, vrne število, ki gre proti 0. Vezava na desni pa ravno

obratno. Ko je fotoupor osvetljen, vrne število, ki gre proti 0 in ko ni osvetljen,

proti 1023 (Programska koda 7.10).

Page 75: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

63

Programska koda 7.10: Branje numeri ne vrednosti in izpis na zaslon#include "eProDasCPPLib.h"#include <iostream>//naloži knjižnico, ki upravlja z vhodi natipkovnici in izhodi na zaslonvoid main () {

eProDasInit(1); //zaženi eProDas napravoint mejni_vklop;

std::cout<<"Vpisi mejni vklop med 200 in 800:\n";std::cin>>mejni_vklop; //sprejem iz tipkovnice

do{double svetlost;svetlost = AIn10bNum(Ch1);

if (svetlost <= mejni_vklop){//pogojni stavekDOutNumHL (PortB, 255);

}else DOutNumHL (PortB, 0);

std::cout<<"Stevilo analognega vhoda je: "<<svetlost<<"\n";}while (DInBit(PortD, 0)==1);eProDasClose();

}

Izpis na zaslon poteka tako, da zapišemo std::cout, sledita dva operatorja <<,nato pa besedilo v dvojnih narekovajih. e želimo izpisati še kaj, samo dodamo

operatorja in besedilo v narekovajih. Namesto besedila v narekovajih lahko

uporabimo spremenljivko, katere vsebina se potem izpiše na zaslon. Stavek

kon amo s podpi jem »;«.

Page 76: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

64

7.4.2 Branje analognega vhoda in izpis napetosti na zaslon

Namen naloge:

Napisati program, s katerim preberemo napetosti in jih izpišemo na zaslon

(Programska koda 7.11).

Potrebujemo potenciometer, ki ga priklopimo na A0 (Ch0), kot kaže slika (Slika

5.16). Program prekinemo s pritiskom na stikalo, vezano na D0.

Programska koda 7.11: Branje analognega vhoda in izpis napetosti na zaslon//merjenje napetosti na analognem vhodu#include "eProDasCPPLib.h"#include <iostream>using namespace std; //to vrstico napišemo, da nam ni potrebno pisatistd::coutvoid main () {

eProDasInit(1); //zaženi eProDas napravo

do{cout<<"Napetost na analognem vhodu je:";double num;num = AIn10bNum(Ch0);double napetost;napetost= AIn10bVol(Ch0);

cout<< napetost<<"\tV\n"; //\t je tabulator \n pa nova vrstica}while (DInBit(PortD, 0)==0); //stikalo za prekinitev izvajanja

programaeProDasClose();

}

Page 77: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

65

7.4.3 Model uli ne razsvetljave v konzolskem na inu

V tem primeru bomo uporabili kombinacijo analognega vhoda in digitalnega

izhoda.

Vezje vežemo kot na sliki (Slika 7.9).

Slika 7.9: Vezava modela uli ne razsvetljave

Programska koda 7.12: Model uli ne razsvetljave//model uli ne razsvetljave//ta program vklopi lu i, ko postane pretemno#include "eProDasCPPLib.h"#include <iostream> //vkljucevanje knjiznice za vhod iz tipkovnice inizhod na zaslonvoid main () {

//naloži knjižnicoeProDasInit(1); //zaženi eProDas napravoint mejni_vklop;

std::cout<<"Vpisi mejni vklop med 200 in 800:\n";std::cin>>mejni_vklop; //sprejem iz tipkovnice

do{int svetlost;svetlost = AIn10bNum(Ch1);

if (svetlost <= mejni_vklop){//pogojni stavekDOutNumHL (PortB, 255);

}else DOutNumHL (PortB, 0);

std::cout<<"Stevilo analognega vhoda je: "<<svetlost<<"\n";}while (DInBit(PortD, 0)==0);eProDasClose();

}

Page 78: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

66

7.5 Shranjevanje podatkov meritev

Pri merjenju karakteristike elektronskih elementov pogosto potrebujemo ve

zaporednih meritev v kratkem asu, podatke pa potem želimo obdelati kasneje v

kakšen drugem programu, kot je na primer Excell in izdelati graf poteka meritve.

V tem primeru potrebujemo program, ki nam bo podatke meritev shranil v

datoteko.

7.5.1 Shranjevanje vrstice v datoteko

Preden se lotimo zapisovanja meritev v datoteko, najprej poglejmo, kako

zapišemo podatke v datoteko (Programska koda 7.13). Za zapisovanje v

datoteko potrebujemo knjižnico fstream, ki jo vklju imo v projekt z ukazom

#include <fstream> v zaglavju (ang. header) programa.

Programska koda 7.13: Shranjevanje vrstice v datoteko//zapis v datoteko#include "eProDasCPPLib.h"#include "iostream"#include "fstream"//knjižnica za delo z datotekamiusing namespace std; //to vrstico napišemo, da nam ni potrebno pisatistd::coutvoid main () {

eProDasInit(1); //zaženi eProDas napravoofstream datoteka;datoteka.open ("meritve.txt");datoteka << "Tu bomo shranili podatke! \n";datoteka.close();//zapremo in shranimo datotekocout<<"\"Tu bomo shranili podatke\", je bilo zapisano v datoteko

meritve.txt";eProDasClose();

}

Page 79: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

67

7.5.2 Shranjevanje meritve praznjenja kondenzatorja v datoteko

Naloga:

Sestaviti vezje in spisati program, ki bo ob vklopu stikala prebral napetost na

analognem vhodu in zapisal njegovo vrednost v datoteko kondenzator.txt

(Programska koda 7.14).

Potrebujemo:

kondenzator, dva 1 k upornika, dve stikali

Vezje vežemo kot na shemi (Slika 7.10):

Slika 7.10: Vezava vezja za merjenje praznjenja kondenzatorja

Page 80: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

68

Programska koda 7.14: Zapis meritve praznjenja kondenzatorja v datoteko//zapis meritve praznjenja kondenzatorja v datoteko#include "eProDasCPPLib.h"#include "iostream"#include "fstream"//knjižnica za delo z datotekamiusing namespace std; //to vrstico napišemo, da nam ni potrebno pisatistd::coutfloat napetost();void main () {

eProDasInit(1); //zaženi eProDas napravo

ofstream datoteka;datoteka.open ("kondenzator.txt");//ustvari in odpre datoteko

kondenzator.txtdatoteka << "zaporedna vrstica\t napetost\n";//zapiše prvo

vrstico

while(DInBit(PortD, 0)==1){

}for(int i=0;DInBit(PortD, 0)==0; i++){

//for zanka kli e funkcijo napetost() dokler je stikalovklopljeno

datoteka << i <<"\t\t"<< napetost() <<"V\n";//izpis vdatoteko

}

datoteka.close();cout<<"Podatki zapisani v datoteko kondenzator.txt";//obvestilo o

zapisu v datotekoWait(2); //pred izhodom iz programa po akamo 2 sekundi, da lahko

preberemo obvestilo

eProDasClose();}float napetost(){

float temp=AIn10bNum(Ch0);float vol=temp*5/1024;return (vol);

}

V tej nalogi smo spoznali eno novost, in sicer inicializacijo funkcije, ki jo kli emo

iz glavne funkcije main(). To je funkcija napetost(), ki prebere numeri no

vrednost na analognem vhodu Ch0, jo pretvori v napetost in le-to vrne nazaj

funkciji main().

Page 81: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

69

8 Zaklju ek

Kljub relativni zapletenosti C++ programskega jezika smo prišli do ukazov, ki niso

bistveno bolj zahtevni in zapleteni kot v drugih jezikih. C++ je na ta na in enako

uporaben za za etnike kot ostali programski jeziki, ki so že bili predstavljeni v

okviru projekta Comlab 2. Pou evanje u encev, ki se s programiranjem sre ajo

prvi , je s pomo jo uporabe vmesnika olajšano. Suhoparnost pou evanja je z

otipljivimi rezultati, v obliki utripajo ih lu k, vrte ih se motorjev, senzorjev,

omiljena, e ne kar odstranjena. Motiviranje u encev zaradi konkretne uporabe

programiranja ni ve problem, zanimanje za iskanje konkretnih rešitev in

reševanje konkretnih problemov pa naraste. Od tu naprej je potrebno pou evanje

programskega jezika nadaljevati s poglobljenim spoznavanjem sintakse kot tudi

specifike razvojnega okolja (uporaba kazalcev, polj, nizov itd.). Uporaba

vmesnika samega pa je še vedno lahko del kompleksnejšega programiranja v

C++ programskem jeziku.

Program pou evanja programiranja C++ preko vmesnika eProDas-SC1 ni bil

evalviran, za kar je v obsegu ene diplomske naloge premalo asa. Za

nadaljevanje bi bilo potrebno najti šole, ki vklju ujejo u enje programskega jezika

C++ (npr. srednje tehniške šole). Druga možnost pa je vklju evanje tega te aja v

osnovne šole, kjer bi bil to izbirni predmet ali interesna dejavnost (robotika,

programiranje itd.).

Page 82: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

70

9 Viri:

[1] Mahni V., "Pou evanje programiranja na univerzitetnem študiju

ra unalništva in informatike: izkušnje predavatelja in študentov",

Organizacija, letnik 37, številka 8, oktober 2004, str.507

[2] Kölling, M., "The Problem of Teaching Object-Oriented Programming, Part

1: Languages," Journal of Object-Oriented Programming, 11(8): 8-15, 1999.

[3] http://en.wikipedia.org/wiki/Lego_Mindstorms zadnji obiskana 16.8.2008

[4] KOCIJAN , Slavko, RIHTARŠI , David. Using programming

environments for basic robotic examples. V: IN-ŠAIN, Marina

(ur.). Proceedings : conference : savjetovanje. Rijeka: MIPRO, cop.

2008, str. 253-257

[5] Irena Nan ovska Šerbec, Poskusna uvedba programiranja v paru pri

pou evanju programiranja. IKT - SIRIKT 2008, Kranjska Gora, 16.-19.april

2008, Ljubljana, Arnes, 2008. str. 134.

[6] Francis Glasbsborow, C++ od za etka: uvod za programerje, Pasadena,

Ljubljana 2007. Uvod, poglavje 0.

[7] http://www.cplusplus.com/info/history.html zadnji obiskana 16.8.2008

[8] http://baheyeldin.com/technology/teaching-kids-programming.html

25.8.2008

[9] Byron S. Gottfried, Schaum's Outline of Theory and Problems of

Programming with C, McGraw-Hill inc.,1990

[10] KOCIJAN , Slavko, KUŠAR, Tomaž. Introducing programming languages

through data acquisition examples. V: IN-ŠAIN, Marina

(ur.). Proceedings: conference: savjetovanje. Rijeka: MIPRO, cop. 2008, str.

258-261

[11] http://e-prolab.com/en/eqdaq/eprodas_plat/eprodasplat.html 25.8.2008

[12] http://e-prolab.com/en/index.html 22.8.2008

[13] http://www.e-prolab.com/en/progdas/chapter_4/digital_ports.html 25.8.2008

[14] http://e-prolab.com/en/conf/papers_pdf/jozef.pdf 15.9.2008

[15] http://www.e-prolab.com/en/downloads.html 22.8.2008

Page 83: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

71

[16] http://e-prolab.com/en/progdas/chapter_1/install_drivers_dll.html 12.8.2008.

Page 84: DiplomaPrimozHladnik Upravljanje Pisano u c++

enje programskega jezika C++ na primerih s podro ja merjenja in krmiljenja P. Hladnik

72

10 Priloge na zgoš enki

diploma v pdf in word obliki: diplomaPrimozHladnik.pdf in

diplomaPrimozHladnik.doc

knjižnice eProDasCPPLib.h in eProDasCPPLib.cpp v mapi libraries

»solution« primeri za zagon v mapi primeri

video posnetki v mapi video