ProgSprachen

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
Sitemap
Index
Links
Impressum
Mail
 

Vergleich Delphi / WinLogo / Visual Basic

Problemstellung : Ampel für einen Fußgängerüberweg mit Bedarfssteuerung (AutoAmpel Grün(1), Gelb(2),Rot(3), FußgängerGrün(4)). Verwendet wurde das parallele fischertechnik Interface 30 520. Schaltung als Motor (beide Pole einer Lampe an dem Motorausgang). In der Tabelle Lösungsausschnitte der Programmiersprachen Delphi 4 (Versionen 2 - 4 sind möglich), WinLogo 2.0 und Visual Basic 6.0 (Versionen 4 - 6 sind möglich). Treiber Fischer.DLL von WinLogo und umFish.DLL. Die vollständigen Programme sind in Schule.ZIP zu finden. Für den Betrieb des seriellen fischertechnik-Interfaces (30 402) gibt es hier einen Treiber comFish.ZIP

Ampel Delphi 4 WinLogo 2.0 Visual Basic 6.0
procedure TfrmAmpel.cmdActionClick(Sender: TObject);
begin
ftEin;
lblNachricht.Caption := 'Signal anfordern';
repeat
if SchalterAn(1) then FussPhase;
GruenEin;
until SchalterAn(2);
ftAus;
cmdEnde.SetFocus;
end;
pr Ampel
Wenn Schalter? 1 Dann FussPhase
GrünEin
Ampel
ende
Private Sub cmdAction_Click()
ftEin
lblNachricht = "Signal anfordern"
Do
If SchalterAn(1) Then FussPhase
GrünEin
Loop Until SchalterAn(2)
ftAus
End Sub
procedure FussPhase;
begin
frmAmpel.lblNachricht.Caption := 'Signal kommt';
GruenEin;
Pause(50);
GruenAus;
frmAmpel.lblNachricht.Caption := 'Fußgängerphase';

GelbEin;
Pause(10);
GelbAus;

RotEin;
FussGruenEin;
Pause(50);

GelbEin;
FussGruenAus;
Pause(10);
RotAus;
GelbAus;
frmAmpel.lblNachricht.Caption := 'Signal anfordern';
end;
pr FussPhase
DZ "Signal kommt"
GrünEin
Pause 50
GrünAus
DZ "Fußgängerphase"

GelbEin
Pause 10
GelbAus

RotEin
FußGrünEin
Pause 50

GelbEin
FußGrünAus
Pause 10
RotAus
GelbAus
DZ "Signal anfordern"
ende
Private Sub FussPhase()

lblNachricht = "Signal kommt"
GrünEin
Pause 50
GrünAus
lblNachricht = "Fußgängerphase"

GelbEin
Pause 10
GelbAus

RotEin
FußGrünEin
Pause 50

GelbEin
FußGrünAus
Pause 10
RotAus
GelbAus

lblNachricht = "Signal anfordern"

End Sub

Die Procedure Ampel bzw. cmdAction startet das Ampelprogramm. Es wird auf "Bedarf" gewartet (Betätigung Schalter 1). Hier sind die größten sprachbedingten Unterschiede zu finden. Bei Delphi und VB wurde mit ftEin / ftAus das Starten und Beenden des Interface in die Routine integriert, Bei WinLogo wurde das nicht gemacht, da die Interfacebefehle in der Entwicklungsumgebung nur bei geladenem Treiber nutzbar sind.

Das Warten auf Tastendruck wurde bei Delphi und VB über eine Schleife (repeat / until bzw. Do / loop Until) realisiert, Schleifenende durch einen zusätzlichen Schalter (2). Bei WinLogo wurde die dort übliche Rekursion eingesetzt. Auf ein Endbedingung wurde verzichtet, da nur in der Entwicklungsumgebung gearbeitet werden kann.

FussPhase steuert den Ablauf einer Fußgängerphase (mit Verzögerung bei der Anforderung der Phase, die Pausewerte sind 1/10 Sek.) Hier sind die Unterschiede gering, da in allen Fällen fast vollständig mit den gleichen Prozeduren gearbeitet wurde (Die Ausgabe der Nachrichten hätte natürlich auch noch in ein Prozedur verlagert werden können (und sollen?)). Am Rande : Delphi läßt keine Umlaute in Prozedurnamen zu, WinLogo (wie VB) schon, aber nicht in Zeile "Wenn Schalter? 1 Dann FussPhase", deswegen hier das "ss".

Die Prozeduren zum Schalten der Lampen basieren auf den - hier auch einheitlich angebotenen - WinLogo-Befehlen zum Zugriff auf Interfaces (fischertechnik und einige andere) :

  • Procedure AllesAus
  • Function AusgangZustand
  • Procedure Ausschalten(Nr)
  • Procedure Einschalten(Nr)
  • Procedure Motor(Nr, Richtung)
  • Procedure Pause(Zeit)
  • Function Poti(Nr)
  • Function Schalter?(Nr)
  • Function Sensor(Nr)

Sie wurden bei Delphi und VB auf Basis der DLL umFish.DLL nachgebildet (eine modifizierte DLL, die diese Befehle unterstützt wäre natürlich genauso möglich). Bei Delphi können die erforderlichen Deklarationen und Prozeduren auch in einer kompilierten Unit (DCU) verborgen werden, bei VB ist eine ActiveX.DLL möglich.

Die Prozeduren zur Schaltung der Lampen sind trivial :

Private Sub GelbAus()
  Motor 2, ftiAus
End Sub

In den Programmiersprachen Delphi und VB könnte durchaus auch auf diese Prozeduren zugunsten von Konstantendefinitionen verzichtet werden :

Public Const Gelb = 2, Grün = 1, Rot = 3, FußGrün = 4

und eine FussPhase :

Motor Grün, ftiEin
Pause 50
Motor Grün, ftiAus
....

Das dürfte genauso lesbar sein und spart den Prozedur-Overhead. Hier ist abzuwägen zwischen formaler Handhabung - die dann auch einfache Umstellungen erlaubt - und einfacherer Programmierung. Eine direkte Nutzung der umFish.DLL Funktionen erscheint in diesem Kontext nicht sinnvoll, da die Adaption auf den WinLogo Befehlssatz eine Systemunabhängigkeit mit sich bringt.