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

Ergebnis 1 bis 6 von 6

Thema: lokale TEMP-Variablen initialisieren

  1. #1
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das Benutzen von temporären Lokalvariablen scheint ja nicht uneingeschränkt beliebt zu sein. Ich denke aber, dass sie durchaus Sinn machen und benutze diese zum Teil auch.
    In der Regel speichere ich damit Zwischenergebnisse von BOOL-Verknüpfungen oder irgendwelchen Berechnungen (ADD_I, MUL_R, etc...) Das klappt auch ohne Probleme.
    Mein Kollege hat jetzt mal eine TEMP-Variable an den (Q) Ausgang eines IEC TON-Timers gehängt. Das ging dann schief, denn der Ausgang wird scheinbar nicht unbedingt von dem IEC-Baustein beschrieben. Sprich: Die Zeit war noch nicht abgelaufen, die TEMP-Variable hatte aber den Zustand 1, als sie weiter unten im Baustein abgefragt wurde.
    Wenn man nachliest, findet man auch die Information, dass temporäre Lokaldaten initialisiert werden sollen/müssen.

    Das erschließt sich mir nicht ganz. Gilt das auch für die Verwendung als Zwischenergebnisse, wie ich sie zuerst beschrieben habe. Es dürfte doch wohl egal sein, ob ich zuerst eine 0 auf die Lokaldaten schreibe, oder diese mit einer =-Zuweisung (bei BOOL) bzw. als Ergebnis einer Berechnung zuweise.
    Oder sagt man, je nachdem wie die Variable dann verwendet wird -wie in dem 2. Beispiel mit dem IEC-Timer- ist das IMMER zu empfehlen und deswegen macht man das auch immer.
    Wenn ja, wie wäre es dann richtig?
    Benutzt man die symbolische Adressierung (R #Testmerker) hat man die Sicherheit, dass beim Einfügen von weiteren Variablen nichts "verrutscht" Bei vielen BOOL-Variablen ist das aber viel Handarbeit.
    Schreibt man eine 0 auf das Lokaldatenwort in dem die BOOL-Variablen liegen, muss man immer im Auge behalten, dass ggf. der Adressbereich vergrößert werden muss, wenn man noch weitere Variablen einfügt.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.
    Zitieren Zitieren lokale TEMP-Variablen initialisieren  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    Temporäre Variablen muss man dann initialisieren, wenn man sie evtl. nicht jeden Zyklus im Baustein beschreibt, damit sie bei einer Abfrage einen Grundzustand haben z.Bsp. False. Wenn sie jeden Zyklus beschrieben werden, dann braucht man sie nicht initialisieren.

    Dein TON sollte eigentlich den Ausgang Q immer aktualisieren, es sei denn er wird umsprungen, oder der EN-Eingang ist nicht 1. Was genau TON mit Q macht, wenn EN nicht True ist, kann ich dir gerade nicht sagen, probiere das doch einfach mal aus. Wenn dem so ist, sollte man die Temp-Var am Ausgang einfach am Anfang des Bausteines mit False belegen.
    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

  3. #3
    Registriert seit
    08.07.2007
    Ort
    Burbach
    Beiträge
    366
    Danke
    80
    Erhielt 34 Danke für 32 Beiträge

    Standard

    Ich habe da mal Probleme in einer ähnlichen Art gehabt.
    Es stellte sich dann heraus, dass die Funktion, die benutzt wurde, eine feste Adresse benötigt, auf die geschrieben werden kann.

    Ich weiß aber momentan nicht mehr, in welchem genauen Zusammenhang das war.

    Alter hat halt nichts Schönes.
    Lieber Feste feiern, als feste arbeiten.

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    ... mit dem TEMP am Ausgang eines IEC-Timers funktioniert aber definitiv (die Einschränkung von Ralle mit dem überspringen mal außer acht gelassen) wenn die Abfrage des TEMP's auf jeden Fall hinter dem Aufruf des Timers erfolgt. Da muß also noch etwas anderes mitspielen ...

    Gruß
    Larry

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard

    Temporäre Lokalvariablen eignen sich nur zum Zwischenspeichern von irgendwas, weil sie vor dem Beschreiben einen unbestimmten Zustand haben und ab Bausteinende ungültig werden. Beim nächsten Bausteinaufruf kann sonstwas in den Lokalvariablen stehen (der selbe Speicherbereich kann auch von anderen Bausteinen benutzt werden), deshalb muß man vor einem Lesen der temporären Lokalvariablen erstmal was in diese reinschreiben. Man braucht sie vor einem Schreibzugriff nicht extra zu initialisieren, man muß wie gesagt nur sicherstellen, daß vor einer lesenden Verwendung auch genau in dem Zyklus/Bausteinaufruf mindestens einmal was reingeschrieben wurde.

    Wenn Du eigentlich gekapselte "private" Lokalvariablen mit Gedächtnis zum nächsten Zyklus meinst, dann mußt Du einen FB programmieren und die Lokalvariablen in den STAT-Bereich legen.


    Beim Problem Deines Kollegen mit der lokalen TEMP-Variable am Q-Ausgang eines IEC-TON-Timer muß noch was anderes mitgespielt haben. Wenn der TON aufgerufen wird, dann wird danach auch garantiert der Wert des Q-Bits in die Ausgangs-Variable kopiert (von eventuellen Firmwarefehlern mal abgesehen). Es ist unerheblich, ob der TON selber seinen Q-Ausgang in diesem Zyklus beschrieben hat (die TON-Instanz inklusive seinem Q-Bit liegt in einem IDB!). Direkt nach dem Aufruf hat die temporäre Variable den gleichen Wert wie das Q-Bit. Nur wenn der TON nicht aufgerufen wird kann die Ausgangs-Variable einen anderen Wert als das Q-Bit haben, weil dann das Q-Bit nicht in die Ausgangs-Variable kopiert wird.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    Tigerente1974 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Erst einmal Danke für die Antworten.

    Dass der Zustand von TEMP-Variablen nicht definiert ist, wenn der Baustein aufgerufen wird, war mir soweit klar.
    Nach meinem Verständnis macht es demnach auch keinen Sinn, eine Lokalvariable zu nutzen, indem diese verwendet wird, bevor eine Zuweisung -welcher Art auch immer- gemacht wurde. Konstruktionen mit TEMP-Merkern die initialisiert werden müssen, weil die Zuweisung nicht in jedem Zyklus stattfindet, gefallen mir auch nicht besonders. Da würde ich doch eher auf STAT-Variablen zurückgreifen.

    Aus dieser Sicht scheint mir ein Lehrsatz wie "TEMP-Variablen müssen immer initialisiert werden" eine übervorsichtige Formulierung zu sein.

    Die Aussage meines Kollegen erschien mir demnach auch nicht wirklich nachvollziehbar. Ich vermute es ist tatsächlich so, dass irgendwo noch etwas anderes reingespielt hat. Wahrscheinlich ist es sinnvoll, das noch einmal in einer Testumgebung nachzustellen und der Sache genau auf den Grund zu gehen, mein Kollege weiss in der Regel auch ziemlich gut was er so macht...
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

Ähnliche Themen

  1. Variablen initialisieren
    Von thomassc im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 29.07.2010, 12:40
  2. Globale Variablen initialisieren
    Von softwareheini im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 24.01.2010, 15:04
  3. Variablen in Protool initialisieren
    Von Wassermann im Forum HMI
    Antworten: 3
    Letzter Beitrag: 20.05.2009, 09:13
  4. Lokale Variablen
    Von Mujo im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 23.08.2007, 18:53
  5. Lokale Variablen in SCL
    Von Climber im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 05.02.2007, 11:57

Lesezeichen

Berechtigungen

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