Variablendeklaration...

anne

Level-1
Beiträge
347
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes Forum,

habe da eine Frage zur Variablendeklaration - komme nicht recht weiter.

Ist es möglich, dass man (frau auch :p) in einem FB eine statische Variable anlegt und diese dann im OB1 verwendet?

Soweit ich weiß funktionieren ja im OB1 nur temp. Variablen.

Es ist einfach so, dass im FB an versch. Stellen ein Zahlenwert in die statische Variable geschrieben wird und im OB1 dann, je nach Wertinhalt dieser stat. Variable, best. Bausteine aufgerufen werden sollen...

Mein Problem ist nun, ich weiß nicht, wie ich diese stat. Variable aus dem FB im OB1 einbringen kann?

Lieben Dank für eure Hilfe!
 
Hallo Anne,

du kannst die statischen über den Instanz DB des zugehörigen FB´s ansprechen, ob man dieses tun sollte, lasse ich mal dahin gestellt ( ein viel und immer wieder diskutiertes Thema :p )
aber grundsätzlich liegen die statischen Variablen in dem DB den dieser "begleitet".
Also z.b. call fb2, db2
in diesem Fall im DB 2 wo man auch die zugehörige Symbolik findet.
Du solltest aber lieber einen Global DB oder Merker als Speicher nutzen, sonst wird es unschön.

gruß Thomas
 
Danke für den Link Thomas...

Da ist unter anderem zu lesen: "lesend ja, zugriff erlaubt, schreibend nein ... meine Meinung!" (Kommentar von VL)

Zugriff "lesend" hieße dann für meinen Fall, dass ich mir den Wert aus dem Instanz-DB heraushole, oder?

Danke!
 
Ich weiss ja nicht, was Du mit den Werten machen willst. Aus meiner Sicht gehören in den OB1 nach Möglichkeit nur Bausteinaufrufe.

Falls Du im OB1 bleiben willst und der fragliche FB dort aufgerufen wird: Deklariere doch eine OUT-Variable in dem FB. Darauf weist Du die STAT-Variable zu. Dann kannst Du im OB1 eine TEMP-Variable anlegen und diese an den OUT-Parameter des FB anschließen.

Ansonsten würde es sich auch lohnen, mal darüber nachzudenken die "global" benötigte Variable in einem Global-DB zu deklarieren.

Das hier soll auch gar nicht der Anstoß für eine neue Diskussion über den externen Zugriff auf den IDB sein. Es sollen lediglich weitere Möglichkeiten aufgezeigt werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Deklariere doch eine OUT-Variable in dem FB. Darauf weist Du die STAT-Variable zu. Dann kannst Du im OB1 eine TEMP-Variable anlegen und diese an den OUT-Parameter des FB anschließen.

Danke für diesen Vorschlag Tigerente - aber ich weiß nicht ganz genau, was du meinst:

Z.B. deklariere ich in dem FB eine Out-Variable namens "test". Die stat. Variable, in die die Zahlenwerte geschrieben werden, heißt z.b. "werte".

Wie weise ich nun die stat. Variable auf die Out-Variable zu? Auch in dem FB?

Danke für eine weitere Erklärung...
 
Du musst ja nur die STAT-Variable "nach außen" bringen.

Das geht z.B. ganz einfach mit dem MOVE-Befehl (KOP/FUP)

IN AWL würde das so aussehen:

Code:
L #werte
T #test

Wenn #werte ein INT ist, dann natürlich auch #test.

Achja... das steht in dem FB. Am besten zum Schluss, dann ist die Berechnung mit der STAT-Variable auf jeden Fall erfolgt.
 
Zuletzt bearbeitet:
Aja, ok Tigerente - lieben Dank!

Dein oben geposteter Code in AWL könnte z.B. im letzten Netzwerk des FB's stehen, richtig? ----> Frage hat sich durch deinen Nachtrag glaube ich erledigt!

