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

Ergebnis 1 bis 4 von 4

Thema: Schrittkette

  1. #1
    Registriert seit
    09.05.2014
    Beiträge
    62
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,
    ich sitzte grade vor einem Problem und zwar wollte ich eine Schrittkette Programmieren um eine Pumpe zu steuern, kurz zu Funktion.

    Sobald auf Automatik gestellt soll eine Pumpe in einem Medium von oben anfangen abzupumpen.
    Die Pumpe soll zuerst ein eine Stellung außerhalb des Wassers fahren und dann wider runter bis der Schwimmerschalter schaltet damit sie im Wasser ist.

    anschliessend soll sie abpumpen bis ihr das Medium nicht mehr gefällt daher kommt auch der bool ausgang eines hysterese Timers Überschreitungszeit_Q.

    wenn dies der Fall ist soll die Pumpe die Strecke "verfahrweg" nach unten verfahren und anschliessend wider Pumpen bis das Medium nicht ok ist.

    Das ganze geht so lange bis sie in der Unteren endlage ist. Danach soll sie wider bei Schritt 1 einsteigen und nach ganz oben fahren um wider neu ins medium einzutauchen.

    Ich habe das Problem das die Anlage zwar auf schritt 1 anfährt aber der Merker zB gar nicht gesetzt ist und die anlage somit auch nicht in Schritt 2 wechselt usw.


    Hier ein auszug aus meinem Programm.

    // Zyklusfahrt



    IF "StoerungPumpe" OR "StoerungHubwerk" OR "StoerungGlobal" OR NOT "DREH_Auto_KRAN" THEN
    "Zyklusmerker" := FALSE;

    ELSE
    "Zyklusmerker" := TRUE;
    END_IF;




    IF NOT "Zyklusmerker" THEN
    "m_schritt1" := FALSE;
    "m_schritt2" := FALSE;
    "m_schritt3" := FALSE;
    "m_schritt4" := FALSE;
    "Motor_hochauto" := FALSE;
    "Motor_runterauto" := FALSE;
    "Pumpe_einauto" := FALSE;

    END_IF;


    IF "Zyklusmerker" AND "Flanke_Auto" AND NOT "Oberste Endlage" THEN
    "m_schritt1" := TRUE;

    END_IF;




    IF "Zyklusmerker" AND "Wartungsstellung" AND "m_schritt1" THEN
    "m_schritt2" := TRUE;


    END_IF;




    IF "Zyklusmerker" AND "Ruhezeit_Q" AND "m_schritt2" THEN
    "m_schritt3" := TRUE;
    END_IF;


    IF "m_schritt3" AND "Ueberschreitungszeit_Q" THEN

    "m_schritt4" := TRUE;
    END_IF;


    IF "m_schritt4" AND "Verfahrweg_Q" AND "Unterste Endlage" THEN

    "m_schritt1" := TRUE;


    END_IF;


    IF "m_schritt4" AND "Verfahrweg_Q" AND NOT "Unterste Endlage" THEN

    "m_schritt3" := TRUE;

    END_IF;


    // Ausgabe






    IF "m_schritt1" THEN
    "Motor_hochauto" := TRUE;
    "m_schritt4" := FALSE;
    END_IF;


    IF "m_schritt2" AND NOT "Pumpe_schwimmer" THEN
    "Motor_hochauto" := FALSE;
    "Motor_runterauto" := TRUE;
    ELSE
    "Motor_runterauto" := FALSE;
    "m_schritt1" := FALSE;
    END_IF;




    IF "m_schritt3" THEN
    "Pumpe_einauto" := TRUE;
    "m_schritt2" := FALSE;
    "m_schritt4" := FALSE;

    "MR_Start" := "scale_Drehgeber";
    "MR_Ziel" := "MR_Start" + "Verfahrweg";

    END_IF;

    IF "m_schritt4" AND "scale_Drehgeber" <= "MR_Ziel" THEN
    "Pumpe_einauto" := FALSE;
    "Motor_runterauto" := TRUE;
    "m_schritt3" := FALSE;
    END_IF;

    IF "scale_Drehgeber" > "MR_Ziel" THEN
    "Motor_runterauto" := FALSE;
    END_IF;
    Geändert von sps31 (01.07.2015 um 14:46 Uhr)
    Zitieren Zitieren Schrittkette  

  2. #2
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Hallo sps31

    dein Zyklusmerker wird aus einem if-then-else gebildet.

    das kann man übrigens kürzer so schreiben
    "Zyklusmerker" := NOT( "StoerungPumpe" OR "StoerungHubwerk" OR "StoerungGlobal" OR NOT "DREH_Auto_KRAN" )


    und dann setzt es alle Schritte false.

    Wenn der Name Zyklusmerker einen Sinn haben soll, dann doch vermutlich den, dass du möchtest, das für einen Zyklus in Deiner Schrittkette was passiert und dann für viele Zyklen gewartet wird.

    Während des Wartens machst du aber wieder alles platt.


    Aber mal was anderes? Warum tutst du dir das an. Graph ist im TIA-Portal vorhanden -- kost' nix mehr extra!
    Wenn ich eine Schrittkette brauch, dann nehme ich die dafür vorgesehene Sprachen und quäl mich nicht mit SCL rum.
    SCL ist gut für's Rechnen, KOP/FUP ist gut für Logic, aber für Zustandsautomaten gibt es Graph.



    'n schön' Tach auch
    HB

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Zitat Zitat von HelleBarde Beitrag anzeigen
    Aber mal was anderes? Warum tutst du dir das an. Graph ist im TIA-Portal vorhanden -- kost' nix mehr extra!
    Wenn ich eine Schrittkette brauch, dann nehme ich die dafür vorgesehene Sprachen und quäl mich nicht mit SCL rum.
    SCL ist gut für's Rechnen, KOP/FUP ist gut für Logic, aber für Zustandsautomaten gibt es Graph.



    'n schön' Tach auch
    HB
    Wenn er mal nicht ne 1200-er hat, denn für eine 1500-er ist die Aufgabe vlt. nicht umfangreich genug?
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier mal eine einfache Möglichkeit für eine Schrittkette in ST/SCL.
    Das ist nur bei mir schnell aus einem Baustein herauskopiert, zeigt aber vlt. das Prinzip.

    Code:
        //Start Kommunikationsinitialisierung
        CASE StepCounter OF
            //Die Kommunikation wird zuerst auf den DB mit den Moduldaten
            //gelegt. Aus diesem DB holt sich der FB die ID des Moduls im Master
            //Mit dieser ID kann dann der Kommunikations-DB berechnet werden,
            //der für den Datenaustausch zwischen Master und Modul genutzt wird.
            0   :   IF NOT Get_Busy AND NOT PUT_Busy THEN
                        LocalDB := Def_DBnr;
                        RemoteDB := Def_DBnr;
                        Stepcounter := Stepcounter + 10;
                    END_IF;
                    
            10  :    Stepcounter := Stepcounter + 10;
                                                               
            //Kommunikation starten
            //Warten, dass über Get-Busy Daten angefordert werden
            20  :   Enable := True;
                    IF Get_Busy THEN
                        Stepcounter := Stepcounter + 10;
                    END_IF;
                    
             //Warten, dass Get-Busy signalisiert, dass Daten empfangen wurden
            30  :   IF NOT Get_Busy THEN
                        Stepcounter := Stepcounter + 10;
                    END_IF;
            //Warten, dass über Get-Busy Daten angefordert werden
            //nur zur Sicherheit 2.Zyklus Datenanforderung laufen lassen 
            40  :   IF Get_Busy THEN
                        Stepcounter := Stepcounter + 10;
                    END_IF;
    
    
            //Daten empfangen und Offset des Moduls bestimmen
            50  :   IF NOT Get_Busy AND NOT Get_Error AND NOT PUT_Error THEN
                        
                        //Ermitteln, der ID über die eigne IP (nur End-Quadrupel)
                        //IP und ID sind im DB mit den Modulfeninitionen im Master hinterlegt
                        FOR I := 1 TO 32 DO
                            IF Def_ModulStruct[I].IP.IP_4 = Last_IP_Nr THEN
                                IF Def_ModulStruct[I].ID <> 0 then 
                                    Offset_Modul := Def_ModulStruct[I].ID;
                                    Offset_Found := True;
                                    EXIT;
                                END_IF;
                            END_IF;
                            ;                       
                        END_FOR;
                        Enable := False; //Kommunikation ausschalten  
                        IF Offset_Found AND NOT Enable AND NOT Get_Busy THEN
                            Stepcounter := Stepcounter + 10;
                        END_IF;
                        //Wenn kein Offset in der Tabelle gefunden wurde zurück zu Schritt 0 und 
                        //Signalisierung nach außen
                        IF NOT Offset_Found THEN
                            Stepcounter := 0;
                        END_IF;          
                    END_IF;
    
    
            60  :    Stepcounter := Stepcounter + 10;
                                     
            //Remote DB des Moduls berechnen 
            //Umschalten des der DB für PUT und GET auf das Modul    
            70  :   LocalDB := Local_DBnr;  
                    RemoteDB := Remote_Start_DBnr_Modul + Offset_Modul - 1;
                    Enable := True;   //Kommunikation einschalten 
                    IF Get_Busy THEN
                        Stepcounter := Stepcounter + 10;
                    END_IF;
            //Das wars              
            80  :   
                ;
        ELSE:
            // Anweisungen_ELSE
            ;
        END_CASE;
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Step 7 Schrittkette
    Von tkmaxx im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 16.10.2014, 19:58
  2. Schrittkette
    Von firefly im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 23.04.2014, 13:25
  3. Schrittkette
    Von redscorpion im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 06.09.2010, 06:13
  4. Schrittkette
    Von Deep Blue im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 22.05.2007, 18:42
  5. Schrittkette ?
    Von 1schilcher im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 04.01.2007, 14:25

Lesezeichen

Berechtigungen

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