Schrittkettendiagnose

rheumakay

Level-2
Beiträge
914
Reaktionspunkte
125
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo zusammen,
ich habe in meinem S7 Projekt3 kleinere (N00-N20) Schrittketten.
Nun möchte ich eine Schrittkettendiagnose(Zeitüberwachung pro Schritt) darstellen.
Die Schrittkette ist "herkömlich" ohne graph programmiert.

Wie könnte man die Zeitüberwachung realisieren (ohne für jeden Schritt 1Timer zu verbrauchen)?
 
Bei jedem Eintritt in einen Schritt eine Flanke erzeugen, die entweder einen Timer neu antriggert (Zeit kann unterschiedich sein) oder auch einen Zähler mit festem Zeitimpuls neu startet.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dazu kannst du mal unter Multiinstanz in der S7-Hilfe nachschauen.

Zusammengefasst deklarierst du die Instanz des SFB TON im Instanz-DB deines FB. Somit kannst du "beliebig" viele SFB-Instanzen anlegen, ohne viele DB´s zu verballern...
 
Dazu kannst du mal unter Multiinstanz in der S7-Hilfe nachschauen.

Zusammengefasst deklarierst du die Instanz des SFB TON im Instanz-DB deines FB. Somit kannst du "beliebig" viele SFB-Instanzen anlegen, ohne viele DB´s zu verballern...

du meinst wahrscheinlich " ohne viele Timer" zu verballern?
 
Hallo,
mein Vorschlag dazu :
Nehmen wir an du hast eine Merker-Schrittkette, die sich aus zusammenhängenden Merkerbereichen ergibt. Nun könntest du die Merkerworte der Schrittkette mit denen des letzten Zyklusses vergleichen.
Beu Übereinstimmung läßt du einen Timer laufen und wenn der Durchlaufen kann, dann hast du einen TimeOut. Also vielleicht so :
Code:
L #MW_aktueller_Zyklus
L #MW_letzter_Zyklus
==I
L s5t#2s
SE T1
U T1
S #TimeOut
 
L #MW_aktueller_Zyklus
T #MW_letzter_Zyklus
Noch einfacher ginge es dann, wenn die Schrittkette mit einer Zählvariablen gemacht ist ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Muss meinen Senf mal dazugeben, weil:

Eigentlich stellt sich doch erstmal die Frage ob es nicht Schritte gibt die auf eine Weiterschaltbedingung warten (z.B. Taste von Bediener). Ein Timeout mit einem einzigen Timer bringt nur etwas wenn alle Schritte auch in diesem Timeout-Zeitfenster weitergeschaltet werden.

MfG
 
Hallo,
mein Vorschlag dazu :
Nehmen wir an du hast eine Merker-Schrittkette, die sich aus zusammenhängenden Merkerbereichen ergibt. Nun könntest du die Merkerworte der Schrittkette mit denen des letzten Zyklusses vergleichen.
Beu Übereinstimmung läßt du einen Timer laufen und wenn der Durchlaufen kann, dann hast du einen TimeOut. Also vielleicht so :
Code:
L #MW_aktueller_Zyklus
L #MW_letzter_Zyklus
==I
L s5t#2s
SE T1
U T1
S #TimeOut
 
L #MW_aktueller_Zyklus
T #MW_letzter_Zyklus
Noch einfacher ginge es dann, wenn die Schrittkette mit einer Zählvariablen gemacht ist ...

Gruß
Larry

hallo
ich finde den vorschlag von larry am besten/eunfachsten..werde es gleich mal morgen ausprobieren Vielen Dank
 
d.h. einen SFB kann man nur in einem FB aufrufen?
Hast zufällig ein kleines Beispielprogramm?

Einen SFB4 TON oder SFB5 TOF kannst Du überall aufrufen, nicht nur in einem FB.

Du brauchst dann aber für jeden Aufruf des SFB4 TON oder SFB5 TOF einen eigenen Instanz-DB.

Und um das zu vermeiden, kann man einen SFB4 TON oder SFB5 TOF in einem FB als Multiinstanz aufrufen.

