Step 7 Instanz DB auf Startwerte zurücksetzen

Sawascwoolf

Level-1
Beiträge
23
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum,

ich soll für meine Studienarbeit eine Fischertechnik Anlage mit zwei Ansätzen programmieren:
  • SIPN (sonderform von Petrinetzen)
  • Stateflow (automatenbasiertes Tool von Matlab)

Während ich in Stateflow eine gute Struktur durch Hierarchien erzeugen konnte muss ich dies für den Petrinetz Ansatz selbst in Step 7 realisieren oder einen enormen Aufwand in Kauf nehmen.

Die bestehende Steuerung besteht aus 5 Teilen:
Code:
CALL  "Mode" , DB1
      CALL  "Feeder" , DB2
      CALL  "Drill" , DB3
      CALL  "VMill" , DB4
      CALL  "HMill" , DB5

Hierbei setzt der "Mode" Baustein (bei betätigen eines Stop-Tasters) über einen Merker "stop_mode" die Anlage in einen Notaus-Zustand. Bei wiederanlaufen startet die Anlage komplett von vorne, also es ist nicht notwendig irgendwelche Informationen über den Zustand vor dem Stoppen zu speichern.

Aktuell ist in den 4 anderen Bausteinen aus jedem Platz eine Transition definiert, welche in einen internen Stop-Platz führt. Dies ist sehr aufwändig und auch extrem Fehleranfällig, was für einen Notaus wirklich unpraktikabel ist.

Daher habe ich eine etwas andere Vorgehensweise angedacht:
Code:
      CALL  "Mode" , DB1
      AN "stop_mode";
      CALL  "Feeder" , DB2
      CALL  "Drill" , DB3
      CALL  "VMill" , DB4
      CALL  "HMill" , DB5
Hier stellt sich mir jetzt nur die Frage wie ich die Instanz-DBs 2-5 wieder auf ihre Startwerte zurücksetzen kann.

VG
Sawascwoolf
 
Übergib dem FB als Eingangsparameter eine Reset-Anforderung. Im FB programmiere eine Routine, welche die wichtigsten Variablen auf sinnvolle Anfangswerte setzt.
Die Holzhammer-Methode, einen kompletten IDB auf Anfangswerte zurückzusetzen als "Generalreset", sollte in einem fachmänisch programmierten SPS-Programm niemals nötig werden.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

vielen Dank für deinen Hinweis. Leider ist dieser (wenn auch bestimmt richtig) für meinen Fall eben nicht praktikabel.

Ich muss für die Überlegungen der Studienarbeit die FBs komplett aus Petrinetzen generieren lassen und ausserhalb nichts mehr daran ändern.

Durch die Funktionsweise von Petrinetzen müsste ich hierfür wie bereits erwähnt aus jedem Platz (~28 Stück/Modul) eine Transition erstellen, welche in den Stop Platz führt und zusätzlich noch jeder anderen Transition die Bedingung !stop_mode hinzufügen.
Dies ist nicht nur wie oben bereits erwähnt ein enormer Aufwand mit großem Fehlerpotential, sondern lässt sich auch grafisch nicht darstellen.

Wenn du für das Verständnis meiner Anfrage Fragen bezüglich Petrinetzen hast, kann ich die prinzipielle Theorie gerne hier erläutern.
 
Hallo Sawascwoolf,

Ja, in der Tat verstehe ich nicht, was Du mit Deinen hochwissenschaftlichen Petrinetzen und den anderen Buzzwords erreichen willst... :( In bin dann hier raus.

Auf jeden Fall verstehe ich aber, daß der äußere Reset kompletter IDB total SPS-unüblich ist und Dein Konzept wahrscheinlich falsch ist.

Harald
 
Ich kann leider nichts für den Ansatz mit dem Petrinetz :cry:

Um ein wenig Verständnis für mein Problem zu erhalten zeige ich hier ein kleines Beispiel und versuche es zu erläutern.
attachment.php

Dieses Bild zeigt ein SIPN (Signal Interpretiertes Petrinetz) mit vier Plätzen (A,C,D,F) und drei Transitionen (t2,t3,t5). Die Plätze A und D sind zu Beginn markiert (schwarzer Punkt). Während ein Platz markiert ist, ist seine Ausgabe aktiv.
Eine Transition darf schalten (bspw. Markierung von D zu F verschieben) sofern
  • Alle Plätze vor ihr eine Marke enthalten (für t5 wäre das "D")
  • Alle Plätze nach ihr keine Marke enthalten (für t5 wäre das "F")
  • Alle Bedingungen erfüllt sind (für t5 wäre das in2 = TRUE)
Diese Schaltbedingungen sind auch nochmals in der angefügten AWL ersichtlich.

Code:
Function_Block FB 7
TITLE = 
VERSION : 1.0

VAR
  STABLE : BOOL ;
  A : BOOL :=TRUE;
  D : BOOL :=TRUE;
  C : BOOL ;
  F : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE = Stable
STAR:    A #STABLE;
    ON    #STABLE;
    S #STABLE;
NETWORK
TITLE =t2
    A    #A;
    AN    #C;
    A    "in1";
    R    #A;
    S    #C;
    R    #STABLE;
NETWORK
TITLE =t5
    A    #D;
    AN    #F;
    A    "in2";
    R    #D;
    S    #F;
    R    #STABLE;
NETWORK
TITLE =t3
    A    #C;
    A    #F;
    AN    #D;
    AN    #A;
    R    #C;
    R    #F;
    S    #D;
    S    #A;
    R    #STABLE;
NETWORK
TITLE =Stable Test
    AN    #STABLE;
    JC    STAR;
NETWORK
TITLE =A
    A    #A;
    R    "out1";
NETWORK
TITLE =D
    A    #D;
    R    "out2";
NETWORK
TITLE =C
    A    #C;
    S    "out1";
NETWORK
TITLE =F
    A    #F;
    S    "out2";
END_FUNCTION_BLOCK
Die beiden Networks bezüglich Stable sind in der Darstellung nicht ersichtlich und representieren die Schaltregeln von Petrinetzen.

Wenn ich die von dir aufgeführte "Reset" Funktion in den Funktionsbaustein integrieren wollte müsste ich für jede mögliche Kombination der möglichen Markierungen:
A+D
A+F
C+D
C+F
jeweils eine Transition in den Stop-Modus ergänzen.

Hinzu kommt noch, dass es in Petrinetzen keine Möglichkeit gibt eine Reihenfolge für Transitionen festzulegen, dadurch müsste ich bei jeder vorher existierenden Transition eine weitere Bedingung AN "stop_mode" ergänzen um sicherzustellen, dass auch tatsächlich die Stop Markierung erreicht werden kann.

Bei diesem Beispiel ist es eventuell noch möglich dies zu implementieren, jedoch in meinem "Real-Beispiel" mit 28 Plätzen und 24 Transitionen zumindest grafisch nicht darstellbar.
 

Anhänge

  • SIPN-Forum-Frage.PNG
    SIPN-Forum-Frage.PNG
    7,9 KB · Aufrufe: 59
Zurück
Oben