FC hat kein "Gedächtnis", warum?

Zuviel Werbung?
-> Hier kostenlos registrieren
sag mir was, was FB im Gegensatz zu FC nicht können. Ausser Speicherplatz sparen.

Sie sind halt auf eine Instanz angewiesen wenn man auf die Schnittstelle zugreifen will. Und einfach nur einen DummyDB zu verballern weil man keinen Speicher braucht nur um auf FCs verzichten zu können ist irgendwie Dekadent ;)

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ähm, mann könnte auch einen FB mit den Befehlen "UC" oder "CC" aufrufen, somit
hat der Funktionsbaustein keinen Instanzdatenbaustein und damit auch keine Baustein-
parameter, also keine statischen Lokaldaten.
Mit der Aufrufanweisung "CC" und "UC" werden FCs und FBs gleich behandelt.

Also geht es auch ohne Dummy DB. Meiner Ansicht nach sollte Siemens einfach den
Nummernbereich (solange es erforderlich ist) erweitern. Somit könnte man in der Tat
auf Funktionen verzichten.
 
Danke allen für die Erklärungen. Es hat lange gedauert, bis ich mich durch alle neuen Begriffe durchgearbeitet habe, aber dafür bin ich ein Stück weitergekommen.

So wie ich es verstanden habe (bitte um Korrektur, falls nicht richtig), kann man FCs auch dazu benutzen Daten zu speichern, indem man Merker bzw. Speicherfunktionen (SR, RS) einsetzt. Dazu muss man Speicherplatz schon vorher fest reservieren und nicht erst beim Aufruf ???!!? Demzufolge würde aber die Aussage, FCs könnten keine Daten speichern, nicht ganz richtig sein, oder?

So wie ich es herausgelesen und nachgelesen habe, bedeutet Merker/Speicherfunktionen zu benutzen, eine größere "händische" Arbeit, weil man dafür Sorge tragen muss, dass die Dateninhalte der verwendeten Merker wieder aufgeräumt werden, wenn man die betreffenden FCs wieder an einer anderen Stelle verwenden wollte, um unerwünschte Dateninhalte zu vermeiden?

Bei Verwendungen von FBs würde das System dies für den Programmierer übernehmen, weil es durch die Instanzierung den Datenbereich automatisch zuordne. Eine Instanz1 könnte nicht aus Versehen auf Daten der Instanz2 zugreifen? Ist das der Hauptgund, vielleicht um Programmabstürze zu vermeiden?
 
Demzufolge würde aber die Aussage, FCs könnten keine Daten speichern, nicht ganz richtig sein, oder?
Das stimmt.

Ganz kurz erklärt:

Das "FCs können keine Daten speichern", gelt nur für die Variabeln die in den Header für den FC deklariert sind. Alle die Daten die in ein FC Deklariert sind, sind TEMPs (temporäre = ohne speicherung).
Ein FC kann auch Daten speichern wenn sie als IN_OUT deklariert sind. Es ist aber aufwendiger.
Direkten Zugriffe zu DBs oder Merkers innerhalb von den FC ist auch möglich. Aber dann kann den FC nicht als "wiederverwendbare" Baustein verwendet werden.

In ein FB werden die Daten die als STATs deklariert sind (statische = mit Speicherung) automatisch gespeichert in den Instanz-DB (IDB) den mit den FB verknüpft werden muss.
Man kann auch TEMP Daten in ein FB deklarieren, die werden dann nicht in den IDB gespeichert.
Also, mit ein FB + IDB bekommt man einfach und automatisch gespeicherte Daten, auch wenn den FB für viele Instanze verwendet werden.

edit: Für 100% Korrektheit, muss gesagt werden, das es gibt noch weitere Verfahren womit man in ein FC Daten schreiben kann. Man kann mit Pointern fast alles machen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
So wie ich es verstanden habe (bitte um Korrektur, falls nicht richtig), kann man FCs auch dazu benutzen Daten zu speichern, indem man Merker bzw. Speicherfunktionen (SR, RS) einsetzt. Dazu muss man Speicherplatz schon vorher fest reservieren und nicht erst beim Aufruf ???!!? Demzufolge würde aber die Aussage, FCs könnten keine Daten speichern, nicht ganz richtig sein, oder?

