Logische Verknüpfungen einfach u. logisch programmieren

good_mike

Level-1
Beiträge
55
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

im Zusammenhang mit einer Rollosteurung möchte ich eine Logik programmieren welche für unterschiedliche Tage ein entsprechendes Verhalten aufweist.... Aber das nur am Rande.

Prinzipiel funktioniert meine Logik. Die Frage ist nur: Macht man das so oder kann man das irgendwie einfacher / logischer machen:
Code:
bAuf:=
(Kalender.WEEKDAY>=1 AND Kalender.WEEKDAY<=5 AND kalender.HOLIDAY=FALSE AND Urlaub=FALSE AND Ferien=FALSE AND kalender.LTOD=TODWerktag_AUF) OR
(Kalender.WEEKDAY=6 AND Kalender.HOLIDAY=FALSE AND  Urlaub=FALSE AND Ferien=FALSE AND Kalender.LTOD=TODSamstag_AUF) OR
((Kalender.WEEKDAY=7 OR Kalender.HOLIDAY=TRUE) AND  Urlaub=FALSE AND Ferien=FALSE AND Kalender.LTOD=TODSonnFeiertag_AUF) OR
(Urlaub=TRUE AND Ferien=FALSE AND Kalender.LTOD=TODUrlaub_AUF) OR
(Urlaub=FALSE AND Ferien=TRUE AND Kalender.LTOD=TODFerien_AUF);

Danke und Gruß

good_mike
 
Hallo,

spontaner Einfall:

die Abfrage nach dem Arbeitstag würe ich in einem eigenen Merker "Arbeitstag" machen --> Wochenende entsprechend
==> macht´s schon ein wenig übersichtlicher


MfG
 
Machen kann man das auf jeden Fall so, aber ST ist zur Darstellung umfangreicher kombinatorischer Logik nicht so gut geeignet. So etwas erscheint in FUP übersichtlicher.
In ST würde ich einen anderen Ansatz verfolgen. Zur Unterscheidung der Werte von numerischen Variablen bietet sich "CASE OF" an. Eine numerische Variable hast Du ja bereits mit "Kalender.WEEKDAY", eine weitere könntest Du verwenden, wenn Du statt der booleschen Variablen "Ferien" und "Urlaub" eine Enumeration mit den Werten "Arbeit,Ferien,Urlaub" nimmst.
Dann könnte das Programm etwa so aussehen:
Code:
CASE Zeitraum OF
   Arbeit:
      IF Kalender.HOLIDAY
      THEN
         bAuf:=TODSonnFeiertag_Auf;
      ELSE
         CASE Kalender.WEEKDAY OF
            1..5:   bAuf:=TODWerktag_Auf;
            6:       bAuf:=TODSamstag_Auf;
            7:       bAuf:=TODSonnFeiertag_Auf;
         END_CASE;
      END_IF;
   Ferien:
      bAuf:=TODFerien_Auf;
   Urlaub:
      bAuf:=TODUrlaub_Auf;
   ELSE
      bAuf:=False;
END_CASE;
 
Danke

So etwas habe ich gesucht. Ich werde mich in den nächsten Tagen mal damit auseinander setzen. Mit ENUM habe ich noch keine Erfahrung.

good_mike
 
Zurück
Oben