Programmierung : Pneumatics

Delphi4 & umFish.DLL v1.2

PneuTuer.MDL ist das LLWin 2.1 Betriebsprogramm für das Modell "Pneumatische Tür" des neuen Konstruktionskastens "Pneumatic Robots". Elektromagnetisches 3/2 VentilHier eine Delphi4 Version (Delphi3 ist auch möglich) unter Nutzung von umFishDLL. Das Programm orientiert sich weitgehend an der Struktur des LLWin-Programmes. Es wurde bewußt einfach gehalten um zu einem einfachen Modell auch einen einfachen Einstieg in die Delphi Programmierung als Alternative zu LLWin aufzuzeigen. Nachfolgend werden wichtige Details vorgestellt. Das vollständige Programm ist in PneuTuer.ZIP enthalten. Zusätzlich erforderlich ist die aktuelle Version von umFish.DLL (Dez 99) in umFish.ZIP.

Modellkonstanten

' --- Modellkonstanten -----------------------

const
cvTuerAuf=1; cvTuerZu=2; // --- Magnetventile
ctTuerZu=1;               // --- Taster
cpLichtSchranke=2;       // --- Photowiderstand
clLichtSchranke=3;       // --- Lampe
cmKompressor=4;          // --- Motor
Die Modellkonstanten werden im Programm verwendet um es lesbare zu machen

Formalismus drumrum

Ist bei Delphi stets beieindruckend. Hier nur der zentrale Dateikontrollblock und und der Hinweis auf die Unit umFish.PAS, die die Declarationen für die genutzte umFish.DLL enthält. Um die Anwendung unterbrechbar (und damit bedienbar) zu machen wurden einige Funktionen redifiniert. Es wurden zusätzlich einige Methoden aus FishN632.DLL hierhin übernommen.

var
FishFace: TftiDCB; pFishFace: TpftiDCB;

und var NotHalt in umFish.PAS. Über NotHalt kann die Abbrechbarkeit langlaufender Funktionen hergestellt werden.

PneuTuer.MDL Routinen


procedure TfrmTuerMain.Init;
// --- Initialisierung -----
begin
lblStatus.Caption := 'Init läuft';
SetMotor(pFishFace, clLichtSchranke, ftiEin); // --- Lampe Lichtschranke ein
SetMotor(pFishFace, cmKompressor, ftiEin);    // --- Kompressor ein
WaitForTime(pFishFace, 12000);                 // --- Warten auf Druck
SetMotor(pFishFace, cvTuerAuf, ftiAus);       // --- Tür schließen
SetMotor(pFishFace, cvTuerZu, ftiEin);        // Schließventil ein
WaitForInput(pFishFace, ctTuerZu);             // Warten TürZu
SetMotor(pFishFace, cvTuerZu, ftiAus);        // --- Schließventil aus
end;

procedure TfrmTuerMain.TuerAuf;
// --- Tür öffnen -------------
begin
SetMotor(pFishFace, cvTuerZu, ftiAus);  // --- Schließventil aus
SetMotor(pFishFace, cvTuerAuf, ftiEin); // --- Öffnerventil ein
WaitForTime(pFishFace, 500);             // Warten Öffnen
SetMotor(pFishFace, cvTuerAuf, ftiAus); // --- Öffnerventil aus
end;

procedure TfrmTuerMain.TuerMain;
// --- Hauptprogramm, Schleife wird über NotHalt beendet ---
begin
Init;                                       // --- Ausgangsstellung
lblStatus.Caption := 'Tür geschlossen';
repeat                                      // --- Schleife bis NotHalt
  WaitForInput(pFishFace, ctTuerZu, false); // --- Warten TürSchubs
  TuerAuf;                                   // --- Tür Öffnen
  lblStatus.Caption := 'Tür geöffnet';
  WaitForInput(pFishFace, cpLichtSchranke, false); // Schließen, wenn Lichts.
  lblStatus.Caption := 'Tür schließt';
  TuerZu;                                    // --- Tür Schließen
  lblStatus.Caption := 'Tür geschlossen';
until NotHalt;
end;

procedure TfrmTuerMain.TuerZu;
// --- Tür Schließen ---------
begin
SetMotor(pFishFace, cvTuerAuf, ftiAus);   // --- Öffnerventil aus
SetMotor(pFishFace, cvTuerZu, ftiEin);    // --- Schließventil ein
WaitForInput(pFishFace, ctTuerZu);        // --- Warten auf Schließen
SetMotor(pFishFace, cvTuerZu, ftiAus);    // --- Schließventil aus
end;

Ablaufsteuerung


procedure TfrmTuerMain.cmdEndeClick(Sender: TObject);
begin
close;
end;

procedure TfrmTuerMain.cmdHaltClick(Sender: TObject);
// --- Setzen NotHalt, um Ende einzuleiten ----------
begin
cmdStart.SetFocus;
NotHalt := true;
end;

procedure TfrmTuerMain.cmdStartClick(Sender: TObject);
// --------- Starten der Türsteuerung ----------------
begin
cmdHalt.SetFocus;
if NotHalt then           // --- Ist beim Programmstart true
begin
  NotHalt := false;
  OpenInterface(pFishFace, 'COM1'); { ggf COMx anpassen }
  TuerMain;                // --- TürSteuerung
  ClearMotors(pFishFace); // --- Ende
  cmdStart.SetFocus;
  lblStatus.Caption := 'START/ENDE';
  CloseInterface(pFishFace);
end;
end;

Entspricht den Run-Funktionen der LLWin-Umgebung

Zurück