Funktionbaustein mit verschiedenen DB*s

Zuviel Werbung?
-> Hier kostenlos registrieren
Oh man...keine ahnug hatte ich irgendwo gelesen....

Ich werds wohl nicht mehr verstehen. Woher soll Netz und Hilfsschaler dnen wissen ob sie eingang oder ausgang sind? wenn sie nur bei "var" deklariert sind?
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    11,4 KB · Aufrufe: 21
Hallo Paco,

was der Pfälzer bereits erwähnte hast du bisher leider ignoriert (wenn dir das Hintergrundwissen fehlt, dann hättest du auch gerne dazu eine Frage stellen dürfen).
Es sieht so aus, als dass du nicht die def.Variablen benutzt, sondern Absolute Adressen (zB "Hilfs" E0.3)
gleiches Problem

Also, die internen Variablen in einem FB werden direkt im DB abgespeichert. Der DB ist quasi das Gedächtnis. Eine Grundregel bei einem mehrfach zu verndetem FB ist, das dort KEINE Absolutadresse verwendet werden dürfen.

Wenn ich nun den fb aufrufe mit Ein Zeit und Aus als in parameter und Stern und Dreieck als Out, nehme ich noch Netz und "hilfsschalter" als var.
Dennoch muss ich doch in der symboliktabelle sagen was Netz oder Hilfsschalter sind, (eingang, ausgang) oder nicht?
Das ist mir leider noch unklar...

Netz und Hilfsschalter werden bei dir nur im FB verwendet und sind somit lokal. Die brauchst du nicht in der Symboltabelle deklarieren. Der FB merkt sich ihren Zustand. Du kannst den beiden im FB einen Wert zuweisen und diesen dann entsprechend abfragen und z.B. auf einen Ausgang verschalten. Sie sind weder Ein- noch Ausgang, sondern nur Hilfsbits um dir etwas zu merken.

Eine weitere Grundregel in der Programmierung lautet: Gib deinen Variablen sinnvolle Symbolnamen. Du hast dem Eingang E0.3 den Namen "Hilfs" gegeben. Außerdem hast du in der Variablendeklaration den Namen "Hilfs" verwendet. Bei Siemens kann man die beiden nun Unterscheiden, indem der eine Name in " geschrieben wird (global definiert in der Symbolik) oder eine # vorangestellt ist (interne Variable in einem FB oder FC).
Da du hier zweimal dieselbe Symbolik verwendest, kann es sehr leicht passieren, dass global und lokal verwendete Variablen durcheinandergeraten. Benenne doch erst einmal die Variablen um und sorge dafür, dass du im Bausteine KEINE globalen Variablen mehr verwendest. Dann klappt das auch mit dem Aufruf.

Gruß Sonja
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok das ist schonmal neu für mich und sieht ganz gut aus. Wenn ich nun den fb aufrufe mit Ein Zeit und Aus als in parameter und Stern und Dreieck als Out, nehme ich noch Netz und "hilfsschalter" als var.
Dennoch muss ich doch in der symboliktabelle sagen was Netz oder Hilfsschalter sind, (eingang, ausgang) oder nicht?
Das ist mir leider noch unklar...

Das Thema ist nicht mit ein paar Infos rüberzubringen.
OK, ich versuch mal einen kleinen Crashkurs (wo soll ich nur anfangen?)

Also,
du musst zwischen den "Absoluten Adressen" (Ex.x, Ax.x usw) und den Parametern innerhalb des FBs unterscheiden.
Die Absoluten sind im gesamten Programm immer die gleichen.

Die im FB deklarierten sind nur innerhalb des FBs gültig.
Daher dürfen in einem universellen FB (zB. für mehrere Motoren identische Logik) keine "Absoluten" verwendet werden.
Diese werden beim Aufruf des FBs an IN, OUT, INOUT übergeben.
Der FB "trägt" diese in seinen Instanz-DB, der beim Aufruf angegeben wird, ein.

Dabei ist zu beachten:
Bei Abfragen (U, O, L..) im FB ist IN zu verwenden.
Bei Zuweisen (S, R, =) im FB ist es OUT.
Ist beides programmiert, muss INOUT angegeben werden.

Die Deklarationen im Bereich STAT sind "Speicherzellen" im Instanz-DB.
Diese sind beim nächsten Zyklus (Abarbeiten des Programms) für diesen Aufruf des FBs gültig (Gedächtnis).

Die Deklarationen im Bereich TEMP sind nur temporär (zeitlich) während der Abarbeitung innerhalb des FBs gültig.
Einer Abfrage muss daher vorher eine Zuweisung erfolgen.
Verwendung zB für Zwischenmerker, die nur innerhalb des FBs gebraucht werden.
(gültig = reeler Wert)
Mal so grob für Nicht-SPSler

Zur Symboltabelle:
Die solltest du eintragen, ist aber für die Funktionalität kein Muss.

