Funktionsbausteine

Zuviel Werbung?
-> Hier kostenlos registrieren
Das wird doch im Aufruf im OB1 schon erledigt.
Zuerst call FC1 , dann call FC2

Oder habe ich es falsch gelesen?


bike

ja hast du falsch gelesen, im Beispiel von Tigerente und der frage vom Siegener,
werden die Bausteine FC1 und FC2 im FC3 aufgerufen, von OB1 steht da nichts.
 
ja hast du falsch gelesen, im Beispiel von Tigerente und der frage vom Siegener,
werden die Bausteine FC1 und FC2 im FC3 aufgerufen, von OB1 steht da nichts.

Und die im FC3 aufgerufene Bausteine werden nicht sequenziell abgearbeitet?

Das verstehe ich nicht.
Es ist doch völlig egal, ob in OB1 oder innerhalb eines FC Bausteine aufgerufen werden, dachte ich bis gerade.
Aber gut, wieder etwas gelernt :ROFLMAO:


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Back to topic...

Ja, die Aufrufe habe ich auf die Schnelle in einen eigenen FC gepackt. Es macht aber keinen Unterschied.
Es macht natürlich auch nicht viel Sinn.
Ich habe BEIDE Aufrufe reingeschrieben, damit man den Unterschied beim Beschalten der Schnittstelle sieht.

Der Aufruf für den FC2 ist das Ziel :D
Und wie schon gesagt wurde, kann der Baustein dann mehrfach benutzt werden. Also mehrere Aufrufe, die dann untereinander stehen und nacheinander abgearbeitet werden... :cool:
 
Ich habe eine einfache Funkion programmiert um die "Sache" zu kapieren : a+b=c einmal als Funktion und einmal als Funktionsbaustein , da sieht man das ein grosser unterschied ist zwischen OUT und IN-OUT .
Wie was funktioniert sieht man am besten mit gaaanz einfache Beispiele , meine Erfahrung nach !
:)

Funktionen und Funktionsbausteine sind nur ... PLATZHALTER ( mit Gedächtnis beim FB ) deswegen soll ihnen alles symbolisch sein .

"a+b=c" ist was anderes als a+2=c , 2+b=c , a+b=2 Mehrfachbenutzung der Formel "a+b=c" impliziert a,b,c als Platzhalter

... falls ich richtig kapiert habe ... praktisch aber funzt so zu sagen ;)
 
, da sieht man das ein grosser unterschied ist zwischen OUT und IN-OUT .
OUT und IN-OUT gibt es sowohl bei einer Funktion (FC) als auch bei einem Funktionsbaustein (FB).
Der Unterschied liegt viel mehr im STAT, das "Gedächtnis" in Form eines Instanz-DB (IDB). Also einem eigenen diesem Baustein zugewiesenen Speicherbereich.

Funktionen und Funktionsbausteine sind nur ... PLATZHALTER
Das sind keine "Platzhalter"...
Man kann alles was man Programmieren will theoretisch auch in 256 Netzwerke im OB1 unterbringen, oder sogar auf die Unterteilung in Netzwerke verzichten.
Das ist theoretisch und absoluter Blödsinn ;-)
FC´s und FB´s dienen in erster Hinsicht dem strukturierten Programmaufbau.
Um verschiedene FUNKTIONEN (z.B.) in einem seperaten Baustein voneinander zu trennen, einzelne Funktionen nur zu einem bestimmten Zeitpunkt aufzurufen etc.

Mehrfachbenutzung...
Genau das ist einer der großen Vorteile von FC´s und FB´s.
Wenn sie richtig programmiert sind kann man sie beliebig oft aufrufen und mit anderen Formalparametern beschalten,
was wiederum den Vorteil hat das das gesamte Programm übersichtlicher bleibt und der Aufwand der Programmierung geringer bleibt.

Gruß, Toki

Ps.: Feiert man in Östereich nicht auch den 1.Mai?? ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Feiert ...aberr ...essen bei euch (wirklich) alle zu gleich ?
:D

