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

Ergebnis 1 bis 10 von 10

Thema: komisches Verhalten bei FC aufruf und transfer aus diesem

  1. #1
    Registriert seit
    24.10.2009
    Beiträge
    9
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Servus,

    habe ein Problem mit dem Verständniss was in meinem Programm genau passiert. Und zwar habe ich ein FC erstellt wo 3 Realwerte eingelesen werden, addiert und dann durch 3 dividiert und dann erfolgt die Ausgabe. Diese Ablaufstruktur ist abhängig von einem Wandlung-Start-Signal (ENABLE). Diese FCs werden im OB1 Aufgerufen.

    http://img651.imageshack.us/i/fc1.png/

    Zum Testen sind die Eingänge mit 1,2,3 bzw. 4,5,6 als REAL geladen. Somit sollte beim ersten FC Aufruf ein Mittelwert von 2 und beim zweiten ein Mittelwert von 5 rauskommen.

    Wenn ich das Ergebniss auf ein MW Transferiere dann verhält sich das Programm so wie ich das erwarte. MD12 bzw MD 28 enthalten das Ergebniss.

    ENABLE ist auf 1
    http://img138.imageshack.us/i/mwaufrufe00ein.png/
    ENABLE ist auf 0
    http://img97.imageshack.us/img97/579...frufe00aus.png

    Bis jetzt ist alles Super und Verständlich. Nun habe ich zusätzlich ein DB10 als Globaldatenbaustein erstellt. Dort zwei Variablenfelder von Typ REAL erstellt und schreibe meine Ergebnisse dort rein.

    ENABLE auf 1
    http://img26.imageshack.us/img26/474...frufe00ein.png
    ENABLE auf 0
    http://img202.imageshack.us/img202/9...frufe00aus.png

    Und genau da liegt mein Problem. ENABLE auf 1 -> FCs werden ständig durchlaufen - das Transferergebniss stimmt. Sobalt ich den ENABLE auf 0 setze schreibt mir die SPS auf DB10.DBD0 das Ergebniss von DB10.DBD4 (zweiter FC Aufruf) rein. Beim MD Transfer pasiert dies nicht - das Programm arbeitet so wie ich es erwarte.


    Wo liegt der Unterschied zw Transfer auf ein MD und einen DBx.DBDx ? Was läuft hier schief?

    P.S die Antwort von Siemens schreib ich hier besser nicht rein - könnte etwas peinlich sein
    Zitieren Zitieren komisches Verhalten bei FC aufruf und transfer aus diesem  

  2. #2
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von Tampapdex Beitrag anzeigen
    P.S die Antwort von Siemens schreib ich hier besser nicht rein - könnte etwas peinlich sein
    Würde mich aber schon interessieren. Für wenn wäre das peinlich?

    Zu Deiner Frage:
    Zitat Zitat von Tampapdex Beitrag anzeigen
    Wo liegt der Unterschied zw Transfer auf ein MD und einen DBx.DBDx ? Was läuft hier schief?
    Leider sieht man es nicht, aber ich tippe jetzt mal das der Ausgang von Deiner FC als OUT deklariert ist.
    Und genau da ist der Unterschied zwischen MW und DB Wort.
    Du kannst ein Merkerwort trotzdem von Außen beeinflussen auch wenn es über ein OUT zugewiesen wird, bei einem Datenwort geht das nicht.
    Ersetze das OUT durch ein IN_OUT und beide verhalten sich gleich.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  3. #3
    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

    Paule hat recht, aber ich ergänze mal noch mit ein paar Erklärungen aus der Step7-Hilfe, denn das erklärt dann, warum der "falsche" Wert im DBD 0 landen kann.

    Funktionen (FC)Funktionen (FC)
    Zuordnen von Aktualparametern zu Formalparametern
    Ein Formalparameter ist ein Platzhalter für den "tatsächlichen" Parameter, den Aktualparameter. Aktualparameter ersetzen beim Aufruf einer FC die Formalparameter. Sie müssen den Formalparametern einer FC immer Aktualparameter zuordnen (z. B. dem Formalparameter "Start" einen Aktualparameter "E3.6"). Die Eingangs-, Ausgangs- und Durchgangsparameter, die von der FC verwendet werden, werden als Pointer auf die Aktualparameter des Codebausteins gespeichert, der die FC aufgerufen hat.
    Wichtiger Unterschied bei Ausgangsparametern von FC und FB
    In Funktionsbausteinen (FB) wird beim Zugriff auf Parameter die Kopie des Aktualparameters im Instanz-DB verwendet. Wird beim Aufruf eines FB ein Eingangsparameter nicht übergegeben bzw. im Baustein ein Ausgangsparameter nicht beschrieben, so werden die im Instanz-DB noch vorhandenen älteren Werte weiter verwendet (Instanz-DB = Gedächtnis des FB).
    Funktionen (FC) haben kein Gedächtnis. Die Versorgung der Formalparameter ist deshalb im Gegensatz zum FB nicht optional, sondern zwingend erforderlich. Der Zugriff auf FC-Parameter erfolgt über Adressen (bereichsübergreifende Zeiger). Wird als Aktualparameter ein Operand aus dem Bereich Daten (Datenbaustein) oder eine lokale Variable des rufenden Bausteins verwendet, wird für die Parameterübergabe eine Kopie des Aktualparameters in den Lokaldaten des rufenden Bausteins temporär gespeichert.


    Achtung
    Wird in einem solchen Fall ein OUTPUT Parmeter in einem FC nicht beschrieben, können die ausgegebenen Werte zufällig sein!
    Der für die Kopie bereitgestellte Bereich in den Lokaldaten des rufenden Bausteins wird mangels Zuweisung an den OUTPUT Parmeter nicht beschrieben und bleibt somit unverändert. Damit wird zufällig der in diesem Bereich stehende Wert ausgegeben, da Lokaldaten nicht automatisch mit z. B. 0 vorbelegt sind.

    Beachten Sie deshalb Folgendes:

    • Initialisieren Sie wenn möglich OUTPUT Parameter.
    • Setze- und Rücksetze-Befehle sind VKE-abhängig. Wird mit diesen Befehlen der Wert eines OUTPUT Parameters ermittelt, wird bei VKE = 0 kein Wert gebildet.
    • Achten Sie darauf, dass - unabhängig von allen möglichen Programmpfaden innerhalb des Bausteins - die OUTPUT-Parameter auf jeden Fall beschrieben werden. Beachten Sie hierbei insbesondere Sprungbefehle sowie den ENO-Ausgang in KOP und FUP. Denken Sie auch an BEB und die Wirkung der MCR-Befehle.
    Geändert von Ralle (14.03.2010 um 15:53 Uhr)
    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

  4. #4
    Tampapdex ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.10.2009
    Beiträge
    9
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Paule Beitrag anzeigen
    Würde mich aber schon interessieren. Für wenn wäre das peinlich?

    Zu Deiner Frage:

    Leider sieht man es nicht, aber ich tippe jetzt mal das der Ausgang von Deiner FC als OUT deklariert ist.
    Und genau da ist der Unterschied zwischen MW und DB Wort.
    Du kannst ein Merkerwort trotzdem von Außen beeinflussen auch wenn es über ein OUT zugewiesen wird, bei einem Datenwort geht das nicht.
    Ersetze das OUT durch ein IN_OUT und beide verhalten sich gleich.


    Für Siemens - Die Antwort beinhaltete das so ein Fehler schon mal vorkommen kann da REAL Zahlen gerundet werden ...

    Werde mich mal auseinandersetzen mit OUT und IN_OUT - ganz klar ist mir das nicht - mal reinlesen - aber erstmal vielen Dank

  5. #5
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    da du bei deinem test wahrscheinlich nur diese beiden bausteine in der CPU hast sind die lokaldaten des ausgangs des ersten aufrufs zufällig die selben, die beim letzten durchlauf des zweiten bausteins geschrieben wurden. fügst du einen dritten aufruf des selben bausteins ein ohne andere bausteine einzufügen, wird das ergebnis dieses bausteins übertragen...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  6. #6
    Tampapdex ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.10.2009
    Beiträge
    9
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    So ich nochmal


    Paule hatte natürlich recht das der Ausgabewert per OUT ausgegeben wurde
    http://img22.imageshack.us/i/vorherf.png/

    jetzt hab ich das auf IN_OUT geändert
    http://img17.imageshack.us/i/nacher.png/


    läuft 1a aber sieht nicht so schön aus (nicht auf der rechten Seite - beim ersten Blick siehts wie ein Eingang aus)
    http://img697.imageshack.us/i/gesammt.png/


    ------------------


    Du kannst ein Merkerwort trotzdem von Außen beeinflussen auch wenn es über ein OUT zugewiesen wird, bei einem Datenwort geht das nicht.
    Das ist mir nicht ganz klar. Ein MD kann ich von Aussen beschreiben so wie ich lustig bin - das was im Programmablauf als letztes steht wird dann ausgegeben (falls es ausgegeben werden soll). Aber auch in einem GlobalDB Aufruf - DBx.DBDx kann ich doch rumschreiben und rumsauen wie ich will oder gibt es da etwas was ich übersehe?


    Bitte nicht schlagen lerne SPS noch


    @vierlagig

    japp hast recht - hatte aber schon mit den zwei Bausteinen genug Verwirrung - ein dritter hätte das Chaos verursacht

  7. #7
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von Tampapdex Beitrag anzeigen
    Das ist mir nicht ganz klar. Ein MD kann ich von Aussen beschreiben so wie ich lustig bin - das was im Programmablauf als letztes steht wird dann ausgegeben (falls es ausgegeben werden soll). Aber auch in einem GlobalDB Aufruf - DBx.DBDx kann ich doch rumschreiben und rumsauen wie ich will oder gibt es da etwas was ich übersehe?
    Klar kannst Du da auch "rumsauen" wie Du willst.
    Aber wenn das in DBW an einer Out hängt wirst Du nicht viel erfolg mit dem "rumschreiben" haben.

    PS: Lieber schaut es nicht so gut aus, aber funktioniert.
    Geändert von Paule (14.03.2010 um 16:48 Uhr) Grund: Was vergessen
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  8. #8
    Tampapdex ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.10.2009
    Beiträge
    9
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Irgendwie macht es nicht klick bei mir. Hab jetzt alles durchgeschaut was ich so an Material da habe und sehe keinen Untershied zw. schreiben in ein MD und DBx.DBDx . Für mich sind das derzeit beides Speicherbereich in der CPU wo einfach was reingeschrieben wird.

    Somit erklährt sich nicht für mich wieso der Transfer von einem OUT in einem FC mit einem MD klappt und mit einem DBx.DBDx nicht. Nach meinem empfinden und derzeitigem Verständnis müsste das Programm bei beiden Variablenarten gleich reagieren.

    Bei Benutzung eines IN_OUTs klappt es mit beidem.

    Hätte jemand die Lust mir das genauer zu erklähren? Würde mich freuen da ich gerne auch Verstehe was ich anwende. Mir würden auch paar Stichworte reichen bzw. Ort wo ich nach diesen suchen kann - will ja nicht alles vorgekaut haben - wobei hmm


    P.S Wie man das Problem umgeht ist mir nun klar aber ich würde verstehen wollen wie es zu diesem kommt.

  9. #9
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.727
    Danke
    314
    Erhielt 1.519 Danke für 1.282 Beiträge

    Standard

    Dieses Dokument aus den Siemens-FAQ sollte dich ein wenig aufklären:

    MzIyOTY1MjMxNjc1NDI0Mzc1AAAA_189227_1_inter_WW_2005-11-16.pdf

    Die Kurzform:
    Auf MC7-Ebene wird der Pointer von E A M L DBW, DBD ... direkt übergeben.
    Sobald ein voll qualifizierter DB-Zugriff stattfindet wird der Ausgang in einem (nicht sichtbaren) Lokaldatenwort gespeichert,
    und aus diesen dann nach dem eigentlichen Bausteinaufruf mittels der Sequenz
    Auf DB
    L LD ..
    T DBD ...
    in den DB übertragen.

    Würdest du jetzt händisch VOR dem FC-Aufruf deinen DB öffnen, an die OUT-Var des Bausteins
    lediglich DBD0 oder so schreiben, würde das auch wieder funktionierten.

    Nun ist es aber so, das dieses LW/LD aber von JEDEM Bausteinaufruf verwendet wird.

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  10. Folgender Benutzer sagt Danke zu MSB für den nützlichen Beitrag:

    Tampapdex (14.03.2010)

  11. #10
    Tampapdex ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.10.2009
    Beiträge
    9
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    danke sehr!

Ähnliche Themen

  1. Komisches verhalten Analogeingangskarte
    Von c0oNe im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 27.07.2011, 16:54
  2. S7 200 komisches verhalten mit Ausgängen
    Von Bender25 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 11.05.2011, 20:21
  3. Komisches Verhalten Analoge Eingangskarte.
    Von vollmi im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 11.05.2010, 20:11
  4. Antworten: 9
    Letzter Beitrag: 28.08.2008, 13:56
  5. TD17 an 315 komisches Verhalten
    Von Krumnix im Forum HMI
    Antworten: 3
    Letzter Beitrag: 29.10.2007, 18:56

Lesezeichen

Berechtigungen

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