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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: statische und temporäre Lokalvariblen

  1. #11
    Registriert seit
    23.02.2008
    Beiträge
    45
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das ist ein ziemlich langes Programm (Ablaufsteuerung)
    Es werden dem Ablauf nach die Hilfsmerker gesezt und wieder zurückgesetz.
    (15 Stück alle temporär).

  2. #12
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Wolflesch Beitrag anzeigen
    Das ist ein ziemlich langes Programm (Ablaufsteuerung)
    Es werden dem Ablauf nach die Hilfsmerker gesezt und wieder zurückgesetz.
    (15 Stück alle temporär).
    Entweder wird der gespeicherte Wert verwendet. Dann ist es FALSCH, obwohl es funktionieren KANN, solange kein weiterer Baustein Lokalvariablen nutzt.

    Oder der gespeicherte Wert wird niemals verwendet, sondern innerhalb des Bausteins auf jeden Fall überschrieben, wie im folgenden Beispiel:
    Code:
    U E 0.0
    U E 0.1
    S L 0.0
    UN E0.0
    ON E0.1
    R L 0.0
    Das würde funktionieren, ist aber sehr schlechter Code da
    Code:
    U E 0.0
    U E 0.1
    = L 0.0
    dasselbe bewirkt.

    Wenn ich mich nicht sehr irre, gibt es keine weitere Möglichkeit, wie dieses Programm aussehen könnte. Daher vermute ich daß es ein einfach Beispiel dafür ist, daß man Blödsinn auch drucken und gedruckt verkaufen kann.

    Der Verzicht auf R und S-Anweisungen auf Lokalvariablen ist aber auch keine Garantie für den richtigen Umgang mit Lokalvariablen. Der folgende Code speichert auch einen Zustand und ist daher FALSCH:
    Code:
    U E 0.0  // Starttaster
    O L0.0   // Selbsthaltung
    UN E 0.1 // Stoptaster
    = L 0.0  // ein
    Geändert von Zottel (27.02.2008 um 21:34 Uhr)

  3. #13
    Registriert seit
    09.06.2007
    Beiträge
    398
    Danke
    25
    Erhielt 46 Danke für 44 Beiträge

    Standard

    @ zottel
    Bitte Lokalvariablen in temporäre (Lokal-)variablen ändern. Statische oder IEC-Lokalvariablen können schließlich durchaus speichern.

  4. #14
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Ludewig Beitrag anzeigen
    @ zottel
    Bitte Lokalvariablen in temporäre (Lokal-)variablen ändern. Statische oder IEC-Lokalvariablen können schließlich durchaus speichern.
    Ja, natürlich!

  5. #15
    Registriert seit
    23.02.2008
    Beiträge
    45
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja, in dem Programm wird nur der FB aufgerufen.Ich wollte noch fragen wie groß der Lokaldatenspeicher ist und ob man die Adresse frei wählen kann z.B. L20.0.
    Gehe ich recht von der Annahme aus, das der FB nur parametisiert einen Vorteil gegenüber dem FC hat, sonst kann man ja einfach Merker verwenden.
    Geändert von Wolflesch (28.02.2008 um 19:45 Uhr)

  6. #16
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Wolflesch Beitrag anzeigen
    Ja, in dem Programm wird nur der FB aufgerufen.Ich wollte noch fragen wie groß der Lokaldatenspeicher ist
    Ziemlich groß, gemessen in Bits. Bin nicht sicher, aber ich habe so 2kB im Kopf..
    ...und ob man die Adresse frei wählen kann z.B. L20.0.
    Ja, kann man. Aber dabei gibt es die Gefahr, daß es mit automatisch erzeugten Lokalvariablen kollidiert. Die Parameter an einen FC werden über den Lokaldatenstack übergeben. Die Definition von Temp-Variablen benutzt ihn ebenfalls. Wenn keine starken Argumente dagegen sprechen, sollte man TEMP-Variablen reservieren. Vorteil: step7 paßt ihre Lage an, wenn man Parameter oder weitere TEMP-Variablen einfügt.
    Gehe ich recht von der Annahme aus, das der FB nur parametisiert einen Vorteil gegenüber dem FC hat, sonst kann man ja einfach Merker verwenden.
    Man kann einfach Merker verwenden. Man hat das zu S5-Zeiten immer getan. Vorteil von FB und Instanzdatenbaustein:
    - Du entwirfst eine Baustein zur Motorsteuerung. Der muß irgendwas über Aufrufgrenzen hinweg speichern.
    - Du hast mehr als einen gleichartigen Motor, den du mit diesem Baustein steuern willst.
    - Nun kannst du einen Instanz-DB pro Motor erzeugen und der speichert die jeweiligen Dinge für Motor 1,2,3..

    Zu S5-Zeiten wäre das nicht gegangen, du hättest es so machen müssen:
    - Du gibst alle Merker einzeln als Parameter beim Bausteinaufruf an. Die entsprechenden Befehle zum Zugriff auf Parameter sind auf der S5 erheblich langsamer und du hast bei jedem Aufruf eine eventuell lange Parameterliste.
    - Du machst Kopien von dem Baustein und paßt die Merker mit der Hand an.
    - Du kopierst aus einem DB auf die immer gleichen Merker, rufst den Baustein auf und kopierst alles zurück. Ziemlich viel Code und Handarbeit.
    - Du öffnest einen DB vor dem Aufruf und arbeitest im Baustein mit Bits aus dem DB statt Merkern. Das kommt dem Instanz-DB ziemlich nahe. Nachteil: Du kannst im Baustein keine weiteren DBs benutzen, sonst kannst du nicht zurück zum Daten-DB, denn du hast keine Information, welcher DB offen war.
    - Du gibst dem Baustein die DB-Nummer als Parameter mit. Das ist ziemlich genau das, was beim Instanz-DB auch passiert. Allerdings bist du selbst dafür verantwortlich, daß der DB die passende Größe und Struktur hat. Darum kümmert sich Step7 beim Erstellen.

    Temporäre Lokalvariablen haben noch einen anderen Zweck: Sie sind nützlich, wenn du innerhalb eines Bausteins Zwischenergebnisse bilden wilst. Bei Bit-Logik ist das manchmal nützlich, um die Programmlänge zu verkürzen und oft, um das Verständnis zu erleichtern:
    Code:
    U E0.0  // Sicherheitslichtvorhang frei
    U E0.1 // Tuer zu
    U E0.2 // Schleuse zu
    = #Sicherheit gegeben // Zwischenergebnis in Lokalvariable
    Danach können alle Ausgänge mit "Sicherheit gegeben" und-verknüpft werden.
    Noch drastischer nützen Lokalvariablen bei Rechnungen, z.B. Analogwertverarbeitung:
    Code:
    L PEW 0 // Potistellung
    ITD
    DTR
    L 26748.0
    /R
    L 100.0
    *R
    T #Potistellung  //Potistellung in Prozent
    L PEW 2 // Drehzahl
    ... // verschiedene Rechenschritte
    T #Drehzahl  //Drehzahl in UpM
    
    L #Potistellung
    L #Drehzahl
    *R
    T #DrehzahlAbhängigerAntrieb //Drehzahl in UpM
    ... // verschiedene Rechenschritte
    T PAW0 // Ausgabe an Antrieb
    Hier dienen die Zwischeergebnisse dazu, den Programmablauf zu strukturieren und sie ermöglichen es, die Werte in technischen Einheiten zu beobachten (Prozent, UpM). Ferner muß, wenn z.B. ein anderer Drehzahlgeber eingesetzt wird, nur der Teil bis zur Errechnung der UpM angepaßt werden.
    In beiden Beispielen haben die Zwischenergebnisse #Sicherheit gegeben bzw. #Potistellung und #Drehzahl nur während der Ausführung des Bausteins Bedeutung.

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

    Wolflesch (29.02.2008)

  8. #17
    Registriert seit
    22.01.2008
    Ort
    Allgäu, da wo die Kühe schöner sind als die Mädels
    Beiträge
    1.774
    Danke
    50
    Erhielt 729 Danke für 434 Beiträge

    Standard

    Hallo Zottel

    Ziemlich groß, gemessen in Bits. Bin nicht sicher, aber ich habe so 2kB im Kopf..

    Ich hatte bei den (zumindest alten) 300 CPUs den Wert 128kB für den Lokaldatenspeicher im Kopf. Bei den 400 CPUs war das doch einstellbar.

    Liege ich hier falsch, oder habe ich die Frage falsch verstanden?

    Gruss

    Audsuperuser
    Gruss Audsuperuser

    Herzlich Willkommen im Chat:
    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  9. #18
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also die 318 hat 4096 Byte lokaldaten, die werden aufgeteilt auf verscheidene Prioritätsklassen. Standard ist 256 Byte je Klasse. D.h., ein Baustein hat 256 Byte zur Verfügung. Bei Stringverarbeitung sind die ganz fix aufgebraucht , zwei lange Strings geht schon nicht. Die anderen 300-er haben etwas weniger, wieviel weiß ich aber nicht exakt (2k könnte hinkommen), aber 256 Byte je Prioritätsklasse bleibt wohl, ist dort auch nicht einstellbar und taucht daher gar nicht erst in den CPU-Einstellungen auf.
    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

Ähnliche Themen

  1. Temporäre möglichst universelle Fernwartung
    Von SPSSchlumpf im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 27.01.2011, 12:11
  2. Zugriff auf temporäre Daten in OB
    Von Holger Levetzow im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 11.05.2010, 09:48
  3. Temporäre Variable Laden
    Von Bensen83 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 11.01.2010, 08:51
  4. temporäre Lokalvariablen
    Von Earny im Forum Simatic
    Antworten: 21
    Letzter Beitrag: 08.12.2009, 08:48
  5. Temporäre Variablen in einem FB
    Von CanYouHelpMe im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 20.10.2008, 11:24

Lesezeichen

Berechtigungen

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