PLATZHALTER in sehr allgemeinen Sinn ... also man schreibt zum Beispiel ein FB (!) um eine Summe zu rechnen (gewählt weil einfach) ... => nie mehr muss man das (nochmal) schreiben weil die Variablen im Programm PLATZHALTER für die Werte die dann gebraucht werden sind . Und die FB Platzhalter für ein Programm mit direkter programmierung ist ...etc. Hofe jetz ist klar was ich sagen wollte ...:D

Hast recht mit der Wortklauberei ... praktisch S7 ist sehr einfach und (sehr) REDUNDANT auch (!).IN-OUT ist mit Vorsicht zu geniessen
:cry:

Als Feiertag ist mir Weihnachen lieber als ...1 Mai ( diese amerikanische Feiertag ... ist aber auch lustig solange man (nur)es bezhalt bekommt :ROFLMAO: )
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was ist den mit Redundant im Zusammenhang von S7 gemeint?
Redundant - das mehrfache Vorhandensein funktional gleicher oder vergleichbarer technischer Ressourcen...
Denke das er das nur im übertragenen Sinne angewandt hat.
IN-OUT scheint er allerdings nicht zu mögen (oder zu verstehen).
 
[h=1]Übergabe an IN_OUT-Parameter eines FB[/h]Bei der Übergabe von zusammengesetzten Datentypen an IN_OUT-Parameter eines Funktionsbausteins (FB) wird die Operandenadresse der Variable übergeben (call by reference).
Bei der Übergabe von elementaren Datentypen an IN_OUT-Parameter eines FB werden die Werte in den Instanz-Datenbaustein kopiert, bevor der FB gestartet wird und aus dem Instanz-Datenbaustein herauskopiert, nachdem der FB beendet ist.
Dadurch können IN_OUT-Variablen elementaren Datentyps mit einem Wert initialisiert werden.
Es ist jedoch nicht möglich, in einem Aufruf eine Konstante als Aktualparameter an der Position einer IN_OUT-Variablen anzugeben, da auf eine Konstante nicht geschrieben werden kann.
Variable vom Datentyp STRUCT oder ARRAY können nicht initialisiert werden, da in diesem Fall im Instanz-Datenbaustein nur eine Adresse liegt.

KLAR ?
:cry:
 
Übergabe an IN_OUT-Parameter eines FB

Bei der Übergabe von zusammengesetzten Datentypen an IN_OUT-Parameter eines Funktionsbausteins (FB) wird die Operandenadresse der Variable übergeben (call by reference).
Bei der Übergabe von elementaren Datentypenan IN_OUT-Parameter eines FB werden die Werte in den Instanz-Datenbaustein kopiert, bevor der FB gestartet wird und aus dem Instanz-Datenbaustein herauskopiert, nachdem der FB beendet ist.
Dadurch können IN_OUT-Variablen elementaren Datentyps mit einem Wert initialisiert werden.
Es ist jedoch nicht möglich, in einem Aufruf eine Konstante als Aktualparameter an der Position einer IN_OUT-Variablen anzugeben, da auf eine Konstante nicht geschrieben werden kann.
Variable vom Datentyp STRUCT oder ARRAY können nicht initialisiert werden, da in diesem Fall im Instanz-Datenbaustein nur eine Adresse liegt.

KLAR ?
:cry:

Ich verstehe immer noch nicht was Problematisch bei der Verwendung von IN-OUT Variablen
sein soll. Was bereitet dir bei deinen Zitat zu der Eigenschaft der Variablen, aus irgendeiner Kurs
Unterlage den Probleme?
Genauso könntest du schreiben Merker sind nicht Umproblematisch oder Lokalvariablen haben teuflische
Eigenschaften.

Wo ist jetzt das Problem?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Versuche mal einen erzeinfachen FB zu programmieren : a=b+c mit IN-OUT Parameter !
Wenns klapt lass es mich wissen ...
:confused:

... und nicht nur dass IN-OUT darf kein Eingang und kein Ausgang sein ....oder ?:)
 
