55
SVEU ˇ CILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RA ˇ CUNARSTVA DIPLOMSKI RAD br. 022 Sustav za udaljeno ispitivanje mjernih instrumenata Hrvoje Zeba Zagreb, listopad 2011.

Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

SVEUCILIŠTE U ZAGREBUFAKULTET ELEKTROTEHNIKE I RA CUNARSTVA

DIPLOMSKI RAD br. 022

Sustav za udaljeno ispitivanje

mjernih instrumenataHrvoje Zeba

Zagreb, listopad 2011.

Page 2: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

iii

Page 3: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Umjesto ove stranice umetnite izvornik Vašeg rada.

Da bi ste uklonili ovu stranicu obrišite naredbu\izvornik.

Page 4: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

SADRŽAJ

1. Uvod 1

2. Umjeravanje 2

2.1. Udaljeno umjeravanje . . . . . . . . . . . . . . . . . . . . . . . . . . 2

3. Opis eCal sustava 4

3.1. Arhitektura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3.2. Komponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3.2.1. Komunikacijski protokol . . . . . . . . . . . . . . . . . . . . 5

3.2.2. Kripto modul . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3.2.3. Remote Procedure Call komponenta . . . . . . . . . . . . . . 10

3.2.4. Arhitektura poslužitelja . . . . . . . . . . . . . . . . . . . . . 11

3.2.5. Arhitektura klijenta . . . . . . . . . . . . . . . . . . . . . . . 13

3.2.6. GPIB sabirnica . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.2.7. eCal skriptni jezik . . . . . . . . . . . . . . . . . . . . . . . 16

4. Pregled Virtual Instrument Software Architecture specifikacije 17

4.1. Virtual Instrument Software Architecture sucelje . . . . . . . . . . . 17

4.2. Nacini rada sa aspektima . . . . . . . . . . . . . . . . . . . . . . . . 19

4.3. Adresiranje uredaja unutar VISA specifikacije . . . . . . . . . . . . . 19

5. Pregled Java Native Interface specifikacije 21

5.1. Nacin rada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

5.2. Povezivanje sa programskom potporom . . . . . . . . . . . . . . .. 22

6. Povezivanje VISA specifikacije sa eCal sustavom 24

6.1. Potrebne izmjene . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

6.2. Komunikacija VISA protokolom . . . . . . . . . . . . . . . . . . . . 25

6.2.1. void openSession() . . . . . . . . . . . . . . . . . . . . . . . 25

v

Page 5: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

6.2.2. void closeSession() . . . . . . . . . . . . . . . . . . . . . . . 26

6.2.3. String[] scanDevices() . . . . . . . . . . . . . . . . . . . . . 26

6.2.4. int openDevice(String instrAddress) . . . . . . . . . . . .. . 26

6.2.5. void clearDevice(int sessionId) . . . . . . . . . . . . . . . .. 26

6.2.6. String sendCommand(int sessionId, String cmdString) . . . . 26

6.2.7. void writeCommand(int sessionId, String cmdString). . . . . 26

6.2.8. void lockDevice(int sessionId) . . . . . . . . . . . . . . . . .26

6.2.9. void unlockDevice(int sessionId) . . . . . . . . . . . . . . .. 27

6.2.10. Obuhvacanje funkcionalnosti . . . . . . . . . . . . . . . . . . 27

6.3. Relevantne izmjene HSM klase . . . . . . . . . . . . . . . . . . . . . 27

6.4. Demonstracija rada eCal sustava sa VISA protokolom . . . .. . . . . 28

7. Zaklju cak 32

Literatura 33

A. Primjer jednostavne korisnicke skripte 35

B. Ispis visa.java datoteke 36

C. Ispis visa.cpp datoteke 38

D. Izmjene icalClient.java datoteke - Unified Diff format 44

vi

Page 6: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

1. Uvod

Znanost o mjerenju je vrlo bitan aspekt svakodnevnog životai znanosti. Omogu-

cuje nam razmjenu svih dobara koja se na bilo koji nacin mogu mjeriti jer nam daje

postupke kojima je moguce objektivno odrediti te mjerene velicine. Razvojem teh-

nologije, otvaraju se mogucnosti za nove postupke mjerenja pa se znanost o mjerenju

neprestano usavršava [1].

Da bi se svi oni, koji sudjeluju u razmjeni mjerenih dobara, mogli sporazumjeti oko

mjera, potrebno je uvesti referentne mjere. U tu svrhu uveden je medunarodni metricki

sustav mjernih jedinica (SI).

Tocnost i ispravnost mjerenja su izuzetno važnicimbenici. U svakodnevnom ži-

votu o njima ovisi odredivanje vrijednosti dobara koja se razmjenjuju, a u znanosti o

njima ovisi kvaliteta zakljucaka dobivenih odredenom metodologijom. Ovicimbenici

ovise o tocnosti i ispravnosti uredaja ili etalona koji se koriste u postupku mjerenja pa

i oni sami moraju biti tocni i ispravni. Da bi se to postiglo, navedene mjerne uredaje je

potrebno umjeriti, a etalone izravno usporediti [1].

Iz navedenih razloga, bitno je uspostaviti hijerarhiju mjerodavnih tijela zaduže-

nih za umjeravanje koja uživaju povjerenje svih ukljucenih u taj proces. Hijerarhijska

struktura mjerodavnih tijela daje mjernu slijedivost od najviše medunarodne razine pa

do krajnjih mjeriteljskih laboratorija. Prilikom umjeravanja uredaja ili izravne uspo-

redbe etalona niže razine, izdaju se potvrde, tj. umjernice.

Razvoj komunikacijskih mreža i racunalnih tehnologija daje nove mogucnosti u

postupcima umjeravanja koji bi mogli zaobici nedostatke danas korištenih postupaka.

1

Page 7: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

2. Umjeravanje

Da bi se mjerni uredaj umjerio, mora se izdvojiti iz okoline u kojoj vrše mjerenja i

transportirati do laboratorija u kojemu se vrši umjeravanje. Ova metoda ima nekoliko

nedostataka. Najocitiji je da se instrument ne umjerava u okolini u kojoj se koristi,

a u kojoj mogu postojati specificni cimbenici koji utjecu na rad instrumenta i stvaraju

sistematsku pogrešku. Ticimbenici mogu biti temperatura, relativna vlažnost i pritisak

zraka, razna elektromagnetska zracenja, itd. Nadalje, transport uredaja može imati

nepredvidljive posljedice na tocnost i ispravnost mjernog uredaja te unosi dodatnu

mjernu nesigurnost.

2.1. Udaljeno umjeravanje

Ideja udaljenog umjeravanja se zasniva na mogucnosti transporta mjernog uredaja

koji se koristi za umjeravanje na lokaciju gdje se nalazi uredaj koji treba umjeriti. Da

bi se održala mjerna slijedivost koja implicitno postoji kod standardne metode, uredaj

koji se transportira iz laboratorija mora biti adekvatno zašticen od vanjskihcimbenika

koji mogu utjecati na postupak umjeravanja te cijeli postupak mora biti u što vecoj

mjeri automatiziran da bi se smanjila mogucnost ljudske pogreške [1].

Racunalne tehnologije današnjice nam omogucavaju realizaciju ovakvog sustava.

Mobilne mreže u kombinaciji sa klijent-poslužitelj paradigmom omogucavaju pokret-

ljivost i neovisnost o lokaciji umjeravanja. Sustav javnihkljuceva (eng. Public Key

Infrastructure - PKI) omogucava zaštitu mjernog postupka od neovlaštenog uplitanja

te mjernu slijedivost. Komponente za povezivanje mjernih uredaja sa racunalom omo-

gucavaju njihovo kontroliranje i pracenje kroz automatizirana ili polu-automatizirana

programska rješenja. Razvoj skriptnih jezika poput Javascript-a i jednostavnost njiho-

vog povezivanja sa ostalim programskim rješenjima omogucuje prilicno jednostavno

definiranje i širok spektar postupaka umjeravanja.

2

Page 8: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Udaljeno umjeravanje zahtjeva promjenu paradigme umjeravanja, ali u konacnici

smanjuje troškove vlasnicima mjernih uredaja i pojednostavljuje cijeli postupak umje-

ravanja.

3

Page 9: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

3. Opis eCal sustava

Koristeci tehnologije navedene u proslom poglavlju, kao rezultat višegodišnjeg

projekta na Zavodu za osnove elektrotehnike i elektricka mjerenja Fakulteta elektro-

tehnike i racunarstva Sveucilišta u Zagrebu razvijeno je programsko okružje "eCal" za

podršku udaljenom ispitivanju i umjeravanju mjernih uredaja. Taj sustav, koji je po-

drobnije opisan u doktorskoj disertaciji [1], automatizira postupak umjeravanja mjer-

nih uredaja koja se mogu obavljati na lokaciji gdje se sam uredaj nalazi, bez potrebe

za njegovim preseljenjem u umjerni laboratorij.

Postupak umjeravanja u opcem slucaju se svodi na spajanje mjernih uredaja za

odredeni postupak umjeravanja, prikljucivanje uredaja na prijenosno racunalo, autori-

zaciju nadležne osobe u sustavu te pokretanje procedure za taj postupak umjeravanja

[1].

3.1. Arhitektura

Sustav je organiziran kao modificirana klijent-poslužitelj arhitektura u kojoj i pos-

lužitelj i klijent imaju aktivnu ulogu. Poslužiteljski diosustava je izraden u C++ pro-

gramskom jeziku [2] i projektiran je za operacijske sustavesukladne POSIX normi

(eng. Portable Operating System Interface for Unix) [3]. Koristi više-dretvenost za

obradu zahtjeva sa klijenata i izvršavanje skripti za umjeravanje te MySQL kao bazu

podataka.

Klijentski dio sustava je izraden u Java programskom jeziku [4]. Sucelje klijent-

skog dijela prikazuje HTML sadržaj (eng. Hypertext Markup Language) dohvacen sa

poslužitelja za što se koristi Cobra komponenta Lobo projekta [5]. Klijent djeluje kao

proxy izmedu skripti za umjeravanje koje se izvršavaju na poslužitelju i lokalno spoje-

nih mjernih uredaja.

4

Page 10: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Komunikacija se odvija preko TCP/IP sucelja (eng. Transmission Control Proto-

col/Internet Protocol) [6], dvosmjerna je i zašticena posebno definiranim protokolom

slicnim SSL-u (eng. Secure Sockets Layer) [7]. U smjeru klijentposlužitelj, klijent

šalje zahtjeve za objektima na poslužitelju koji mogu biti HTML sadržaj ili skripta

koja se treba izvršiti. Klijent nema nacina znati kakav je objekt u pitanju. Posluži-

telj prema klijentu šalje RPC zahtjeve [8] koji mogu biti vezani za komunikaciju sa

mjernim uredajima ili za kontrolu samog klijenta.

3.2. Komponente

U ovom poglavlju su opisane glavne komponente koje sacinjavaju eCal sustav. Re-

lacije u bazi te dio sustava koji su zaduženi za manipulacijupodacima u ovom kontek-

stu nisu bitni pa se nece razmatrati.

3.2.1. Komunikacijski protokol

Protokol je podijeljen u dvije faze. U prvoj fazi se autorizira klijent i razmje-

njuju kljucevi te se provjerava dostupnost RPC (eng. Remote Procedure Call) funk-

cija na klijentu. Druga faza obuhvaca razmjenu RPC zahtjeva i odgovora u smjeru

poslužitelj-klijent te razmjenu zahtjeva za objektima i vracanjem objekta u smjeru