ist jetzt ein bischen Wortspielerei, aber ein FC hat keine möglichkeit Daten zu speichern, aber man kann mit den FC Daten speichern. Als
Speicherbereich werden dann Globaldaten genutzt, zb. Merker oder Datenbausteine.

ein FB hat durch verwendung von Instanzdatenbausteine, für den jeweiligen Aufruf ein Gedächnis.
 
So wie ich es verstanden habe (bitte um Korrektur, falls nicht richtig), kann man FCs auch dazu benutzen Daten zu speichern, indem man Merker bzw. Speicherfunktionen (SR, RS) einsetzt. Dazu muss man Speicherplatz schon vorher fest reservieren und nicht erst beim Aufruf ???!!? Demzufolge würde aber die Aussage, FCs könnten keine Daten speichern, nicht ganz richtig sein, oder?

So wie ich es herausgelesen und nachgelesen habe, bedeutet Merker/Speicherfunktionen zu benutzen, eine größere "händische" Arbeit, weil man dafür Sorge tragen muss, dass die Dateninhalte der verwendeten Merker wieder aufgeräumt werden, wenn man die betreffenden FCs wieder an einer anderen Stelle verwenden wollte, um unerwünschte Dateninhalte zu vermeiden?

Bei Verwendungen von FBs würde das System dies für den Programmierer übernehmen, weil es durch die Instanzierung den Datenbereich automatisch zuordne. Eine Instanz1 könnte nicht aus Versehen auf Daten der Instanz2 zugreifen? Ist das der Hauptgund, vielleicht um Programmabstürze zu vermeiden?

Also ich sage einmal Global, Du hast es noch nicht richtig verstanden :cool:.
Du musst Dich tioefer mit dem System SPS Programmierung und Funktion befassen!

Merker müssen nicht unbedingt aufgeräumt werden. Kommt ja auch darauf an, was man damit machen möchte!
Man kann zwar Merker durch DB's ersetzen (auch umgekehrt) aber früher war es z.B. so das halt der Zugriff auf einen DB die doppelte Befehlslaufzeit hatte!

Beim FC wird halt der lokale Speicherbereich (Stack) nicht am Bausteinende gespeichert, was beim FB der Fall ist (darum auch der DB).
Beim FC könnte man dies selbst realisieren und seinen alocierten Speicher in z.B. einen DB (DatenBaustein) speichern.
Da man nicht bei jeder Funktion zwingend bein neuen Auruf diese alten Daten benötigt, wird wohl daher der FB mit seinem DI entstanden sein ;)

Im Prinzip ist ein DB eh nix anderes als ein Merkerbereich! Nur halt in einer definierten Struktur ...
 
Zuletzt bearbeitet:
ähm, mann könnte auch einen FB mit den Befehlen "UC" oder "CC" aufrufen, somit
hat der Funktionsbaustein keinen Instanzdatenbaustein und damit auch keine Baustein-
parameter, also keine statischen Lokaldaten.
Mit der Aufrufanweisung "CC" und "UC" werden FCs und FBs gleich behandelt.

Aber man hat dann ja auch keinerlei Schnittstelle mehr, welche man beschalten könnte.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei Verwendungen von FBs würde das System dies für den Programmierer übernehmen, weil es durch die Instanzierung den Datenbereich automatisch zuordne. Eine Instanz1 könnte nicht aus Versehen auf Daten der Instanz2 zugreifen? Ist das der Hauptgund, vielleicht um Programmabstürze zu vermeiden?
genau das ist es. nur haben das viele Lehrer und Oberlehrer noch nicht begriffen.
 
Das stimmt auch wieder, die sind aber auch blöd bei Siemens.
blöd ist, dass die Schnittstelle bei FB nicht auf dem Temp-Stack abgelegt wird, so wie bei den FC. Das ist m.E. der Design-Fehler. Wenn mir nur mal endlich jemand verraten könnte, warum die Schnittstelle im DB auftaucht.

... Aber immerhin nutze ich auch die Schnittstelle dann für die Visu, das wäre sonst umständlicher ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
blöd ist, dass die Schnittstelle bei FB nicht auf dem Temp-Stack abgelegt wird, so wie bei den FC. Das ist m.E. der Design-Fehler. Wenn mir nur mal endlich jemand verraten könnte, warum die Schnittstelle im DB auftaucht.

... Aber immerhin nutze ich auch die Schnittstelle dann für die Visu, das wäre sonst umständlicher ...


