Program napisan v Turbo pascalu mogo"ca merjenje upornosti z DMM povezanim z PC. Meritve zapisuje v datoteko rezultati.prn. Ob napaki je mo"zno ponoviti zadnjo meritev. Program bere SRQ linijo in s tem ugotovi, "ce se je meritev "ze kon"cala. Pri inicializaciji DMM in lokalnega krmilnika je potrebno testirati mno"zico mo"znih napak, ki se lahko zgodijo ob nepravilni komunikaciji ali slabo napisanem programu. Z rutino errCheck() kontroliramo mo"zne napake in jih izpisujemo na zaslon.
program vaja1;
uses crt, p60hpib;
const ISC = 7; { interface card address}
OM = 723; { ohmmeter na naslovu}
var i : integer;
err : integer;
code : string[30];
reading : real;
tipka : char;
f : text;
procedure errCheck(err : integer; message : string);
begin
if err <> 0 then
writeln('Napaka: #',err, ' ', message);
end;
procedure initialize;
begin
err := ioReset(ISC);
errCheck(err, 'Inicializacija kartice');
err := ioTimeOut(ISC, 5.0);
errCheck(err, 'ioTimeout po 5 sekundah');
err := ioClear(ISC);
errCheck(err, 'ioClear');
end;
procedure serviceRequest;
{ What is the current condition of the SRQ line}
const condition:integer = 1;
var
status : integer;
begin
code := 'KM01';
err := ioOutputs(OM, code, 4);
errCheck(err, 'KM20 output in SRQ');
repeat
repeat
err := ioStatus(ISC, condition, status);
errCheck(err, 'What is the current state of the SRQ line?');
until status <> 1;
err := ioSpoll(OM, status);
errCheck(err, 'IoSpool on SRQ');
until status <> 65;
end;
begin{main}
initialize;
code := 'F3N5T4';
err := ioOutputs(OM, code, 6);
errCheck(err, 'F3N5T4 output na zacetku');
assign(f, 'rezultati.prn');
rewrite(f);
i := 1;
writeln('Merimo upore');
writeln('Za koncanje pritisni "n"');
writeln('Za ponovitev "p", za naprej "ENTER".');
repeat
code := 'T3';
err := ioOutputs(OM, code, 2);
errCheck(err, 'Nastavitev posamicne meritve.');
serviceRequest;
err := ioEnter(OM, reading);
errCheck(err, 'Branje ene vrednosti po ukazu SRQ.');
writeln('Meritev #', i:3, ' Upornost=', reading:8:4);
tipka := readKey;
if tipka <> 'p' then begin
i := i + 1;
writeln(f, reading)
end
else
writeln('Ponavljam meritev!');
until tipka = 'n';
close(f);
end.