Sind hier auch Step7 Programmierer anwesend?

sterum

Well-Known Member
Ja, ich weiß, das hier ist ein BSD Forum.
Dennoch stelle ich meine Frage erstmal hier, bevor ich mich irgendwo anders registriere.

Ein Antrieb soll beispielsweise 10 Minuten laufen und dann wieder 5 Stunden Pause einlegen. Mit den SPS Timern kommt man hier aber nicht weit, da bei etwas mehr als 2,5 Stunden Schluß ist.

Würde es Sinn machen mit einem Taktmerker zu arbeiten.

also etwa so:

Code:
U(
U         #Start
U         #FP_Taktmerker
)
SPBN  M001
L         #ZAEHLER
L         1
T         #ZAEHLER
M001:  NOP 0

L         #PAUSENZEIT
L         #ZAEHLER
>=I

usw.
 
Hmm, eine Weile her, dass ich das gemacht habe. Ich würde wohl einfach mit einem Zähler arbeiten, den ich am Anfang auf 5 Setze und mit einem Timeout jeden Stunde heruntersetze. Bei 0 wird dann getriggert.

Das Prinzip kannst du ja auch mit einem 5-Sekunden Timer mal Testen, bevor du auf den Stunden-Takt hochgehst.

Die klammern kannst du übrigens weglassen.

Die Varianten
Code:
U(
U         #Start
U         #FP_Taktmerker
)
und
Code:
U         #Start
U         #FP_Taktmerker
sind gleichwertig. Wobei die erste etwas Unverständnis über die Logik der SPS zum Ausdruck bringt. Es ist nie nötig zu klammern und nur sehr selten sinnvoll.

Weißt du wie du eine FSM in AWL implementierst? So baut man AWL Programme eigentlich immer auf. Das ist die einfachste Möglichkeit die Übersicht zu behalten.
 
Die Klammern kann man natürlich weglassen. Die stammen noch von einem anderen Versuch.

Daz Problem mit dem Zähler ist, das dieser soweit ich weiß auch nur bis 999 zählen kann. Ich benötige aber eine größere Genauigkeit als Stunden. Außerdem sind die Zeiten variabel und kommen als Integerwert von einem OperatorPanel.

Wahrscheinlich komm ich um das aufsummieren eines Integerwertes nicht herum.

Was ist FSM?
 
Finite State Machine

Hmm, dann musst du halt mehrere Zähler verwenden. So eine Uhr, die Stunden und Minuten Zählt ist nicht sooo kompliziert. Du kannst das natürlich noch feiner runterbrechen. So ein Zähler mit Sekunden, Minuten, Stunden usw. ist als FSM ja sehr schnell realisiert.
 
Hmm, Finite State Machine? Noch nie davon gehört.
Meine Programmierkenntnisse sind halt nicht soo tiefgreifend :).

Ist ja auch egal. Im Simulator läufts nun mit meiner Variante. Wahrscheinlich
noch stark verbesserungswürdig, aber naja.

Ich hab halt auf eine Antwort wie "Da gibt's ja von Siemens einen Funktionsbaustein, der genau das kann" gehofft.

Der Vollständigkeit halber mein Code
Code:
// Antrieb Start - Stop
U(    
O     #Start
O     #Leuchtmelder
)     
UN    #Not_Aus
U     #Stop
U     #Endschalter
=     #Leuchtmelder

// Daten von OP umwandeln und in Variable speichern
L     DB1.DBW    2    
L	60
*I
T     #Laufzeit_sek

L     DB1.DBW    4
L     60
*I    
T     #Pausenzeit_sek


// Gesamtzykluszeit berechnen
L     #Laufzeit_sek
L     #Pausenzeit_sek
+I    
T     #Zykluszeit

// Zähler rücksetzen wenn Antrieb ausgeschaltet
U     #Leuchtmelder
SPB   M002
L     0
T     #Zaehler
M002: NOP   0

// Zähler aufsummieren (M1.0 = Positive Flanke im Sekundentakt)
U     #Leuchtmelder
U     M      1.0
SPBN  M001
L     #Zaehler
L     1
+I    
T     #Zaehler
M001: NOP   0

