CASE_OF

stimmt, kann ich dann unter
ELSE
doHigh:= FALSE;
doOk:= FALSE;
doLow:= FALSE;
doAlarm:=FALSE;
End_IF
?
Nein, weil dann wird ja alles auch nur zurĂŒckgesetzt, wenn du in das ELSE kommt aber nicht wenn z.B. von LOW auf OK umgeschaltet wird.

Ich wĂŒrde auch statt der IF ELSE Orgie vier einzelne Zuweisungen machen ( wie @hucki bereits schrieb ).
 
stimmt, kann ich dann unter
ELSE
Dein Code kommt aber nie ins ELSE, wie ich Dir bereits erklÀrt habe.
;)


Danke, aber was macht dein Programm wenn den Wert außerhalb, nichts oder
er wird doHight TRUE setzen
oder doLow auf TRUE
gÀ ?
:unsure:
Gibt es das auch in Deutsch?

Bei meinem obigen Code handelt es sich in jeder Zeile um eine einzelne Zuweisung!
Bei jeder Zuweisung wird separat entschieden, ob die Bedingung TRUE oder FALSE ist und dies als Ergebnis dem jeweiligen Flag ĂŒbergeben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Oh Mann, das wird ein hartes StĂŒck Arbeit.
was ist mit [/CODE] gemeint ?
Das [/CODE] ist eins von vielen Tags, die die Forumssoftware nutzt. In die Tags zwischen die Tags [CODE] und [/CODE] wird z.B. Quelltext gesetzt, dadurch wird dieser leichter lesbar. Diese Tags werden eigentlich automatisch gesetzt und Du siehst Sie beim Editieren nur, wenn ĂŒber den Button mit den zwei Eckigen Klammern die Ansicht umgeschaltet hast.
diese konvertieren funktioniert mit mir nicht. :(
um mit nachkommazahl zu rechnen muss mein Zielergebnis in REAL sein. bei mir PercentLevel
und falls die Variable (Sensor+Berechnung) in Ganzzahlen passieren da muss ich meine Konstante mit .0 machen, und mein aiLevel von INT_TO_REAL machen damit nachkommazahl nicht weggeht. und mir bei Percentlevel mit Komma gezeigt wird
habe ich richtig verstanden ?
Hier mĂŒsstest Du bitte einmal genau definieren, was Du willst. Soll das Ergebnis Nachkommastellen haben oder nicht? Falls es welche haben soll muss die Variable PercentLevel vom Typ REAL oder LREAL sein, dann musst Du aiLevel auch in ein REAL oder LREAL konvertieren und bei den Konstanten ".0" anhĂ€ngen. Bei der Rechnung mit Ganzzahlen fĂ€llt das ".0" weg.
bei mir steht mein Sensor liefert mir 0-32767, heißt ich muss nachprĂŒfen ob er 0-5v liefert oder 0-10V
Ja, denn je nachdem ob der Sensor 0-5V liefert oder 0-10V ist 100% ja etwas anderes und die Rechnung muss entsprechend angepasst werden (* 100 statt * 200).
brauchen alle solang um diese Thema zu verstehen oder geht es nur bei mir so ?
Da braucht man Jahre fĂŒr und selbst dann begegnet einem immer wieder etwas Neues.
jzt spinnt bei mir total, IF_ELSE hat alle BITS TRUE gesetzt đŸ˜€
BezĂŒglich der IF-Abfrage gab es ja schon Antworten.
Deine IF-Abfrage setzt die Variablen, aber sie werden nirgends zurĂŒck, also wieder auf FALSE gesetzt.
 
Dein Code kommt aber nie ins ELSE, wie ich Dir bereits erklÀrt habe.
;)



:unsure:
Gibt es das auch in Deutsch
"Ich meinte, wenn der Wert außerhalb des zulĂ€ssigen Bereichs liegt, ist doHigh immer TRUE, aber das ist nicht so schlimm."
Wie werden all die Flags denn ggf. wieder auf FALSE zurĂŒckgesetzt? Das erfolgt mit obigen Code nĂ€mlich nicht!
IMHO sauberer Code wÀre:
Code:
doHigh   := PercentLevel >= 90;
doOk     := PercentLevel <  90 AND PercentLevel > 25;
doLow    := PercentLevel <= 25 AND PercentLevel >  1;
doAlarm  := PercentLevel <=  1;
doDefekt := ?;   [COLOR=rgb(209, 72, 65)][B]mit der Fragezeichen hier ist BOOL variabel gemeint [/B][/COLOR]


[/QUOTE]

[QUOTE="hucki, post: 920106, member: 17699"]
[/QUOTE]
Das bedeutet auch, dass IF_ELSE in meinem Beispiel nichts zu Suchen hat. Aber das ist wirklich ein Problem.
 Wie setzt man bei einer echten Anlage die Bits zurĂŒck?
Bestimmt gibt es eine Lösung, oder?"
 
Du kannst es auch mit IF/ELSIF/ELSE machen, Du musst halt nur in den verschiedenen Zweigen die Variablen nicht nur setzen, sondern auch zurĂŒcksetzen.
Wenn zum Beispiel in einem Zweig doHigh gesetzt wird mĂŒsste doOK, doLow, usw. zurĂŒckgesetzt werden.
Der Vorschlag von @hucki ist eine logische VerknĂŒpfung. Ist die Bedingung erfĂŒllt, z.B. die Bedingung ist PercentLevel >= 90 (oder 90.0 bei REAL) und PercentLevel ist 93, dann ist doHight TRUE.
 