Ich hoffe, ich konnte dir mal weiterhelfen.

Gruß Roland

Edit
Puzzlefreak war schneller
Zum Verständnis:
Die "Absoluten" bei mir sind mit den "Globalen" bei Puzzlefreak identisch.
 
Zuletzt bearbeitet:
Danke das war sehr hilfreich...

Aber ich verstehe immernoch nicht wie ich dann "Netz" und "Hilfs" verwenden soll. Ich soll nach aufgabenstellung im FB mit "hilfs" - der ein eingang sein soll, das Netz - was ein ausgang sein soll. EInschalten.
 
hoffe einer von euch kann mir bei folgenden Problem helfen, und ich kann dem gespräch mit meinem Prof ausm weg gehen;)
Wenn ich mir den Thread inzwischen so anschaue, dann kann ich mir auch vorstellen warum Du kein Gespräch mit dem "Prof" führen möchtest.:rolleyes: So richtig hast Du den Sinn eines Funktionsbausteins noch nicht verinnerlicht!
Also nun von meiner Seite langsam zum Mitschreiben:
Immer wiederkehrende Funktionsabläufe (wie Deine Stern-Dreieck-Sache) werden innerhalb eines FB's programmiert. Die Informationen, wie z.B. Taster "Ein" usw. werden als IN-Parameter dem FB übergeben. Der FB macht dann intern das, was er tun soll - und übergibt die Steuerbefehle den OUT-Parametern.
Den FB "Stern-Dreieck" kann man nun einmal oder auch mehrmals aufrufen z.B. in einem FC oder auch einem anderen FB. Am Aufruf des FB "Stern-Dreieck" werden nun aussen die IN und OUT-Parameter versorgt.

Gruß Approx

P.S.: Dein "Prof" hats sicher auch nicht leicht...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hehe ja er hats sicherlich nicht leicht;)

Ein verusuch noch;)

Wenn aber "hilfs" KEIN In parameter ist, was nach aufgabenstellung so beschrieben ist, wie kann ich dann mit ihm etwas einschalten?
 
Hehe ja er hats sicherlich nicht leicht;)

Ein verusuch noch;)

Wenn aber "hilfs" KEIN In parameter ist, was nach aufgabenstellung so beschrieben ist, wie kann ich dann mit ihm etwas einschalten?

Hast du dich inzwischen miut IN / OUT und VAR Parameter beschäftigt?
Hast du nachgelesen, was die im einzelnen tun und wie diese verwendet weren können?

Wenn ich deine Beiträge lesen eher weniger, leider.


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit einem Ein taster wird ein (sternschütz) eingeschaltet. WEnn das schütz angezogen hat betätig es normalerweise einen HIlfsschalter. Mit diesem Schalter( den wir als eingang simulieren) wird das sogenannte netzschütz eingechaltet und der motor läuft nun mit diesem beiden schützen im Stern betrieb. Gleihczeigt mit dem Hilfsschalter wird einen motorspezifische Stern-Dreieck-Umschaltzeit gestartet. Ist diese Zeit abgelaufen, wird das Sternschütz abgeschaltet und das Dreieckschütz eingeschaltet. Nun läuft der motor im Dreieckbetrieb. Mit einem austaster kann man alles jederzeit beenden.


1) Es soll ein Fb geschrieben werden in dem die Anlauffunkton realsiert wird. Als übergabevariablen sollen variablen für den ein und Aus-taster und die stern-dreieck-zeit vorgesehen werden. Sowie Sternschütz und Dreieckscütz als rückgabevariablen.

So bitte;)


Übringends habe ich nun endlich geschafft einen Fb fehlerfrei mit "Verstand" zum laufen zu bringen. bzw ein Motor läuft an, nur leider wenn ich den zweiten anschalte überlaufen sie sich gegenseitig:S
 
Aber ich verstehe immernoch nicht wie ich dann "Netz" und "Hilfs" verwenden soll. Ich soll nach aufgabenstellung im FB mit "hilfs" - der ein eingang sein soll, das Netz - was ein ausgang sein soll. EInschalten.
"Netz" ist doch das Netzschütz, also auch ein Out-Parameter.
Nur Stern und Dreieck bringt nicht wirklich viel. ;)

Und mit "Hilfs" ist die Rückmeldung des Sternschützes gemeint.
Also ein IN-Parameter, da du aber kein Schütz hast wird es mit einem separatem Schalter simuliert.

Somit ergibt sich folgende Beschaltung des FB:
Code:
IN : Ein
IN : Aus
IN : Rueckmeldung Stern
IN : Zeit Stern
OUT: Netz
OUT: Stern
OUT: Dreieck
 
Zuletzt bearbeitet:
Naja ... dann hat mein "Beispiel-FB" ja schon fast die richtigen In/Out's ... :)