klijent-poslužitelj. Redoslijed poruka po fazama je prikazan na slici 3.1.

Ukoliko pri dešifriranju bilo koje od poruka dode do greške, komunikacija se pre-

kida. U nastavku su opisane strukture pojedinih poruka.

Digital seal - digitalna omotnica

Digitalna omotnica se pojavljuje u nekoliko poruka koje se javljaju u eCal sus-

tavu, a ima opci oblik koji je opisan tablicom 3.1. Korišteni kriptografski algoritmi

su AES (eng. Advanced Encryption Standard) u CBC nacinu rada (eng. Cipher-block

chaining) te RSA (eng. Rivest, Shamir and Adleman).

Digital seal - podaci o klijentu

Tablica 3.2 prikazuje polja, njihove velicine te opise uDigital seal - podaci o ko-

risnikuporuci. Sadržaj digitalne omotnice u ovoj poruci je prikazan tablicom 3.3.

5

Page 11: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Slika 3.1: Redoslijed poruka u eCal komunikacijskom protokolu

Tablica 3.1: Digital seal - opci oblik

Naziv Velicina u byte-ovima Opis

enc_msg_size 4 Velicina enc_msg dijela

enc_msg enc_msg_size AES-om enkriptirana poruka

enc_iv_size 4 Velicina enc_iv dijela

enc_iv enc_iv_size RSA-om kriptiran AES kljuc i IV vektor

enc_sha1_size 4 Velicina enc_sha1 dijela

enc_sha1 enc_sha1_size RSA-om kriptiran SHA1(enc_msg)

Digital seal - podaci za inicijaciju veze

Tablica 3.4 prikazuje polja, njihove velicine te opise uDigital seal - podaci za

inicijaciju vezeporuci. Sadržaj digitalne omotnice u ovoj poruci je prikazan tablicom

3.5.

Izgled poruka u drugoj fazi

Drugu fazu karakteriziracinjenica da poruke i odgovori imaju isti oblik. Taj oblik

je opisan tablicom 3.6. Razlikuje ih se potypepolju cije su vrijednosti opisane u tablici

3.7. info polje daje dodatne informacije, ukoliko su potrebne.

Ukoliko se radi o zahtjevu za objektom, udatapolju se nalazi putanja do zahtjeva-

6

Page 12: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Tablica 3.2: Digital seal - podaci o klijentu

Naziv Velicina u byte-ovima Opis

size 4 Velicina content dijela

content size Sadržaj digitalne omotnice

Tablica 3.3: Sadržaj digitalne omotnice u poruciDigital seal - podaci o klijentu

Naziv Velicina u byte-ovima Opis

challenge 4 Broj koji je poslužitelj poslao nakon inicijalizacije veze

user_id 20 Identifikacijska oznaka korisnika

rpc_xml_size 4 Velicina rpc_xml dijela

rpc_xml rpc_xml_size Klijentska XML RPC struktura

nog objekta. Uinfo polju se mogu naci dvije vrijednosti. Odnose se na situaciju u kojoj

je zahtjevani objekt skripta, a neka druga skripta je vec aktivna. U ostalim situacijama

ovo polje nema efekta. Moguce vrijednosti su:

– 0 – samo vrati prikladan odgovor,

– 1 – zaustavi aktivnu skriptu i pokreni zahtjevanu.

Ako je u pitanju odgovor na taj zahtjev, onda seinfo polju nalazi informacija o

statusu zahtjeva. Moguci statusi su:

– 0 – objekt je HTML dokument i nalazi se udatapolju,

– 1 – objekt je skripta koja je upravo pokrenuta (datapolje je prazno),

– 2 – objekt nije pronaden (datapolje je prazno),

– 3 – objekt je skripta ali je neka druga skripta aktivna pa se ništa nije desilo.

U RPC zahtjevu i odgovoru,info polje nema efekta. XML (eng. Extensible Markup

Language) RPC zahtjev i odgovor se nalaze udatapolju.

3.2.2. Kripto modul

Da bi se osigurala potpuna zaštita i slijednost mjernog postupka, na uredajima je

potrebno imati poseban modul koji se nalazi izmedu uredaja i sabirnice na koju je spo-

jen. Uloga mu je da u sebi drži identifikacijske oznake uredaja te da sa poslužiteljem

preko klijenta na kojega je spojen, ali bez njegovog utjecaja, uspostavi zašticenu vezu.

HSM modul (eng. Hardware Security Module) može raditi u zašticenom nacinu

rada u kojemu kriptira i dekriptira sav promet prema mjernomuredaju te može raditi u

7

Page 13: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Tablica 3.4: Digital seal - podaci za incijaciju veza

Naziv Velicina u byte-ovima Opis

size 4 Velicina content dijela

content size Sadržaj digitalne omotnice

Tablica 3.5: Sadržaj digitalne omotnice u poruciDigital seal - podaci za inicijaciju veze

Naziv Velicina u byte-ovima Opis

challenge 4 Broj koji je poslužitelj poslao nakon inicijalizacije veze

aes_key_size 4 Velicina AES kljuca u bitovima

aes_key aes_key_size / 8 AES kljuc za kriptiranje prometa

aes_iv 16 CBC Initialization vektor

pass-throughnacinu u kojemu propušta sav promet prema uredaju.

Ukoliko se modul nalazi u zašticenom nacinu rada, u nezašticeni je moguce preci

iskljucivo pozivomhsm_clear()funkcije.

Naredbe koje HSM modul razumije imaju oblik:*HSM:cmd:arg!. arg su argu-

menti za pojedinu naredbu dokcmdmože biti:

– ID - zahtjev za identifikacijom,

– AUTH - zahtjev za autorizacijom,

– COMM - naredba koja se treba proslijediti uredaju,

– SIGN - zahtjev za potpisivanjem podataka koji su prošli prema i od uredaja

Odgovori imaju opci oblik *HSM:response!gdje responseovisi o naredbi koja se

izvršila. Moguca stanja i njihovi prijelazi unutar HSM modula se mogu vidjeti na slici

3.3. U slucaju greške, HSM modul vracaERRORunutarresponsepolja.

ID naredba

ID naredba ne prima nikakve argumente te uresponsepolju vraca znakovni niz

identifikacije uredaja.

AUTH naredba

AUTH naredba kao argument uzimaBase64kodiranu digitalnu omotnicu. Opci

izgled omotnice je opisan u poglavlju 3.2.1. Vrijednosti sadržane u omotnici su dane

tablicom 3.8. HSM modul potom odgovara drugom digitalnom omotnicom koja je

8

Page 14: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Tablica 3.6: Oblik poruke sa zahtjevima i odgovorima

Naziv Velicina u byte-ovima Opis

sequence 4 Redni broj poruke ili odgovora

info 4 Dodatne informacije o poruci

type_size 1 Tip poruke

data_size 4 Velicina data dijela

data data_size Sadržaj poruke ili odgovora

Tablica 3.7: Moguci tipovi poruka

Vrijednost Opis

1 Zahtjev za objektom

2 Odgovor na zahtjev za objektom

3 RPC zahtjev

4 RPC odgovor

opisana u tablici 3.9. Odgovor se nalazi uresponsepolju i kodiran je saBase64algo-

ritmom [9]. Nakon izmjene ovih poruka komunikacija izmedu HSM modula i poslu-

žitelja je zašticena. Redoslijed izmjene poruka se može vidjeti na slici 3.2.

Tablica 3.8: Sadržaj digitalne omotnice u argumentima AUTH naredbe

Naziv Velicina u byte-ovima Opis

challenge 4 Slucajni broj koji generira poslužitelj

aes_key 16 AES kljuc za kriptiranje komunikacije

aes_iv 16 CBC Initialization vektor

Tablica 3.9: Sadržaj digitalne omotnice uresponsepolju AUTH naredbe

Naziv Velicina u byte-ovima Opis

challenge 4 Slucajni broj koji dobiven od poslužitelja

COMM naredba

Ova naredba kao argument prima podatke enkriptiraneAES[10] kljucem postav-

ljenim pri AUTH naredbi te kodiraneBase64algoritmom. Dekriptirani podaci se šalju

uredaju. Njegov odgovor se enkriptira istimAESkljucem te se kodiraBase64algorit-

mom i šalje se poslužitelju uresponsepolju.

SIGN naredba

SIGN naredba uresponsepolju vraca SHA-1sumu podataka koji su prošli kroz

HSM modul. TaSHA-1suma je enkriptiranaRSA[11] algoritmom koristeci privatni

kljuc modula te kodiranaBase64algoritmom.

9

Page 15: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Slika 3.2: Redoslijed poruka pri AUTH naredbi

Slika 3.3: Stanja i njihovi prijelazi u HSM modulu

3.2.3. Remote Procedure Call komponenta

RPCje realiziran kaoXML (eng. eXtensible Markup Language) struktura zahtjeva

i odgovora. Podržava jednostavne tipove podataka kao što suinteger, string i float te

hijerarhije struktura istih.

Klijent i poslužitelj imaju popisRPCfunkcija te se prilikom uspostave veze ti po-

pisi usporeduju. Ukoliko klijent nema svu funkcionalnost koju poslužitelj zahtjeva,

dolazi do prekidanja veze.

Sintaksa i, do odredene mjere, semantika se provjeravajuDTD-om (eng. Document

Type Definition) [12] koji je naveden u nastavku.