Zuletzt bearbeitet:
ich versuche es einmal anders. es ist falsch da nur adressen hinter den variablen stehen aber zum verständnis ist es glaube ich so einfacher.

nach einen call fc werden die in und in_out geladen.
dein program wird durchlaufen und die out und in_out werden wieder beschrieben.

nach ein call fb werden erst alle in, in_out (und stat ist ja vorhanden da es das "gedächnis" des bausteins ist) in den idb geladen.
programm abarbeiten wobei hier immer auf den idb zugegriffen wird.
stat bleiben im gedächnis. out, in_out wieder in den idb schreiben UND auf die variablen die an in/in_out drangeschrieben sind.

die temp werden beim aufruf NIE beschrieben.

daraus folgt:
-temp können irgend einen wert haben. jeh nach vorrangegangenen baustein. um sie nutzen zu können musst du sie erstmal beschreiben und beim nächsten aufruf ist die information weg. sind also schmiermerker/zwischenspeicher
alle bausteine benutzen den selben tempbereich. ist aber nur immer einer aufgerufen.
-an den out/in_out müssen BESCHREIBBARE variablen stehen (oder nichts beim fb da er ja erstmal in idb schreibt). auf einem eingang oder einer zahl kann nicht geschrieben werden.
-in einem fc können keine zustände gespeichert werden. nutzt du nun einen merker, Ausgang oder speicher von db, wird jeder aufruf diesen, in abhängigkeit seines programs, verändern.
-in_out lädt erst die variable bearbeitet sie und schreibt sie wieder weg.
-udt´s oder verschieden selbstgebaute datentypen können nicht als in_out genutzt werden. hier spielt die wahrheit (adressen) eine rolle. als in und out könne sie genutzt werden.
-da die variablen von einem fb erstmal im idb liegen können variablen vorbelgt (intialwerte) werden und es muss nicht unbedingt was an in,out und in_out drangeschrieben werden.
-im fb kannst du zustände werte in seinem gedächnis(stat) speichern. da jeder fb seinen eigenen speicherbereich hat, gehörem sie nur ihm und bleiben erhalten. (idb zugriffe sind aber aus anderen bausteinen möglich)

wie bereits erwähnt, wird nicht im fc umgeladen sondern die variable wird über die adresse angesprochen. auch die zugriffe in/auf idb sind nur adressen. es geht mir nur darum die abläufe zu kapieren.
wie das genau mit den zugriffen ist, ist bereits weiter vorne beschrieben. wenn du da tiefer rein willst, schau die hilfe und funktionen vom ar1 und ar2 an.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...eimal
a= a+b ... eimal a=b+c
als FC oder FB schreiben mit der BEDINGUNG mindestens ein IN-OUT Parameter zu benutzen ( für a,b oder c)

:(

....könnte sein dass ich Blödsinn krakele ? ...dann vergessen wir die Sache ( es ist nur eine SIEMENS Sache ...die andere SPS Steuerungen haben es nicht )

:confused:
 
Zuletzt bearbeitet:
...eimal
a= a+b ... eimal a=b+c
als FC oder FB schreiben mit der BEDINGUNG mindestens ein IN-OUT Parameter zu benutzen ( für a,b oder c)

:(

....könnte sein dass ich Blödsinn krakele ? ...dann vergessen wir die Sache ( es ist nur eine SIEMENS Sache ...die andere SPS Steuerungen haben es nicht )

:confused:

Grundsätzlich kannst du bei den Berechnungen INOUT Variablen nutzen.

Schreibe mal was dein Problem bei der Sache ist oder wo du Bedenken hast.
Aber bitte ein wenig ausführlicher und nicht in zwei nicht vollendeten Halbsätzen.
 
Möglicherweise meint er, daß man an IN_OUT keine PEW oder PAW "anschließen" darf. Doch alles andere - auch E und A - kann man problemlos anschließen. Ob das was möglich ist auch Sinn macht steht auf einem ganz anderen Blatt. Sinnvolle Lösungen zu finden lernt man nicht unbedingt in einem Programmier-Lehrgang.

Harald
 
Zurück
Oben