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

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 33

Thema: Verständnisfrage zu TEMP-Variablen

  1. #1
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo liebes Forum,

    ich übe grad a bisserl mit TEMP-Variablen und wollte folgendes einfache Beispiel aus dem Link Flankenauswertung in Step 7 (von Harald) ausprobieren...

    Wenn ich schreibe

    Code:
          L     MW   202
          INVI  
          L     MW   200
          T     MW   202
          UW    
          U     <>0
          S     M     14.7
    funktioniert soweit alles wie gewollt; d.h. der Merker lässt sich rücksetzen, nachdem er gesetzt wurde.

    Wenn ich nun schreibe

    Code:
          L     #speicher
          INVI  
          L     MW   200
          T     #speicher
          UW    
          U     <>0
          S     M     14.7
    und #speicher als TEMP im FC deklariert wurde, so lässt sich der Merker nur dann rücksetzen, wenn der Vergleich tatsächlich Null ist.

    Woran liegt das; warum funktioniert hier die Sache mit einer Temp-Variablen nicht?

    Es muss doch Nichts über den Zyklus hinaus gespeichert werden...
    LG
    spirit
    Zitieren Zitieren Verständnisfrage zu TEMP-Variablen  

  2. #2
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Und wie ist #speicher initialisiert? Dieser Wert liegt auf dem Stack und hat einen zufälligen Inhalt. Und somit macht die L-Operation keinen Sinn. Und die T-Opoeration auch nicht, da das Ergebnis nach dem FC-Aufruf im elektronischen Orbit landet.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  3. #3
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Danke Rainer,

    aber das verstehe ich irgendwie nicht! Ich rufe doch die FC auf und Lade die Temp-Variable und beschreibe diese im gleichen Zyklus auch wieder. Nach dem FC-Aufruf ist doch schon längst alles vorüber...

    Habe dazu auch ein Zitat von Larry gefunden:

    Eine Temp-Variable ist sinnvoll dann eingesetzt, wenn man sie z.B. zur Bildung eines Zwischen-Ergebnisses (ob nun Binär oder Dezimal ist unerheblich) verwendet, das man dann in der weiteren Folge des Bausteins (also nach der Wert-Zuweisung) weiter verwenden möchte.

    Genau das passiert doch hier, oder?
    LG
    spirit

  4. #4
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Du verwendenst den Inhalt einer Temp-Variablen (L #speicher) ohne dass diese initialisiert wird. Was erwartest Du, dass hier passieren soll?
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

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

    Eine Temp-Variable ist nur in dem Baustein gültig, in dem sie deklariert wurde.
    Bevor du sie im Baustein verwendest, mußt du sie initialisieren, denn es steht sonst ein zufälliger Wert darin.

    Das bedeutet, wenn der Baustein aufgerufen wird, wird für die Temp-Var ein Bereich auf dem lokalen Stack belegt. Dort kann vorher ein anderer Baustein Werte zwischengelagert haben, also nehmen die Temp-Var des aktuellen Bausteins, diese "zufälligen" Werte an. Wenn du dann die Temp-Var als Wwischenspeicher im Baustein nutzt, mußt du also zuerst einmal etwas darauf schreiben. Ist der Baustein bearbeitet, wird der lokale Stack wieder freigegeben, der nächste Baustein kann ihn nutzen.

    Achtung, wenn kein anderer Baustein auf den lokalen Stack schreibt (z.Bsp. nur ein Baustein im Test-Programm) kann es sogar funktionieren, weil der Wert im Stack von keinem anderen Baustein überschrieben wird. Das ändert sich dann aber garantiert in einem komplexeren Programm.
    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

  6. #6
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Eine Temp-Variable ist nur in dem Baustein gültig, in dem sie deklariert wurde.
    Bevor du sie im Baustein verwendest, mußt du sie initialisieren, denn es steht sonst ein zufälliger Wert darin.

    Das bedeutet, wenn der Baustein aufgerufen wird, wird für die Temp-Var ein Bereich auf dem lokalen Stack belegt. Dort kann vorher ein anderer Baustein Werte zwischengelagert haben, also nehmen die Temp-Var des aktuellen Bausteins, diese "zufälligen" Werte an. Wenn du dann die Temp-Var als Zwischenspeicher im Baustein nutzt, mußt du also zuerst einmal etwas darauf schreiben.
    Ok, das verstehe ich!

    Wenn ich das jetzt so mache, dann steht in der Temp-Variable ja kein zufälliger Wert mehr drin:

    Code:
          L     0
          T     #speicher          
    
          L     #speicher
          INVI  
          L     MW   200
          T     #speicher
          UW    
          U     <>0
          S     M     14.7

    Geht aber trotzdem nicht.

    Frage: Wie müsste ich das dann umschreiben, dass ich #speicher als TEMP so an dieser Stelle einsetzen kann?
    LG
    spirit

  7. Folgender Benutzer sagt Danke zu spirit für den nützlichen Beitrag:

    vierlagig (22.05.2014)

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

    Standard

    Warum willst du absolut das #Speicher ein TEMP ist ??
    Ein TEMP ist per Definition kein "Speicher" wie Ralle es ausführlich erklärt hat.

    Lösung 1: #speicher als IN_OUT deklarieren, anstatt TEMP. Dann muss der aufrufende Baustein den #speicher Pin ein Variabel zuweisen (und kein TEMP !).

    Lösung 2: Anstatt FC, ein FB programmieren, und #speicher als STAT deklarieren.
    Jesper M. Pedersen

  9. #8
    Registriert seit
    05.09.2011
    Beiträge
    176
    Danke
    43
    Erhielt 28 Danke für 20 Beiträge

    Standard

    ... Mal abgesehen davon ob temp. Variable oder nicht aber so hat das Harald sicher nicht aufgeschrieben! Du schreibst immer den Inhalt von deinem MW 200 in deinen Speicher und das vor der Wortverknüpfung! Der Sinn dahinter ist ja dass du im Speicher dann deine geflankten Bits stehen hast .

  10. #9
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von JesperMP Beitrag anzeigen
    Warum willst du absolut das #Speicher ein TEMP ist ??
    Das ist nur eine Übung! Ich wollte das mit den TEMP-Var einfach nur mal verstehen...

    Mir ist es klar, dass es auch über IN_OUT geht. Hätte es halt gerne über Temp versucht. Insofern muss es doch auch irgendwie über Temp machbar sein, oder nicht?
    LG
    spirit

  11. #10
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von nutellahase Beitrag anzeigen
    ... Mal abgesehen davon ob temp. Variable oder nicht aber so hat das Harald sicher nicht aufgeschrieben! Du schreibst immer den Inhalt von deinem MW 200 in deinen Speicher und das vor der Wortverknüpfung! Der Sinn dahinter ist ja dass du im Speicher dann deine geflankten Bits stehen hast .
    Nun, der Code funzt eigentlich schon; d.h. immer wenn ein neues Bit hinzukommt kann gemeldet werden.

    Es geht halt nur nicht, wenn das mit dem #speicher über Temp gemacht wird...
    LG
    spirit

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 11.03.2014, 10:04
  2. Frage zu Temp-Variablen...
    Von spirit im Forum Simatic
    Antworten: 66
    Letzter Beitrag: 07.02.2013, 12:14
  3. [B&R AS] Verständnisfrage Variablen
    Von b0zzen im Forum Sonstige Steuerungen
    Antworten: 2
    Letzter Beitrag: 29.09.2010, 20:52
  4. Temp Variablen
    Von centrox im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 23.02.2009, 16:05
  5. IN Variablen nach TEMP
    Von neuer_user im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 06.10.2006, 16:26

Lesezeichen

Berechtigungen

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