Unterschied FB FC

Hallöchen

FB hat statische variabeln die im DB gespeichert werden

fc Daten werden nur in Lokaldatenstack hinterlegt
damit sind z.b. temp Daten nur 1 Zyklus kültig
und könnnen nur für z.b. zwischenergebnisse genommen werden

fc kein gedächniss
fb hat seinen db
 
Zuviel Werbung?
-> Hier kostenlos registrieren
FB´s machen dann sinn, wenn der Baustein öfters genutzt werden soll, da er ohne Probleme komplett mit lokalen Variablen arbeiten kann. Dafür benötigt er aber mehr Resourcen.

pt
 
sind die temporären variablen in einem FB länger als ein zyklus gültig?!? die werden doch auch beim FB nich im DB abgelegt ^^

und kann man FC´s nich auhc öfter aufrufen?

Ich dachte immer das man FCs nimmt wenn man keine ergebnisse zurück bekommt und FBs wenn ich diese zurück haben will. wurde aber auch die tage eines besseren belehrt... daher bin ich auch grad hier ;)
 
sind die temporären variablen in einem FB länger als ein zyklus gültig?!? die werden doch auch beim FB nich im DB abgelegt ^^

Die Temp Variablen im FB sind, wie der Name es schon sagt, nur für einen Zyklus gültig.

und kann man FC´s nich auhc öfter aufrufen?

Ja, man kann einen FC öfter aufrufen um die selbe Funktion mit unterschiedlichen Parameter auszuführen.

Code:
Ich dachte immer das man FCs nimmt wenn man keine ergebnisse zurück bekommt und FBs wenn ich diese zurück haben will. wurde aber auch die tage eines besseren belehrt... daher bin ich auch grad hier

Man hat drei Möglichkeiten Ergebnisse von einem FC zurück zu kriegen:

OUT Parameter
IN/OUT Parameter
RET_VAL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
RMA schrieb:
sind die temporären variablen in einem FB länger als ein zyklus gültig?!? die werden doch auch beim FB nich im DB abgelegt ^^

Die Temp Variablen im FB sind, wie der Name es schon sagt, nur für einen Zyklus gültig.
Nein, für einen Aufruf.
und kann man FC´s nich auhc öfter aufrufen?

Ja, man kann einen FC öfter aufrufen um die selbe Funktion mit unterschiedlichen Parameter auszuführen.
Man kann sowohl FBs als auch FCs mehrmals in einem Zyklus aufrufen. In beiden Fällen sind die lokalen Variablen nur innerhalb desselben Aufrufs gültig. (Obwohl sie die Werte des letzten Aufrufs beibehalten werden, wenn zwischendurch kein anderer Baustein aufgerufen wird, der lokale Variablen nutzt. In diesem Fall bleibt einfach der Inhalt des Stacks unverändert.)
 
Mal eine kleine Diskussion in den raum stellen werde

ok laut lehrbuch tempvar in FB nur einen Zyklus gültig

aber

die Tempvar im FB werden im DB hinterlegt sollten sie somit nicht auch beim nächsten zykluss noch dort sein wo man sie hingetan hat :lol:

im fc ist ja klar da steht das ganze im stack

viel spass beim nachdenken
 
Temp

Hallo Peter,

schau mal den Instanz-DB an... da liegen meiner düsteren Erinnerung nach nur IN OUT IN/OUT und STAT.

MfG
André Räppel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hallöchen

ups :shock: :shock: :shock:

hab ich mich mal verschaut dachte die sind auch drinnen :shock:

tja dann ist ja alles gut

vergesst meine frage schande über mich

und danke
 
Verfasst am: 29.06.2005, 13:55 Titel:

--------------------------------------------------------------------------------

RMA hat folgendes geschrieben:
Zitat:
sind die temporären variablen in einem FB länger als ein zyklus gültig?!? die werden doch auch beim FB nich im DB abgelegt ^^


Die Temp Variablen im FB sind, wie der Name es schon sagt, nur für einen Zyklus gültig.


Nein, für einen Aufruf.

Stimmt, hab' ich gewusst aber zu schnell geantwortet! :oops:
 
also kann ich eigentlich nehmen was ich will. nur das der FB im nächsten zyklus - dank DB - noch weis was er getan hat.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt ist Bernd (und mir) aber immer noch nicht klar wozu es FBs gibt. Ich habe zumindest noch keinen gebraucht, ausser bei Systemfuktionen wo ich vorgefertigte Beispiele umgefrickelt habe.
Gruß, Leo
 
Abgesehen von dem was schon gesagt worden ist, einer der grossen Vorteile von FBs ist das man Local Daten (STATs) statt Merker benutzen kann. Damit kann man sauberer programmieren und behält den Überblick. Insbesonders wenn man Multi-Instanzen benuzt ist dies vom Vorteil.
 
