Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 5 von 5

Thema: Wert einer booleschen Variablen abfragen

  1. #1
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich will den Wert der booleschen Variablen M3.0 und M3.1 in SCL abfragen und in Abhängigkeit davon den A5.0 schalten:

    Ich würde folgendermaßen programmieren:

    IF M3.0=True Then A5.0:=True; End_IF;
    IF M3.1=True Then A5.0:=False; End_If;

    Das hat bisher immer funktioniert.

    ______________________________

    Jetzt zeigt mir ein Kollege seine Varianten und sagt, dass müsste auch gehen:

    IF M3.0=1 Then A5.0:=True; End_IF;
    IF M3.1=1 Then A5.0:=False; End_If;

    Und dann soll die folgende Variante auch noch richtig sein:

    IF M3.0=1 Then A5.0:=1; End_IF;
    IF M3.1=1 Then A5.0:=0; End_If;

    Der Kompiler erkennt keine Syntaxfehler. Aber das ja nicht viel zu sagen.

    Frage: Arbeiten die beiden letzten Varianten auch immer richtig?
    Zitieren Zitieren Wert einer booleschen Variablen abfragen  

  2. #2
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    True und False sind vordefinierte Konstanten, mit den Werten 1 und 0. Allerdings sind die Konstanten vom Datentyp BOOL, entsprechen also genaugenommen den Konstanten BOOL#1 und BOOL#0. Darum ist eine Anweisung wie
    intVar := TRUE + TRUE;
    aufgrund der nicht kompatiblen Datentypen nicht erlaubt.

    intVar := BOOL_TO_INT(TRUE) + BOOL_TO_INT(TRUE);
    hingegen schon.

    Von der Funktion her sind deine Varianten identisch, aber dort wird eine implizite Typkonvertierung von INT nach BOOL vorgenommen, die zumindest nach SCL-Sprachbeschreibung von Step7 eigentlich nicht erlaubt wäre, aber wohl doch funktioniert.
    Ich ziehe die Schreibweise mit True/False vor, bzw. lasse ich die Konstanten bei einer Bedingung ganz weg wenn es besser passt.
    Geändert von Thomas_v2.1 (27.01.2015 um 19:54 Uhr)

  3. #3
    Registriert seit
    01.10.2012
    Beiträge
    203
    Danke
    12
    Erhielt 56 Danke für 36 Beiträge

    Standard

    Bei boolschen Variablen muß man nicht mit = vergleichen.

    Code:
    IF  M3.0 Then A5.0:=True; End_IF;
    IF  M3.1 Then A5.0:=False; End_If;
    
    bzw. die Negation
    
    IF NOT M3.0 Then usw.
    Sonst müßte man ja bei einem Integervergleich folgendes schreiben.

    Code:
    IF (MW10 = 1) = true then ...
    War zwar nicht die Frage aber ich wollte es mal loswerden.
    Nüchtern betrachtet war es besoffen besser.

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Wenn man nicht genau weiß wie True und False definiert sind, dann kann man sich auch um die Angabe drücken, indem man den Compiler den wahr/falsch-Wert selber einsetzen läßt:
    Code:
    IF M3.0 = 0 = 0 Then A5.0 := 0 = 0; End_If;
    IF M3.1 = 0 = 0 Then A5.0 := 0 = 1; End_If;

    Die True/False-Konstanten und -Vergleiche kann man sich auch komplett sparen, wenn man statt dem IF-Gewurstel einfach so schreibt:
    Code:
    A5.0 := (A5.0 OR M3.0) AND NOT M3.1 ;
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    Earny ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Besten Dank für eure Tipps.
    Ich nehme dann mal zur Kenntnis, dass alle meine drei Varianten immer richtig arbeiten und dass noch viele andere Lösungen existieren.

Ähnliche Themen

  1. Struktur auf Wert 0 abfragen
    Von SY50 im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 11.01.2015, 15:49
  2. Wert einer Variablen ändern
    Von joern_85 im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 02.07.2013, 15:55
  3. Step 5 S5 Zaehlerausgang auf Wert (=0) abfragen
    Von DI87 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 17.05.2013, 21:09
  4. Antworten: 9
    Letzter Beitrag: 10.12.2011, 13:04
  5. Variablen abfragen
    Von otto99 im Forum HMI
    Antworten: 0
    Letzter Beitrag: 13.03.2006, 12:53

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •