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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: Beckhoff Twincat PLC - Adressfreie Variablen definieren / retain-persistente Var.

  1. #11
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Gerri Beitrag anzeigen
    sind das nicht temporäre Variablen, also nur innerhalb dieses Prg gültig? Ich rede von Globalen Variablen die im ganzen Projekt bearbeite werden können.

    Vielleicht bin ich auch zu sehr von Step 7 beeinflusst.
    ???

    Auch für einen Step7 Programmierer sollten die Begriffe:

    "lokale oder globale" und "temporäre oder statische" Variable klar sein.

    ----
    Zugriff:

    Lokal: Sind nur innerhalb des einen PRGs/FCs/FBs zugänglich (bzw. sollten es sein)

    Global: Ja die sind eben von überall zugänglich.

    ----
    Lebensdauer:

    Temporär: Nur für den einen Aufruf gültig. Also im nächsten SPS Zyklus sind die Daten die man vorher darein geschrieben hat futsch. Klassisches Beispiel die lokalen Variablen von FCs.

    Statisch: Diese Variablen behalten den Wert den man ihnen zugewiesen hat auch für die folgenden SPS Zyklen.

    ----

    Variablen werden in den Köpfen der PRGs/FBs/FCs oder eben wie bereits weiter oben (von Nils) beschrieben im Bereich der globalen Variablen deklariert.

    ----

    Einige Unterschiede zu Siemens:
    Es gibt PRGs also Programme mit lokalen statischen Variablen ohne das man davon eine Instanz bilden muss.
    Variablen müssen keiner Adresse zu geordnet werden. Das macht das System selbst.
    Eine Instanz eines FBs legt man genau so an wie eine Variable.
    Man kann Symbolische Konstanten verwenden die man wärend der Laufzeit nicht verändern kann.
    If you open your Mind too much, your Brain will fall out.

  2. #12
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Und zu Retain und Persistent hier mal was aus der Hilfe:
    Angehängte Grafiken Angehängte Grafiken
    If you open your Mind too much, your Brain will fall out.

  3. #13
    Gerri ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.01.2008
    Ort
    Wien
    Beiträge
    772
    Danke
    136
    Erhielt 39 Danke für 35 Beiträge

    Standard

    temporäre und statische Variablen sind in Step7 lokale Variablen.

    Da ich bis Jetzt in TwinCat keine Instanzen benötigt habe, war mir nicht bekannt ob bzw. wie man diese definiert.

    Das TwinCat den Wert der lokalen Variablen über den aktuellen Zyklus hinaus behält war mir nicht klar, find ich aber gut.

    "Variablen werden in den Köpfen der PRGs/FBs/FCs oder eben wie bereits weiter oben (von Nils) beschrieben im Bereich der globalen Variablen deklariert."

    -> In den Köpfen also lokal, im Bereich der globalen Variablen als global (macht ja auch Sinn so)
    irgendetwas ist ja immer...
    ING. Gerald Miedler

  4. #14
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    @ zotos:
    Wo deklarierst du in TwinCAT bitte "Temporäre" oder "Statische" Variablen?
    Das wäre mir neu.

    @Gerri:
    Das TwinCat den Wert der lokalen Variablen über den aktuellen Zyklus hinaus behält war mir nicht klar, find ich aber gut.
    Nicht dass du das falsch verstehst. Die Variablen (generell ALLE Variablen, außer CONSTANT) behalten solange ihren Wert, bis ihnen ein anderer Wert zugewiesen wird, oder z.B. durch einen Reset die Werte zurückgesetzt werden.
    Das Variablen von Funktionen jedes Mal ihren Wert verlieren ergibt sich aus der Ausführungsvorschrift für Funktionen selbst (keine internen Zustände).

  5. Folgender Benutzer sagt Danke zu trinitaucher für den nützlichen Beitrag:

    Gerri (19.02.2009)

  6. #15
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Zitat Zitat von trinitaucher Beitrag anzeigen
    @ zotos:
    Wo deklarierst du in TwinCAT bitte "Temporäre" oder "Statische" Variablen?
    Das wäre mir neu.
    Temporär:
    Die lokalen Daten im Kopf eines FCs sind temporäre Variablen.

    Statisch:
    Die lokalen Variablen der FBs und PRGs so wie alle globalen Variablen sind statische Variablen.
    If you open your Mind too much, your Brain will fall out.

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

    Gerri (19.02.2009)

  8. #16
    Registriert seit
    13.01.2007
    Beiträge
    304
    Danke
    35
    Erhielt 29 Danke für 25 Beiträge

    Standard

    Lokal: Sind nur innerhalb des einen PRGs/FCs/FBs zugänglich (bzw. sollten es sein)
    @Zotos,
    hier muss ich nun mal genauer nachfragen. Du sagst "sollten es sein". Man kann jedoch auch auf lokale Variablen überall zugreifen, z.B. in der Form PRG_xxxx.MeineLokaleVar

    Ohne eine Diskussion loszubrechen ob man dies tun soll, ist meine Frage, ob das ein Fehler ist (von Codesys bzw. TwinCAT) oder so gewollt ist.

    Egal ob gewollt oder "programmiertechnisch schön", manchmal ist es doch sehr praktisch; ich hasse jede Variable immer GLOBAL anlegen zu müssen, entspricht doch eher den klassischen Programmiersystemen.

    Danke für Deine (Eure) Rückmeldungen

  9. #17
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Zugreifen kannst du auf diese "internen" Variablen schon, aber ob es sinnvoll ist, sollte man sich überlegen.

    Denn du wirst (logischerweise) immer den Wert dort vorfinden, der bei der letzten Ausführung des FBs oder PRGs dort hineingeschrieben wurde. Dann muss man sehen, wie ein solcher Zugriff das Verhalten beeinflusst. Insbesonders, wenn man schreibend zugreift.

    Globale Variablen sind halt überall im Projekt gültig und können nur einmalig vorkommen.
    Ein Aufruf ala FB.Variable ist immer instanzgebunden. Die Variable FB1.Variable ist dann natürlich ungleich FB2.Variable.

    Wenn man auf globale Variablen verzichten möchte, aber eine ähnliche Funktionsweise benötigt, kann man auch VAR_IN_OUT verwenden. Man ist gezwungen diesen Ein-/ausgängen einen Wert zuzuweisen, hat aber quasi nur einen Speicherbereich. Ähnlich wie Pointer.
    Geändert von trinitaucher (20.02.2009 um 18:39 Uhr)

  10. #18
    Registriert seit
    13.01.2007
    Beiträge
    304
    Danke
    35
    Erhielt 29 Danke für 25 Beiträge

    Standard

    @trinitraucher
    Schreibend zugreifen geht ohnehin nur, wenn die Variablen als VAR_INPUT oder wie du richtig beschreibst als VAR_IN_OUT deklariert sind. (außer über Pointer, damit geht es immer)
    Aber eigentlich ist die "lokale" Variable eigentlich keine "richtige lokale" Variable? (siehe vorheriges Zitat von Zotos)
    Ich kenne lokale (private) Variablen u.a. von Hochsprachen früherer Zeiten. Die waren wirklich lokal, und außerhalb unerreichbar.
    Ob's schön oder sinnvoll ist, sei dahingestellt.

    Globale Variablen sind halt überall im Projekt gültig und können nur einmalig vorkommen.
    Variablen wie PRG_xxxx.MeineLokaleVariable können auch nur einmal vorkommen

    Ein Aufruf ala FB.Variable ist immer instanzgebunden. Die Variable FB1.Variable ist dann natürlich ungleich FB2.Variable.
    Damit ist die Variable auch einmalig...

    Schönen Abend

  11. #19
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Zitat Zitat von MarkusP Beitrag anzeigen
    @Zotos,
    hier muss ich nun mal genauer nachfragen. Du sagst "sollten es sein". Man kann jedoch auch auf lokale Variablen überall zugreifen, z.B. in der Form PRG_xxxx.MeineLokaleVar

    Ohne eine Diskussion loszubrechen ob man dies tun soll, ist meine Frage, ob das ein Fehler ist (von Codesys bzw. TwinCAT) oder so gewollt ist.

    Egal ob gewollt oder "programmiertechnisch schön", manchmal ist es doch sehr praktisch; ich hasse jede Variable immer GLOBAL anlegen zu müssen, entspricht doch eher den klassischen Programmiersystemen.
    ...
    Ohne daraus eine groß Diskussion zu machen. Das muss wohl jeder für sich entscheiden ob es Sinnvoll ist oder nicht und zu welchem Grad man dies verwendet.

    Ich selbst nutze den direkten Zugriff auf interne Variablen nicht gerne. Aber gerade bei kleinen Tests greif ich dann doch darauf zurück.

    Die Frage ist doch wie übersichtlich ist das und wer findet sich da noch zurecht. Auf die Input und Output Variablen greife ich gerne direkt zu aber dann im unmittelbaren Zusammenhang so das man das auch direkt sehen kann.

    Ich denke nicht das es ein Fehler in CoDeSys ist. Zumal ja unterschieden wird ob man Schreibrechte hat oder nicht.
    Eine Ausnahme ist da die Visu die auch direkt auf die Variablen zwischen VAR udn END_VAR schreibend zugreifen kann. Ich habe das auch schon verwendet und finde es trotzdem nicht gut. In produktiven Systemen nutze ich da eine Koppelstruktur.

    Ich denke es gibt da kein schwarz oder weiß aber helles und dunkles grau.

    Alles Geschmackssache.
    If you open your Mind too much, your Brain will fall out.

  12. #20
    Registriert seit
    13.01.2007
    Beiträge
    304
    Danke
    35
    Erhielt 29 Danke für 25 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Eine Ausnahme ist da die Visu die auch direkt auf die Variablen zwischen VAR udn END_VAR schreibend zugreifen kann. Ich habe das auch schon verwendet und finde es trotzdem nicht gut. In produktiven Systemen nutze ich da eine Koppelstruktur.
    Dass die Visu hier eine Ausnahme darstellt, habe ich auch schon bemerkt, stellt schon ein gewisses Risiko dar, Werte ungewollt zu überschreiben. Ist also irgendwie nicht ganz durchgängig.

    Danke für deinen Beitrag,

    Schönes WE

Ähnliche Themen

  1. XML Data Server vs. persistente Variablen
    Von tom_x im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 28.04.2011, 07:53
  2. PERSISTENTe Variablen
    Von gamble im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 26.04.2011, 08:50
  3. BC3150 Retain Variablen nicht remanent
    Von maximb im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 16.07.2009, 13:31
  4. Fragen zu RETAIN und PERSISTENT (TwinCAT)
    Von suud im Forum CODESYS und IEC61131
    Antworten: 20
    Letzter Beitrag: 13.11.2008, 15:18
  5. Retain persistent Variablen in persist.dat ?
    Von dietere im Forum Sonstige Steuerungen
    Antworten: 0
    Letzter Beitrag: 17.01.2008, 13:30

Lesezeichen

Berechtigungen

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