Eine Siemens-FAQ zum Thema Multiinstanz findest Du hier:

Wie können Multiinstanzen erstellt und aktualisiert werden?

Ein Programmbeispiel für die Verwendung des SFB4 TON in einem FB als Multiinstanz findest Du hier:

http://www.sps-forum.de/showthread.php?t=18370

http://www.sps-forum.de/showpost.php?p=122573&postcount=31

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Muss meinen Senf mal dazugeben, weil:

Eigentlich stellt sich doch erstmal die Frage ob es nicht Schritte gibt die auf eine Weiterschaltbedingung warten (z.B. Taste von Bediener). Ein Timeout mit einem einzigen Timer bringt nur etwas wenn alle Schritte auch in diesem Timeout-Zeitfenster weitergeschaltet werden.

MfG

Was für "Zeitfenster" ?, kannst doch die abgelaufene Zeit vergleichen mit einer Vorgabe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zeitüberwachung

Du hast doch sicher einen Schrittmerker der dir vorgibt in welchem Schritt du bist. Mit diesem lässt du mit nem Sekundenimpuls nen Addierer aufaddieren und vergleicht deine Zeit auf die Überwachungszeit.
(Sekunden Takt aus der CPU + P- Merker)

Hat nun der Addierte Wert den selben Wert oder grösser als die Überwachungszeit gibst du nen Bitsignal aus und generierst damit dein Schrittfehler im laufendem Schritt.

Addierer haben den Vorteil du kannst die Überwachungszeit während laufendem Schritt ändern.

Bastel dir dein FB für eine Schrittkette und unterscheide zwischen Zeit gesteuertem Schritt und erreignis gesteuertem Schritt und für jeden Erreignisschritt würde ich eine Überwachungsschritt vorbereiten.

Falls du Fragen hast, kann ich dir morgen Tipps dazu schreiben, wenn ich wieder im Büro bin.
 
So wie duMMbatz würde ich es hier auch machen.

Durch die Einbindung vieler "TON"-Aufrufe wird die Programmgröße doch sehr aufgebläht.
 
Mach doch einen FB der z.B. im OB35 (100ms) eine Variable zunter Zählt solange sie >=1 ist.
In der Schrittkette belegst den Zähler mit deinem Zeitwert (z.B. 10 für 1 sekunde) der FB Gibt nur Alarm wenn der Zählerstand von 1 auf 0 wechselt. Willst du die überwachung ausschalten setz ihn z.B. auf -1 oder sowas.

Nur mal so ein gedanke... vlt. Hilft es ja :)

Gruß Bernd
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo alle zusammen,
habe den Vorschlag von Larry und Dummbatz ausprobiert...funktioniert beides super.
Was man nimmt ist dann ja Geschmacksache.

Euch allen vielen Dank für die Hilfe !!Ein schönes WE :)
 
Noch einfacher ginge es dann, wenn die Schrittkette mit einer Zählvariablen gemacht ist ...

Gruß
Larry

passt vielleicht nicht ganz in diesen thread...

Ich möchte aber die Aussage von Larry zum Anlass nehmen, mal die Antwort auf eine Frage zu bekommen.
Ich programmiere Schrittketten schon seit einiger Zeit nicht mehr "im klassischen Stil" mit Setze/Rücksetze Schrittkettenmerker, sondern benutze eine INT-Variable, die bei der Schrittweiterschaltung mit der Schrittnummer des nächsten Schritts beschrieben wird (MOVE-Befehl). Im jeweiligen Schritt frage ich dann die Schritt-Variable mit CMP==I ab.

Ich würde mich nicht als besonders professionell oder innovativ einstufen, daher denke ich, das hat vielleicht schon jemand so oder ähnlich gemacht.

Nun zu meiner Frage:
1. Ist dieser Programmierstil aus eurer Sicht "unsauber"?
2. Leider "schluckt" das schon bei mittleren Programmen recht viel Speicher. Gibt es eine "speicherschonende" Variante, die dem nahekommt?
 
Zurück
Oben