FC-Aufruf mit DB-Inhalt

Drain

Level-2
Beiträge
224
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
habe hier einen S7-Code vorliegen den ich nicht ganz verstehe.

Code:
CALL "Stückzähler" [=FC14]
 Teil_IO := L2.0
 Reset_Counter := L2.1
 DB_Counter := "DB_Arbeitsdaten" [=DB10]
 [COLOR=Red]Counter_IO_Teile := DBD50 [Datentyp DINT][/COLOR]
 ...
NOP 0
Es wird vor dem Funktionsaufruf der DB10 nicht mit "AUF" geöffnet. Woher ist jetzt klar, daß sich die Angabe "DBD50" auf den DB10 bezieht?
Oder wird in "Counter_IO_Teile" "DBD50" übergeben, sozusagen als eine Art Pointer? Sieht mir eher so aus.

Code:
FC14:
...
AUF #DB_Counter
UN #Reset_Counter
SPB auft
L L#0
[COLOR=Black]T [/COLOR][COLOR=Black]#Counter_IO_Teile
...
[/COLOR]
Hoffe es erbarmt sich jmd mir diesen Umstand zu erklären. Es ist noch kein Meister vom Himmel gefallen und in der Suchfunktion hab ich auch nichts gefunden, was mir weiterhefen konnte.

Schönen Feierabend :D
 
Was Ist der Counter_IO_Teile :=
Ein IN , OUT oder INOUT des FC´s ???

(einfach mal mit der Maus über das = fahren)

Das geht so, FC 14 wird der DB geöffnet und wird dort auch beschrieben,
mit Parameter Counter_IO_Teile übergibtst du dem FC das DBD, wohin er L#0 im DB 10 schreiben soll
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Es wird vor dem Funktionsaufruf der DB10 nicht mit "AUF" geöffnet. Woher ist jetzt klar, daß sich die Angabe "DBD50" auf den DB10 bezieht?

Ich gehe mal davon aus, dass die IN-Variable DB_Counter des FC14 vom Datentyp BLOCK_DB ist.

Code:
CALL "Stückzähler" [FC14]
 Teil_IO := L2.0
 Reset_Counter := L2.1
 [COLOR=red]DB_Counter[/COLOR][COLOR=red] := "DB_Arbeitsdaten" [DB10] [[/COLOR][COLOR=red]Datentyp BLOCK_DB][/COLOR]
 [COLOR=black]Counter_IO_Teile := DBD50 [Datentyp DINT][/COLOR]

Im FC14 wird der DB10 dann durch den Aufruf AUF #DB_Counter geöffnet.

Code:
FC14:
...
[COLOR=red]AUF #DB_Counter [Datentyp BLOCK_DB][/COLOR]
UN #Reset_Counter
SPB auft
L L#0
[COLOR=black]T [/COLOR][COLOR=black]#Counter_IO_Teile[/COLOR]

Gruß Kai
 
GMorgen zusammen,

Was Ist der Counter_IO_Teile :=
Ein IN , OUT oder INOUT des FC´s ???
Es handelt sich hierbei um einen INOUT.

Kai schrieb:
Ich gehe mal davon aus, dass die IN-Variable DB_Counter des FC14 vom Datentyp BLOCK_DB ist.
Richtig getippt.

Kai schrieb:
Im FC14 wird der DB10 dann durch den Aufruf AUF #DB_Counter geöffnet.
Das verstehe ich.

Aber welche Daten werden in die Variable Counter_IO_Teile übergeben?
a) der Wert des IO-Zählers (z.B. 123456 Stück) [kann ich eigentlich ausschließen]
b) ein Zahlenwert, der auf den entsprechenden DB-Speicherbereich zeigt (hier 50.0)
c) der String "DBD50"

Das ist mir noch nicht ganz klar und zur besseren Verständnis möchte ich halt den Hintergrund kennen.
 
Aber welche Daten werden in die Variable Counter_IO_Teile übergeben?
a) der Wert des IO-Zählers (z.B. 123456 Stück) [kann ich eigentlich ausschließen]

Wieso kannst Du das ausschließen, dass es sich im den Wert der IO-Zählers handelt?

Ich verstehe den Programmcode im FC14 folgendermaßen:

Code:
FC14:
 
[COLOR=black]Datenbaustein (DB10) öffnen[/COLOR]
 
[COLOR=red]AUF #DB_Counter (DB10)[/COLOR]
 
[COLOR=black]Abfrage (L2.1), ob der Zähler (DBD50) zurückgesetzt werden soll[/COLOR]
 
[COLOR=red]UN #Reset_Counter (L2.1)[/COLOR]
 
[COLOR=black]Wenn nein, springe zu Sprungmarke auft[/COLOR]
 
[COLOR=red]SPB auft[/COLOR]
 
[COLOR=black]Wenn ja, schreibe den Wert 0 in den Zähler (DBD50) [/COLOR]
 
[COLOR=red]L L#0[/COLOR]
[COLOR=red]T #Counter_IO_Teile (DBD50)[/COLOR]

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wieso kannst Du das ausschließen, dass es sich im den Wert der IO-Zählers handelt?
Na ja, wenn ich rein den Wert in die Funktion übergebe, dann könnte die Funktion ja nur mit dem Zahlenwert arbeiten aber nicht den Zähler in dem DB zurücksetzen.

Ich verstehe den Programmcode im FC14 folgendermaßen:
Da schließe ich mich dir schon an.

Mir geht es eher um den Aufruf der Funktion mit CALL und was an die Variable "Counter_IO_Teile" übergeben wird.:confused:
 
Kann mir da wirklich niemand weiterhelfen?:sad:

Nochmal zur Erinnerung:
Code:
CALL "Stückzähler" [=FC14]
 Teil_IO := L2.0
 Reset_Counter := L2.1
 DB_Counter := "DB_Arbeitsdaten" [=DB10]
 [COLOR=Red]Counter_IO_Teile := DBD50 [Datentyp DINT][/COLOR]
 ...
NOP 0
Woher ist klar, daß sich die Angabe DBD50 auf den DB10 bezieht und nicht z.B. auf DB8?
 
Kann mir da wirklich niemand weiterhelfen?:sad:

Nochmal zur Erinnerung:
Code:
CALL "Stückzähler" [=FC14]
 Teil_IO := L2.0
 Reset_Counter := L2.1
 DB_Counter := "DB_Arbeitsdaten" [=DB10]
 [COLOR=red]Counter_IO_Teile := DBD50 [Datentyp DINT][/COLOR]
 ...
NOP 0
Woher ist klar, daß sich die Angabe DBD50 auf den DB10 bezieht und nicht z.B. auf DB8?
Weil in der FC14 der DB10 über die IN-Variable "DB_Arbeitsdaten" aufgeschlagen wird.

Wurde in denvorherigen Beiträgen doch schon hinreichend erläutert...:rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke, das ist unsauber programmiert.

Denn das DBD50 außen am FB bezieht sich erstmal auf den Datenbaustein, der vor dem FC-Aufruf gerade aufgeschlagen ist. Das kann auch der DB8 sein. Wenn dann intern ein anderer DB aufgeschlagen wird (der Arbeits-DB), dann wird der aktuelle DB. Aber schön ist das nicht, alleine beim Status Beobachten am FC können die schönsten Sachen angezeigt werden. Kann man ja eigentlich mal testen, wie das Ganze reagiert, aber ich hab grad nicht die Zeit.
 
@ Ralle und OHGN:
Danke

Wäre dann eine Angabe mit Bezug auf den DB sauberer?
Code:
Counter_IO_Teile := DB10.DBD50
 
Zurück
Oben