Разработка комплекса программ для автоматизации экспериментальных исследований тангенциального точения на станке с ЧПУ 6Р13Ф3, страница 12

                      dec di                   {2}

                      jmp repC1                  {13}

         ContC1:

                      {Отображение значения}

                      mov al,'¦'

                      mov di,TmpAddr

                      mov bx,ValueToShow

                      shl bx,1

         repV:

                      and bx,bx                {2}

                      jz  cont                 {3|13}

                      mov es:[di+bx],al        {9}

                      dec bx                   {2}

                      dec bx                   {2}

                      jmp repV                  {13}

            tmout:

                      xor ax,ax                 {если время вышло}

                      inc ax

                      mov timeout,al

            skip:

            cont:

           inc cntr

           in al,$60   {проверка на нажатие клавиши}

           neg al

           shr al,7

{$ifdef DEBUGMODEKey}

           xor ax,ax    {заглушка по кнопке}

{$endif}

           mov key,al

           mov al,key   {все проверки на выход из цикла}

           or al,l

           or al,key1

           or al,timeout

           mov key1,al

     end;

    until key1;

     TimerReset;

{$R+$S+$Q+$I+}

             gotoxy(Wbx+20,by+9); write(cntr:8);

       gotoxy(Wbx+42,by+9); write(tms10/1193200:8:6,' ':8);

{     if key then repeat ReadKey until not keypressed;}

     CardDone;

     if l then TimeStrob:=true else

               TimeStrob:=false;

   end;


Приложение В

Программа вывода данных в текстовый файл.

uses crt,Objects,mconst;

var Fo: text;

    count:byte;                {число опрашиваемых каналов}

    NumRead, NumWritten: Word; {...необходимо для записи на диск...}

    D:DataRec;         {массив в котором находятся считанные данные}

    P: ProjectRec;

    C: ConfigType;

    ps,i,tkn:integer;

    res: word;

    s:string;

    cc:longint;

    XS:PEmsStream;

function SLeft(li:longint):string;

var s:string; l,i:integer;

begin

 str(li,s); l:=length(s);

 for i:=1 to 6-l do s:=s+' ';

 SLeft:=s;

end;

function TLeft(r:real):string;

var s:string; l,i:integer;

begin

 str(r:5:6,s); l:=pos('.',s);

 for i:=1 to 5-l do s:=' '+s;

 TLeft:=s;

end;

label ex;

begin

  if ParamCount<3 then

    begin

      writeln('Параметры командной строки:');

      writeln('outtext PrjFile TakeNumber OutFile');

      writeln('где: PrjFile - файл проекта (*.pr)');

      writeln('     TakeNumber - номер пробы в проекте (1...50)');

      writeln('     OutFile - имя выходного текстового файла');

      halt;

    end;

 val(ParamStr(2),tkn,ps);

 if (ps<>0) or (tkn>MaxTakeCount) or (tkn<1) then

   begin

     writeln('Недопустимое значение номера пробы: ',ParamStr(2));

     halt;

   end;

 res:=_LoadProject(ParamStr(1),P,C);

 case res of

   rdOk: writeln('Проект успешно считан.');

   rdOpenError: writeln('Ошибка: файл не найден или не является файлом проекта.');

   rdEmptyFile: writeln('Ошибка: файл пустой или не является файлом проекта.');

   rdIdentyError: writeln('Ошибка: файл не является файлом проекта.');

   rdVersionError: writeln('Ошибка: неверная версия файла проекта.');

   rdReadError: writeln('Ошибка: ошибка чтения файла, возможно файл не является файлом проекта.');

 end;

 if res<>rdOk then halt;

 writeln;

 writeln('Название проекта: ',P.ProjectName);

 writeln('Количество проб в проекте: ',P.TakeCount);

 writeln('Количество опрашиваемых каналов: ',P.ACCount);

 write('Опрашиваемые каналы: ');

 for i:=1 to P.ACCount do

  write(P.AC[i],' ');

 writeln;

 write('Способ синхронизации: ');

 case P.Strob of

   Detector : writeln('от датчика');

   Timer : writeln('от таймера');

   Detector_Timer : writeln('от датчика и через заданный интервал времени');

 end;

 if Tkn>P.TakeCount then

   begin

     writeln('Номер пробы превышает номер последней имеющейся в пробы проекте.');

     goto ex;

   end;

  XS:=nil;

  XS:=LoadTake(ParamStr(1),P,TkN);

  if XS=nil then exit;

  count:=P.ACCount;

  NumWritten:=SizeOf(D.Detector)+SizeOf(word)*count+SizeOf(D.STime);

  cc:=1;

  Assign(Fo,ParamStr(3));

  {$I-} Rewrite(Fo); {$I+}

  IF IOResult<>0 then

    begin write('Ошибка создания выходного файла !');  exit; end;

  writeln(Fo,'Название пробы: '+P.Takes[tkn]^.TakeName);

  write(Fo,'Номер     Время,с  Датчик');

  for i:=1 to count do

   write(fo,P.AC[i]:7);

  writeln(fo);

  XS^.Seek(0);

  repeat

    XS^.Read(D,NumWritten);

    if XS^.Status=stOk then

       begin

        {$I-}

          write(Fo,SLeft(cc),' ',TLeft(D.STime/1000000));

          IF IOResult<>0 then begin writeln('Write Error!'); Close(Fo); goto ex; end;

          if D.Detector then write(Fo,' On    ') else write(Fo,' Off   ');

          for i:=1 to count do

          write(Fo,' ',D.D[i]:6);

          IF IOResult<>0 then begin writeln('Write Error!'); Close(Fo); goto ex; end;

          writeln(Fo);

        {$I-}

        {repeat until keypressed; readkey;}

      end

    else

      begin writeln('Error in file!'); Close(Fo); goto ex; end;

  cc:=cc+1;

  until XS^.Position>=XS^.Size;  Close(Fo);

ex:

 _CloseProject(P);  {repeat readkey until keypressed;}

  writeln('Data write completed.'); end.


Приложение Г

Фрагмент программы, выводящий данные в графическом виде на экран.

label beg,repg;

        begin

          gd:=Detect;

          InitGraph(gd,gm,'');

          if GraphResult<>grOk then begin write(^G); exit; end;

          maxc:=GetMaxColor; SetBkColor(1);

          LimLine:=56; InitWindow;

          SetWindow(1,LimLine+1,maxx-2,maxy-LimLine-2);

          ActiveWindow;

          {размер одной записи:}

          NumRead:=SizeOf(D.Detector)+SizeOf(word)*count+SizeOf(D.STime);

          CC:=trunc(XStream^.Size/NumRead); {число опросов}

          {позиционирование для получения времени опроса:}

          XStream^.Seek((CC-1)*NumRead);