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

Seite 1 von 7 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 69

Thema: wie gehe ich da ran?

  1. #1
    Registriert seit
    29.01.2010
    Beiträge
    46
    Danke
    11
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin moin,

    fange ja gerade erst mit ST an und benötige mal ne einschätzung zu folgenden Szenario:

    Ich frage einen Zustand ( START oder BETRIEB ) zweier Tanks, je nach den Füllständen meiner Teichanlage ab. Sind beide Tanks leer, dann soll sie START Sequenz eingeleitet werden.

    Da sich der Zustand zu Sequenz währen dieser ändert, würde ich nach meiner Logik ein eine Variable setzen, und erst am ende der Sequenz wieder zurücksetzten. Wäre das eine Lösung oder gibt es was besseres?

    Nach der Abfrage und wahl der Sequenz, muss ich ja entweder an eine bestimmte Stelle im Programm springen, oder ein anderes Programm aufrufen. Was macht mehr sinn, und wie geht das? Gibt es sowas wie goto? oder wie eine Sprung in FUP?

    Wäre um ein Beispiel sehr dankbar!

    Gruß
    Zitieren Zitieren wie gehe ich da ran?  

  2. #2
    Registriert seit
    15.02.2011
    Ort
    Stromness, Scotland, UK
    Beiträge
    339
    Danke
    25
    Erhielt 34 Danke für 33 Beiträge

    Standard

    Für Sequenzen setzt ich oft die Case-Struktur ein:
    http://infosys.beckhoff.com/content/...e.htm?id=12175

    Da kannst du Schritte machen, und selber "Weiterschaltbedingungen" definieren. Sprünge habe ich noch nie in ST gebraucht!

    Leider habe ich gerade kein passenden Beispiel parat, aber unten mal ein kleiner Auswahlbaustein in einer Case, es geht um eine Lüftungsklappe...

    Code:
        CASE iNr OF
        
            0: (* NOP *)
            ;
    
            10: (* Klappe öffnen *)
                bAusgang_Motor := TRUE;
                IF (bSensorIsOpen) THEN
                bAusgang_Motor := FALSE;
                bDoKlappe_Auf := FALSE;
                iNr := 0;
                END_IF
    
            20:    (* Klappe Schliessen *)
                bAusgang_Motor := TRUE;
                IF (bSensorIsClose) THEN
                bAusgang_Motor := FALSE;
                bDoKlappe_Zu := FALSE;
                iNr := 0;
                END_IF
        END_CASE

  3. #3
    Registriert seit
    15.10.2007
    Beiträge
    34
    Danke
    1
    Erhielt 6 Danke für 5 Beiträge

    Standard

    Naja ohne Hardware kann man dir schlecht helfen. Wenn du 2 Fühler hast machste ne 2-punkt Regelung. Hast du Analoge Werte machst du halt ne If schleife mit real werten oder was auch immer. Aber so in die Glaskugel geschaut kann man dir nicht "richtig" helfen.

  4. #4
    xinix ist offline Benutzer
    Themenstarter
    Registriert seit
    29.01.2010
    Beiträge
    46
    Danke
    11
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo Dante, mir geht es eigenlich erst einmal um das grundsätzliche, nicht auf eine bestimmte Hardware bezogen, da ich es erst einmal verstehen möchte.

    Also ich frage zunächst den Zustand ab, ob beide tanks leer sind. Wenn beide Tanks leer sind soll eine Starsequenz eingeleitet werden. Sind beide Tanks jeweils mit mehr als 25% gefüllt wird die Betriebssequenz eingeleitet.

    Diese Start- und Betriebssequenz birgt aber auch wider eine Rehe von Messungen und Abfragen und Regelungen. Die Startsequenz ist auf die Betriebszeit von einer Strunde festgelegt. Nach dieser Stunde soll dann die Betriebssequenz eingeleitet werden die ähnlich der Startsequenz arbeite aber ein par kleine änderungen mit sich bringt.

    Das auswerten der Fühler und das Steuern der Pumpen ist soweit kein problem.

  5. #5
    Registriert seit
    01.03.2008
    Beiträge
    487
    Danke
    3
    Erhielt 43 Danke für 39 Beiträge

    Beitrag

    Hallo,

    eigentlich hast du mit deiner Beschreibung bereits das Programm schon fast geschrieben.

    Im Prinzip brauchst du nur noch Zeile für Zeile in Codeys übersetzen.

    Beispiel:

    Tank1_viertelvoll:=(Messwert1>33);
    Tank2_viertelvoll:=(Messwert2>3; (*Falls der Tank andere Maße hat*)

    If Tank1_Leer=True and Tank2_leer=true then Sequenz_Start:=true;end_if

    If Tank1_viertelvoll=True and Tank2_viertelvoll then
    Sequenz_Start:=False;
    Sequenz_Regeln:=True;
    end_if



    Ist jetzt nur mal ein einfaches Beispiel.

    MfG CAS
    www.cas-solution.de

    Alles geregelt...


    Weltraumflug in den USA zu gewinnen!
    Kratze hier ▒▒▒▒▒▒▒▒▒▒▒▒ mit einer Münze,
    und finde heraus, ob Du der Gewinner bist!

  6. #6
    Registriert seit
    15.10.2007
    Beiträge
    34
    Danke
    1
    Erhielt 6 Danke für 5 Beiträge

    Standard

    Habs ihm schon komplett geschrieben

    Hier die exportierte Version: (mit seinen Angaben gemacht ohne Sicherheit das die Pumpen trocken laufen oder so)


    Code:
    (* @NESTEDCOMMENTS := 'Yes' *)
    (* @PATH := '' *)
    (* @SYMFILEFLAGS := '2048' *)
    FUNCTION_BLOCK FB_Pumpensteuerung
    VAR_INPUT
        nTank_1: INT;
        nTank_2: INT;
    END_VAR
    VAR_OUTPUT
        nPumpeTank_1: BOOL;
        nPumpeFilterung: BOOL;
        bPumpeTeichzulauf: BOOL;
        bUmspuelung: BOOL;
        bTeichfuellung: BOOL;
    END_VAR
    VAR
        bInit: BOOL;        (*Startvorgang*)
        TOF_Filterung: TOF;
        F_TRIG_Filterung: F_TRIG;
        bBetrieb: BOOL;
        R_TRIG_Betrieb: R_TRIG;
        TOF_betrieb: TOF;
        F_TRIG_Betrieb: F_TRIG;
    END_VAR
    (* @END_DECLARATION := '0' *)
    (*
    #############################
    #                            #
    #    Pumpensteuerung            #
    #    Teichanlage V1.0            #
    #                            #
    #############################
    *)
    
    (*
    ###########################    Startvorgang
    *)
    
    IF nTank_1<100 AND nTank_2<100 AND F_TRIG_Filterung.Q=FALSE AND bBetrieb=FALSE THEN
        bInit=TRUE;
    ELSIF F_TRIG_Filterung.Q=TRUE THEN
        binit=FALSE;
    END_IF;
    
    (*
    ###########################    Wasser umwaelzen | reinigen
    *)
    
    IF bInit=TRUE THEN            (*Startvorgang*)
    
        IF nTank_1<800 THEN
            nPumpeTank_1:=TRUE;
        ELSE
            nPumpeTank_1:=FALSE;
        END_IF;
    
    
        TOF_Filterung(IN:=nPumpeTank_1 , PT:=T#60m , Q=> , ET=> );    (*1 Stunde zur Filterung*)
        F_TRIG_Filterung(CLK:=TOF_Filterung.Q , Q=> );                (*Fallende Flanke vom Timer setzt initialschritt zurueck*)
    
        IF nTank_1>500 AND TOF_Filterung.Q THEN
            nPumpeFilterung:=TRUE;
        ELSE
            nPumpeFilterung:=FALSE;
        END_IF;
    
    (*
    ###########################    Wasser umspuelen
    *)
    
        IF nTank_2>nTank_1 AND TOF_Filterung.Q THEN
            bPumpeTeichzulauf:=TRUE;
            bUmspuelung:=TRUE;
        ELSE
            bPumpeTeichzulauf:=FALSE;
            bUmspuelung:=FALSE;
        END_IF;
    
    END_IF;
    
    (*
    ###########################    Betrieb
    *)
    
    IF binit=FALSE AND nTank_1<100 AND nTank_2<100 THEN
        bBetrieb:=TRUE;
    ELSIF F_TRIG_Betrieb=TRUE THEN
        bBetrieb:=FALSE;
    END_IF;
    
    IF bBetrieb=TRUE THEN
    
        R_TRIG_Betrieb(CLK:=bBetrieb , Q=> );
        TOF_Betrieb(IN:=R_TRIG_Betrieb.Q OR F_TRIG_Betrieb.Q, PT:=t#180m , Q=> , ET=> );    (*3 Stunden Intervall*)
        F_TRIG_Betrieb(CLK:=TOF_Betrieb.Q , Q=> );
    
        IF F_TRIG_Betrieb.Q=TRUE THEN
            IF nTank_2>200 THEN
                bPumpeTeichzulauf:=TRUE;
                bTeichfuellung:=TRUE;
            ELSE
                bPumpeTeichzulauf:=FALSE;
                bTeichfuellung:=FALSE;
            END_IF;
    
            IF nTank_2>800 THEN
                nPumpeFilterung:=TRUE;
                nPumpeTank_1:=TRUE;
            ELSE
                nPumpeFilterung:=FALSE;
                nPumpeTank_1:=FALSE;
            END_IF;
        END_IF;
    
    END_IF;
    END_FUNCTION_BLOCK

  7. #7
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.531
    Danke
    1.152
    Erhielt 1.253 Danke für 982 Beiträge

    Standard

    also wenn man das so liest, könnte man glatt glauben, dass Codesys keinen KOP oder FUP kann

    Gruß
    Dieter
    Geändert von Blockmove (19.03.2011 um 08:40 Uhr)

  8. #8
    Registriert seit
    03.04.2008
    Beiträge
    6.205
    Danke
    237
    Erhielt 817 Danke für 691 Beiträge

    Standard

    Zitat Zitat von Blockmove Beitrag anzeigen
    Laso wenn man das so liest, könnte man glatt glauben, dass Codesys keinen KOP oder FUP kann

    Gruß
    Dieter
    Kennen vielleicht schon, doch man kann auch versuchen jedes Werkzeug für jede Aufgabe zu nutzen.
    Es soll auch schon ein Hammer in der Uhrmacherwerkstatt gesichtet worden sein


    bike

  9. #9
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.531
    Danke
    1.152
    Erhielt 1.253 Danke für 982 Beiträge

    Standard

    Zitat Zitat von bike Beitrag anzeigen
    Es soll auch schon ein Hammer in der Uhrmacherwerkstatt gesichtet worden sein
    Um bei deinem Vergleich zu bleiben:
    Hier wurde der Schmiedehammer rausgeholt

    Fehlt nur noch die Modellierung auf Basis von Zustandsautomaten.

    Gruß
    Dieter

  10. #10
    Registriert seit
    15.10.2007
    Beiträge
    34
    Danke
    1
    Erhielt 6 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    du kannst die Aufgabe ja sehr gerne mal in FUB oder KOP machen und wir schauen was übersichtlichert wird .

Ähnliche Themen

  1. S7 V5.4 gehe zu verwendungsstelle...
    Von Tom100 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 05.01.2018, 11:36
  2. S7xudiax Fehler bei gehe zu
    Von Gigamail im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 18.10.2010, 21:17
  3. Ab September gehe ich Studieren
    Von godi im Forum Stammtisch
    Antworten: 10
    Letzter Beitrag: 05.07.2009, 00:30
  4. Antworten: 16
    Letzter Beitrag: 21.06.2008, 12:44
  5. Wie gehe ich am besten vor bei S7?
    Von Gruwe im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 10.02.2006, 15:22

Lesezeichen

Berechtigungen

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