Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 10 von 10

Thema: FC-Aufruf mit DB-Inhalt

  1. #1
    Registriert seit
    27.04.2006
    Ort
    Süddeutscher Raum
    Beiträge
    199
    Danke
    15
    Erhielt 4 Danke für 4 Beiträge

    Frage


    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]
     Counter_IO_Teile := DBD50 [Datentyp DINT]
     ...
    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
    T #Counter_IO_Teile
    ...
    
    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
    Zitieren Zitieren FC-Aufruf mit DB-Inhalt  

  2. #2
    Registriert seit
    27.11.2005
    Ort
    im Osten
    Beiträge
    1.183
    Danke
    141
    Erhielt 271 Danke für 248 Beiträge

    Standard

    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
    Geändert von MW (18.09.2007 um 17:17 Uhr)

  3. #3
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Drain Beitrag anzeigen
    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
     DB_Counter := "DB_Arbeitsdaten" [DB10] [Datentyp BLOCK_DB]
     Counter_IO_Teile := DBD50 [Datentyp DINT]
    Im FC14 wird der DB10 dann durch den Aufruf AUF #DB_Counter geöffnet.

    Code:
    FC14:
    ...
    AUF #DB_Counter [Datentyp BLOCK_DB]
    UN #Reset_Counter
    SPB auft
    L L#0
    T #Counter_IO_Teile
    Gruß Kai

  4. #4
    Avatar von Drain
    Drain ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.04.2006
    Ort
    Süddeutscher Raum
    Beiträge
    199
    Danke
    15
    Erhielt 4 Danke für 4 Beiträge

    Standard

    GMorgen zusammen,

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

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

    Zitat Zitat von Kai
    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.

  5. #5
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Drain Beitrag anzeigen
    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:
     
    Datenbaustein (DB10) öffnen
     
    AUF #DB_Counter (DB10)
     
    Abfrage (L2.1), ob der Zähler (DBD50) zurückgesetzt werden soll
     
    UN #Reset_Counter (L2.1)
     
    Wenn nein, springe zu Sprungmarke auft
     
    SPB auft
     
    Wenn ja, schreibe den Wert 0 in den Zähler (DBD50) 
     
    L L#0
    T #Counter_IO_Teile (DBD50)
    Gruß Kai

  6. #6
    Avatar von Drain
    Drain ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.04.2006
    Ort
    Süddeutscher Raum
    Beiträge
    199
    Danke
    15
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Zitat Zitat von Kai Beitrag anzeigen
    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.

    Zitat Zitat von Kai Beitrag anzeigen
    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.

  7. #7
    Avatar von Drain
    Drain ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.04.2006
    Ort
    Süddeutscher Raum
    Beiträge
    199
    Danke
    15
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Kann mir da wirklich niemand weiterhelfen?

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

  8. #8
    Registriert seit
    08.11.2006
    Ort
    Uckermark
    Beiträge
    903
    Danke
    201
    Erhielt 256 Danke für 208 Beiträge

    Standard

    Zitat Zitat von Drain Beitrag anzeigen
    Kann mir da wirklich niemand weiterhelfen?

    Nochmal zur Erinnerung:
    Code:
    CALL "Stückzähler" [=FC14]
     Teil_IO := L2.0
     Reset_Counter := L2.1
     DB_Counter := "DB_Arbeitsdaten" [=DB10]
     Counter_IO_Teile := DBD50 [Datentyp DINT]
     ...
    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...
    Neue Ideen begeistern jene am meisten, die auch mit den alten nichts anzufangen wussten.
    Karl Heinrich Waggerl (1897-1973)

  9. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    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.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  10. #10
    Avatar von Drain
    Drain ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.04.2006
    Ort
    Süddeutscher Raum
    Beiträge
    199
    Danke
    15
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @ Ralle und OHGN:
    Danke

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

Ähnliche Themen

  1. Inhalt Datenbausteine nach Aufruf
    Von faraday im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 16.03.2010, 22:00
  2. DB Inhalt überschreiben
    Von Black Scorpion im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 10.07.2009, 00:02
  3. Indirekter Zugriff auf DB und DB-Inhalt
    Von KingShango im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 27.11.2007, 20:09
  4. DB Inhalt löschen mit SCL
    Von Rose im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 19.06.2006, 12:29
  5. Auf DB-Inhalt zugreifen
    Von delacasa im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 10.06.2006, 11:42

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •