# Schrittkettendiagnose



## rheumakay (20 Januar 2011)

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)?


----------



## Corosop15 (20 Januar 2011)

Zeitimpuls bilden und über Zählung aufzählen.


----------



## Verpolt (20 Januar 2011)

Ist die Schrittkette in einem FB?

Dann könntest einen SFB TON/TOF verwenden.


----------



## Ralle (20 Januar 2011)

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.


----------



## rheumakay (20 Januar 2011)

Verpolt schrieb:


> Ist die Schrittkette in einem FB?
> 
> Dann könntest einen SFB TON/TOF verwenden.



Ne noch nicht...
könnte ich aber neu erstellen
d.h. einen SFB kann man nur in einem FB aufrufen?
Hast zufällig ein kleines Beispielprogramm?


----------



## Aventinus (20 Januar 2011)

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...


----------



## Verpolt (20 Januar 2011)

Aventinus schrieb:


> 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?


----------



## Larry Laffer (20 Januar 2011)

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 :
	
	



```
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


----------



## Sinix (20 Januar 2011)

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


----------



## rheumakay (20 Januar 2011)

Larry Laffer schrieb:


> 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 :
> ...



hallo
ich finde den vorschlag von larry am besten/eunfachsten..werde es gleich mal morgen ausprobieren Vielen Dank


----------



## Kai (20 Januar 2011)

rheumakay schrieb:


> 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


----------



## Rudi (20 Januar 2011)

Mäuseklavier schrieb:


> 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.


----------



## Sinix (20 Januar 2011)

Das stimmt, musst aber dann für jeden Schritt eventuell eine andere Vorgabe machen.


----------



## Rudi (20 Januar 2011)

Oder eben Vorgabe 1 bis Vorgabe 5 oder so....


----------



## duMMbatz (20 Januar 2011)

*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.


----------



## Bär1971 (21 Januar 2011)

So wie duMMbatz würde ich es hier auch machen.

Durch die Einbindung vieler "TON"-Aufrufe wird die Programmgröße doch sehr aufgebläht.


----------



## BerndAllgäu (21 Januar 2011)

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


----------



## rheumakay (21 Januar 2011)

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


----------



## duMMbatz (21 Januar 2011)

Bitte 

Und es gibt den Daumen hoch button rechts um sich zu bedanken 

ROFLMAO


----------



## Tigerente1974 (24 Januar 2011)

Larry Laffer schrieb:


> 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?


----------



## Larry Laffer (25 Januar 2011)

Hallo,
ich nehme den Ball mal auf ...


Tigerente1974 schrieb:


> Ist dieser Programmierstil aus eurer Sicht "unsauber"??


Nö ... warum das ...?
Ich persönlich arbeite mit der Merker-Variante weil ich das schöner finde (Geschmackssache !!!) - das heißt aber nicht, dass du die Zähl-Variablen-Variante nicht genauso gut machen kannst.



Tigerente1974 schrieb:


> .
> 2. Leider "schluckt" das schon bei mittleren Programmen recht viel Speicher. Gibt es eine "speicherschonende" Variante, die dem nahekommt?


 ... die Merker-Variante ...(!?).
Eine bestimmte Vorgehensweise erfordert möglicherweise einen gewissen Speicher ... das ist eben so.

Gruß
Larry


----------



## duMMbatz (25 Januar 2011)

Tigerente1974 schrieb:


> 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.
> ...


 
HI,

also wir benutzen beides, unsere Schrittketten haben einen INT wert als Schrittnummer und auch ein Schrittkettenbit.

Natürlich kann man die Schrittkette nun ein bissl aufblähen mit Überwachungszeiten etc. aber "unsauber" würde ich dieses nicht nennen.

Du sparst dir nur ne menge OUT Parameter an dem Schrittketten FC / FB.
Du musst nur gewährleisten, das es so programmiert ist, das deine Aktoren nicht beim wechsel der Schritte wenn sie angesteuert werden kurz absteuern. Aber das kann dir auch mit Schrittmerkern passieren.

Die Schrittnummer brauchst du sowieso für die Textliste in der Visu, um in Klartext deinen Schritt anzugeben. 

Der Vorteil der Schrittmerker als OUT ist, "Fremde" können den Schrittketten Baustein online besser beurteilen und können das "Ziel" (Aktoren) besser nachverfolgen. 

Den Speicher sehe ich nicht als Problem. So groß sind unsere Schrittketten nicht.


----------



## Sinix (25 Januar 2011)

Hallo Tigerente1974,

habe auch schon Varianten von Schrittketten gesehen und selbst ausprobiert. Deine Variante ist mit Sicherheit nicht unsauber, da dein Code eindeutig nachvollzogen werden kann und funktioniert. Im Gegenteil, du hast z.B. den Vorteil beim Rücksetzen nur eine Variable zu beschreiben und nicht z.B. eine ganze Anzahl boolsche Variablen. Nachteile sehe ich eventuell bei der Diagnose. 

Man findet diese Art der Schrittketten öfter in Initialisierungsbausteinen für Geräte. Da die meist in AWL geschrieben sind wird auch oft  eine Sprungleiste benutzt, die Sprungmarken bezeichnen den Schritt (S1, S2, S3...) und es spart deine genannten CMP==I.

MfG


----------



## Tigerente1974 (25 Januar 2011)

Hallo.

Erst mal Danke für die Antworten.

Also scheint es nicht abwegig zu sein, was ich mir da im stillen Kämmerlein überlegt habe.

Die genannten Vorteile waren auch für mich der Grund von dem abzuweichen, was ich mal in der Ausbildung gelernt habe.
Noch dazu sehe ich einen großen Vorteil darin, dass man "mal eben" einen Schritt dazwischen einfügen kann, wenn man beim programmieren in 10-er Schritten arbeitet.

@Larry: Die Schrittkettenvariable wird als IN-Parameter an den FC  übergeben und ist ein Wort in einem DB (z.B. DB100.DBW0). Da diese Teil einer Struktur (UDT) ist, die auch noch in einem Array liegt, werde ich versuchen bei der bisherigen Variante zu bleiben.
Ich habe es trotzdem mal gestestet und ein MW anstelle des Worts aus dem DB angehängt. Und siehe da! Der Baustein war um 20 Byte kleiner. Bei mehreren Aufrufen kann man da bestimmt einiges "sparen". Ist also auch noch einmal ein guter Tip


----------



## Ralle (25 Januar 2011)

Tigerente1974 schrieb:


> 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 nutze eine Sprungleiste (SPL in Step7). Für Schrittweiterschaltung, Laufzeitüberwachung, Startbedingungen etc. habe ich einen speziellen eigenen Baustein, aber das kann jeder machen wie er will.


----------



## Tigerente1974 (25 Januar 2011)

Hab ich bis dato noch nirgends gesehen. Ist mir komplett neu, dass es das gibt.
Werde mal das Beispielprojekt von Siemens runterladen mir genauer ansehen, wie das gemacht wird. Klingt aber interessant!


----------

