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

Ergebnis 1 bis 4 von 4

Thema: ST Anfänger braucht Hilfe

  1. #1
    Registriert seit
    24.01.2015
    Ort
    94562 Oberpöring
    Beiträge
    24
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, habe ein Anfänger Problem...
    wer kann mir bitte kurz helfen?

    wie muss ich das = 1, >=2 oder = 0 eingeben, damit kein Fehler kommt?

    Code:
    FUNCTION_BLOCK FB_test
    VAR_INPUT
        ausgangIntern: BOOL;
        ausgangExtern: BOOL;
    END_VAR
    VAR_OUTPUT
        ausgangInternOK: INT;
        ausgangExternOK: INT;
        ArtOK: BOOL;
    END_VAR
    VAR
        ArtOKZahl: INT;
    END_VAR
    Code:
    IF ausgangIntern = TRUE THEN ausgangInternOK  :=1;
    ELSIF ausgangIntern = FALSE THEN ausgangInternOK  :=0;  END_IF;
    
    IF ausgangExtern = TRUE THEN ausgangExternOK  :=1;
    ELSIF ausgangExtern = FALSE THEN ausgangExternOK  :=0;  END_IF;
    
    IF ausgangExternOK ADD ausgangInternOK THEN ArtOKZahl END_IF;
    IF ArtOKZahl = 1 THEN ArtOK = TRUE
    ELSIF ArtOKZahl = 0 OR >=2 THEN  ArtOK = FALSE  END_IF;
    MfG Florian
    Zitieren Zitieren ST Anfänger braucht Hilfe  

  2. #2
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard

    Boolsche Variablen brauchen nicht auf "= True" oder "= FALSE" abgefragt werden, um ein Vergleichsergebnis TRUE oder FALSE zu erhalten. Sie stellen selber schon TRUE oder FALSE dar.
    Es reicht also die Kurzform:
    Code:
    IF ausgangIntern THEN ...
    bzw. für FALSE:
    Code:
    IF NOT ausgangIntern THEN ...

    Für die reine Übertragung des Bool-Wertes in eine INT-Variable ist ein aufwendiges IF-Konstrukt auch nicht nötig:
    Code:
    ausgangInternOK  := Bool_To_Int (ausgangIntern);

    Bei mehreren Vergleichen muss jeder für sich voll ausgeschrieben werden:
    Code:
    ...
    ELSIF ArtOKZahl = 0 OR ArtOKZahl >=2 THEN ...
    wobei sich dass in Deinem Fall vermutlich auch wieder schon automatisch durch den TRUE-Vergleich ergibt.
    Einer boolschen Variablen kann man nur TRUE oder FALSE zuweisen. Welchen Wert soll sie denn annehmen, wenn ArtOKZahl kleiner 0 ist?
    Ich vermute mal, dass dieser Fall gar nicht vorkommen soll. Wenn dem so ist, braucht man wieder kein IF-Konstrukt, sondern eine einfache Zuweisung:
    Code:
    ArtOK := ArtOKZahl = 1;
    Wenn ArtOKZahl einen anderen Wert als 1 hat, ist ArtOK durch die Zuweisung FALSE.


    PS: Es ist immer gut, sich zu überlegen, ob man überhaupt ein IF benötigt oder sich das durch 'ne Zuweisung nicht einfacher lösen läßt.
    IF wird leider in viel zu vielen Programmen geradezu inflationär verwendet und stellt in meinen Augen ein modernes "GOTO" dar.
    Geändert von hucki (16.05.2016 um 13:40 Uhr) Grund: Dicke Finger = zuviele Buchstaben

  3. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    fstoiber (16.05.2016)

  4. #3
    Registriert seit
    24.01.2015
    Ort
    94562 Oberpöring
    Beiträge
    24
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Super danke,

    habe es jetzt so angepasst.

    Code:
    ausgangInternOK  := BOOL_TO_INT (ausgangIntern);
    ausgangExternOK  := BOOL_TO_INT (ausgangExtern);
    
    ArtOKZahl := ausgangExternOK + ausgangInternOK;
    ArtOK := ArtOKZahl = 1;
    MfG Florian

  5. #4
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Brauchst Du die INT-Werte noch für was anderes?
    Ansonsten wäre das doch ein einfaches XOR:
    Code:
    ArtOK := ausgangIntern XOR ausgangExtern;

    PS: Dein Code ist doch schon um ein vielfaches besser lesbar als das IF-Gewurstel oben, oder?
    Geändert von hucki (23.05.2016 um 18:55 Uhr) Grund: Variablen korrigiert

Ähnliche Themen

  1. Anfänger braucht Hilfe
    Von cooper111 im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 20.09.2012, 12:39
  2. Anfänger braucht Hilfe
    Von bogenseller im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 26.09.2011, 09:17
  3. Anfänger braucht Hilfe
    Von dj_franky im Forum Simatic
    Antworten: 28
    Letzter Beitrag: 14.11.2006, 09:47
  4. Antworten: 15
    Letzter Beitrag: 01.03.2005, 22:25
  5. Anfänger braucht Hilfe
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 31.07.2003, 21:57

Stichworte

Lesezeichen

Berechtigungen

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