FC hat kein "Gedächtnis", warum?

Miffi

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

ich verstehe nicht genau, warum in den Büchern oft steht, dass man FBs nehmen sollte, wenn man etwas speichern will, weil die ein "Gedächtnis" haben. Bei FCs würden die Daten verloren gehen.

Soweit ich weiß, hatten wir in der Schule nur einen OB1 und einen FC1 genommen für ein ganzes Programm. Eingangssignale und Verknüpfungsergebnisse waren aber erhalten geblieben.

Wie kann ich das verstehen?
 
Das Gedächtnis bezieht sich auf das Zwischenspeichern von Variablen und Zuständen die in einem Baustein verändert werden.
Die werden bei einem FB in einem IDB gespeichert, so dass diese erhalten bleiben.
In einem FC musst du dich händisch um das Speichern in DB oder Merkern kümmern.


bike
 
Nicht unbedingt, es kann auch direkt im Baustein ein DB beschrieben werden.

Gedächtnis hat nicht nur etwas mit In/Out zu tun, sondern auch mit dem das in dem Baustein geschieht.


bike
 
Bei FCs würden die Daten verloren gehen.
FBs stellen Dir remanente Lokaldaten zur Verfügung, FCs können vergesslich sein, da sie sich miteinander einen Lokaldatenstack teilen (dieser nichtremanente Lokaldatenstack wird auch für FBs zusätzlich zu den remanenten Instanzdaten zur Verfügung gestellt).

Auf FC könnte die Welt verzichten, sie sind ein Überbleibsel aus S5-Zeiten, als dort noch die Welt in PB und den damals so genannten FB unterteilt war, wobei der damalige FB dem heutigen FC entspricht. Wo heute S7 den Programmierer bei der Kapselung von Bausteinen unterstützt (Stichwort OOP), war zu S5-Zeiten es nur möglich, durch entsprechende Disziplin bei der Programmerstellung Kapselung zu erreichen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Als Ergänzung zu den bisherigen Beiträgen würde ich deutlich hervorheben wollen, dass "Anfänger" normalerweise mit direkten Zugriffen auf Globalvariablen arbeiten, weil das so gelehrt wird. Die Verwendung der "Schnittstelle" eines Bausteins wird oft nicht einbezogen.

Ein "direkter Zugriff" wäre zum Beispiel so etwas:

Code:
U E 1.0
= M2.0

Da eine SPS den Zustand der Merkerbytes speichert, können diese in FCs verwendet werden. Das meint wohl auch der TE.

Wenn man häufiger programmiert bzw. etwas Erfahrung gesammelt hat, versucht man einen Baustein so zu schreiben, dass er keine direkten Zugriffe auf Globalvariablen macht. Dazu kann man entweder einen FC oder einen FB nehmen.
Beide haben eine Schnittstelle, an die Eingänge, Ausgänge oder Ein-/Ausgänge geschaltet werden können. Außerdem können TEMP-Wariablen deklariert werden, die im Programm für Zwischenergebnisse genutzt werden können. Da TEMP-Variablen im nächsten Zyklus der SPS normalerweise durch andere Speicherzugriffe mit anderen Werten überschrieben wurden, kann man diese nicht zum Speichern von Werten oder Bitzuständen nutzen.
Um etwas zu "speichern", muss eine Variable genutzt werden die einen festen Speicherplatz hat und damit über mehrere Zyklen hinweg ihren Wert nicht verändert. Dazu gibt es nun 2 Möglichkeiten, wenn man die o.g. direkten Zugriffe vermeiden möchte.

Möglichkeit 1 (geht mit FC oder FB):
Zu speichernde Variable in der Schnittselle an IN_OUT anschließen und beim Bausteinaufruf eine Globalvariable daran anschließen. Z.B. Db1.DBW10 oder MW20 oder, oder, oder
Das macht man in der Regel dann, wenn das Ergebnis in einem anderen Baustein ebenfalls benötigt wird.

Möglichkeit 2 (geht nur mit FB):
Zu speichernde Variable in der Schnittstelle als STAT-Variable deklarieren. Der Wert wird dann in dem zum FB gehörigen Instanz-DB ("IDB") gespeichert.
Das macht man in der Regel dann, wenn das Ergebnis nur in diesem Baustein benötigt wird.
Wenn man so will, ist ein Nachteil dieser Variante, dass beim Aufruf ein Instanz-DB deklariert werden muss. (Von Multiinstanzen jetzt mal abgesehen)
 
Auf FC könnte die Welt verzichten, sie sind ein Überbleibsel aus S5-Zeiten, als dort noch die Welt in PB und den damals so genannten FB unterteilt war, wobei der damalige FB dem heutigen FC entspricht.

Wenn man z.b. zwei komplexe Zahlen (als UDT) addieren will, nimmst du also einen FB?
Es gibt unendlich viele Anwendungen für Funktionen die von einem Aufruf zum nächsten keine Daten speichern müssen.
 
