TIA SCL: IF...ELSIF ersetzen

Zombie

Level-2
Beiträge
735
Reaktionspunkte
120
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich müsste aktuell anhand von Boolschen Vergleichen an mehreren Stellen Werte in Integer Variablen schreiben.

Code:
If "dbCeB".Storedat.xBc AND "dbDataRec".Viz.xDelta1 THEN
"dbCeD".DataOut.ia11 := 3;
ELSIF "dbCeB".Storedat.xCc AND "dbDataRec".Viz.xDelta2 THEN
"dbCeD".DataOut.ia11 := 4;
ELSE
"dbCeD".DataOut.ia11 := 0;
END_IF;

Kann man das nicht irgendwie einfacher schreiben?

Code:
"dbCeB".Storedat.xBc AND "dbDataRec".Viz.xDelta1 => "dbCeD".Outoutdata.ia11 := 3 ;

Geht z.B. nicht.
 
Hmm, das ist doch schon einfach und effizient ...

Brauchst Du das öfters? Du könntest das in einen FC auslagern und einfacher aussehend den FC aufrufen:
Code:
"dbCeD".DataOut.ia11 := MyFunc(In1:="dbCeB".Storedat.xBc, In2:="dbDataRec".Viz.xDelta1,
                               In3:="dbCeB".Storedat.xCc, In4:="dbDataRec".Viz.xDelta2);
Code:
FUNCTION MyFunc : Int
VAR_IN
  In1 : Bool;
  In2 : Bool;
  In3 : Bool;
  In4 : Bool;
END_VAR
VAR_TEMP
  tempInt : Int ;
END_VAR

If #In1 AND #In2 THEN
  #tempInt := 3;
ELSIF #In3 AND #In4 THEN
  #tempInt := 4;
ELSE
  #tempInt := 0;
END_IF;

MyFunc := #tempInt;

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Leider ist das da bereits die kürzeste.
Die Orgie kann bis zu 18 Boolsche Variablen und 12 verschiedene Zahlenwerte erhalten.

Wenns halt nicht geht, gehts halt nicht.

Danke
 
Du schreibst ja die Integer immer in die gleiche Variable.
Man kann es in eine Funktion packen und nur IF ... then nutzen.

Code:
IF "dbCeB".Storedat.xBc AND "dbDataRec".Viz.xDelta1 THEN
   "dbCeD".DataOut.ia11 := 3;
   Exit;
END_IF;

IF "dbCeB".Storedat.xCc AND "dbDataRec".Viz.xDelta2 THEN
   "dbCeD".DataOut.ia11 := 4;
   Exit;
END_IF;

"dbCeD".DataOut.ia11 := 0;


Ich hab es jatzt nicht genau im Kopf, Exit oder Break sorgt dafür, das die Funktionsbearbeitung abgebrochen wird und die Funktion zurückkehrt.
Sieh zumindest übersichtlicher aus.
 
Zurück
Oben