hi,
außerdem was ist wenn ich einem parametrierbaren fb eine pos flanke als eingang verschalte , der mir einen ausgang dieses fb´s ausgibt ? es wäre ja äußerst ungünstig wenn dieser nur einen zyklus anstehen würde :) ,
dann ist es auch noch unheimlich praktisch keine merker verheizen zu müssen.
mfg
 
na also unterschiede gibt ´s genug, z.b. der Speicherplatz der größer wird,
unnötiges auslasten der datenbausteine ( kann bei rezeptverwaltungen auch mal eng werden ) und außerdem ist man ja meist versucht, seine Bausteine Bibliotheksfähig zu machen, da würde ein globaler db ja auch stören lieber eine instanz die dann automatisch generiert wird. Auch sind dabei multiinstanzen eine interesannte Sache.ob es unterschiede in der zykluszeit gibt kann ich dir leider nicht sagen.
mfg
 
außerdem was ist wenn ich einem parametrierbaren fb eine pos flanke als eingang verschalte , der mir einen ausgang dieses fb´s ausgibt ?

Es hängt natürlich davon ab wie man es programmiert, aber normalerweise wenn man etwas in einem FB mit einer Flanke dann setzt man einen localen variablen mit der Flanke, der als STAT deklariert ist und weil dies im DB gespeichert ist, ist er auch im nächsten Zyklus da - und im nächsten und im nächsten ... bis man es zurücksetzt.

Hm - ich greife immer von FCs auf Global-DBs zu deren bits ich als merker verwende. Wo liegt der Unterschied, Zykluszeit?

Wenn man nur ein Instanz hat, dann geht das. Aber wenn man mehrere Instanzen hat muss man andere Bits deklarieren für jeden Instanz. Mit lokalen VAriablen (STATs) deklariert man die nur einmal und das Betriebssystem organisierten selbstständig unterschiedliche Speicherbereiche für jeden Instanz.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wichtiger Punkt, der bislang noch nicht angesprochen wurde.
Beim FC müssen alle Parameter beschaltet werden, beim FB nicht; das macht ihn einstück weit flexibler in der Handhabung
 
Weiter wichtiger Punkt der noch nicht angesprochen ist, weil der lokale Speicher für die Temps vom Betriebssystem zur Verfügung gestellt wird, ist der Inhalt dieser Speicher unbekannt. Deswegen mussen alle Temps in einem FB/FC geschrieben werden bevor sie abgefragt oder benutzt werden, sonst ist der Zustand undefiniert. Dies kann insbesondere bei Programmteilen die bedingt übersprungen werden zu Problemen führen.

Was vielleicht auch hier zu erwähnen wäre, es gibt einen Unterschied zwischen Sprünge mit einem 300er CPU und einem 400er. Unter Umständen kann der VKE-Zustand bei einem Sprung in einem 300er CPU "mitgeschleppt" werden, was unter Umständen eine folgende logische Auswertung verfälschen kann. Deswegen wenn man mit einem Sprung zum Anfang einer neuen logischen Kette springt soll man mit SET oder CLR den Ausgangszustand festlegen. Die Details dazu findest Du bei einem FAQ auf die Siemens Support Seiten hier.
 
Hallo

Wichtigster Unterschied:

Parameterübergabe an den FC/FB:

FC: Die Parameteradresse wird im Code des AUFRUFENDEN Bausteins direkt nach dem CALL FC hinterlegt, die Daten selber liegen dann im L-Stack, beim Zugriff aus dem FC auf den Parameter muss deswegen immer erst die Adresse ermittelt werden, dauert also etwas aber dafür muss man sich nicht um die DBs kümmern!

FB: Der Editor sorgt hier dafür das alle Parameter in den Instanzdatenbaustein geschrieben werden, dort holt sie dann der FB heraus, ist schneller aber man braucht für jeden FB einen eigenen DB oder Multiinstanzen

Temporäre Variablen:

FC: es gibt nur temporäre Variablen auf dem L-Stack, diese müssen wie bereits erwähnt, initialisiert werden. Nach Verlassen des FCs sind die Daten dann auch weg!

FB: es gibt temporäre Variablen auf dem L-Stack (siehe FC) und temporäre Variablen (statisch) im Instanzdatenbaustein welche dann nur vom User verwaltet werden.




FC sind gut für modulare Programmierung geeignet, da sie beliebig oft (was der B-Stack halt so hergibt) und aus jeder Stelle ohne Kenntnisse des restlichen Programms aufgerufen werden können


Gruß
 
Zurück
Oben