TIA Begrenzungen bei der Auswertung einer If Abfrage

tiptip

Level-2
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich bin gerade erst ins TIA Portal eingestiegen und versuche jetzt meine vorhandene SPS Bausteine ins TIA zu übernehmen! D.h. ich bin nicht neu in der SPS Programmierung aber eben bisher keine Erfahrungen mit TIA. Ich habe eine TIA V18 Prof. Version.

Nun zu meiner Frage:
Ich habe eine IF then elsif .. end_if - Anweisung, die nicht das zurückgibt was es meiner Meinung machen soll!

Hier ein Beispiel:
If (true and not true(=false)) or (true and not true (=false)) and not (false or false or false or true) then ==> das müsste doch als Ergebnis false bringen liefert aber true zurück!

Zur Erklärung: (true and not true) soll bedeuten Var 1 = wahr und Var 2 darf nicht wahr sein (=false)
Alle true und false stehen für Variablen die entweder als Input (Funktionsbaustein) oder intern erzeugt werden! In meiner bisherigen Entwicklungsumgebung hat das immer funktioniert!

Gibt es hier evtl. eine Begrenzung (was ich mir eigentlich nicht vorstellen kann!) in der Logik oder Beschränkungen?

Ich hoffe ich konnte das einigermaßen verständlich erklären!

Grüsse
TipTip
 
Hier ein Beispiel:
If (true and not true(=false)) or (true and not true (=false)) and not (false or false or false or true) then ==> das müsste doch als Ergebnis false bringen liefert aber true zurück!

Das ist auch FALSE:

@Peter Wahlen :

Wäre folgende Lösung nicht richtig, da durch die fehlende Klammersetzung sich das AND nur auf das vorhergehende (TRUE AND NOT TRUE) bezieht?:
1730375127916.png

Das Ergebnis bleibt aber das Selbe.

@tiptip:
Welche TIA-Version verwendest du?

Eventuell nochmal komplett übersetzen und laden. Das wirkt manchmal Wunder.
Schau auch noch mal beim Debuggen direkt die Variablen über das aufklappen der der Dreiecke an

1730375932962.png
 
Zuletzt bearbeitet:
Hallo,
danke für die schnellen Antworten!
Ich habe das jetzt nochmals in einem absolut neuen Projekt gemacht und dieses Ergebnis:

Codesnippet_TIA.png
Das Ergebnis ist true und nicht false so wie erwartet! Ich habe die true und false hier mit internen Variablen ersetzt und diese dann entsprechend gesetzt!
Bild gemacht mit TIA V15.1, ist aber mit V18 das selbe!
 
Hallo SPS-Klassik,
ist sicher eine saubere Lösung aber ich hab halt schon einiges in ST / SCL. Deshalb möchte ich nicht wirklich alles neu machen müssen!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Anhang anzeigen 82604
Das Ergebnis ist true und nicht false so wie erwartet! Ich habe die true und false hier mit internen Variablen ersetzt und diese dann entsprechend gesetzt!
Bild gemacht mit TIA V15.1, ist aber mit V18 das selbe!
Das ist klar, weil in deinem ursprünglichen Post du das anders geschrieben hast:
If (true and not true(=false)) or (true and not true (=false)) and not (false or false or false or true) then ==>

In Zeile 11 fragt du aber "true and not false" --> und nicht wie geschrieben " true and not true",
in Zeile 12 das gleiche.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Peter Wahlen
Sorry aber ich hatte ja versucht unter meinem Post zu beschreiben, wie das zu verstehen ist! Die True und not true sollten nur die Zustände der jeweiligen Variablen beschreiben!
Aber ich bin der Meinung, dass das an der Sache ja nicht ändert! Nur weil jetzt eine Variable enthalten ist dürfte sich doch nichts ändern!
 
Hallo,
danke für die schnellen Antworten!
Ich habe das jetzt nochmals in einem absolut neuen Projekt gemacht und dieses Ergebnis:

Anhang anzeigen 82604
Das Ergebnis ist true und nicht false so wie erwartet! Ich habe die true und false hier mit internen Variablen ersetzt und diese dann entsprechend gesetzt!
Bild gemacht mit TIA V15.1, ist aber mit V18 das selbe!
Wenn ich so das anschaue Erwarte ich ein True und kein False. für ein False fehlt ne klammer.

Wie hier Kommentiert:
Bei boolscher Algebra musst du auch die Regeln beachten.

Klammer vor Punkt (UND) vor Strich (ODER)

Deine Programmierung Sieht in FUP so aus:
1730384769958.png


Ich Glaub du willst eher das:

IF (#V1 AND NOT #V2 OR #V3 AND NOT #V4) AND NOT (#V5 OR #V6 OR #V7 OR #V8) THEN
#xTestBool := true;
ELSE
#xTestBool := false;
END_IF;
oder so
#xTestBool := (#V1 AND NOT #V2 OR #V3 AND NOT #V4) AND NOT (#V5 OR #V6 OR #V7 OR #V8);

Vollständigkeitshalber die 2 Varianten in SCL Simu wie sie Funktionieren:
1730385231324.png
 
@Peter Wahlen
Sorry aber ich hatte ja versucht unter meinem Post zu beschreiben, wie das zu verstehen ist! Die True und not true sollten nur die Zustände der jeweiligen Variablen beschreiben!
Aber ich bin der Meinung, dass das an der Sache ja nicht ändert! Nur weil jetzt eine Variable enthalten ist dürfte sich doch nichts ändern!
Es ändert sich ja auch nichts, nur der Zustand der Variable ist anders.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Matzeh,
danke für die ausführliche Anleitung! So funktionierts!
Bitte nicht falsch verstehen, aber das ist ja nur ein Auszug aus einer längeren If-elsif .... Anweisung. Deshalb hilft mir eine direkte Zuweisung nichts aber danke für den Tip!

Also nochmal Danke an alle! (y)
 
Code:
If (true and not true) or (true and not true) and not (false or false or false or true) then
   |<---- FALSE ---->| or |<---- FALSE ---->| and not |<----------- TRUE ------------>|
   |<---- FALSE ---->| or |<---- FALSE ---->| and |<------------- FALSE ------------->|
   |<---- FALSE ---->| or |<------------------------- FALSE ------------------------->|
   |<------------------------------------- FALSE ------------------------------------>|

Ich habe keine Ahnung was der Compiler aus
'If (true and not true(=false)) or (true and not true (=false)) and not (false or false or false or true) then'
macht. Für mich wären es SyntaxFehler.

Deine Programmierung Sieht in FUP so aus:
Anhang anzeigen 82610
Woher kommen plötzlich die Negationen bei #V2 und #V4?
 
Zuletzt bearbeitet:
Hallo,
damit wollte ich nur den dann tatsächlichen Zustand beschreiben! Ich meinte damit nur not true bedeutet in der Auswertung false (VKE), da die Variable auch tatsächlich false ist!
 
Zurück
Oben