Sorry Oli,
aber ich halte solche Lösungen fĂŒr ziemlich unprofessionell ...
đŸ€·â€â™‚ïž
Das sollte auch keine Empfehlung sein es genau so zu tun, sondern nur ein Hinweis, dass es so auch geht.
In dieser Situation bietet sich Dein Vorschlag an, weil eine IF-Abfrage hier das Programm unnötig aufblĂ€hen wĂŒrde und es unĂŒbersichtlich wird.
 
Langsam schÀme ich mich tatsÀchlich was zu Posten :cry:

aber ich kriege es einfach nicht hin!
99.png
Also, wenn ich Percentlevel als LREAL definiert habe, funktionieren meine CASE-Bereiche nicht. Dann habe ich es mit .0 versucht, aber das hat auch nicht funktioniert.

ich habes dann wieder auf UINT gemacht, dann wollte ich aber meine Berechnung in REAL machen (.0 INT_TO_REAL)
geht auch nicht

ich lese verstehe dann sag ich endlich.
Programmiere dann siehe ich, dass ich immer noch nicht verstanden hab, Shi# :(
 
Bitte, ehe Du postest, lies Dir die Hilfe zu den Befehlen durch.
Ich habe "DINT_TO_REAL(Variable)" geschrieben und nicht "(DINT_TO_REAL Variable)".
Und wieso DINT_TO_REAL, dein aiLevel ist doch ein INT.
CASE funktioniert nur mit Integer Variablen, sei es jetzt unsigned oder "normale".
Übrigens noch ein Stolperstein, eine Abfrage auf einen genauen Wert funktioniert bei einer Fließkommazahl nicht unbedingt, da nicht alle Zahlen sich als Fließkommazahl genau darstellen, oder besser ablegen lassen.
Übrigens sei mal etwas geduldiger mit Dir. Das Thema bekommst Du nicht an einem Nachmittag verinnerlicht, das dauert, wie gesagt, Monate oder Jahre.
 
ich habes dann wieder auf UINT gemacht, dann wollte ich aber meine Berechnung in REAL machen (.0 INT_TO_REAL)
geht auch nicht
Wenn Du nachher eh Integer, also Ganzzahlen nutzt, bringt die Konvertierung in REAL nichts, Du musst halt nur darauf achten, dass im Zuge Deiner Berechnungen auf die Reihenfolge achten, da ja die Nachkommastellen wegfallen.
 
Das ist jetzt nicht dein Ernst?
Anhang anzeigen 77393

nimm dir bitte @hucki Žs Lösung zu Herzen. Das hier ist keine saubere Lösung.
ggg.png

ich habe es gemacht und beide Wege haben funktioniert, aber @hucki Methode ist auf jeden Fall viel besser!!

Danke an euch alle <3
ich habe heute dank euch viel gelernt <3
Bitte, ehe Du postest, lies Dir die Hilfe zu den Befehlen durch.
Ich habe "DINT_TO_REAL(Variable)" geschrieben und nicht "(DINT_TO_REAL Variable)".
Und wieso DINT_TO_REAL, dein aiLevel ist doch ein INT.
CASE funktioniert nur mit Integer Variablen, sei es jetzt unsigned oder "normale".
Übrigens noch ein Stolperstein, eine Abfrage auf einen genauen Wert funktioniert bei einer Fließkommazahl nicht unbedingt, da nicht alle Zahlen sich als Fließkommazahl genau darstellen, oder besser ablegen lassen.
Danke fĂŒr deine ErklĂ€rungen zum Rechnen. Ich freue mich schon auf das Buch. ^_^
Übrigens sei mal etwas geduldiger mit Dir. Das Thema bekommst Du nicht an einem Nachmittag verinnerlicht, das dauert, wie gesagt, Monate oder Jahre.
danke fĂŒr die motivierende Wörter <3
 
1713450684116.png
ich habe es gemacht und beide Wege haben funktioniert, aber ...
... als Kunde wĂŒrde ich Dich fĂŒr diesen Weg erschlagen.
đŸ€·â€â™‚ïž

Gut, dass Du ihn auskommentiert hast.
Noch besser, wenn Du das löschst und aus Deinem GedÀchtnis verbannst.
😁


PS:
Man sieht ĂŒbrigens genau, was Du vom Forum kopiert und was Du selbst eingefĂŒgt hast.
Und das Gleiche wie Dein IF-Konstrukt ist es btw. auch nicht, denn dort hast Du jetzt noch eine weitere Bedingung eingefĂŒgt, die Du in diesen Codezeilen nicht hast.
😜
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich habe es gemacht und beide Wege haben funktioniert, aber @hucki Methode ist auf jeden Fall viel besser!!
Aber wieder ein Fehler drin 😉
1000011666.png
DoHigh wird auch bei 101% TRUE, oder bei 20000%......
In deinem alten Code kam da noch der doDefekt

DafĂŒr kommt der doDefekt nun auch bei 0%
 
Zuletzt bearbeitet:
ZurĂŒck
Oben