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

Ergebnis 1 bis 5 von 5

Thema: Funktionsaufruf und StateMachine

  1. #1
    Registriert seit
    09.11.2012
    Ort
    Hamburg
    Beiträge
    15
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    als erstes muss ich gestehen, dass ich absoluter Noob bin
    Ich habe quasi die Programmierung einer S7-1200 aufs Auge gedrückt bekommen.
    Das ganze im TIA 11.

    Nun zum Problem, welches wohl eher der Sache geschuldet ist dass ich normalerweise C und C# programmiere:

    Ich habe eine Maschine, welche ein paar Achsen in ein Gehäuse einpresst.
    Dafür durchläuft das Ding einen gewissen Zyklus (Ventil 1 auf, Ventil 1 zu, Ventil 2 auf, Motor verfahren, etc...).

    Intuitiv dachte ich nun an eine StateMachine, welche "einfach" nur die einzelnen Zustände durch tackert.
    Dafür habe ich mir einen FB in FUP mit einer Reihe von TON und ein paar Merkern erstellt, welches in definierten Zeitabständen meinen "Token" durch die Merker reicht.

    Aus der OB1 aufgerufen mit

    Code:
    IF "IN0" = TRUE THEN  // Statement section IF
    
    
    "PressFit_DB"();
    
    
    END_IF;
    Funktioniert auch, allerdings nur solange wie IN0 TRUE ist.
    Klar, steht ja auch da, allerdings dachte ich, dass die Funktion zuende ausgeführt wird, so wie man das von C kennt.

    Da kommt nun mein Fachnichtwissen zum Einsatz...
    Die Timer in der FB hören auf zu laufen, wenn IN0 = FALSE.
    Habe hier schon ein wenig rum gelesen, läuft die S7 zyklisch durch OB1 und führt die FB nicht mehr aus, wenn sie unerreichbar ist vom Code, auch wenn die FB eigentlich noch nicht "zuende" gelaufen ist?

    Wie macht man so etwas klassischer Weise?
    Ich hatte versucht in der IF Schleife einen Merker zu setzen FB_ACTIVE und dann in einer WHILE Schleife die FB aufzurufen bis FB_ACTIVE = FALSE.
    Ist wohl eher eine schlechte Idee...
    Wie könnte ich dann nach dem Ende der FB den Merker auf FALSE setzen, evtl aus dem FB heraus?

    Ich danke euch schon mal und bin auch nicht böse, wenn es gleich heißt "Lern erst mal XY"

    Gute Literatur gern gesehen, denn die Siemens Dokumentation ist echt nicht das Gelbe vom Ei....

    THX
    Zitieren Zitieren Funktionsaufruf und StateMachine  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    so einen Kommentar bekommst du erstmal nicht ...

    Eine Statemachine oder auch Schrittkette ist die richtige Vorgehensweise. Du mußt dir diesen sequentiellen Ablauf aber erzwingen, da, wie du ja schon festgestellt hast, das Programm nicht in einer Zeile bis zum Ende derer Bearbeitung stehen bleibt.

    Eine solche Schrittkette (dazu vielleicht auch einfach mal die Suiche hier bemühen) könntest du z.B. mit einer CASE-Abfrage realisieren (wenn du ja schon bei SCL bist). Du fragst hier den CASE deiner Schrittnummer ab und aktivierst dann immer jeweils in der Schrittnummer die Nächste wenn der Zeitpunkt dafür gekommen ist (also z.B. ein Endschalter angefahren wurde). Abhängig von der Schrittnummer lößt du dann die Aktionen aus.

    Kannst du damit etwas anfangen ?

    Gruß
    Larry

  3. #3
    HarryHirn ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    09.11.2012
    Ort
    Hamburg
    Beiträge
    15
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Ja, danke, damit kann ich was anfangen.
    Wie würde man denn zeitliche Dinge realisieren in SCL?
    Z.B. Ventilx 1 Sekunde offen...
    Auch per Timer, welcher den Zustand weitersetzt nach Zeit y?

    Ach ja, und wie kann ich aus der FB heraus eine Variable von OB1 ändern?
    Wenn ich z.B. FB_ACTIVE als variable habe und nach Fertigstellung der FB diese auf false gesetzt werden soll...
    Geändert von HarryHirn (09.11.2012 um 14:44 Uhr)

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Jetzt kommen wir langsam an den Punkt wo ich nur noch pauschal mithalten kann - S7-1200 ist nicht so mein Thema.

    Aber um mal bei der SCL-Geschichte zu bleiben :
    Den Timer ansteuern auf gar keinen Fall innerhalb der CASE-Abfrage da dies in der endgültigen Programm-Umsetzen immer eine bedingte Bearbeitung ergibt (was der Timer meißt nicht mag). Besser hier ist den Timer außerhalb dessen mit der (richtigen) Schrittnummer zu triggern und sein Ergebins im CASE als Weiterschaltbedingung abfragen.

    Um zu der sache mit dem FB_Active etwas zu sagen müßte ich schon etwas mehr von deinem Code kennen. Ganz grundsätzlich nimmt man für so etwas aber Merker (was im Grunde globale Variablen sind), die du über den jeweiligen Ausgang schaltest (oder ggf. auch wieder aus deiner Schrittkette heraus). Vielleicht beschreibst du mal etwas von deinem Ablauf und zeigst mal ein bißchen Code - dann läßt sich schon viel mehr konkreter machen ...

    Gruß
    Larry

  5. #5
    HarryHirn ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    09.11.2012
    Ort
    Hamburg
    Beiträge
    15
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Dein Beitrag hilft mir auf jeden Fall schon sehr!

    Mit dem Ausschnitt oben kennst du schon 75% von meinem Code
    Der Rest ist eine FUP Timer-Merker Kette im FB, um einfach zu gucken ob die FB läuft.

    Ich stehe, wie gesagt, erst am Anfang und wollte das erstmal verstanden haben bevor ich es mit Inhalt fülle.

Ähnliche Themen

  1. Hilfe Funktionsaufruf IF Funktion !!
    Von elektrowurm im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 04.11.2011, 13:16
  2. Funktionsaufruf in SCL
    Von petzi im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 30.04.2009, 16:29
  3. Funktionsaufruf in ST
    Von Vogei im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 01.09.2008, 18:19
  4. Funktionsaufruf aus OB 35 ... )-:
    Von Andi_W im Forum Simatic
    Antworten: 25
    Letzter Beitrag: 06.05.2008, 07:23
  5. Funktionsaufruf mit Aktualparamerern
    Von manas im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 06.03.2008, 13:41

Lesezeichen

Berechtigungen

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