Fehler eines Programms in Strukturierten Text

2009-12-20
2009-12-22
  • RichardLiske - 2009-12-20

    Beschreibung:

    Das ist die Deklaration

    PROGRAM PLC_PRG

    VAR

    i: INT;
    

    END_VAR

    VAR_INPUT

    E1: BOOL;
    
    E2: BOOL;
    
    E3: BOOL;
    
    E4: BOOL;
    
    E5: BOOL;
    
    E6: BOOL;
    

    END_VAR

    VAR_IN_OUT

    END_VAR

    VAR_OUTPUT

    A1: BOOL;
    
    A2: BOOL;
    
    A3: BOOL;
    
    A4: BOOL;
    

    END_VAR

    Das ist das Programm

    E1:= A3; ( Nivou 1)

    E2:= A4; ( Nivou 2)

    A1:=E4 AND NOT E3 AND E1 AND i<5 OR E2;

    ( Pumpe1ist an wenn Auto Schalter und Schwimmerschalter1 und die Zahl kleiner)

    (als 5 ist oder wenn es auf Autoschalter und Schwimmerschalter2 eingeschaltet ist)

    A2:=E4 AND NOT E3 AND E1 AND i>5 OR E2;

    ( Pumpe 2 ist an wenn Auto Schalter und Schwimmerschalter 1 und die Zahl kleiner)

    (als 5 ist oder wenn es auf Autoschalter und Schwimmerschalter2 eingeschaltet ist)

    A1:=E3 AND E5 AND NOT E4;

    ( Pumpe 1 ist aktiv wenn Hand und Schalter für Pumpe 1 eingeschaltet ist)

    A2:=E3 AND E6 AND NOT E4;

    ( Pumpe 2 ist aktiv wenn Hand und Schalter für Pumpe 1 eingeschaltet ist)

    IF A1 AND E1

    ( Wenn Pumpe1 und Schwimmerschalter aktiv sind)

    THEN (Dann)

    FOR ( Für ist in INT)

    i:=0 ( i Veriable ist gleich Null)

    TO 5 ( Zählt bis 5)

    BY 1 ( in einer Schritten)

    DO ( mach)

    i:=i+1; ( i weiter zaählen)

    END_FOR; ( FÃœR endet)

    END_IF; (Ende Wenn)

    IF A2 AND E1 ( Wenn Pumpe1 und Schwimmerschalter aktiv sind)

    THEN (Dann)

    FOR ( Für ist in INT)

    i:=5 ( Zaehler ist gleich fünf)

    TO 0

    BY 1

    DO ( Zählt bis 5)

    i:=i-1; ( in einer Schritten)

    END_FOR; ( FÃœR endet)

    END_IF; (Ende Wenn)

    Ich wollte eine Pumpenvertauschung durch den For befehl realisieren.

    FOR ( Für ist in INT)

    i:=5 ( Zaehler ist gleich fünf)

    TO 0

    BY 1

    DO ( Zählt bis 5)

    i:=i-1; ( in einer Schritten)

    END_FOR; ( FÃœR endet)

    Das die Pumpe1 dann aktiv ist wenn in For Befehl von 0 bis 5 gezählt wird und dann

    Kommt die Pumpenvertauschung und es wird von 5 bis 0 gezählt und in diesem Zeitfenster

    Ist Pumpe2 aktiv.

     
  • Matze001 - 2009-12-21

    Hallo,

    erst einmal -> Was ist dein Problem, das hast du nirgends geschrieben.

    Ich rate mal das die Pumpenumschaltung nicht geht.

    Ich würde es so machen.

    Eine Ausschaltverzögerung die du durch eine Negative Flanke ihrer selbst wieder aktivierst. Dafür brauchst du natürlich beim ersten Starten der SPS einen "Anschubser", einen Init-Merker. Den musst du dir selbst basteln.

    Jede negative Flanke gibst du auf einen Stromstossrelaisbaustein (gibt es bei Oscat) und somit wechselt es immer ein Bit von 0 auf 1 usw... bei 0 ist Pumpe 1 aktiv, bei 1 Pumpe 2.

    MfG

    Marcel

     
  • Michael.Klank - 2009-12-21

    Und wo ist jetzt das Problem oder der Fehler oder Deine Frage. Da einzige was ich sehe Du kannst die Schleife selber "runter" zählen lassen:

    FOR i:=5 TO 0 BY -1 DO
       ...;
    END_FOR
    

    Michael

     
  • RichardLiske - 2009-12-22

    Matze001 hat geschrieben:
    Hallo,
    erst einmal -> Was ist dein Problem, das hast du nirgends geschrieben.
    Ich rate mal das die Pumpenumschaltung nicht geht.
    Ich würde es so machen.
    Eine Ausschaltverzögerung die du durch eine Negative Flanke ihrer selbst wieder aktivierst. Dafür brauchst du natürlich beim ersten Starten der SPS einen "Anschubser", einen Init-Merker. Den musst du dir selbst basteln.
    Jede negative Flanke gibst du auf einen Stromstossrelaisbaustein (gibt es bei Oscat) und somit wechselt es immer ein Bit von 0 auf 1 usw... bei 0 ist Pumpe 1 aktiv, bei 1 Pumpe 2.
    MfG
    Marcel

    Wie kann ich dein Vorschlag in Strukturierten Text realesieren???

     

Log in to post a comment.