Als Ergänzung zu den bisherigen Beiträgen würde ich deutlich hervorheben wollen, dass "Anfänger" normalerweise mit direkten Zugriffen auf Globalvariablen arbeiten, weil das so gelehrt wird.
was ist ein Anfänger? als Anfänger wusste ich bereits dies:
http://de.wikipedia.org/wiki/Funktion_(Programmierung)
und das war vor ca. 30 Jahren, kurz nach Erscheinen des Brotkastens, als ich in der Oberstufe einen der ersten Informatikunterrichte bekam, die seinerzeit im Aufkommen waren.

Hinkt die SPS-Programmierung wirklich dem Lauf der Zeit soweit hinterher? Ist es tatsächlich in D so, dass die Schulausbildung nach wie vor von Lehrern geleistet wird, die nicht auf dem Stand der Zeit sind? Das kann ich nicht glauben, dass das "was normalerweise gelehrt" wird, wirklich der Normalfall sein soll.

Aber gut, mir sind auch schon viele "Lehrer" begegnet, die zwar vielleicht pädagogisch was geleistet haben, fachlich aber eher zu den Nieten zu zählen waren.


Wenn man z.b. zwei komplexe Zahlen (als UDT) addieren will, nimmst du also einen FB?
Es gibt unendlich viele Anwendungen für Funktionen die von einem Aufruf zum nächsten keine Daten speichern müssen.
na und? dann hab ich halt einen leeren IDB. Ich hab übrigens Funktionen, wo im IDB Parameter abgelegt sind. Der Ruf nach FCs ist doch nur der Sparsamkeit geschuldet ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
was ist ein Anfänger? als Anfänger wusste ich bereits dies:
http://de.wikipedia.org/wiki/Funktion_(Programmierung)
und das war vor ca. 30 Jahren, kurz nach Erscheinen des Brotkastens, als ich in der Oberstufe einen der ersten Informatikunterrichte bekam, die seinerzeit im Aufkommen waren.

Hinkt die SPS-Programmierung wirklich dem Lauf der Zeit soweit hinterher? Ist es tatsächlich in D so, dass die Schulausbildung nach wie vor von Lehrern geleistet wird, die nicht auf dem Stand der Zeit sind? Das kann ich nicht glauben, dass das "was normalerweise gelehrt" wird, wirklich der Normalfall sein soll.

Aber gut, mir sind auch schon viele "Lehrer" begegnet, die zwar vielleicht pädagogisch was geleistet haben, fachlich aber eher zu den Nieten zu zählen waren.


na und? dann hab ich halt einen leeren IDB. Ich hab übrigens Funktionen, wo im IDB Parameter abgelegt sind. Der Ruf nach FCs ist doch nur der Sparsamkeit geschuldet ;)

Das war dann ja nicht viel .....
 

Anhänge

  • Programmierung.jpg
    Programmierung.jpg
    313,1 KB · Aufrufe: 93
was ist ein Anfänger? als Anfänger wusste ich bereits dies:
http://de.wikipedia.org/wiki/Funktion_(Programmierung)
und das war vor ca. 30 Jahren, kurz nach Erscheinen des Brotkastens, als ich in der Oberstufe einen der ersten Informatikunterrichte bekam, die seinerzeit im Aufkommen waren.

Hinkt die SPS-Programmierung wirklich dem Lauf der Zeit soweit hinterher? Ist es tatsächlich in D so, dass die Schulausbildung nach wie vor von Lehrern geleistet wird, die nicht auf dem Stand der Zeit sind? Das kann ich nicht glauben, dass das "was normalerweise gelehrt" wird, wirklich der Normalfall sein soll.

Aber gut, mir sind auch schon viele "Lehrer" begegnet, die zwar vielleicht pädagogisch was geleistet haben, fachlich aber eher zu den Nieten zu zählen waren.


na und? dann hab ich halt einen leeren IDB. Ich hab übrigens Funktionen, wo im IDB Parameter abgelegt sind. Der Ruf nach FCs ist doch nur der Sparsamkeit geschuldet ;)

Tut soviel Arroganz und Überheblichkeit eigentlich weh?


bike
 
was ist ein Anfänger?

Hinkt die SPS-Programmierung wirklich dem Lauf der Zeit soweit hinterher? Ist es tatsächlich in D so, dass die Schulausbildung nach wie vor von Lehrern geleistet wird, die nicht auf dem Stand der Zeit sind? Das kann ich nicht glauben, dass das "was normalerweise gelehrt" wird, wirklich der Normalfall sein soll.

OK, meine Lehrzeit ist auch schon ein paar Jahre her...
Aber ich habe erst kürzlich SPS-Aufgaben eines "frischen" Azubis gesehen. Und das war in etwa das, was ich als Energieelektroniker in den 90´ern gelernt habe. Also direkte Zugriffe auf Globalvariablen und kein Hinweis auf die Möglichkeit, mit Schnittstellenvariablen zu arbeiten.

