# Zustände eines NICHT bearbeiteten FC's



## youfyouk (9 Februar 2011)

Hallo erstmal,

ich habe in einem S7 Programm mehrere FC's die ich wahlweise bearbeite, um genau zu sein, es gibt 15 FC's es wird aber immer nur eins bearbeitet. Wenn ich nun ein FC verlasse, was gerade in Bearbeitung ist, behalten alle Merker, Ausgänge usw. ihren letzten Zustand.
Gibt es eine elegante Lösung dafür, dass die Merker, Ausgänge usw. alle zurückgesetzt werden können, wenn die Funktion verlassen wird?

Danke
youfyouk


----------



## M-Ott (9 Februar 2011)

Nein, gibt es nicht. Muss alles manuell und einzeln gemacht werden.


----------



## Rudi (9 Februar 2011)

youfyouk schrieb:


> Hallo erstmal,
> 
> ich habe in einem S7 Programm mehrere FC's die ich wahlweise bearbeite, um genau zu sein, es gibt 15 FC's es wird aber immer nur eins bearbeitet. Wenn ich nun ein FC verlasse, was gerade in Bearbeitung ist, behalten alle Merker, Ausgänge usw. ihren letzten Zustand.
> Gibt es eine elegante Lösung dafür, dass die Merker, Ausgänge usw. alle zurückgesetzt werden können, wenn die Funktion verlassen wird?
> ...



Diese Art der Programmierung ist meiner Meinung nach nicht unbedingt zu empfehlen. Würde ich nur machen wenn mir gar nichts anderes einfällt.


----------



## Mayx1988 (9 Februar 2011)

Da muss ich M-Ott rechtgeben. Es gibt keine elegante Lösung. 
Das einzigste was ich dir empfehlen kann um nicht jeden Merker einzeln zurücksetzen zu müssen ist die Merker oder auch Ausgänge Byte weise anzusprechen und somit rückzusetzen. 
z.B. statt 
R    M0.0
R    M0.1
....
R    M0.7

geht es auch mit

L       0
T       MB 0

Mfg


----------



## bike (9 Februar 2011)

Mayx1988 schrieb:


> Da muss ich M-Ott rechtgeben. Es gibt keine elegante Lösung.
> Das einzigste was ich dir empfehlen kann um nicht jeden Merker einzeln zurücksetzen zu müssen ist die Merker oder auch Ausgänge Byte weise anzusprechen und somit rückzusetzen.
> z.B. statt
> R    M0.0
> ...



Das funktioniert, aber ist das auch guter Stil?
Ich würde jedem FC einen Bereich in einem DB reservieren, zu Beginn des FC dies in temp Variablen kopieren und am Ende des FC wieder wegschreiben.
So hast du den Zustand und kannst ggF darauf zurückgreifen.
Wenn dies nicht gewollt ist, dann vor jedem FC sich um das Aufräumen kümmern.
Wie bezeichnest du, wenn die in 15 FC verwendet werden, in der Symbolik die Merker? Haben einen Namen und einen Kommentar?

bike


----------



## Blockmove (10 Februar 2011)

bike schrieb:


> Das funktioniert, aber ist das auch guter Stil?



Ich glaub, dass das die Kernfrage ist.
15 FCs mit gleichen Merkerbereichen  und Ausgangsbereichen ist - meiner Meinung nach - schon kein gutes Design.
Wenn du kurze Zykluszeiten brauchst, dann kann ich es noch verstehen, aber ansonsten ist es unnötig und schlechter Stil.
Gleiche Merker sind sowieso schon unnötig. Entweder verwendest du Lokaldaten oder machst einen FB mit Instanz-Daten.
Mehrfaches Zuweisen von Ausgämgen bei bedingten Aufrufen ist auch nicht gerade das gelbe vom Ei.

@youfyouk: Vieleicht solltest du mal deinen Programmierstil "modernisieren".

Gruß
Dieter


----------



## Zefix (10 Februar 2011)

Vielleicht hängen die Merker usw an den E/As der FC.