Die Schnittstelle eines FCs wird in der ersten Zugriffsstufe (Auslesen des Pointers aus dem Codespeicher von einer Adresse relativ zum UC FC ) NICHT auf
dem Temp(L)Stack abgelegt. Der Pointer kann dann aber auf den L (bzw. V) Stack zeigen, wobei hier der AWL/SCL-Editor/Compiler freie Hand hat.
 
Die Schnittstelle eines FCs wird in der ersten Zugriffsstufe (Auslesen des Pointers aus dem Codespeicher von einer Adresse relativ zum UC FC ) NICHT auf
dem Temp(L)Stack abgelegt. Der Pointer kann dann aber auf den L (bzw. V) Stack zeigen, wobei hier der AWL/SCL-Editor/Compiler freie Hand hat.
Gut, damit hab ich nun den Mechanismus eines FC-Aufrufs besser verstanden. Was mir aber nun nach wie vor unklar ist, warum dieser Mechanismus nicht auch für FBs verwendet wird.
 
Die Schnittstelle eines FCs wird in der ersten Zugriffsstufe (Auslesen des Pointers aus dem Codespeicher von einer Adresse relativ zum UC FC ) NICHT auf
dem Temp(L)Stack abgelegt. Der Pointer kann dann aber auf den L (bzw. V) Stack zeigen, wobei hier der AWL/SCL-Editor/Compiler freie Hand hat.
Das hat dem TE sicher unheimlich weitergeholfen:D:D:D
Eigentlich will er nur wissen was der Vorteil/Nachteil von FB/FC ist.
 
Damit man Schnittstellenparameter unbeschaltet lassen kann.
Das hab ich ohnehin nicht begriffen, warum der Beschaltungszwang bei FC existiert.

Und damit man auch von außerhalb des Aufrufs zB. auf Instanz2.Out4 zugreifen kann.
diese Technik ermöglicht ja es gerade erst, ohne Schnittstelle auszukommen. Weg mit der Schnittstelle, wir schreiben die Parameter von Hand in die Instanz und lesen anschliessend von Hand die Ergebnisse. Adressverschiebungen im IDB ade, weil wir den nachträglichen In-Parameter endlich ans Ende des IDB setzen können (doof nur, dass schon wieder alle Aktualdaten weg sind, wenn wir uns nicht selbst eine Routine stricken, die nichts anderes tut, als zwischen AltFB/DB und NeuFB/DB im laufenden Betrieb umzuschalten).

Eigentlich will er nur wissen was der Vorteil/Nachteil von FB/FC ist.
ich doch auch...
aber in den FC sehe ich nur Nachteile. Am hübschesten wäre doch gewesen, Siemens hätte den FB so designed, dass die Datenübergabe nicht über den Anfang des IDB gemacht hätte. Sondern über L-Stack oder sonstwie. Dann hätte eine Option bestanden, den FB ohne remanente Daten (IDB) aufrufen zu können. Und eine Erweiterung der Schnittstelle hätte nicht zu Datenverschiebungen geführt, wo dann die Visu abkotzt.

Aber scheinbar sind ja nicht nur bei Siemens Dummies am Werke, auch von CoDeSys/3S lese ich ja hier im Forum, dass die das nicht vollständig gebacken kriegen. Wies bei Beckhoff aussieht - k.A. ...und dann gibts ja noch B&B. die sollen ja auch nicht ganz doof sein, wie weit die sind, entzieht sich jedoch meiner Kenntnis. In meinem Nachbardorf gibs noch Jetter. Wie weit die allerdings mit einem Konzept wie TIA sind, ich kann auch nur raten. Aber TIA ist nicht nur bei Siemens. TIA kann mehr sein, als was Siemens zur Zeit bietet.

aber vielleicht geschieht ja ein Wunder - die "optimierte Datenablage". Aber wahrscheinlich wird das ja ohne Datentypisierung ablaufen (ist das die Krankheit bei 3S?), sodass eine nachträgliche Datentypänderung wieder alle Vorteile zunichte machen wird (naja, ein INT zu einem String zu wandeln, würde ich ja nicht verlangen wollen - aber wenigstens eine Typkennung mit anschließend wenigstens 64bit Nutzdaten, die wahlweise als INT, DINT, REAL, ... zu interpretieren sind).
 
Zurück
Oben