<!DOCTYPE rpc [

<!ELEMENT rpc (function+)>

10

Page 16: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

<!ELEMENT function (item*)>

<!ELEMENT item (#PCDATA|item)*>

<!ATTLIST rpc version CDATA #REQUIRED>

<!ATTLIST function name ID #REQUIRED>

<!ATTLIST item name CDATA #REQUIRED>

<!ATTLIST item type (string|integer|float|struct) #REQUIRED>

]>

Ovaj RPC podržava primitivne tipove i hijerarhijske strukture primitivnih tipova.

Popis RPC funkcija koje poslužitelj zahtjeva su navedene u nastavku:

– client_display() – prikaži odredeni objekt unutar klijentskog sucelja,

– client_quit() – bezuvjetno zaustavljanje klijenta,

– hsm_scan() – pretraži sabirnicu i vrati popis pronadenih mjernih uredaja,

– hsm_send() – pošalji naredbu uredaju i vrati odgovor,

– hsm_write() – pošalji naredbu uredaju bezcekanja na odgovor,

– hsm_clear() – resetiraj uredaj,

– client_input_float() – zahtjevaj od klijeta unos broja s pomicnim zarezom,

– client_input_integer() – zahtjevaj od klijenta unos cijelobrojnog broja,

– client_input_string() – zahtjevaj od klijenta unos znakovnog niza,

– client_msgbox() – prikaži na klijentu prozor sa zadanom porukom.

3.2.4. Arhitektura poslužitelja

U ovom poglavlju su opisani bitniji objekti korišteni pri realizaciji poslužiteljskog

dijela eCal sustava te nacini na koji su povezani. Slika 3.4 opisuje protok podataka

kroz poslužitelj nakon autorizacije klijenta.

Slika 3.4: Protok podataka kroz poslužitelj nakon autorizacije klijenta

Vecina komunikacije medu objektima ide preko redova poruka implementiranih u

message::queue klasi.

11

Page 17: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

icalAES, icalRSA i icalSeal klasa

Sva enkripcija saAESodnosnoRSAalgoritmima ide preko instanci ovih klasa. Do-

datno, uicalSealklasi je implementirana funkcionalnost digitalne omotnice. Detalje

su opisani u 3.2.1. poglavlju.

icalDatabase klasa

Kroz ovu klasu je realizirana komunikacija sa bazom. Implementira potrebne ope-

racije nad bazom pa su svi potrebniSQLupiti na jednom mjestu.

icalComm klasa

Ova klasa služi za obuhvacanje funkcionalnosti za komunikaciju sa klijentom preko

TCP sucelja. Sposoban je komunicirati ustreami u blocknacinima rada.Streamna-

cin se koristi za komunikaciju sa klijentom dok traje autorizacija dok seblockkoristi

nakon autorizacije kada se postaviAESkljuc za enkripciju kanala.

icalServer klasa

Nakon inicijalizacije potrebnih struktura i povezivanja na bazu, poslužiteljceka

zahtjeve za povezivanjem na TCP sucelju preko instance opisaneicalCommklase.

Kada zahtjev od klijenta dode, instancira seicalEngineklasa koja preuzima daljnju

komunikaciju sa klijentom, aicalServerinstanca nastavljacekati na nove zahtjeve.

icalEngine klasa

Nakon instanciranja,icalEngineobjekt inicira autorizaciju klijenta. Ukoliko je

autorizacija uspješna,icalEngineinstancira, izmedu ostalih,icalHttp te icalScriptklase.

Nakon toga zapocinje petlju u kojojceka zahtjeve za objektima od klijenta. Kada zah-

tjev dode, icalEnginega proslijeduje instanciicalHttp klase. Ako se radi o odgovoru

naRPCzahtjev, odgovor se prosljeduje instanciicalRPCklase odakle se to prosljeduje

u skriptu koja je napravilaRPCzahtjev.

icalHttp klasa

Instance ove klase su zadužene za prihvacanje zahtjeva za objektima, provjeru dos-

tupnosti objekta klijentu te provjeru u kojoj se odreduje da li je objekt skripta ili ne.

Ukoliko se ne radi o skripti, objekt se neizmijenjen vraca klijentu. Ako je traženi

12

Page 18: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

objekt skripta, ona se predaje instanciicalScript klase koja je izvršava te se klijentu

vraca odgovarajuci odgovor.

icalScript klasa

Instance ovih klasa su zadužene za izvršavanje skripti te kontrolu njihova izvršava-

nja.

modClient klasa

Instance ovih klasa skriptama na raspolaganje stavljaju RPCfunkcije koje klijent

ima. Popis funkcija uz kratki opis se može naci u poglavlju 3.2.3.

modServer klasa

Instance ovih klasa skriptama na raspolaganje stavljaju funckije potrebne za kon-

troliranje poslužitelja i pristup bazi.

icalRPC klasa

Instanca ovog klasa služe za transformaciju memorijskih struktura u ekvivalentne

XML RPC zahtjeve i obratno te provjeru njihove ispravnosti s obzirom na definiciju.

Detalji RPC sustava su navedeni u poglavlju 3.2.3.

3.2.5. Arhitektura klijenta

U ovom poglavlju su opisani bitni objekti korišteni pri realizaciji klijentskog dijela

eCal sustava te nacini na koji su povezani. Slika 3.5 prikazuje protok podataka kroz

instance klasa nakon autorizacije.

Slika 3.5: Protok podataka kroz instance klasa u klijentu nakon autorizacije

13

Page 19: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

icalAES, icalRSA, icalSeal, icalComm i icalRPC

Instance ovih klasa su ekvivalentne onima u poslužiteljskom dijelu sustava, ali su

implementirane u Java programskom jeziku.

Vecina komunikacije medu instancama klasa ide preko redova poruka implementi-

ranih u icalMessage::Queue klasi.

icalClient klasa

Instanca ove klase obuhvaca funkcionalnost klijenta. U njoj su implementirane

RPC funkcije te komunikacija sa poslužiteljem iGPIB (eng. General Purpose Inter-

face Bus) sabirnicom. Nakon instanciranja pokušava se povezati sa poslužiteljem i

autorizirati se. Ukoliko je autorizacija uspješna, instancira icalBrowser komponentu te

ulazi u petlju koja je zadužena za obradu RPC zahtjeva i obraduzahtjeva za prosljedi-

vanjem odgovora na zahtjev za objektima.

HSM klasa

Ova klasa je definirana unutar icalClient klase a implementira funkcionalnost po-

trebnu za komunikaciju sa mjernim uredajima tehsm_*RPC pozive.

icalBrowser klasa

Instanca ove klase je zadužena za prikaz HTML sadržaja, a nadogradnja je COBRA

komponente iz Lobo projekta.

HSM emulacija

S obzirom da HSM modul trenutno nije u potpunosti realiziran, u klijentu je im-

plementirana emulacija koja potrebne podatke o uredaju uzima iz konfiguracijske da-

toteke. Instance ove klase obraduju zahtjeve za HSM naredbama tecuvaju stanja po-

jedinog mjernog uredaja.

3.2.6. GPIB sabirnica

GPIB (eng. General Purpose Interface Bus) sabirnicu je razvio Hewlett-Packard

1975. godine pod nazivomHewlett-Packard Interface Bus. Radi se o 8-bitnom para-

lelnom sucelju koje može adresirati do 15 instrumenata po jednoj upravljackoj jedinici

14

Page 20: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

na sabirnici. Sabirnica koristi 16 aktivnih vodova. Ostatak, od njih 24, je spojeno

na masu. Podijeljeni su u tri grupe. Osam ih se koristi za prijenos podataka, tri za

sinkronizaciju veze, a preostalih 5 za adresiranje sabirnice. Uredaji na sabirnici mogu

imati tri uloge: upravljacka (eng. controller), govornicka (eng. talkers) i slušacka (eng.

listeners). Izvorno je standard podržavao brzine do 1Mbit/s što je kasnije prošireno na

10Mbit/s. Brzine nisu odredene samim protokolom niti je prijenos podataka nužno sin-

kroniziran, vec je sve prepušteno instrumentima koji po sabirnici razmjenjuju podatke

[13].

Godinama se održala kao vodece rješenje za povezivanje mjerne opreme ali su se

razvojem racunalne industrije razvila nova, brža, jeftinija i prihvacenija rješenja. Neka

od tih rješenja ukljucuju USB (eng. Universial Serial Bus) i LAN (eng. Local Area

Network).

General Purpose Interface Bus sucelje

Programska potpora za GPIB sabirnicu daje nekoliko funkcija koje se mogu koristit

[14]. Te funkcije su:

– scanDevices() – pretražuje sabirnicu i vraca popis pronadenih uredaja,

– openDeviceImpl() – uspostavlja vezu sa zadanim uredajem,

– clearDeviceImpl() – raskida vezu sa zadanim uredajem,

– sendCommandImpl() – šalje naredbu uredaju i ceka rezultat,

– writeCommandImpl() – šalje naredbu uredaju i neceka rezultat.

Slika 3.6: Stanja uredaja na GPIB sabirnici

Dijagram stanja uredaja se može vidjeti na slici 3.6. Programska potpora koja

omogucuje korištenje ovih funkcija u Java programskom jeziku obuhvaca ovu funkci-

onalnost unutar klasa koje pojednostavljuju korištenje. Te klase su:

15

Page 21: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

– GPIBDriver – apstraktna klasa koja obuhvaca komunikaciju sa sabirnicom i

uredajima,

– WindowsGPIBDriver – klasa koja implementira funkcionalnost GPIBDriver

klase,

– GPIBEnumerator – klasa koja obuhvaca funkcionalnost enumeratora nakon

pretraživanja sabirnice,

– GPIBDeviceIdentifier – klasa koja implementira reprezentaciju uredaja te služi

kaofactoryklasa za pretraživanje sabirnice i instanciranje GPIBDevice klase,

– GPIBDevice – klasa koja implementira komunikaciju sa pojedinim uredajem.

Adrese na GPIB sabirnici su cjelobrojni brojevi pa su i identifikacije uredaja unutar

eCal sustava cijeli brojevi.

3.2.7. eCal skriptni jezik

Skriptni jezik koji se koristi u eCal sustavu je Mozillina implementacija Javascript

jezika [15] proširena funkcijama potrebnim za izvedbu udaljenog mjerenja.

Ova implementacija je ekvivalentna onima koje se koriste uMozilla Firefox web

pregledniku pa postoji širok spektar dokumentacije na internetu. Stoga, nije potrebno

ulaziti u detalje jezika.

Sustav je organiziran tako da se vecina posla oko pretraživanja sabirnice, identifika-

cije uredaja i njihove autorizacije obavlja u skriptama koje su skrivene od korisnika. U

skripti za rad sa uredajima je potrebno definiraticalibrate() funkciju. Isto je potrebno

definirati varijabluhsm_mapu kojoj se navodi opis i grupa kojoj uredaji pripadaju.

Tu informaciju sustav koristi pri slaganju okoline prije nego izvrši potrebnu skriptu.

Primjer jednostavne testne skripte je naveden u Dodatku A.

16

Page 22: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

4. Pregled Virtual Instrument

Software Architecture specifikacije

Skraceno VISA, ova specifikacija definira nacin na koji se vrši komunikacija sa

mjernim uredajima spojenim na racunalo. Široko je prihvacena pa postoji raspros-

tranjena programska potpora koja komunikaciju sa raznim sabirnicama za spajanje

mjernih uredaja transformira u jedinstven nacin komunikacije propisan specifikacijom.

VISA obuhvaca, izmedu ostalih, funkcionalnost GPIB, USB i LAN sucelja što bitno

olakšava izradu programske potpore za kontrolu i nadziranje mjernih uredaja [16, 17].

Ova specifikacija je nastala suradnjom nekoliko tvrtki kojese bave proizvodnjom

mjernih uredaja u pokušaju standardizacije nacina komunikacije racunala i njihovih

proizvoda.

4.1. Virtual Instrument Software Architecture sucelje

VISAdefinira nekoliko vrsta aspekata uredaja [16] s kojima se može raditi:

– INSTR – aspekt koji obuhvaca razne operacije koje uredaj pruža,

– MEMACC – aspekt koji obuhvaca operacije nad suceljem,

– INTFC – aspekt koji obuhvaca specificne operacije nad GPIB sušeljem,

– BACKPLANE – aspekt koji obuhvaca specificne operacije nad VXI sistemom,

– SERVANT – aspekt za napredne korisnike koji žele pisati programsku potporu

za same uredaje,

– SOCKET – aspekt koji obuhvaca operacije nad TCP/IP suceljem.

Za potrebe eCal sustava iskoristiv je samoINSTRaspekt te se ostali nece razmatrati.

INSTRaspekt podržava operacijecitanja i pisanja pa dobro pristaje u postojeci model

17

Page 23: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

eCal sustava u kojemu se trenutno koristiGPIB sabirnica. API (eng. Application

Interface) funkcije, izvucene iz specifikacije, kojece se koristiti su:

– viFindRsrc()– zapocinje pretragu po sabirnicama za traženim aspektima,

– viFindNext()– dohvaca iduci aspekt iz pretrage zapocete prethodnom funkci-

jom,

– viOpenDefaultRM()– otvara sjednicu prema glavnom aspektu,

– viOpen()– otvara sjednicu prema traženom aspektu,

– viClose()– zatvara otvorenu sjednicu,

– viLock()– zakljucava aspekt,

– viUnlock()– otkljucava aspekt,

– viRead()– cita podatke sa aspekt,

– viWrite()– piše podatke u aspekt,

– viClear()– cisti aspekt od prethodnih operacija.

Aspekti imaju atribute koji odreduju razne karakteristike pojedinog uredaja. U

ovom kontekstu nisu iskoristivi pa se nece razmatrati.

Pošto VISA specifikacija dozvoljava dijeljenje aspekata izmedu nekoliko sjednica,

potrebno je svaki korišteni aspekt zakljucati nakon otvaranja sjednice. Time se izbje-

gava istovremeno korištenje uredaja izmedu više sjednica.

Prva operacija koja se mora napraviti za pristup VISA aspektima je otvaranje glav-

nog aspekta saviOpenDefaultRM(). Nakon toga se mora dohvatiti popis postojecih

uredaja saviFindRsrc()i viFindNext()funkcijama. Za svaki pronadeni uredaj se prije

upotrebe mora otvoriti sjednica saviOpen()te zakljucati saviLock() funkcijom. Sa

uredajem se komunicira saviRead(), viWrite() teviClear() funkcijama. Prije završetka

korištenja, uredaj treba otkljucati saviUnlock() funkcijom te sjednicu zatvoriti savi-

Close()funkcijom. Prije završetka rada treba zatvoriti i glavnu sjednicu saviClose()

funkcijom. Slika 4.1 prikazuje stanja uredaja i njihove prijelaze unutar VISA specifi-

kacije nakon pretraživanja sabirnice i otvaranja sjedniceprema glavnom aspektu.

18

Page 24: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Slika 4.1: Stanja uredaja unutar VISA specifikacije

4.2. Nacini rada sa aspektima

VISA specifikacija definira dva nacina rada instrumenata. Prvi je sinkroni nacin

u kojemu se uredaju šalju naredbe i te operacije blokiraju daljnje izvršavanje dok se

naredbe ne izvrše. Drugi je asinkroni. U njemu se šalju naredbe uredaju i te operacije

ne blokiraju daljnje izvršavanje. Informacije o statusu naredbi uredaj dojavljuje nakon

njihova izvršavanja.

Pošto je klijentski dio eCal sustava višedretven te se pristup uredajima odvija u

zasebnoj dretvi, dovoljno je koristi sinkroni nacin. Asinkroni nacin se nece razmatrati.

4.3. Adresiranje uredaja unutar VISA specifikacije

Moguci izgledi adresa unutar VISA specifikacije su definirane tablicom 4.1. vi-

FindRsrc()funkcija kao argument, izmedu ostalih, uzima izraz kojim se opisuje tip

aspekta te sucelja po kojima se pretraga treba obaviti. Izraz je zadan posebno definira-

nim jezikom slicnim regularnim izrazima [18] proširen mogucnostima logickih izraza

sa atributima aspekta. Gramatika koja ga opisuje je navedena u nastavku.regularExpr

treba biti znakovni niz s kojim se usporeduju adrese svih uredaja u kojemu mogu pos-

tojati specijalni znakovi opisani tablicom 4.2.

expr := regularExpr [’{’ attrExpr ’}’]

attrExpr := attrTerm |

attrExpr ’||’ attrTerm

attrTerm := attrFactor |

attrTerm ’&&’ attrFactor

attrFactor := ’(’ attrExpr ’)’ |

’!’ attrFactor |

relationExpr

relationExpr := attributeId compareOp numValue |

19

Page 25: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

attributeId equalityOp stringValue

compareOp := ’==’ | ’!=’ | ’>’ | ’<’ | ’>=’ | ’<=’

equalityOp := ’==’ | ’!=’

attributeId := character (character|digit|underscore)*

numValue := digit+ |

’-’ digit+ |

’0x’ hex_digit+ |

’0X’ hex_digit+

stringValue := ’"’ character* ’"

Tablica 4.1: Adrese u VISA specifikaciji

Sucelje Izgled adrese

VXI VXI[ board]::VXI logical address[::INSTR]

VXI VXI[ board]::MEMACC

VXI VXI[ board][::VXI logical address]::BACKPLANE

VXI VXI[ board]::SERVANT

GPIB-VXI GPIB-VXI[ board]::VXI logical address[::INSTR]

GPIB-VXI GPIB-VXI[ board]::MEMACC

GPIB-VXI GPIB-VXI[ board][::VXI logical address]::BACKPLANE

GPIB GPIB[board]::primary address[::secondary address][::INSTR]

GPIB GPIB[board]::INTFC

GPIB GPIB[board]::SERVANT

ASRL ASRL[board][::INSTR]

TCPIP TCPIP[board][::LAN device name]::SERVANT

TCPIP TCPIP[board]::host address[::LAN device name][::INSTR]

TCPIP TCPIP[board]::host address[::HiSLIP device name[,HiSLIP port]][::INSTR]

TCPIP TCPIP[board]::host address::port::SOCKET

USB USB[board]::manufacturer ID::model code::serial number[::USB interface number][::INSTR]

PXI PXI[bus]::device[::function][::INSTR]

PXI PXI[interface]::bus-device[.function][::INSTR]

PXI PXI[interface]::CHASSISchassis::SLOTslot[::FUNCfunction][::INSTR]

PXI PXI[interface]::MEMACC

Tablica 4.2: Specijalni znakovi u regularnim izrazima definiranim u VISA specifikaciji

Znak Znacenje

? Zamjena za bilo koji znak

\ Tretiraj naredni znak kao obicni

[lista] Zamjena za znakove navedene u listi

[^lista] Zamjena za sve znakove osim onih navedenih u listi

* Prethodni izraz se može pojaviti 0 ili više puta

+ Prethodni izraz se može pojaviti 1 ili više puta

izraz | izraz Pojaviti se može ili izraz sa desne ili izraz sa lijeve strane

(exp) Grupiranje izraza

20

Page 26: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

5. Pregled Java Native Interface

specifikacije

SkracenoJNI, je standardni nacin povezivanja vanjske programske potpore sa Java

platformom. JNI je ugraden u Java virtualni stroj te je to jedini nacin komunikacije te

virtualnog stroja sa njegovim okružjem. Pomocu JNI-a je moguce koristiti Java virtu-

alni stroj unutar neke druge programske potpore. Dobar dio standardne funkcionalnosti

unutar Java platforme ovise JNI-u [19, 20].

5.1. Nacin rada

Vanjska programska potpora JNI funkcije poziva preko pokazivaca na JNI sucelje

koji je ispravan samo u kontekstu dretve koja se izvršava. Funkcije vanjske program-

ske potpore, izložene JNI-u, dobivaju ovaj pokazivac kao argument.

Javavirtualni stroj ima implementiran sustav koji se brine za automatsko osloba-

danje zauzetih aspekta kada više nisu potrebni (eng.grabage collector), stoga se mora

obratiti posebna pažnja pri izradi vanjske programske potpore. Razlog tomu jecinje-

nica da u C++ jeziku (u kojemuce ta programska potpora biti pisana) takav sustav

ne postoji pa seJava virtualnom stroju mora eksplicitno reci koji aspekti više nisu

potrebni. Navedeno se odnosi na složeneJavaobjekte koji se prenose u programsku

potporu referencom. Na primitivne objekte nije potrebno paziti jer se po potrebi kopi-

raju.

Pažnju treba obratiti i na znakovne nizove. Java virtualni stroj interno radi sa UTF-

16 (eng. Universal Character Set Transformation Format) znakovnim nizovima pa ih je

u vanjskoj programskoj potpori, prije korištenja, potrebno pretvoriti u UTF-8. UTF-8

je dostatan za rad sa VISA specifikacijom.

21

Page 27: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

S obzirom da je nivo kompleksnosti potrebnih funkcija izVISAspecifikacije nizak,

potrebna je samo osnovna funkcionalnost izJNI specifikacije. Tu su ukljucene funk-

cije za konverziju primitivnihJava java tipova u primitivne nativne tipove i obratno.

Programska potpora u ovom kontekstu nema potrebu za interakcijom saJavaokolinom

(izuzev konverzije primitivnih tipova) pa je potrebno promatrati iskljucivo interakciju

Javaokoline sa programskom potporom.

5.2. Povezivanje sa programskom potporom

Vanjska potpora se ucitava pozivomSystem.loadLibrary()funkcije kojoj se predaje

ime datoteke koja sadrži biblioteku funkcija vanjske programske potpore.

Da bi se iz Java okoline pozvala funkcija u programskoj potpori napisanoj u C++

jeziku, potrebno se pridržavati nekoliko pravila:

– funkcija unutar C++ jezika mora biti definirana kao vanjska Cfunkcija (extern

"C") da bi se izbjeglo automatsko generiranje C++ imena,

– ime funkcije mora imati oblik Java_paket_klasa_funkcijagdje jepaketime pa-

keta unutar kojega jeklasa ime klase kroz kojuce funkcija funkcija biti dos-

tupna.

Postoji i mogucnost nadgradnje funkcija istog imena s razlicitim argumentima pa

se u ime ubacuju i imena tipova argumenata ali to nije potrebno pa se nece niti razma-

trati.

Prvi argument funkcije je pokazivac na JNI sucelje. Ukoliko se radi o staticnoj

funkciji, drugi argument je referenca na klasu u kojoj je funkcija definirana. Ako

funkcija nije staticna, drugi argument je referenca na instancu klase ucijem kon-

tekstu je funkcija pozvana. Ostali argumenti trebaju odgovarati argumentima funk-

cije definirane unutar Java jezika. Iznimke se iz programskepotpore mogu generirati

ThrowNew()funkcijom, a koristice se za dojavu grešaka pri komunikaciji sa ureda-

jima.

Postupak oblikovanja JNI programske potrpore se svodi na implementaciju klase

u Java programskom jeziku u kojoj se deklariraju "nativne" funkcije. Datoteka sa tom

22

Page 28: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

klasom prevodi u Javabyte codete se iz tog byte koda, posebnim programom, generira

h (eng. header; datoteka u kojoj se definira sucelje programske potpore) datoteka

pogodna za korištenje u C/C++ programskom jeziku.

23

Page 29: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

6. Povezivanje VISA specifikacije sa

eCal sustavom

U prošlim poglavljima je obraden dioVISAi JNI specifikacije kojice biti potreban

za integracijuVISAprotokola sa eCal sustavom. Izmjenece biti potrebne samo u kli-

jentskom dijelu eCal sustava s obzirom da je on veza izmedu skripti za umjeravanje i

mjernih uredaja. Potrebno je apstrahirati adresiranje unutarVISAspecifikacije. Adrese

u VISAspecifikaciji su znakovni nizovi, a u eCal sustavu su numericke vrijednosti.

Programska potporace biti napisana naLinux operacijskom sustavu kojace se, uz

manje izmjene, moci prebaciti i uWindowsokružje.

Informacije o korištenom VISA SDK (eng. Software Development Kit) paketu se

mogu naci u literaturi [21].

6.1. Potrebne izmjene

Da bi se eCal sustav prilagodio za VISA protokol potrebno je napraviti slijedece

izmjene:

– napisati programsku potporu zaJNI koja ce izložiti potrebnu funkcionalnost

VISAprotokola eCal klijentu,

– prepravitihsm_scan(), hsm_send(), hsm_write(), hsm_clear() RPCfunkcije da

koristeVISAfunkcionalnost,

– u klijentski dio dodati mapiranje izmeduVISAadresa te adresa u eCal sustavu,

– prepraviti podrškuHSMemulacije.

24

Page 30: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

6.2. Komunikacija VISA protokolom

Potrebne funkcije su deklarirane uvisa.javadatoteci. Deklarirane su sanativemo-

difikatorom da bi se naznacilo da se radi o vanjskim funkcijama kojima se komunicira

preko JNI sucelja. Proglašene su privatnima jer sevisa klasa brine oko obuhvaca-

nja funkcionalnosti i mapiranja adresa iz eCal sustava. Sve funkcije mogu generirati

iskljucivo IOExceptioniznimku koja signalizira nekakav problem sa komunikaciom.

Niti jednoj funkciji se ne može pristupati istovremeno iz više deretvi pa se to treba osi-

gurati u višim slojevima sustava. U eCal sustavu je to vec osigurano pa nije potrebno

ulaziti u daljnja razmatranja. Puni ispisvisa.javadatoteke je u Dodatku B avisa.cpp

datoteke u Dodatku C. U nastavku je relevantni diovisa.javadatoteke pa slijedi opis

svake od funkcija.

p r i v a t e s t a t i c n a t i v e vo id openSess ion ( ) throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e vo id c l o s e S e s s i o n ( ) throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e S t r i n g [ ] scanDev i ces ( ) throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e i n t openDevice ( S t r i n g i n s t r A d d r e s s )throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e vo id c l e a r D e v i c e (i n t s e s s i o n I d ) throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e S t r i n g sendCommand (i n t s e s s i o n I d , S t r i n g cmdSt r ing )throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e vo id writeCommand (i n t s e s s i o n I d , S t r i n g cmdSt r ing )throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e vo id l ockDev ice (i n t s e s s i o n I d ) throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e vo id un lockDev ice (i n t s e s s i o n I d ) throws IOExcep t ion ;

Biblioteka sa nativnom programskom potporom se ucitava prilikom prvog ucitava-

nja visaklase u Java okružju. To se osigurava ustaticbloku klase. U njemu se poziva

openSession()funckija. Relevantni diostaticbloka je naveden u nastavku.

s t a t i c {

System . l o a d L i b r a r y ( " v i s a " ) ;

t r y {

openSess ion ( ) ;

}

ca tch ( IOExcep t ion e ) {

throw new Runt imeExcept ion ( e . getMessage ( ) ) ;

}

}

6.2.1. void openSession()

FunkcijaopenSession()se brine oko otvaranja sjednice sa glavnim VISA aspektom.

25

Page 31: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

6.2.2. void closeSession()

FunckijacloseSession()se brine oko zatvaranja sjednice sa glavnim VISA aspek-

tom. Implementirana je radi korektnosti jer je glavna sjednica aktivna od ucitavanja

programske potpore pa sve do završetka rada programa.

6.2.3. String[] scanDevices()

Ova funkcija pretražuje sve aspekteINSRT tipa te vraca njihove adrese u polju

znakovnih nizova. Može je se pozivati više puta unutar vremena rada programa.

6.2.4. int openDevice(String instrAddress)

Ova funkcija otvara sjednicu prema uredaju. Argument joj je adresa uredaja unutar

VISA okružja a vracasessionIdkoji se koristi pri ostalim operacijama sa uredajem.

6.2.5. void clearDevice(int sessionId)

Ova funkcija zatvara sjednicu sa uredajem. Nakon poziva ovoj funkciji uredaj se

više ne može koristiti ali ga se može ponovno otvoriti pozivom openDevice()funkciji.

Otvorena sjednica prema uredaju je usessionIdparametru.

6.2.6. String sendCommand(int sessionId, String cmdString)

Ova funkcija uredaju šalje naredbu teceka njegov odgovor. Otvorena sjednica

sa uredajem je usessionIdparametru, a naredba se nalazi ucmdStringparametru.

Odgovor se vraca u povratnoj vrijednosti.

6.2.7. void writeCommand(int sessionId, String cmdString)

Kao i sendCommand()funkcija, ova funkcija uredaju šalje naredbu ali neceka na

odgovor. Otvorena sjednica sa uredajem je usessionIdparametru, a naredba se nalazi

u cmdStringparametru.

6.2.8. void lockDevice(int sessionId)

Ova funkcija osigurava ekskluzivan pristup uredaju sasessionIdsjednicom.

26

Page 32: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

6.2.9. void unlockDevice(int sessionId)

Ova funkcija otpušta ekskluzivni pristup uredaju sasessionIdsjednicom.

6.2.10. Obuhvacanje funkcionalnosti

visaklasa obuhvaca funkcionalnost VISA protokola i komunikaciju sa uredajima.

U njoj postojifindDevices()funkcija koja interno pozivascanDevices(), radi mapiranje

adresa te instanciradeviceklasu za svaki pronadeni ureda. Polje tih instanci klasa vraca

u povratnoj vrijednosti.

device klasa

Ova se klasa brine oko otvaranja i zatvaranja sjednice premauredaju. Isto tako se

brine i oko zakljucavanja i otkljucavanja uredaja te se brine i oko komunikacije. Popis

funkcija koje sadrži je opisan u nastavku.

pub l i c c l a s s d e v i c e {

pub l i c d e v i c e (i n t d e v i c e I d ) throws IOExcep t ion ;

pub l i c vo id c l e a r ( ) throws IOExcep t ion ;

pub l i c S t r i n g sendCommand ( S t r i n g cmdSt r ing )throws IOExcep t ion ;

pub l i c vo id writeCommand ( S t r i n g cmdSt r ing )throws IOExcep t ion ;

pub l i c i n t ge tDev i ceAddress ( ) ;

pub l i c i n t g e t D e v i c e I d ( ) ;

}

Konstruktor kao parametar uzima mapiranudeviceIdadresu te pozivaopenDevice()

i lockDevice()funkcije. FunkcijagetDeviceId()vraca mapiranu adresu dodijeljenu

uredaju od stranefindDevices()funkcije. Potrebna je zbog identifikacije uredaja u

sistemu.getDeviceAddress()funkcija vraca adresu uredaja unutarVISAokružja. Ta

adresa se koristi pri utvrdivanju potrebe za emulacijomHSMmodula. Ostale funkcije

su samo omotane verzije vec opisanih funkcija.

6.3. Relevantne izmjene HSM klase

Kako je opisano u prijašnjim poglavljima, potrebne izmjeneu klijentu su dosta lo-

kalizirane. Potrebno je mijenjati samo HSM klasu definiranuunutar icalClient klase jer

je ona most izmedu RPC poziva i mjernih uredaja. Kako je mapiranje adresa izvedeno

27

Page 33: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

u samojvisa klasi, potrebno je samo instancirativisa klasu te je tražiti da pronade

uredaje. Nakon toga treba spremiti reference na te uredaje i njihove identifikacijske

brojeve proslijediti skriptama koje ih zahtijevaju. IspisizmjenaicalClient.javadato-

teke uUnified Diff formatu se može vidjeti u Dodatku D.

6.4. Demonstracija rada eCal sustava sa VISA proto-

kolom

Buduci da tema rada nije bilo samo umjeravanje uredaja nego integracija novog

protokola u eCal sustav, za svrhe demonstracije je uzeta jednostavna skripta iz Do-

datka A. Pojedine funkcije su dodatno izmijenjene da ispisuju informacije o aktivnosti

na ekran. U nastavku su prikazane pojedine faze izvršavanjaskripte te rezultati izvrša-

vanja VISA funkcija.

Prva faza obuhvaca uspostavljanje veze izmedu klijenta i poslužitelja te otvaranje

sjednice prema glavnom aspektu. Slika 6.1 prikazuje pocetni prozor u klijentu dok

slika 6.2 prikazuje prozor konzole sa porukama.

Slika 6.1: Pocetni prikaz na klijentu

U drugoj fazi odabiremo kalibraciju iz izbornika sa lijeve strane te odabiremo ’Pro-

vjera rada VISA sucelja’ iz padajuceg izbornika. To je vidljivo na slici 6.3.

28

Page 34: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Slika 6.2: Ispis poruka na konzoli pri pokretanju klijenta

Slika 6.3: Odabir ’Provjera rada VISA sucelja’ iz padajuceg izbornika

U iducoj fazi se dešava pretraživanje sabirnica i uspostavljanje veze sa uredajima

što se može vidjeti na ispisu sa slike 6.4. Pronadeni uredaji su ponudeni u padajucem

izborniku klijenta (slika 6.5).

Zadnja faza obuhvaca slanje*IDN? naredbe uredaju te prikaz rezultata u klijentu.

To je vidljivo na slikama 6.7 i 6.6.

29

Page 35: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Slika 6.4: Ispis poruka na konzoli pri pretraživanju sabirnica i uspostavi veze sa uredajima

Slika 6.5: Odabir uredaja u klijentu

Slika 6.6: Ispis poruka na konzoli nakon izvršenja skripte

30

Page 36: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Slika 6.7: Prikaz rezultata skripte u klijentu

31

Page 37: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

7. Zaklju cak

Udaljeno umjeravanje je brzo rastuce podrucje te je eCal sustav samo jedno od

postojecih rješenja. Da bi ga se moglo koristiti izvan akademskog okružija, potrebno

ga je prilagoditi što širem spektru opreme koja se koristi u industriji. KorištenjeVISA

protokola u tom kontekstu je smisleno jer je relativno popularan i dobro podržan od

strane proizvodaca mjerne opreme.

Pri realizaciji potrebnih izmjena, bilo je potrebno prouciti sve vezane specifika-

cije te eCal sustav. Navedene izmjene nisu bile problematicne s obzirom da su sve

komponente dobro definirane te je cilj izmjena bio jasan. Snaga paradigme objektno

orijentiranog programiranja je u ovom slucaju došla do izražaja jer su izmjene samog

sustava bile minimalne. Bilo je potrebno što više se približiti implementaciji program-

ske potpore GPIB sucelja. Idealno bi bilo reimplementirati postojecu funkcionalnost

GPIB sucelja, ali to nije smisleno buduci da i sama VISA specifikacija obuhvaca iz-

medu ostalih i GPIB.

32

Page 38: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

L ITERATURA

[1] Marko Jurcevic. Sustav za udaljeno ispitivanje i umjeravanje mjernih uredaja.

Doktorska disertacija, FER, 2011.

[2] C++ - Wikipedia. http://en.wikipedia.org/wiki/C%2B%2B. posje-

ceno 15. kolovoza 2011.

[3] POSIX - Wikipedia.http://en.wikipedia.org/wiki/POSIX. posje-

ceno 15. kolovoza 2011.

[4] Oracle Technology Network for Java Developers.http://www.oracle.

com/technetwork/java/index.html. posjeceno 14. kolovoza 2011.

[5] Cobra - Java HTML Renderer & Parser.http://lobobrowser.org/

cobra.jsp. posjeceno 15. kolovoza 2011.

[6] TCP/IP model - Wikipedia. http://en.wikipedia.org/wiki/TCP/

IP_model. posjeceno 15. kolovoza 2011.

[7] Transport Security Layer - Wikipedia. http://en.wikipedia.org/

wiki/Secure_Sockets_Layer. posjeceno 15. kolovoza 2011.

[8] Remote Procedure Call - Wikipedia.http://en.wikipedia.org/wiki/

Remote_procedure_call. posjeceno 15. kolovoza 2011.

[9] Base64 - Wikipedia.http://en.wikipedia.org/wiki/Base64. po-

sjeceno 17. kolovoza 2011.

[10] Advanced Encryption Standard - Wikipedia.http://en.wikipedia.org/

wiki/Advanced_Encryption_Standard. posjeceno 19. kolovoza 2011.

[11] RSA - Wikipedia. http://en.wikipedia.org/wiki/RSA. posjeceno

19. kolovoza 2011.

33

Page 39: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

[12] XML DTD - An Introduction to XML Document Type Definitions. http://

www.xmlfiles.com/dtd/. posjeceno 23. kolovoza 2011.

[13] General Purpose Interface Bus (GPIB).http://www.ni.com/gpib/. po-

sjeceno 11. kolovoza 2011.

[14] JPIB: a Java API for GPIB Devices.http://jpib.sourceforge.net/.

posjeceno 22. kolovoza 2011.

[15] Mozilla JavaScript. https://developer.mozilla.org/en/

JavaScript. posjeceno 17. kolovoza 2011.

[16] The VISA Specification. http://www.ivifoundation.org/docs/

vpp43.pdf. posjeceno 23. kolovoza 2011.

[17] IVI Foundation.http://www.ivifoundation.org/. posjeceno 27. ko-

lovoza 2011.

[18] Regular expression - Wikipedia.http://en.wikipedia.org/wiki/

Regular_expression. posjeceno 19. kolovoza 2011.

[19] Tutorials & Code Camps, Chapter 5: JNI Technology. http:

//java.sun.com/developer/onlineTraining/Programming/

JDCBook/jni.html. posjeceno 25. kolovoza 2011.

[20] Java Native Interface Specification.http://download.oracle.com/

javase/6/docs/technotes/guides/jni/spec/jniTOC.html.

posjeceno 25. kolovoza 2011.

[21] VISA SDK. http://download.ni.com/support/softlib/visa/

NI-VISA/5.0/linux/NI-VISA-5.0.0.iso. posjeceno 23. kolovoza

2011.

34

Page 40: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Dodatak A

Primjer jednostavne korisnicke skripte

hsm_map [ " vo l1 " ] = new i n s t r u m e n t _ c l a s s ( " i n s t r u m e n t 1 " , " v o l t m e t r i " ) ;

f u n c t i o n d i s p l a y ( name , group , id , r e s p o n s e ) {

va r html = "<html ><body >" ;

h tml += " n az i v : " + name + " @" + group + " ( " + i d + " ) < br >" ;

h tml += "∗IDN ? : " + r e s p o n s e + "<br >" ;

h tml += " s i g n a t u r e : " + c l i e n t . hsm_sign ( i d ) ;

h tml += " </ body > </ html >" ;

c l i e n t . d i s p l a y _ c o n t e n t ( html , " main " ) ;

}

f u n c t i o n c a l i b r a t e ( ) {

va r r e s 1 = hsm . vo l1 . send ( "∗IDN? " ) ;

d i s p l a y ( hsm . vo l1 . name , hsm . vo l1 . group , hsm . vo l1 . id , r es 1 . r e s p o n s e ) ;

c l i e n t . msgbox ( " p r e s sok t o c o n t i n u e " , " c o n t i n u e . . . " ) ;

re turn t rue ;

}

35

Page 41: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Dodatak B

Ispis visa.java datoteke

package bus ;

import j a v a . i o . IOExcep t ion ;

import j a v a . l ang . Runt imeExcept ion ;

pub l i c c l a s s v i s a

{

p r i v a t e s t a t i c n a t i v e vo id openSess ion ( ) throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e vo id c l o s e S e s s i o n ( ) throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e S t r i n g [ ] scanDev i ces ( ) throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e i n t openDevice ( S t r i n g i n s t r A d d r e s s )throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e vo id c l e a r D e v i c e (i n t s e s s i o n I d ) throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e S t r i n g sendCommand (i n t s e s s i o n I d , S t r i n g cmdSt r ing )throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e vo id writeCommand (i n t s e s s i o n I d , S t r i n g cmdSt r ing )throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e vo id l ockDev ice (i n t s e s s i o n I d ) throws IOExcep t ion ;

p r i v a t e s t a t i c n a t i v e vo id un lockDev ice (i n t s e s s i o n I d ) throws IOExcep t ion ;

s t a t i c {

System . l o a d L i b r a r y ( " v i s a " ) ;

t r y {

openSess ion ( ) ;

}

ca tch ( IOExcep t ion e ) {

throw new Runt imeExcept ion ( e . getMessage ( ) ) ;

}

}

p r i v a t e S t r i n g [ ] m_dev iceAddresses ;

pub l i c c l a s s d e v i c e {

p r i v a t e i n t m_dev iceId = −1;

p r i v a t e i n t m_sess ion Id =−1;

p r i v a t e S t r i n g m_dev iceAddress =n u l l ;

36

Page 42: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

pub l i c d e v i c e (i n t d e v i c e I d ) throws IOExcep t ion {

i f ( m_dev iceAddresses ==n u l l | | d e v i c e I d >= m_dev iceAddresses . l e n g t h )

throw new IOExcep t ion ( " I n v a l i d d e v i c e i d " ) ;

m_dev iceAddress = m_dev iceAddresses [ d e v i c e I d ] ;

m_dev iceId = d e v i c e I d ;

m_sess ion Id = openDevice ( m_dev iceAddress ) ;

l ockDev ice ( m_sess ion Id ) ;

}

pub l i c vo id c l e a r ( ) throws IOExcep t ion {

i n t s e s s i o n I d = m_sess ion Id ;

m_sess ion Id =−1;

m_dev iceId = −1;

m_dev iceAddress =n u l l ;

un lockDev ice ( s e s s i o n I d ) ;

c l e a r D e v i c e ( s e s s i o n I d ) ;

}

pub l i c i n t g e t D e v i c e I d ( ) {

re turn m_dev iceId ;

}

pub l i c S t r i n g ge tDev i ceAddress ( ) {

re turn m_dev iceAddress ;

}

pub l i c S t r i n g sendCommand ( S t r i n g cmdSt r ing )throws IOExcep t ion {

re turn v i s a . sendCommand ( m_sess ion Id , cmdSt r ing ) ;

}

pub l i c vo id writeCommand ( S t r i n g cmdSt r ing )throws IOExcep t ion {

v i s a . writeCommand ( m_sess ion Id , cmdSt r ing ) ;

}

}

pub l i c d e v i c e [ ] f i n d D e v i c e s ( ) throws IOExcep t ion {

m_dev iceAddresses =n u l l ;

m_dev iceAddresses = scanDev i ces ( ) ;

i f ( m_dev iceAddresses ==n u l l )

re turn n u l l ;

d e v i c e [ ] d e v i c e s =new d e v i c e [ m_dev iceAddresses . l e n g t h ] ;

f o r ( i n t i = 0 ; i < m_dev iceAddresses . l e n g t h ; i ++)

d e v i c e s [ i ] = new d e v i c e ( i ) ;

re turn d e v i c e s ;

}

}

37

Page 43: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Dodatak C

Ispis visa.cpp datoteke

# inc lude < v i s a . h>

# inc lude < s t d i n t . h>

# inc lude < c s t d i o >

# inc lude < c s t r i n g >

# inc lude < s t r i n g >

# inc lude " b u s _ v i s a . h "

/ / main s e s s i o n hand le

V iSess ion g_defaul tRM =s t a t i c _ c a s t< ViSess ion >(−1);

/ / throw a java e x c e p t i o n

bool t h rowJava IOExcep t i on ( JNIEnv∗ env , cons t char∗ excep t ionMessage )

{

j c l a s s e = env−>F i n d C l a s s ( " j a v a / i o / IOExcep t ion " ) ;

i f ( e == NULL)

re turn f a l s e ;

env−>ThrowNew ( e , excep t ionMessage ) ;

env−>De le teLoca lRe f ( e ) ;

re turn t rue ;

}

/ / e x t r a c t c s t y l e s t r i n g s from java s t r i n g s

bool g e t J a v a S t r i n g ( JNIEnv∗ env , j s t r i n g s t r i n g , s t d : : s t r i n g& c p p _ s t r i n g )

{

cons t char∗ c _ s t r i n g = env−>GetSt r ingUTFChars ( s t r i n g , NULL ) ;

i f ( c _ s t r i n g == NULL)

re turn f a l s e ;

c p p _ s t r i n g = c _ s t r i n g ;

env−>Re leaseSt r ingUTFChars ( s t r i n g , c _ s t r i n g ) ;

re turn t rue ;

}

38

Page 44: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

/ / c r e a t e new s t r i n g a r ray o f s i z e e l e m e n t s

j o b j e c t A r r a y c r e a t e J a v a S t r i n g A r r a y ( JNIEnv∗ env , j s i z e s i z e )

{

j c l a s s s t r i n g _ c l a s s = env−>F i n d C l a s s ( " j a v a / l ang / S t r i n g " ) ;

i f ( s t r i n g _ c l a s s == NULL)

re turn NULL;

j s t r i n g i n s t r A d d r = env−>NewStringUTF ( " " ) ;

i f ( i n s t r A d d r == NULL)

re turn NULL;

re turn env−>NewObjectArray ( s i z e , s t r i n g _ c l a s s , i n s t r A d d r ) ;

}

/ / open t h e d e f a u l t s e s s i o n

JNIEXPORT vo id JNICALL J a v a _ b u s _ v i s a _ o p e n S e s s i o n ( JNIEnv∗ env , j c l a s s )

{

i f ( viOpenDefaultRM(&g_defaul tRM ) >= VI_SUCCESS )

re turn ;

t h rowJava IOExcep t i on ( env , " Unablet o open t h e d e f a u l t s e s s i o n " ) ;

}

/ / c l o s e t h e d e f a u l t s e s s i o n

JNIEXPORT vo id JNICALL J a v a _ b u s _ v i s a _ c l o s e S e s s i o n ( JNIEnv∗ env , j c l a s s )

{

i f ( g_defaul tRM == s t a t i c _ c a s t< ViSess ion >(−1))

{

t h rowJava IOExcep t i on ( env , " D e f a u l ts e s s i o n no t open " ) ;

re turn ;

}

v i C l o s e ( g_defaul tRM ) ;

}

/ / open a s e s s i o n t o t h e d e v i c e a t i n s t r A d d r

JNIEXPORT j i n t JNICALL Java_bus_v i sa_openDev i ce ( JNIEnv∗ env , j c l a s s , j s t r i n g i n s t r A d d r )

{

i f ( g_defaul tRM == s t a t i c _ c a s t< ViSess ion >(−1))

{

t h rowJava IOExcep t i on ( env , " D e f a u l ts e s s i o n no t open " ) ;

re turn 0 ;

}

V iSess ion s e s s i o n I d =s t a t i c _ c a s t< ViSess ion >(−1);

s t d : : s t r i n g _ i n s t r A d d r e s s ;

i f ( g e t J a v a S t r i n g ( env , i n s t r A d d r , _ i n s t r A d d r e s s ) ==f a l s e )

re turn 0 ;

39

Page 45: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

i f ( viOpen ( g_defaultRM ,

cons t_cas t<ViChar∗>( _ i n s t r A d d r e s s . c _ s t r ( ) ) ,

VI_NULL ,

VI_NULL ,

&s e s s i o n I d ) < VI_SUCCESS )

{

th rowJava IOExcep t i on ( env , " Unablet o open t h e d e v i c e " ) ;

re turn 0 ;

}

re turn s t a t i c _ c a s t < u i n t 3 2 _ t >( s e s s i o n I d ) ;

}

/ / c l o s e d e v i c e s e s s i o n

JNIEXPORT vo id JNICALL J a v a _ b u s _ v i s a _ c l e a r D e v i c e ( JNIEnv∗ env , j c l a s s , j i n t s e s s i o n I d )

{

i f ( g_defaul tRM == s t a t i c _ c a s t< ViSess ion >(−1))

{

t h rowJava IOExcep t i on ( env , " D e f a u l ts e s s i o n no t open " ) ;

re turn ;

}

v i C l o s e (s t a t i c _ c a s t< ViSess ion >( s e s s i o n I d ) ) ;

}

/ / send a command t o t h e d e v i c e and wa i t f o r t h e resp o n se

JNIEXPORT j s t r i n g JNICALL Java_bus_visa_sendCommand ( JNIEnv∗ env ,

j c l a s s ,

j i n t s e s s i o n I d ,

j s t r i n g cmdSt r ing )

{

i f ( g_defaul tRM == s t a t i c _ c a s t< ViSess ion >(−1))

{

t h rowJava IOExcep t i on ( env , " D e f a u l ts e s s i o n no t open " ) ;

re turn NULL;

}

s t d : : s t r i n g _cmdSt r ing ;

i f ( g e t J a v a S t r i n g ( env , cmdStr ing , _cmdSt r ing ) ==f a l s e )

re turn NULL;

ViUInt32 wr i t eCoun t ;

i f ( v i W r i t e ( s t a t i c _ c a s t<ViUInt32 >( s e s s i o n I d ) ,

( ViByte ∗ ) _cmdSt r ing . d a t a ( ) ,

_cmdSt r ing . s i z e ( ) ,

&wr i t eCoun t ) < VI_SUCCESS )

{

th rowJava IOExcep t i on ( env , " Unablet o w r i t e t o t h e d e v i c e " ) ;

re turn NULL;

}

i f ( w r i t eCoun t != s t a t i c _ c a s t<ViUInt32 >( _cmdSt r ing . s i z e ( ) ) )

40

Page 46: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

{

t h rowJava IOExcep t i on ( env , " Unablet o w r i t e t o t h e d e v i c e " ) ;

re turn NULL;

}

s t d : : s t r i n g _cmdResponse ;

whi le ( t rue )

{

ViUInt32 readCount = 0 ;

ViByte cmdResponseBuf fer [ 8 1 9 2 ] ;

i f ( v iRead ( s e s s i o n I d , cmdResponseBuf fer ,s i z e o f( cmdResponseBuf fer ) , &readCount ) < VI_SUCCESS )

{

th rowJava IOExcep t i on ( env , " Unablet o read from t h e d e v i c e " ) ;

re turn NULL;

}

_cmdResponse += s t d : : s t r i n g ( (char ∗ ) cmdResponseBuf fer , readCount ) ;

i f ( readCount != s i z e o f( cmdResponseBuf fer ) )

break ;

}

re turn env−>NewStringUTF ( _cmdResponse . c _ s t r ( ) ) ;

}

/ / send a command t o t h e d e v i c e

JNIEXPORT vo id JNICALL Java_bus_v isa_wr i teCommand ( JNIEnv∗ env ,

j c l a s s ,

j i n t s e s s i o n I d ,

j s t r i n g cmdSt r ing )

{

i f ( g_defaul tRM == s t a t i c _ c a s t< ViSess ion >(−1))

{

t h rowJava IOExcep t i on ( env , " D e f a u l ts e s s i o n no t open " ) ;

re turn ;

}

s t d : : s t r i n g _cmdSt r ing ;

i f ( g e t J a v a S t r i n g ( env , cmdStr ing , _cmdSt r ing ) ==f a l s e )

re turn ;

V iUInt32 wr i t eCoun t ;

i f ( v i W r i t e ( s t a t i c _ c a s t<ViUInt32 >( s e s s i o n I d ) ,

( ViByte ∗ ) _cmdSt r ing . d a t a ( ) ,

_cmdSt r ing . s i z e ( ) ,

&wr i t eCoun t ) < VI_SUCCESS )

{

th rowJava IOExcep t i on ( env , " Unablet o w r i t e t o t h e d e v i c e " ) ;

re turn ;

}

41

Page 47: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

i f ( w r i t eCoun t != s t a t i c _ c a s t<ViUInt32 >( _cmdSt r ing . s i z e ( ) ) )

t h rowJava IOExcep t i on ( env , " Unablet o w r i t e t o t h e d e v i c e " ) ;

}

/ / scan f o r dynamic d e v i c e s

JNIEXPORT j o b j e c t A r r a y JNICALL J a v a _ b u s _ v i s a _ s c a n D e v i ce s ( JNIEnv∗ env , j c l a s s )

{

i f ( g_defaul tRM == s t a t i c _ c a s t< ViSess ion >(−1))

{

t h rowJava IOExcep t i on ( env , " D e f a u l ts e s s i o n no t open " ) ;

re turn NULL;

}

V i F i n d L i s t f i n d L i s t ;

ViUInt32 numIns t ruments ;

ViChar _ i n s t r A d d r [ VI_FIND_BUFLEN ] ;

i f ( v i F i n d R s r c ( g_defaultRM ,

( ViChar∗ ) " ?∗ INSTR" ,

&f i n d L i s t ,

&numInst ruments ,

_ i n s t r A d d r ) < VI_SUCCESS )

re turn NULL;

j o b j e c t A r r a y i n s t r A d d r _ a r r a y = c r e a t e J a v a S t r i n g A r r a y ( env , numIns t ruments ) ;

i f ( i n s t r A d d r _ a r r a y == NULL)

{

v i C l o s e ( f i n d L i s t ) ;

re turn NULL;

}

j s t r i n g i n s t r A d d r = env−>NewStringUTF ( (char ∗ ) _ i n s t r A d d r ) ;

i f ( i n s t r A d d r == NULL)

{

v i C l o s e ( f i n d L i s t ) ;

re turn NULL;

}

env−>Se tOb jec tA r rayE lemen t ( i n s t r A d d r _ a r r a y , 0 , i n s t r A d d r );

f o r ( i n t i = 1 ; i < numIns t ruments ; i ++)

{

i f ( v iF indNex t ( f i n d L i s t , _ i n s t r A d d r ) < VI_SUCCESS )

{

th rowJava IOExcep t i on ( env , " E r r o rg e t t i n g i n s t r u m e n t l i s t " ) ;

break ;

}

i n s t r A d d r = env−>NewStringUTF ( (char ∗ ) _ i n s t r A d d r ) ;

42

Page 48: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

i f ( i n s t r A d d r == NULL)

break ;

env−>Se tOb jec tA r rayE lemen t ( i n s t r A d d r _ a r r a y , i , i n s t r A d d r );

}

v i C l o s e ( f i n d L i s t ) ;

re turn i n s t r A d d r _ a r r a y ;

}

/ / l o c k t h e d e v i c e

JNIEXPORT vo id JNICALL J a v a _ b u s _ v i s a _ l o c k D e v i c e ( JNIEnv∗ env , j c l a s s , j i n t s e s s i o n I d )

{

i f ( g_defaul tRM == s t a t i c _ c a s t< ViSess ion >(−1))

{

t h rowJava IOExcep t i on ( env , " D e f a u l ts e s s i o n no t open " ) ;

re turn ;

}

i f ( v iLock ( s e s s i o n I d , VI_EXCLUSIVE_LOCK , VI_TMO_IMMEDIATE , VI_NULL , VI_NULL) < VI_SUCCESS )

th rowJava IOExcep t i on ( env , " Unablet o l ock t h e d e v i c e " ) ;

}

/ / un lock t h e d e v i c e

JNIEXPORT vo id JNICALL J a v a _ b u s _ v i s a _ u n l o c k D e v i c e ( JNIEnv∗ env , j c l a s s , j i n t s e s s i o n I d )

{

i f ( g_defaul tRM == s t a t i c _ c a s t< ViSess ion >(−1))

{

t h rowJava IOExcep t i on ( env , " D e f a u l ts e s s i o n no t open " ) ;

re turn ;

}

i f ( v iUn lock ( s e s s i o n I d ) < VI_SUCCESS )

th rowJava IOExcep t i on ( env , " Unablet o un lock t h e d e v i c e " ) ;

}

43

Page 49: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Dodatak D

Izmjene icalClient.java datoteke -

Unified Diff format

d i f f −−g i t a / c l i e n t / i c a l / i c a l C l i e n t . j a v a b / c l i e n t / i c a l / i c a l Cl i e n t . j a v a

index f6be30c . . e5a51b6 100644

−−− a / c l i e n t / i c a l / i c a l C l i e n t . j a v a

+++ b / c l i e n t / i c a l / i c a l C l i e n t . j a v a

@@ −9,7 +9 ,7 @@import j a v a . s e c u r i t y .∗ ;

import j a v a . s e c u r i t y . c e r t .∗ ;

import j a v a . u t i l .∗ ;

−import be . ac . u lb . gp ib .∗ ;

+ import bus .∗ ;

pub l i c f i n a l c l a s s i c a l C l i e n t ex tends Thread {

p r i v a t e c l a s s C l i e n t Q u i t implements ica lRPC . Func t i on {

@@ −34,6 +34 ,7 @@pub l i c f i n a l c l a s s i c a l C l i e n t ex tends Thread {

p r i v a t e c l a s s HsmEmulation {

p r i v a t e c l a s s hsm_t {

S t r i n g m_id ;

+ S t r i n g m_address ;

ica lAES m_aes_key ;

icalRSA m_pr iv_key ;

icalRSA m_server_key ;

@@ −67,6 +68 ,8 @@pub l i c f i n a l c l a s s i c a l C l i e n t ex tends Thread {

throw e ;

}

+ m_address = i n f o [ 0 ] ;

+

m_id = HexCoder . Encode (md . d i g e s t ( c e r t _ b y t e s ) ) ;

m_aes_key =n u l l ;

@@ −81,14 +84 ,9 @@pub l i c f i n a l c l a s s i c a l C l i e n t ex tends Thread {

}

}

− p r i v a t e hsm_t [ ] m_hsms ;

+ p r i v a t e HashMap< S t r i n g , hsm_t > m_hsms ;

44

Page 50: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

pub l i c HsmEmulation ( S t r i n g e m u l a t i o n _ c o n f ) {

− m_hsms = new hsm_t [ 3 2 ] ;

− f o r ( i n t i = 0 ; i < m_hsms . l e n g t h ; i ++)

− m_hsms [ i ] = n u l l ;

i f ( e m u l a t i o n _ c o n f == n u l l )

re turn ;

@@ −111,6 +109 ,8 @@pub l i c f i n a l c l a s s i c a l C l i e n t ex tends Thread {

i f ( d e v i c e s == n u l l )

re turn ;

+ m_hsms = new HashMap ( ) ;

+

S t r i n g [ ] devs = d e v i c e s . s p l i t ( " , " ) ;

f o r ( i n t i = 0 ; i < devs . l e n g t h ; i ++) {

@@ −124,39 +124 ,39 @@pub l i c f i n a l c l a s s i c a l C l i e n t ex tends Thread {

i f ( i n f o . l e n g t h != 4)

con t inue ;

− i n t i d = I n t e g e r . p a r s e I n t ( i n f o [ 0 ] ) ;

− i f ( m_hsms [ i d ] != n u l l )

− con t inue ;

t r y {

− m_hsms [ i d ] = new hsm_t ( i n f o ) ;

+ hsm_t h = new hsm_t ( i n f o ) ;

+ m_hsms . pu t ( i n f o [ 0 ] , h ) ;

}

ca tch ( F i l eNo tFoundExcep t i on e ) {

e . p r i n t S t a c k T r a c e ( ) ;

− m_hsms [ i d ] = n u l l ;

}

ca tch ( IOExcep t ion e ) {

e . p r i n t S t a c k T r a c e ( ) ;

− m_hsms [ i d ] = n u l l ;

}

ca tch ( NoSuchAlgor i thmExcept ion e ) {

e . p r i n t S t a c k T r a c e ( ) ;

− m_hsms [ i d ] = n u l l ;

}

}

}

pub l i c boolean I sEmu la ted (i n t i d ) {

− re turn m_hsms [ i d ] != n u l l ;

+ re turn m_hsms . con ta insKey ( ge tDev i ce ( i d ) . m_address ) ==t rue ;

}

pub l i c vo id Rese t ( ) {

45

Page 51: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

− f o r ( i n t i = 0 ; i < m_hsms . l e n g t h ; i ++)

− i f ( m_hsms [ i ] != n u l l ) {

− m_hsms [ i ] . m_aes_key =n u l l ;

− m_hsms [ i ] . m_buf fe r =new S t r i n g B u i l d e r ( ) ;

− }

+ I t e r a t o r i t = m_hsms . v a l u e s ( ) . i t e r a t o r ( ) ;

+

+ whi le ( i t . hasNext ( ) == t rue ) {

+ hsm_t h = ( hsm_t ) i t . nex t ( ) ;

+

+ h . m_aes_key =n u l l ;

+ h . m_buf fe r = new S t r i n g B u i l d e r ( ) ;

+ }

+ }

+

+ pub l i c hsm_t ge tDev i ce (i n t i d ) {

+ re turn ( hsm_t ) m_hsms . g e t (HSM.t h i s . m_devices [ i d ] . ge tDev i ceAddress ( ) ) ;

}

pub l i c S t r i n g DecodeCommand (i n t id , S t r i n g command ) {

@@ −175,7 +175 ,7 @@pub l i c f i n a l c l a s s i c a l C l i e n t ex tends Thread {

S t r i n g a rg = _cmd [ 2 ] . s u b s t r i n g ( 0 , _cmd [ 2 ] . l e n g t h ( )− 1 ) ;

i f ( cmd . e q u a l s ( " ID " ) == t rue )

− re turn " ∗HSM: " + m_hsms [ i d ] . m_id + " ! " ;

+ re turn " ∗HSM: " + ge tDev i ce ( i d ) . m_id + " ! " ;

i f ( cmd . e q u a l s ( "AUTH" ) == t rue ) {

re turn " ∗HSM: " + A u t h e n t i c a t e ( id , a rg ) + " ! " ;

@@ −195,7 +195 ,7 @@pub l i c f i n a l c l a s s i c a l C l i e n t ex tends Thread {

}

p r i v a t e S t r i n g A u t h e n t i c a t e (i n t id , S t r i n g d a t a ) {

− i c a l S e a l s = new i c a l S e a l ( m_hsms [ i d ] . m_priv_key , m_hsms [ i d ] . m_server_key ) ;

+ i c a l S e a l s = new i c a l S e a l ( ge tDev i ce ( i d ) . m_priv_key , ge tDev i ce ( i d ) . m_server_key ) ;

byte [ ] au th = s . E x t r a c t ( Base64Coder . decode ( d a t a . toCharAr ray ( ) ) ) ;

@@ −213,18 +213 ,18 @@pub l i c f i n a l c l a s s i c a l C l i e n t ex tends Thread {

byte [ ] i v = new byte [ 1 6 ] ;

i n . r ead ( i v ) ;

− m_hsms [ i d ] . m_aes_key =new ica lAES ( key , i v ) ;

+ ge tDev i ce ( i d ) . m_aes_key =new ica lAES ( key , i v ) ;

re turn new S t r i n g ( Base64Coder . encode ( c h a l l e n g e ) ) ;

}

p r i v a t e S t r i n g Decode (i n t id , S t r i n g d a t a ) {

byte [ ] d = Base64Coder . decode ( d a t a ) ;

− m_hsms [ i d ] . m_aes_key . Decryp t ( d ) ;

+ ge tDev i ce ( i d ) . m_aes_key . Decryp t ( d ) ;

S t r i n g s = new S t r i n g ( d ) ;

46

Page 52: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

− m_hsms [ i d ] . m_buf fe r . append ( s ) ;

+ ge tDev i ce ( i d ) . m_buf fe r . append ( s ) ;

re turn s ;

}

@@ −232,7 +232 ,7 @@pub l i c f i n a l c l a s s i c a l C l i e n t ex tends Thread {

p r i v a t e S t r i n g Encode (i n t id , S t r i n g d a t a ) {

byte [ ] t o _ e n c r y p t = n u l l ;

− m_hsms [ i d ] . m_buf fe r . append ( d a t a ) ;

+ ge tDev i ce ( i d ) . m_buf fe r . append ( d a t a ) ;

t r y {

byte [ ] d = d a t a . g e t B y t e s ( "UTF8" ) ;

@@ −252,7 +252 ,7 @@pub l i c f i n a l c l a s s i c a l C l i e n t ex tends Thread {

f o r ( i n t i = d . l e n g t h ; i < s i z e ; i ++)

t o _ e n c r y p t [ i ] = (byte ) pad ;

− m_hsms [ i d ] . m_aes_key . Enc ryp t ( t o _ e n c r y p t ) ;

+ ge tDev i ce ( i d ) . m_aes_key . Enc ryp t ( t o _ e n c r y p t ) ;

} ca tch ( Unsuppor tedEncod ingExcep t ion e ) {

re turn "ERROR" ;

}

@@ −274,28 +274 ,27 @@pub l i c f i n a l c l a s s i c a l C l i e n t ex tends Thread {

byte [ ] sha1 = n u l l ;

t r y {

− sha1 = md . d i g e s t ( m_hsms [ i d ] . m_buf fe r . t o S t r i n g ( ) . g e t B yt e s ( "UTF−8" ) ) ;

+ sha1 = md . d i g e s t ( ge tDev i ce ( i d ) . m_buf fe r . t o S t r i n g ( ) . ge t B y t e s ( "UTF−8" ) ) ;

} ca tch ( Unsuppor tedEncod ingExcep t ion e ) {

e . p r i n t S t a c k T r a c e ( ) ;

re turn "ERROR" ;

}

− byte [ ] s i g _ e n c = m_hsms [ i d ] . m_pr iv_key . P r i v a t e E n c r y p t ( sha1) ;

+ byte [ ] s i g _ e n c = ge tDev i ce ( i d ) . m_pr iv_key . P r i v a t e E n c r y p t ( sha1 ) ;

re turn new S t r i n g ( Base64Coder . encode ( s i g _ e n c ) ) ;

}

}

p r i v a t e JFrame m_parent ;

− p r i v a t e GPIBDevice [ ] m_devices ;

+ p r i v a t e v i s a m_visa ;

+ p r i v a t e v i s a . d e v i c e [ ] m_devices ;

p r i v a t e icalRSA m_loca l ;

p r i v a t e HsmEmulation m_emulat ion ;

pub l i c HSM( JFrame pa ren t , ica lRPC rpc , icalRSA l o c a l , S t r i n g e m u la t i o n _ c o n f ) {

− m_devices =new GPIBDevice [ 3 2 ] ;

− f o r ( i n t i = 0 ; i < m_devices . l e n g t h ; i ++)

− m_devices [ i ] = n u l l ;

47

Page 53: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

+ m_visa = new v i s a ( ) ;

+ m_devices = n u l l ;

m_emulat ion = new HsmEmulation ( e m u l a t i o n _ c o n f ) ;

@@ −330,9 +329 ,6 @@pub l i c f i n a l c l a s s i c a l C l i e n t ex tends Thread {

S t r i n g e r r o r = " " ;

f o r ( i n t i = 0 ; i < m_devices . l e n g t h ; i ++) {

− i f (HSM. t h i s . m_devices [ i ] == n u l l )

− con t inue ;

t r y {

HSM. t h i s . m_devices [ i ] . c l e a r ( ) ;

}

@@ −340,30 +336 ,31 @@pub l i c f i n a l c l a s s i c a l C l i e n t ex tends Thread {

/ / I t doesn ’ t m a t t e r a t t h i s p o i n t

e . p r i n t S t a c k T r a c e ( ) ;

}

− HSM. t h i s . m_devices [ i ] = n u l l ;

}

+

+ HSM. t h i s . m_devices = n u l l ;

m_emulat ion . Rese t ( ) ;

− Enumerat ion d e v i c e s L i s t = G P I B D e v i c e I d e n t i f i e r . g e t D e v ic e s ( ) ;

− whi le ( e r r o r == " " ) {

− G P I B D e v i c e I d e n t i f i e r d e v i c e I d e n t i f i e r = ( G P I B D e v i c e I d en t i f i e r ) d e v i c e s L i s t . nex tE lemen t ( ) ;

− t r y {

− d e v i c e s += d e v i c e I d e n t i f i e r . ge tAdd ress ( ) ;

+ t r y {

+ HSM. t h i s . m_devices = m_visa . f i n d D e v i c e s ( ) ;

+ i n t dev iceCoun t = HSM.t h i s . m_devices . l e n g t h ;

− HSM. t h i s . m_devices [ d e v i c e I d e n t i f i e r . ge tAdd ress ( ) ] = d e v i c e I d en t i f i e r . open ( ) ;

+ f o r ( i n t i = 0 ; i < dev iceCoun t ; i ++) {

+ i n t d e v i c e I d = HSM.t h i s . m_devices [ i ] . g e t D e v i c e I d ( ) ;

+ d e v i c e s += I n t e g e r . t o S t r i n g ( d e v i c e I d ) ;

− i f ( d e v i c e s L i s t . hasMoreElements ( ) )

+ i f ( i != dev iceCoun t− 1)

d e v i c e s += " " ;

e l s e

break ;

}

− ca tch ( N u l l P o i n t e r E x c e p t i o n e ) {

− e r r o r = " Unable t o g e t t h e d e v i c e l i s t " ;

− }

+ }

+ ca tch ( IOExcep t ion e ) {

48

Page 54: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

+ e r r o r = " Unable t o g e t t h e d e v i c e l i s t " ;

+ }

+ ca tch ( N u l l P o i n t e r E x c e p t i o n e ) {

+ e r r o r = " Unable t o g e t t h e d e v i c e l i s t " ;

}

ica lRPC . r S t r u c t r e t =new ica lRPC . r S t r u c t ( " r e t u r n " ) ;

49

Page 55: Sustav za udaljeno ispitivanje mjernih instrumenata1. Uvod Znanost o mjerenju je vrlo bitan aspekt svakodnevnog života i znanosti. Omogu-´cuje nam razmjenu svih dobara koja se na

Sustav za udaljeno ispitivanje mjernih instrumenata

Sažetak

Diplomski rad obraduje eCal sustav i potrebne izmjene da bi ga se moglo koristitisa

VISAprotokolom za udaljena umjeravanja na širokom spektru mjernih uredaja. Sustav

trenutno radi iskljucivo saGPIB sabirnicom.VISAprotokol je odabran jer obuhvaca

funkcionalnosti mnoštva drugih sabirnica na koje se mogu spojiti mjerni uredaji. Rad

se dotice tehnologija korištenih u eCal sustavu. Medu njima suJNI (eng. Java Native

Interface) i korištenje Javascript jezika za kontrolu i upravljanje sustavom. Obraduju se

i tehnike potrebne za realizaciju cijelog sustava. Neke od njih su PKI (eng. Public Key

Infrastructure), RPC (eng. Remote Procedure Call) te objektnoorijentirana paradigma.

Klju cne rijeci: eCal, umjeravanje, udaljeno umjeravanje, GPIB, VISA, Java, C++,

JNI, RPC, PKI

System for remote examination of measuring instruments

Abstract

This paper describes the eCal system and the changes requiredfor it to be able

to communicate with measurement instruments over the VISA protokol. The system

currently uses the GPIB bus. VISA protocol was selected because it encapsulates

functionalities of many other instrumentation buses. Someof the technologies and

techniques used the eCal system are also described. Technologies include JNI (Java

Native Interface) and embedded Javascript which is used to control and manage the

system. Techniques include PKI (Public Key Infrastructure), RPC (Remote Procedure

Call) and object oriented paradigm.

Keywords: eCal, calibration, remote calibration, GPIB, VISA, Java, C++,JNI, RPC,

PKI