next up previous
Naprej: Statisti"cna obdelava izmerjenih Gor: Laboratorijske vaje pri predmetu Nazaj: Laboratorijske vaje pri predmetu

Program za merjenje uporov

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.



Leon Kos
Mon Apr 22 09:11:23 GMT+0100 1996