Ich denke es kommt sehr darauf an, welchen Bildungsweg man gewählt hat. Auch der Lehrer, Dozent, Ausbilder und dessen "technische" Möglichkeiten sind wichtige Faktoren.
Dein Bildungsweg dürfte ein ganz anderer als der des TE sein, oder dieser steht womöglich noch am Anfang. Jedenfalls bringt er ganz andere Voraussetzungen mit. Begriffe wie "OOP", "IDB" und "Lokaldatenstack" dürften für jemanden der solch eine Frage stellt sicher nicht selbstverständlich sein. Daher habe ich auch noch meinen Senf dazu abgegeben. Die Antworten waren fachlich einwandfrei, haben aber aus meiner Sicht ein Grundwissen vorausgesetzt, dass jemand mit dieser Fragestellung i.d.R. noch nicht hat.
Ich denke, dass dieser Aspekt nicht berücksichtigt wurde. Es ist wichtig, über den eigenen Horizont hinausschauen zu können...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Miffi,

ich gebe Dir den Tipp: Lese Dir nur die Beiträge #2, #3 und eventuell #4 und #11 durch.
#11 trifft Deine Situation wahrscheinlich ziemlich genau, oder !?

Der Rest hier tendiert schon wieder zum Schwanzvergleich, der wohl eher verwirrt, als wirklich weiterhilft...

Schönen Gruß,

dia
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das war dann ja nicht viel .....
hast Du bei Wiki editiert?

probieren wirs halt nochmal:
http://de.wikipedia.org/wiki/Funktion_(Programmierung)
(es liegt daran, dass die Forensoftware wohl mit der schliessenden Klammer ein Problem hat, wenn da son Link eingefügt werde soll)


Tut soviel Arroganz und Überheblichkeit eigentlich weh?
mir nicht - Dir offenbar schon...

Begriffe wie "OOP", "IDB" und "Lokaldatenstack" dürften für jemanden der solch eine Frage stellt sicher nicht selbstverständlich sein.
nun will ich ja den TE nicht unbedingt überfordern. Jedoch hat bei mir sowas immer den Ehrgeiz erweckt, nicht nur in meinen Teller zu schauen, sondern über den Rand hinaus. Und halt auch mal meine Lehrer/Ausbilder damit zu nerven, dass es da wohl noch weiterführende Dinge gäbe.

...und wenn ich #1 nochmal anschaue:
ich verstehe nicht genau, warum in den Büchern oft steht, dass man FBs nehmen sollte, wenn man etwas speichern will, weil die ein "Gedächtnis" haben. Bei FCs würden die Daten verloren gehen.
Soweit ich weiß, hatten wir in der Schule nur einen OB1 und einen FC1 genommen für ein ganzes Programm. Eingangssignale und Verknüpfungsergebnisse waren aber erhalten geblieben.
so sehe ich doch, dass der TE gerade diesen Blick über den Tellerrand haben will, und eben nicht mit dem alten S5-Gedöns vollgelullt werden möchte.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sag mir, warum ein FB sein muss!, wenn einfache Funktionen programmiert werden?

Toleranz ist ein Fremdwort für dich, liegt das an den Fingernägeln? :ROFLMAO:


bike
Fingernägel kann man sich lackieren, muss man nicht. FB kann man verwenden, muss man nicht. Aber wer keine Fingernägel hat, kann sie nicht lackieren. Wer keine FC hat, kann aber trotzdem FB programmieren.

Der Nagellack ist genauso redundant wie FC. Man braucht das eine wie das andere nicht. Das war meine Aussage: die Welt kann auf FC verzichten. So, wie ich heute keinen Nagellack trage, aber der ist halt nunmal tatsächlich an dem Arbeitsplatz, wo ich grad auf Montage bin, sogar für die Mädels verboten. Der könnt ja absplittern und in die Nahrungsmittel fallen. Haarnetz gibts auch dazu, aber keinen Maulkorb wegen männlicher Gesichtsbehaarung. Und tiefen Ausschnitt hab ich auch, nur ists dort ebenfalls nicht rasiert.

Ich kann Deine FC durchaus tolerieren, dem TE sag ich aber ganz klar: man braucht sie nicht. Er soll sich von seinen Büchern leiten lassen, nicht von seinen Lehrern, die was von hintervorgestern erzählen.
 
sag mir was, was FB im Gegensatz zu FC nicht können. Ausser Speicherplatz sparen.

Der FB kann sagar mehr als der FC :ROFLMAO:
Er kann sogar mehr (wenn man(n) es genau betrachtet) Zyklus-Zeit fressen als der FC ...
Man könnte glaube 4096 FB machen, hat aber nur 2048 DB's zur Verfügung!

Über die Philosophie des Programmierens, will ich hier und heute eh nicht diskutieren!
 
Zurück
Oben