Im OB1 müsste ich dann eine dekl. Temp-Variable an den entspr. Ausgang (#test) des aufzurufenden FB's schreiben. Hoffe nun alles richtig verstanden zu haben?

Danke!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Aja, ok Tigerente - lieben Dank!

Dein oben geposteter Code in AWL könnte z.B. im letzten Netzwerk des FB's stehen, richtig? ----> Frage hat sich durch deinen Nachtrag glaube ich erledigt!

Im OB1 müsste ich dann eine dekl. Temp-Variable an den entspr. Ausgang (#test) des aufzurufenden FB's schreiben. Hoffe nun alles richtig verstanden zu haben?

Danke!

So funktioniert es.
Du hast uns nur noch nicht gepetzt, was du mit dem Wert im OB 1 machen willst bzw musst.;)
Sinnvoller und sauberer ist es wenn du Programmcode in eine Funktion bzw in einen Funktionsbaustein programmierst.


bike
 
Hallo bike,

Ich weiss ja nicht, was Du mit den Werten machen willst. Aus meiner Sicht gehören in den OB1 nach Möglichkeit nur Bausteinaufrufe.

Falls Du im OB1 bleiben willst und der fragliche FB dort aufgerufen wird: Deklariere doch eine OUT-Variable in dem FB. Darauf weist Du die STAT-Variable zu. Dann kannst Du im OB1 eine TEMP-Variable anlegen und diese an den OUT-Parameter des FB anschließen.

Ansonsten würde es sich auch lohnen, mal darüber nachzudenken die "global" benötigte Variable in einem Global-DB zu deklarieren.

Das hier soll auch gar nicht der Anstoß für eine neue Diskussion über den externen Zugriff auf den IDB sein. Es sollen lediglich weitere Möglichkeiten aufgezeigt werden.

Der Meinung war Tigerente 1974 auch.
 
So funktioniert es.
Du hast uns nur noch nicht gepetzt, was du mit dem Wert im OB 1 machen willst bzw musst.;)
bike

Danke bike,

na gut, dann lüfte ich mal mein Geheimnis...

Je nach dem Zahlenwert (0, 1 oder 2) wird im OB1 mittels der Funktion "JMP_LIST" (S7-1200) ein best. FC aufgerufen - also ähnlich der Sprungfunktion in AWL bei der S7-300.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke bike,

na gut, dann lüfte ich mal mein Geheimnis...

Je nach dem Zahlenwert (0, 1 oder 2) wird im OB1 mittels der Funktion "JMP_LIST" (S7-1200) ein best. FC aufgerufen - also ähnlich der Sprungfunktion in AWL bei der S7-300.

Sorry, wenn ich nerve, doch ich würde dies aus einer Funktion heraus aufrufen.
Leider :p gehört die 1200ter nicht zu meinem Erfahrungsschatz, dieser Krug ging bisher an mir vorbei. ;)



bike
 
Nein, du nervst mich überhaupt nicht - bin für jede Anregung/Verbesserung meines Gedankenguts dankbar...

Ja stimmt, die Aufrufe könnte man wohl auch in dem besagten FB vornehmen - dachte aber grad, dass hierzu der OB1 der richtige Ort wäre, da dieser ja im Allgemeinen für Bausteinaufrufe prädestiniert ist.
 
Ja stimmt, die Aufrufe könnte man wohl auch in dem besagten FB vornehmen - dachte aber grad, dass hierzu der OB1 der richtige Ort wäre, da dieser ja im Allgemeinen für Bausteinaufrufe prädestiniert ist.

Stimmt, doch im OB1 wird Zyklisch aufgerufen.
Wenn dabei Bedingungen abgefragt werden und ggF verschiedene Parameter übergeben werden, macht es nach meiner Erfahrung Sinn, dies in einer eigenen Funktion zu machen.
Bei kleinen Projekten ist das vielleicht kein Problem dies so zu lösen wie du willst, doch sobald das Programm größer wird... ;)
Und da ich in kleinen und großen Projekten es Standardisieren möchte, mache ich es immer gleich


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Stimmt, doch im OB1 wird Zyklisch aufgerufen.
Wenn dabei Bedingungen abgefragt werden und ggF verschiedene Parameter übergeben werden, macht es nach meiner Erfahrung Sinn, dies in einer eigenen Funktion zu machen.
Bei kleinen Projekten ist das vielleicht kein Problem dies so zu lösen wie du willst, doch sobald das Programm größer wird... ;)
bike

Hm, könnte es durch den zyklischen Aufruf im OB1 zu Problemen kommen, wenn es sich um größere Programme handelt?
 
Das nicht, doch irgendwann ist der OB 1 so groß, dass du den nicht mehr überblickst.
Daher mache ich Aufrufe in Funktionen, die ich nach Gruppen zusammen baue.


bike
 
Zurück
Oben