next up previous contents
Nächste Seite: 9.13 Unit Etc Aufwärts: 9. Programmlisting Vorherige Seite: 9.11 Unit LoadSave   Inhalt

9.12 Unit MotorU


{-------------------------------------------------------------------}

{ Motorsteuerung }
unit MotorU;

{-------------------------------------------------------------------}

interface

procedure Motorsteuerung;

{-------------------------------------------------------------------}

implementation

uses
  { Turbo Pascal Standard Units }
  App, Crt, Dialogs, Objects, Views;

const
  port1a   = $1B0;       { Schreib-Lesepuffer CN1 Kanal A }
  port1b   = $1B1;       { Schreib-Lesepuffer CN1 Kanal B }
  port1c   = $1B2;       { Schreib-Lesepuffer CN1 Kanal C }
  port1r   = $1B3;       { Kontroll-Register CN1 }
  port2a   = $1B4;       { Schreib-Lesepuffer CN2 Kanal A }
  port2b   = $1B5;       { Schreib-Lesepuffer CN2 Kanal B }
  port2c   = $1B6;       { Schreib-Lesepuffer CN2 Kanal C }
  port2r   = $1B7;       { Kontroll-Register CN2 }

  timeout1 = 100;        { 100 ms Einzelschritt Vor }
  timeout2 = 10;         {  10 ms Einzelschritt Zurueck }

var
  stop : Byte;           { Zustand des Endabschalters }

{-------------------------------------------------------------------}

{ Initialisierung }
procedure Init;

begin
  port[port1r] := $92;   { CN1 Kanal A & B Eingang, Kanal C Ausgang }
  port[port2r] := $92;   { CN2 Kanal A & B Eingang, Kanal C Ausgang }
end;

{-------------------------------------------------------------------}

{ Motorvorwaertslauf einschalten }
procedure MotorVor;

begin
  port[port1c] := $40;   { 0100 0000 }
end; { MotorVor}

{-------------------------------------------------------------------}

{ Motorruecklauf einschalten }
procedure MotorZurueck;

begin
  port[port1c] := $80;   { 1000 0000 }
end; { MotorZurueck }

{-------------------------------------------------------------------}

{ Motor abschalten }
procedure MotorStop;

begin
  port[port1c] := $00;   { alle Eingaenge null }
end; { MotorStop }

{-------------------------------------------------------------------}

{ Abfrage Endabschalter }
procedure Stopsignal;

begin
  stop := port[port1b];
end; { Stopsignal }

{-------------------------------------------------------------------}

{ Dialog zur Motorsteuerung }
procedure Motorsteuerung;

var
  R     : TRect;
  D     : PDialog;
  Taste : char;

begin
  Init;
  R.Assign(0, 0, 40, 13);
  D := New(PDialog, Init(R, 'Motorsteuerung'));
  with D^ do
  begin
    Options := Options or ofCentered;
    R.Grow(-1, -1);
    Dec(R.B.Y, 3);
    Insert(New(PStaticText, Init(R, #13 + #3
      + 'vorwaerts         rueckwaerts' + #13 + #3
      + '<v>              <r>' + #13 +#3
      + 'Stop durch beliebige Taste' + #13 + #13 + #3
      + '<-    Einzelschritte    ->' + #13 + #13 + #3
      + 'Ende mit <ESC>')));
  end;
  Desktop^.Insert(D);
  repeat
    repeat
      if keypressed then
      begin
        Taste := readkey;
        case Taste of
          'V', 'v' : begin        { Motor vorwaerts }
                       MotorStop;
                       MotorVor;
                     end;
          'R', 'r' : begin        { Motor vorwaerts }
                       MotorStop;
                       MotorZurueck;
                     end;
          chr(75)  : begin        { Motor vorwaerts Einzelschritt }
                       MotorStop;
                       MotorVor;
                       delay(timeout1);
                       MotorStop;
                     end;
          chr(77)  : begin        { Motor rueckwaerts Einzelschritt }
                       MotorStop;
                       MotorZurueck;
                       delay(timeout2);
                       MotorStop;
                     end;
          else MotorStop;
        end;
      end;
      Stopsignal;
    until (stop = 1) or (stop = 2) or (Taste in [chr(27)]);
    MotorStop;
  until Taste in [chr(27)]; { Escape-Taste }
  Dispose(D, Done);
end; { Motorsteuerung }

{-------------------------------------------------------------------}

end. { MotorU }

{-------------------------------------------------------------------}

next up previous contents
Nächste Seite: 9.13 Unit Etc Aufwärts: 9. Programmlisting Vorherige Seite: 9.11 Unit LoadSave   Inhalt
Udo Becker
2000-01-02