Nächste Seite: 9.13 Unit Etc
Aufwärts: 9. Programmlisting
Vorherige Seite: 9.11 Unit LoadSave
  Inhalt
{-------------------------------------------------------------------}
{ 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 }
{-------------------------------------------------------------------}
Nächste Seite: 9.13 Unit Etc
Aufwärts: 9. Programmlisting
Vorherige Seite: 9.11 Unit LoadSave
  Inhalt
Udo Becker
2000-01-02