// Folgendes wurde in FUP geschrieben
//
// Zähler am Ende der Zykluszeit wieder au 0 setzen      
U(    
L     #Zaehler
L     #Zykluszeit
>I    
)     
SPBNB _001
L     0
T     #Zaehler
_001: NOP   0

// Antrieb
U     #Leuchtmelder
U(    
U(    
L     #Zaehler
L     #Laufzeit_sek
>I    
)     
NOT   
)     
=     #Motor
 
Richtig geraten, ich hab "nur" eine ganz normale Berufsausbildung gemacht. Betriebselektriker war die frühere Bezeichnung. Mittlerweile nennt man uns Elektrobetriebstechniker.
Danach machte ich noch einige Kurse über Step7, S7 SCL, ProTool, WinCC, WinCC flexible und Profibus.

Zum suchen von Anlagenstörungen und für kleinere Projekte reicht es. (meistens :rolleyes:)
 
In der Regel programmiert man AWL als Moore Automat.

Das heißt man packt jede Aktion in einen Zustand. Für jeden Zustand gibt es eine Variable die den Zustand triggert. Von diesen Zustandsvariablen ist immer nur eine auf 1 gesetzt.

Die ganzen Aktionen werden dann einfach mit einem

U #State_X

ausgelöst. Danach kommen dann die Kanten zu anderen Zuständen, das heißt du hast deine Bedingungen (inklusive U #State_X) und wenn die erfüllt sind setzt du #State_X auf 0 und #State_Y auf 1.

Der Wikipedia Artikel reicht aus um das Konzept zu erklären:
http://en.wikipedia.org/wiki/Moore_machine

Du kannst auch Mealy Automaten machen, dass bedeutet bei AWL einfach beim Zustandswechsel noch Aktionen mit rein zu packen. Dann hast du in den Zuständen Aktionen, die über einen längeren Zeitraum passieren sollen und in den Kanten Aktionen, die nur einmalig beim Wechsel zwischen den Zuständen passieren.
 
Zwar nicht ganz, da gibt es einen Funktionsbaustein aber:

Es gibt Systemfunktionsbausteine in Step7 nach IEC 61131-3 (IEC-Timer)
Die können einen Zeitwert von bis zu 24 Tagen realisieren.
Schau Dir mal die SFB3-SFB5 an.
 
Ich verstehe zwar den Hintergedanken einer solchen Maschine jetzt etwas besser, aber in der Praxis hab ich so etwas noch nie gesehen. Die Programme, die ich kenne sind eher in Schrittketten aufgebaut.
Das ist eine interessante Beobachtung. Ich wurde mit Schrittketten noch gar nicht konfrontiert. Das liegt wahrscheinlich an dem theoretischen Unterbau, den man als Informatiker bekommt. Schrittketten sind in der Automatentheorie kein Thema. Jedenfalls nicht nach meinem Wissensstand.
 
Danke Dilbert, diese Bausteine können eigentlich das was ich wollte. Ich bleibe trotzdem bei meiner oben genannten Lösung.
Erstens, weil es schon fertig ist.
Zweitens weil es das kann, wass ich brauche. Egal welche Schönheitsfehler sich darin befinden.

@kamikaze:
Ich hoffe ich hab mich mit "Schrittketten" richtig ausgedrückt.
Beispiel:

Ein Kran kann drei Bewegungen fahren. Katzfahrwerk, Hubwerk und Kranfahrwek.
Alle drei Bewegungen warten auf einen Startbefehl. Kommt jetzt der Befehl für Kranfahrt, werden nacheinander bestimmte Schritte ausgeführt. 1. Beschleunigen 2. fahren. Nachdem der Stop Befehl kommt wird Schritt 3 ausgeführt, abbremsen.
Alle drei Antriebe können aber ihre Tätigkeiten zu gleichen Zeit ausführen, was aber keine Schrittkette darstellt. Hier könnte man von Zuständen sprechen. (Zustand 1: Kran fährt, Zustand 2: Hubwerk hebt, ...)

Irgendwie wird mir das Thema langsam zu komplex (komliziert).
 
Zurück
Oben