Werte in Visu nicht Permanent

wagosps
2011-05-12
2011-06-23
  • wagosps - 2011-05-12

    Hallo Zusammen,

    ich habe bei einer Visu ein Problem mit Zeiteingaben (Text Eingabe per Numpad oder Keypad). Sobald die Stromversorgung zur SPS weg ist oder ein Update des Programmes vorgenommen wird sind alle vorher eingestellten Zeiten (Laufzeiten für Jalousie und Einschaltzeiten für LED Beleuchtung) weg. Wie mir scheint wird zwischen einem Eintrag direkt Programm und der Eingabe in der Visu unterschieden.

    Die Eingangsvariablen sind als Retain deklariert und werden als String Format abgefragt.

    Wäre es hier möglich diese Eingaben nicht permanent zu machen? 20 eingaben zur Schaltzeiten jedes mal neu eintragen ist zwar möglich aber auf Dauer sehr ärgerlich.
    Ich könnte mir auch vorstellen, das Laufzeiten und Co. mit Default Werten versehen werden. Diese kommen dann zum Tragen wenn der Strom Ausfällt oder eine neue Version des Programmes eingespielt wird.

    Am besten wäre es natürlich das die Eingaben nicht zurückgesetzt würde aber das wird bei einem Ursprungs Reset nicht möglich sein eventuell noch bei einem Kalt Reset?

    Eventuell könnt Ihr mir ja ein paar Tipps geben wie ich dieses Problem lösen kann.

    Grüße

    Alex

    IMG: Werte Teilweise neu eingetragen.jpg

     
  • Erik Böhm - 2011-05-12

    Moin

    Kuck doch mal in der CoDeSys Hilfe unter: Remanente Variablen

    Gruß Erik

     
  • Christoph S - 2011-05-12

    hallo

    nach einem Kaltstart werden die Werte neu initialisiert. du kannst bei der Deklaration aber angeben welchen Wert sie dann haben sollen.

    z.B. iIndex: INT := 10;

    du kannst die Werte aber auch mit SysSaveRetains und SysRestoreRetains aus SysLibPlcCtrl.lib speichern und laden. wenn du neue variablen in den retain Bereich einfügst oder welche entfernst kann es beim laden Probleme geben.

     
  • wagosps - 2011-05-12

    Danke für eure Antwort. Ich muss mir das heute Abend mal genauer ansehen. Hab die Wago momentan nicht zu Hand. Aber wenn ich mich richtig erinnere kann ich den Vorgabe Wert (in deinem Beispiel von 10) nicht mit der Visu überschreiben?? Es bleibt meiner Meinung nach beim Wert 10, so war es bis jetzt zumindest. Die Visu Eingabe wird somit nicht berücksichtig.
    Wenn das gehen würde wärs natürlich super.

    Gruß Alex

     
  • wagosps - 2011-05-12

    Ich habs mit der Vorgabe von Christoph S porbiert aber irgendwie bekomm ichs nicht ganz hin. Mit einer INT Variabel kann man einen Wert angeben und Codesys mekert nicht, aber wenn ich einen Wert bei einer String Variabelen angeben (benötige ich für die Uhrzeit) möchte funktioiert es nicht. Was mache ich da falsch? Ich hoffe die Bilder sagen hier einiges aus.

    IMG: Unbenannt2.JPG

    IMG: Unbenannt1.JPG

    IMG: Unbenannt.JPG

     
  • Christoph S - 2011-05-13

    hallo wagosps

    was genau funktioniert nicht? einen string mit einem wert vorbelegen müsste eigentlich funktionieren! also folgendes hat bei mir wunderbar geklappt (auch wenn der string eigentlich 6 zeichen hat):

    str:   STRING(5) := '08:00';
    

    nach einem kaltstart oder einem reset steht dann '08:00' in der variablen str. wenn sich der wert jedoch ändert und die änderung auch bei einem neustart erhalten bleiben soll musst du die variablentabelle als retain (werden beim download überschrieben) und persistent (werden beim kaltstart oder reset überschrieben) deklarieren.

    VAR_GLOBAL RETAIN PERSISTENT
         str:     STRING;
    END_VAR
    

    wenn du willst das die änderungen auch nach einem kaltstart erhalten bleibem musst du sie in eine datei schreiben das geht wenn sie retain oder persistent sind wie erwähnt mit der SysLibPlcCtrl.lib.

     
  • wagosps - 2011-05-15

    Hi Christoph S,

    es klapp. Super. Danke für deine Hilfe.

    Jetzt kann auch mal der Stromausfallen oder ein neues Programm drauf gespielt werden und das ohne alle Werte neu einzugeben. Habs mit der String Variante "str: STRING(5) := '08:00';" hin bekommen.

    Mein Problem besteht zum Teil weiterhin da ich im Programm auch Instanzen habe. Ich habe Vorgabe Werte immer in den Instansierten FB eingetragen (Diese werden anscheinend vorrangig behandelt, demnach vor der Eingabe in der Visu, und somit ist das überschreiben auch nicht möglich), und nicht wie von Dir beschrieben in der Deklaration der FBs. Damit muss ich wohl leben, dass z.B: nach den neu aufspielen alle Jalousie zwar um 8 Uhr hoch fahren und nicht gestaffelt für einzelnen Räume. Da der Wert ja nur einmal pro deklaration in der Instanz eingetragen werden kann.

    Wollte ein Bildschirm Video Hochladen aber anscheinend werden Vidoe Formate komplett geblockt. Aber es ist ja auch so gegangen.

    Gruß Alex

    PS: Bin ab Morgen 2 Wochen im Ausland und hab deswegen keine Möglichkeit zurück zu Schreiben.

     
  • Christoph S - 2011-05-16

    hi

    du kannst auch bei instanzen die werte initialisieren. das geht sogar für variablen auf die man sonnst keine schreibrechte hat:
    fb:

    FUNCTION_BLOCK fb_test
    VAR_INPUT
       i1:INT;
       str1:STRING;
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR
       str2:STRING;
    END_VAR
    

    instanz:

    inst:fb_test:=(i1:=10, str1:='hallo str1', str2:='hallo str2');
    

    vieleicht solltest du dir aber auch das thema watch- und rezeptlisten anschauen. dann könntest du backups von deinen geänderten werten machen.

    gruß

     
  • wagosps - 2011-05-31

    Hi Christoph,

    bin wieder in DE in den nächsten Tagen hab ich hoffentlich mal Zeit deine Tips genauer anzusehen. Das mit der Rezeptur sagt mir noch nicht viel aber da wird man bestimmt was finden kömmen aber dein erster Vorschlag sieht auch sehr vielversprechend aus. Freut mich das Du mir da hifst.

    Sobald ich weitergekommen bin geb ich Dir bescheid, bin da aber guter Dinge

    Grüße Alex

     
  • wagosps - 2011-06-19

    Hallo Chirstoph,

    bin leider nicht richtig mit deinem Vorschlag weiter gekommen. Irdendwas mach ich da falsch. Ich bin mir nicht ganz sicher wo und wie die Werte eingetragen werden müssen. In der Instanz oder im eigentlichen Programm in dem die einzelnen Räume aufgeführt sind und die Instanz aufgerufen wird?

    Hab mir einen Vorschlag mit den watch- und rezeptlisten angesehen. Aber da werd ich nicht sehr schlau draus. Zumeinen wo der Unterschied ist welche Vorteile und Funktionen dahinter stecken. Gibt es irdendwo was zum nachlesen wo diese Funktionen gut beschreiben sind. Vielleicht gibt res ja auch Beispiel Programme die diese Funktionen besser veranschaulichen und leichter verständlich machen.

    Grüße Alex

     
  • Christoph S - 2011-06-20

    hi

    ich hab dir mal ein kleines beispiel gemacht. müsste eigentlich so weit laufen.
    die rezeptlisten sind eigentlich nicht schlecht wenn du schnell und einfach ein backup von deinen eingestellten werten brauchst.

    du solltest in die globalen variablen gv reinschauen, die bleiben nach dem ausschalten erhalten. der baustein fb_test wird auf alle mir bekannten arten initialisiert und hat ebenfalls variablen die nach dem ausschalten erhalten bleiben. im watch- und rezeptverwalter ist ein kleines rezept angelegt mit dem werte in einer datei gespeichert werden können.

    hoffe das beispiel ist ausreichend kommentiert ansonnsten kannst auch gern fragen!

    gruß

    werte_permanent.pro [49.61 KiB]

     
  • wagosps - 2011-06-20

    Hi Christoph,

    ich dank Dir vielmals. Bin gerade noch am durchschauen. Mal sehen ob bei mir klick macht
    Ich meld mich wieder.

    Danke nochmals für deinen Aufwand

    Grüße Alex

     
  • wagosps - 2011-06-20

    Ohjeh,
    ist ganz schön komplex bin noch nicht so ganz durchgestiegen. Hab aber schon ein paar Dinge verstanden. Ich muss mir die Sache morgen in der Mittagspause nochmal ansehen. Ich denk aber da brauch ich nochmal Deine Hilfe.

    Grüße Alex

     
  • wagosps - 2011-06-23

    Hi Christoph,

    hab heute nochmal am Programm probiert und bin jetzt dank deiner Hilfe sehr viel weiter gekommen.
    Danke für deine super Unterstützung

     

Log in to post a comment.