Wie wäre es, wenn du dein bisheriges Werk mal postest und wir sprechen dann da drüber.
Einer Bewertung deines bisherigen Engagements und des präsentierten Kenntnisstandes enthalte ich mich zunächst noch.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja:) genauso denk ich auch, aber in der aufgabenstellung steht nicht das Netzschütz sowie der HIlfsschalter als Out oder IN vorgesehen werden sollen. Das irritiert mich ja die ganze zeit..

DANKE
 
ja:) genauso denk ich auch, aber in der aufgabenstellung steht nicht das Netzschütz sowie der HIlfsschalter als Out oder IN vorgesehen werden sollen. Das irritiert mich ja die ganze zeit..
In der Tat, ich verstehe dein Problem, sprich deine Bedenken:
Mit einem Ein taster wird ein (sternschütz) eingeschaltet. WEnn das schütz angezogen hat betätig es normalerweise einen HIlfsschalter. Mit diesem Schalter( den wir als eingang simulieren) wird das sogenannte netzschütz eingechaltet und der motor läuft nun mit diesem beiden schützen im Stern betrieb. Gleihczeigt mit dem Hilfsschalter wird einen motorspezifische Stern-Dreieck-Umschaltzeit gestartet. Ist diese Zeit abgelaufen, wird das Sternschütz abgeschaltet und das Dreieckschütz eingeschaltet. Nun läuft der motor im Dreieckbetrieb. Mit einem austaster kann man alles jederzeit beenden.
Hier eine ganz normale Aufgabenstellung für eine Stern-Dreieck-Schaltung.
1) Es soll ein Fb geschrieben werden in dem die Anlauffunkton realsiert wird. Als übergabevariablen sollen variablen für den ein und Aus-taster und die stern-dreieck-zeit vorgesehen werden. Sowie Sternschütz und Dreieckscütz als rückgabevariablen.
Und hier eine Beschreibung einer unvollständigen Bausteindeklaration. :icon_twisted:

Mein Tipp:
Mach die Beschaltung so wie ich sie gepostet habe, alles andere bringt nicht den gewünschten Erfolg und geht am Sinn eines FB vorbei.
 
ja:) genauso denk ich auch, aber in der aufgabenstellung steht nicht das Netzschütz sowie der HIlfsschalter als Out oder IN vorgesehen werden sollen. Das irritiert mich ja die ganze zeit..

Etwas Kreativität soll der Programmer vermutlich schon zeigen..

Wenn die ganze Lösung in der Aufgabenstellung gezeigt wird, macht es doch keinen Spass.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hm hoffentlich letze Frage.
Habe nun wie Paule sagte die in und outs belegt, funktioniert wunderbar, jedoch nicht wenn ich den zweiten fb mit db2 aufrufe und eine andere zeit eingebe. Dann beeinflussen sie sich gegenseitig...weiss jmd warum? hier n shot vom FB

Und nochmals danke an alle die sich hier die mühe gemacht haben:)
 

Anhänge

  • Unbenannt.jpg
    Unbenannt.jpg
    87,8 KB · Aufrufe: 14
Ja klar, du hast den Timer T1 absolut im FB benutzt.
Du musst den Timer auch an den FB-Parametern übergeben, damit du bei jedem FB-Aufruf einen anderen Timer angeben kannst.

Gruß Roland
 
Hm hoffentlich letze Frage.
Habe nun wie Paule sagte die in und outs belegt, funktioniert wunderbar, jedoch nicht wenn ich den zweiten fb mit db2 aufrufe und eine andere zeit eingebe. Dann beeinflussen sie sich gegenseitig...weiss jmd warum? hier n shot vom FB

Und nochmals danke an alle die sich hier die mühe gemacht haben:)
Hast Du da etwa eine feste Zeit (z.B.: T5) drin?
Das geht natürlich nicht.
Am besten du holst dir aus der Bibliothek den SFB "TON" und legst ihn in den statischen Bereich des FB.
Somit hat jeder Antrieb seine eigene Zeit die nun im DB liegt.

Edit: Der Pfälzer war schneller.
Seine Variante geht natürlich auch.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Paco,

du hast in deinem FB das MW0 verwendet. Das musst du an deinem Eingang "Zeit" anschließen und im Baustein dann mit "#Zeit" arbeiten.
Außerdem verwendest du den Timer "T1". Dadurch wird beim zweiten Funktionsaufruf derselbe Timer von doppelt bearbeitet. Du kannst die Timernummer auch von außen anschließen oder du brauchst einen Timer in der var-Deklaration.

Gruß Sonja

Edit: Man, seit ihr alle schnell
 
Zuletzt bearbeitet:
Wie kann ich denn einen Timer übergeben. Über In schon klar. Meine Zeit habe zb mit einem merkerwort übergeben, und dann WORD als aktualparameter. Aber was mach ich mitn Timer? und was übergebe ich einfach die buchstaben t1?:S
 
Zurück
Oben