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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Unterschiedliche Werte in DBD<-->MD

  1. #1
    Registriert seit
    30.06.2007
    Ort
    In der Pfalz
    Beiträge
    503
    Danke
    72
    Erhielt 77 Danke für 65 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe einen FC, der mir einen REAL-Wert berechnet und ausgibt. Nun beobachte ich diesen Wert in der Variablentabelle und beobachte unterschiedliche Werte wenn ich ein MD bzw. ein DBD beschreibe. Das was ich bei einem MD lese ist der Wert, den ich auch erwarte. Was ich beim DBD lese kann ich leider nicht ganz nachvollziehen.

    Hab zum Test 2mal den FC aufgerufen und schreibe einmal in MD und einmal in DBD (siehe Grafik).

    Hat jemand eine Idee?
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren Unterschiedliche Werte in DBD<-->MD  

  2. #2
    Registriert seit
    23.11.2004
    Beiträge
    347
    Danke
    2
    Erhielt 28 Danke für 28 Beiträge

    Standard

    Hallo,

    nimm mal statt "out" den Variablentyp "inout".
    Beim Schreiben in DBs wird in den Funktionen über temp. Lokalvariablen rangiert. Das kann die Verfälschungen bringen.

    Gruß
    raika
    Rainer Kandziora
    Grollmus GmbH
    Qualität in SIMATIC Schulungen
    E-Mail: mailto:Rainer.Kandziora@grollmus.de
    Internet: http://www.grollmus.de

  3. Folgender Benutzer sagt Danke zu RaiKa für den nützlichen Beitrag:

    Steve81 (29.02.2008)

  4. #3
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.622
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard

    Wird DB21.DBD0 von anderswo vielleicht überschrieben ?
    Vielleicht kann es nicht als REAL interpretiert werden.
    Wie sieht DBD0 aus in online anzeige von DB21 ?
    Jesper M. Pedersen

  5. #4
    Avatar von Steve81
    Steve81 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.06.2007
    Ort
    In der Pfalz
    Beiträge
    503
    Danke
    72
    Erhielt 77 Danke für 65 Beiträge

    Standard

    Zitat Zitat von JesperMP Beitrag anzeigen
    Wird DB21.DBD0 von anderswo vielleicht überschrieben ?
    Das kann ich definitiv ausschließen, da ich extra zum testen einen eigenen DB mit nur der einen REAL-Variable erstellt habe.
    Zitat Zitat von JesperMP Beitrag anzeigen
    Vielleicht kann es nicht als REAL interpretiert werden.
    Wie sieht DBD0 aus in online anzeige von DB21 ?
    hier steht ein Aktualwert von 0.000000e+000.

  6. #5
    Avatar von Steve81
    Steve81 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.06.2007
    Ort
    In der Pfalz
    Beiträge
    503
    Danke
    72
    Erhielt 77 Danke für 65 Beiträge

    Standard

    Zitat Zitat von RaiKa Beitrag anzeigen
    Hallo,

    nimm mal statt "out" den Variablentyp "inout".
    Beim Schreiben in DBs wird in den Funktionen über temp. Lokalvariablen rangiert. Das kann die Verfälschungen bringen.

    Gruß
    raika
    Danke für den Tipp, wenn ich "inout" verwende funktioniert es.
    Aber so recht verstehen tu ichs nicht.

  7. #6
    Registriert seit
    23.11.2004
    Beiträge
    347
    Danke
    2
    Erhielt 28 Danke für 28 Beiträge

    Standard

    Hallo Steve,

    geh einfach mal in "erreichbare Teilnehmer", lösche die FC und schau den Aufruf der FC an.

    Der Aufruf "Call" ist nur ein Makro, der jetzt rot dargestellt wird.
    Der eigentliche Aufruf ist der "UC FC...".

    Bei der Parameterübergabe werden DB-Werte über temporäre Lokalvariablen dem UC-Aufruf übergeben, Merkerbereiche dagegen werden direkt übergeben.

    Dies passiert aber auch nur, wenn der FC-Aufruf grafisch programmiert wurde.

    Beim AWL-Call-Aufruf kannst Du allerdings die Parameter direkt angeben.


    Gruß
    raika
    Rainer Kandziora
    Grollmus GmbH
    Qualität in SIMATIC Schulungen
    E-Mail: mailto:Rainer.Kandziora@grollmus.de
    Internet: http://www.grollmus.de

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

    Standard

    Zitat Zitat von RaiKa Beitrag anzeigen
    Hallo Steve,

    geh einfach mal in "erreichbare Teilnehmer", lösche die FC und schau den Aufruf der FC an.

    Der Aufruf "Call" ist nur ein Makro, der jetzt rot dargestellt wird.
    Der eigentliche Aufruf ist der "UC FC...".

    Bei der Parameterübergabe werden DB-Werte über temporäre Lokalvariablen dem UC-Aufruf übergeben, Merkerbereiche dagegen werden direkt übergeben.

    Dies passiert aber auch nur, wenn der FC-Aufruf grafisch programmiert wurde.

    Beim AWL-Call-Aufruf kannst Du allerdings die Parameter direkt angeben.


    Gruß
    raika
    Aber mir ist noch nicht ganz klar, warum das dann passiert.
    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

  9. #8
    Avatar von Steve81
    Steve81 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.06.2007
    Ort
    In der Pfalz
    Beiträge
    503
    Danke
    72
    Erhielt 77 Danke für 65 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Aber mir ist noch nicht ganz klar, warum das dann passiert.
    Mir leider auch nicht!
    Da macht man "eigentlich" nichts falsch und trotzdem ist das Ergebnis Schrott und man zerbricht sich den Kopf wo das Problem liegt!

    Ist das ein Siemensproblem oder taucht das auch bei anderen Entwicklungsumgebungen auf?

  10. #9
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

    Standard

    Folgendes sagt die Siemens FAQ dazu
    Warum liefert eine Funktion bei den OUT-Parametern sporadisch falsche Rückgabewerte und was ist bei der Parametrierung der Ein- und Ausgangsparameter zu beachten?


    Beschreibung:
    Dieser Beitrag erfasst die folgenden Themengebiete:
    1. Sporadisch falsche Rückgabewerte bei den OUT-Parametern einer Funktion
    2. Versorgung der elementaren Ein- und Ausgangsparameter
    3. Unterschied zwischen Formal- und Aktualparametern
    1. Sporadisch falsche Rückgabewerte bei den OUT-Parametern einer Funktion
    Dieses Verhalten von STEP 7 bezüglich der OUT-Parameter von Funktionen (FCs) kann folgende Ursache haben:
    Gemäß IEC 1161 ist der FC ein Baustein ohne Gedächtnis und im Gegensatz zum FB hat der FC keine statischen Variablen. Die Bausteinparameter werden bei Funktionen und Funktionsbausteinen unterschiedlich abgelegt.
    Unterschied zwischen statischen und temporären Lokaldaten:
    • Statische Lokaldaten sind Operanden, die im Instanz-DB des FBs abgelegt werden. Statische Lokaldaten gehen nach der Beendigung des Bausteins nicht verloren.
    • Temporäre Lokaldaten werden nicht im Instanz-DB, sondern im Lokaldatenstack im Systemspeicher der CPU abgelegt und können nicht über Zyklusgrenzen hinaus verwendet werden. Diese temporären Lokaldaten werden zur Zwischenspeicherung von Ergebnissen verwendet und stehen nur während der Programmbearbeitung zur Verfügung. Die Daten gehen nach Beendigung des Bausteins verloren.
    Darstellung für die interne Arbeitsweise der CPU bzw. der Parameterablage bei FCs
    Die temporären Lokaldaten werden in der Reihenfolge der Deklaration - gemäß dem Datentyp - im Lokaldatenstack abgelegt:
    L Input T LW"1" Initialisierung der Variable L InOut T LW"3" Initialisierung der Variable CALL FC L LW"2" // Initialisierung der Variable wird hier nicht durchgeführt!
    // Der Anwender muss hier sicherstellen, dass die OUTPUT Variable
    // bei jedem Durchlauf des FCs beschrieben wird: T Output L LW"3" T InOut Nach dem Aufruf der FC legt der Editor die Bausteinparameter als bereichsübergreifende Bereichszeiger im Bausteincode ab. Jeder Bausteinparameter benötigt ein Doppelwort Speicherplatz:
    • P# LW"1" INPUT (E,A,M)
    • P# LW"2" OUTPUT (E,A.M)
    • P# LW"3" IN_OUTPUT (E,A,M)
    Der Editor verwendet die temporären Lokaldaten bei der Bausteinparameterübergabe. Je nach Datentyp und Deklarationstyp weist der Zeiger auf den Aktualparameter:
    L LW"2" T Output L LW"3" T InOut
    Im Gegensatz zum Funktionsbaustein gibt es bei der Funktion nur eine "nicht remanente" Speicherung der Daten im Lokaldatenbereich. Dadurch ist eine Auswertung / Zuweisung der Daten beim Aufruf der Funktion zwingend erforderlich.
    ( 3 KB )
    Bild 01
    Durch diese Art der Parameterübergabe bei FC-Aufrufen wird vom Betriebssystem der Lokaldatenstack verbraucht. Dem Anwender steht somit nicht der volle Stack zur Verfügung.
    1. Versorgung der elementaren Ein- und Ausgangsparameter
    Bei der Versorgung von elementaren Formalparametern (z.B. die Datentypen BOOL, BYTE, WORD oder DWORD) der Schnittstelle einer Funktion sind zwei Fälle zu unterscheiden.
    1. Der elementare Formalparameter wird mit einem Merker, einem Ein- oder Ausgang aus dem Prozessabbild oder aus dem Lokaldatenstack (L-Stack) des aufrufenden Bausteines versorgt.
      In diesem Fall arbeitet der Code der Funktion mit einem bereichsübergreifenden Zeiger direkt(!) auf diesen elementaren Aktualparametern (z.B. P#E0.0, P#M0.0).
    2. Der elementare Formalparameter wird mit einer Konstanten oder einem Datenbausteinelement versorgt.
      In diesem Fall wird der Wert des Aktualparameters vor dem Aufruf der Funktion in den L-Stack des aufrufenden Bausteines kopiert. Der Code der Funktion arbeitet dann mit einem bereichsübergreifenden Zeiger auf diesen Lokaldatenbereich des aufrufenden Bausteines.
      Beachten Sie bitte, dass bei Ausgangsparametern keine Initialisierung erfolgt und die Eingangsparameter nicht gelöscht werden. Deshalb ist in diesem Fall darauf zu achten, dass Eingänge nur gelesen und Ausgänge in jedem Zyklus geschrieben werden. Bei Befehlen wie "S" oder "R" wird das Signal nur abhängig vom VKE geschrieben. Deshalb sollten Sie diese Befehle durch die Zuweisung "=" ersetzen oder die Werte vor der Abfrage initialisieren.
      Wenn Sie das Beschreiben der Werte nicht in jedem Zyklus sicherstellen können, sollten Sie einen IN/OUT- Parameter verwenden.
    Abhilfe:
    • Wenn bei einem FC eine OUTPUT-Variable beim Aufruf mit einer DB-Adresse versorgt und diese OUTPUT-Variable im FC anschließend mittels Setz- bzw. Rücksetz-Befehl in einen definierten Zustand gesetzt werden soll, so führt der Aufruf dazu, dass der S- bzw. R-Befehl sich wie ein =-Befehl auswirkt. Die Ursache hierfür liegt darin, dass die beim FC-Aufruf mit DB-Adressen versorgten OUTPUT-Variablen beim Aufruf über den L-Stack versorgt werden. Sollte nun die Bedingung für den R- bzw. S-Befehl nicht mehr erfüllt sein, wird die OUTPUT-Variable nicht mehr beschrieben. Somit wird die DB-Zelle mit einem zufällig in dieser Lokal-Stack-Adresse stehenden Wert versorgt. In diesem Fall empfehlen wir Ihnen als Abhilfe die OUTPUT-Variable durch eine IN/OUT-Variable zu ersetzten. Dadurch wird die Lokal-Stack-Adresse vor dem Aufruf durch den Inhalt der DB-Adresse definiert vorbelegt.
    • Das Verhalten kann auch auftreten, wenn der FC mehrfach aufgerufen wird und/oder DB-Variablen als Aktualwerte benutzt werden. Beachten Sie dabei bitte die Hinweise aus der STEP 7-Onlinehilfe "Vermeiden von Fehlern beim Aufruf von Bausteinen". Die OUT-Parameter in einem FC müssen bei jedem Bausteinaufruf im Zyklus beschrieben werden.
    Weitere Informationen zu diesem Thema finden Sie in der Online-Hilfe auch unter den Suchbegriffen:
    • Vermeidung von Fehlern beim Aufrufen von Bausteinen
    • Zulässige Datentypen beim Übergeben von Parametern.

  11. Folgender Benutzer sagt Danke zu marlob für den nützlichen Beitrag:

    Steve81 (29.02.2008)

  12. #10
    Registriert seit
    22.12.2006
    Beiträge
    43
    Danke
    0
    Erhielt 6 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,


    ich kann dass alles nicht so ganz nachvollziehen.

    Habe mir einen FB und einen FC geschrieben.

    Jeweils mit einem Eingang, Out und InOut.

    Code im FB/FC

    l Eingang
    T Out
    T InOut

    Zusätzlich eine Global DB mit 4 DBD's

    Jetzt rufe ich alles im OB1 auf.

    Getestet habe ich alles mit einer 315.

    Das Ergebnis seht ihr in der VAT.

    Denke hier wird etwas im DB überschrieben, oder in der Vat auf den falschen Datenbereich geschaut.

    Schöne Grüße zum WE
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren DbVsMd  

Ähnliche Themen

  1. Unterschiedliche Ströme am Asynchronmotor
    Von Benjamin im Forum Antriebstechnik
    Antworten: 2
    Letzter Beitrag: 22.06.2010, 17:56
  2. Unterschiedliche Softwareversionen ?
    Von mr__mines im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 02.01.2007, 07:46
  3. Unterschiedliche 315-2DP ?
    Von KartoffeL im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 08.08.2006, 14:30
  4. Unterschiedliche Variablentabellen.
    Von Tigerkroete im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.06.2006, 08:57
  5. unterschiedliche bausteinaufrufe
    Von Markus im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 31.07.2003, 14:01

Lesezeichen

Berechtigungen

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