Ich würd quasi nen Enable Eingang machen, wenn der False ist das Programm im FC Überspringen und im letzten Netzwerk die IN/OUTs und OUTs zurücksetzen.Die FC immer aufrufen.
Bei Bearbeitung aber dann auch das letzte Netzwerk überspringen


----------



## IBFS (10 Februar 2011)

Mir ist die ganze Frage von youfyouk schon ein Rätsel, 
und er ist ja kein Newbee, ist ja schon seit 2007 angemeldet.

Wir warten mal ab, was er zu unseren Meinungen sagt.

Gruß

Frank


----------



## youfyouk (11 Februar 2011)

Hallo Leute,

ich danke euch ersteinmal für eure qualifizierten Antworten. Ehrlich gesagt, gefällt mir das persönlich auch nicht so richtig. Vielleicht kennt ja der eine oder der andere das von sich selbst, dass wenn man mal ein Projekt angefangen hat (mit schlechtem programier Stil), es irgendwie immer beibehält.

Das ganze sieht vor, dass die Steuerung nur 3 Meldeleuchten hat, alles andere (Werkzeuge mit Sensoren und Ventile) wird über einen Mehrpoligen Stecker an die Steuerung drangesteckt. Es gibt etwa 60 solcher Werkzeuge, mein Vorgänger hatte die über BCD-Codierung eingelesen und jedem Werkzeug einen FC geschrieben. Die Betreuung der Anlage habe ich gerade erst übernommen und schnell erkannt, dass das keine gute Lösung ist. 
1. Speicher der SPS ist voll
2. Die Codiermöglichkeit geht nur bis 64 und es kommen noch viele neue Werkzeuge die bearbeitet werden sollen.

Der Ablauf der Steuerung ist fast immer gleich, mal gibt es ein oder zwei Sensoren oder Ventil mehr oder weniger.
Letzten endes möchte ich idealerweise nur ein "FC" für alle Werkzeuge schreiben. Wie es aber immer so ist treten auch mal Sonderfälle auf. Was vom Standard Ablauf abweicht. Die besagten Sonderfälle möchte ich in andere FC's schreiben und dafür hatte ich halt 14 weitere vorgesehen. So ist die Grundidee, ob das nun die beste Variante ist, bezweifele ich allmählich selbst.

Ich hoffe es ist halbwegs klar, was ich vorhabe. Was wäre denn ein guter ansatz bei so einem Fall? Hat jemand schonmal sowas ähnliches gemacht?
Bin für neue Ideen immer offen.

Danke 
youfyouk


----------



## Larry Laffer (11 Februar 2011)

Hallo,
ich kann mich leider im Augenblick nicht so richtig in dein "Projekt" eindenken (mangels Info's). Vielleicht schreibst du mal etwas mehr zu dem Ablauf, der sich von Werkzeug zu Werkzeug ggf. ändern kann.
Bei meinen Anlagen (wobei ich dass jetzt nicht unbedingt mit dir vergleichen möchte) löse ich so etwas u.U. mit einem kompletten allgemein-gültigem Ablauf, der entsprechend vorgewählter Parameter durchlaufen wird.

Gruß
Larry


----------



## bike (11 Februar 2011)

youfyouk schrieb:


> Hallo Leute,
> 
> ich danke euch ersteinmal für eure qualifizierten Antworten. Ehrlich gesagt, gefällt mir das persönlich auch nicht so richtig. Vielleicht kennt ja der eine oder der andere das von sich selbst, dass wenn man mal ein Projekt angefangen hat (mit schlechtem programier Stil), es irgendwie immer beibehält.
> 
> ...



Also der Ansatz ist eigentlich richtig nur die Ausführung ist etwas daneben.

Ich würde mir einen FC schreiben der die Standardfunktionen abdeckt.
Dieser Baustein bekommt für die einzelnen Werkzeuge die Konfiguration über ein Datenwort. Die Funktionen des einzelnen Werkzeugs die nicht benötigt werden werden mit Dummy belegt. 
Mit diesem Datenwort wird intern im FC gearbeitet und das Ergebnis am Ende in ein DW geschrieben.
Dann musst du dich um die Rangierung der E/A in einer extra Funktion kümmern und gut ist es.


bike


----------

