Vergleich Logos

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

Vergleich von WinLogo mit MSWLogo

Problemstellung : Ampel für einen Fußgängerüberweg mit Bedarfssteuerung. Verwendet wurde das parallele fischertechnik Interface 30 520(WinLogo), bzw. das serielle 30 402(MSWLogo). Schaltung als Motor (beide Pole einer Lampe an dem Motorausgang). In der Tabelle Lösungsausschnitte der Programmiersprachen MSWLogo 6.4(Treiber MswFish.DLL) und WinLogo 2.0(Treiber Fischer.DLL). Die vollständigen Programme sind in Schule.ZIP zu finden. Für den Betrieb des seriellen fischertechnik-Interfaces (30 402) für WinLogo gibt es hier einen Treiber comFish.ZIP

Ampel MSWLogo 6.4 englisch WinLogo 2.0 deutsch
to aaa
ftOpen "COM1 0
pr [Ampel gestartet, Signal anfordern]
Lights
ftClose
pr [Programm beendet]
end

to Lights
if ftGetInput 8 [stop]
if ftGetInput 1 [Walk]
GreenOn
Lights
end
pr Ampel
Wenn Schalter? 1 Dann FussPhase
GrünEin
Ampel
ende
to Walk
pr [Signal kommt]
GreenOn
ftPause 5000
GreenOff
pr [Fußgängerphase]

YellowOn
ftPause 2000
YellowOff

RedOn
WalkGreenOn
ftPause 5000

YellowOn
WalkGreenOff
ftPause 1000
RedOff
YellowOff
pr [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

Am auffälligsten ist der Unterschied der Befehlworte, der zu Verwirrung beim Wechsel zwischen den Sprachen führt (MSW pr kommt von print, WinLogo DZ kommt von DruckeZeile). Auch Unterschiede bei der Behandlung von Strings [] - "" erschweren den Wechsel. Auch das if schreibt sich anders (if / ifelse - Wenn Dann). Die englische Namen der Prozeduren in MSW sind natürlich nicht erforderlich - aber ich traue den Umlauten in engl. Versionen nicht.

Die Prozedur Ampel bzw aaa startet das Ampelprogramm. Der indirekte Start der MSW-Lösung, ist erforderlich, da hier die Treiber nicht in die MSWLogo-Umgebung integriert sind und zu Beginn geladen und gestartet werden müssen (es sind natürlich auch andere programmtechnische Lösungen möglich, diese ist übersichtlich). Die Fußgängerphase wird durch Schließen von E1 gestarten, solange wartet das Programm bei Auto-Grün.

FussPhase steuert den Ablauf einer Fußgängerphase (mit Verzögerung bei der Anforderung der Phase, die Pausewerte sind 1/1000 (MSW) bzw 1/10 (WinLogo) 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?)).

Die Prozeduren zur Schaltung der Lampen sind trivial :

 

WinLogo bietet in die Sprachmenge integrierte Befehle zur Ansteuerung der Interfaces an, die auf Treiber mit vorgegebener Struktur abgebildet werden :

  • 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)

zB.:

pr GelbAus
  Motor 2 0
End Sub

MSWLogo bietet eine allgemeine DLL-Schnittstelle, die im Falle ftSetMotor so aussieht :

to ftSetMotor :MotorNr :Direction
  dllcall (list "v "mswSetMotor "l :MotorNr "l :Direction)
end


Die "Wiener Implementierung" treibt mehr Aufwand um die mswFish.DLL-Funktionen logogerecht zu wrappen und bietet natürlich auch eine echte LogoLib an.

bei der die Funktion ftSetMotor auf die in mswFish.DLL vorhandene Funktion mswSetMotor abgebildet wird. Die Prozedur YellowOff entspricht dann wieder der WinLogo Lösung :

to YellowOff
  ftSetMotor 2 0
end