Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Speicherung von werte in Variable (Datenbaustein)

almot89
2015-10-17
2017-10-28
  • almot89 - 2015-10-17

    Hallo,
    Ich bin auf der suche nach der Fubktion, die sich bei step 7 Datenbaustein nennt.
    Ich habe das licht in meinen Flur mit einen TON programmiert, das licht wird nach Ablauf des TON Bausteins automatisch ausgeschalten. Den wert kann ich in der webvisu verändern. jedoch habe ich das Problem, wenn ich den wert in der webvisu ändere, er beim einloggen meckert, das die Programme sps>Programmiergerät nicht identisch sind.

    Gibt es eine Möglichkeit die werte so zu speichern, das diese bei login nicht immer wieder auf den alten stand der software eingestellt werden oder gar beim sps kalt reset verloren gehen?

     
  • eschwellinger

    eschwellinger - 2015-10-18

    Hi,

    Zitat:
    ich den wert in der webvisu ändere, er beim einloggen meckert, das die Programme sps>Programmiergerät nicht identisch sind

    das hat erst mal nichts mit der Variable zu tun, sondern CODESYS will einen neuen Download machen
    dadurch sind dann deine Werte wieder initialisiert. Bekommst du keinen "Online Change" angeboten?

    Das Problem das deine geänderten WERTE nach dem Ausschalten der SPS weg sind und die Lösung dazu beschreibe ich mal hier:

    Abhängig davon welche SPS du verwendest gibt's wie immer mehrere Möglichkeiten.
    Du könntest Retain Variablen verwenden, hier müsstest du nur die variablen als "VAR RETAIN" oder VAR Retain Perisistent deklarieren dann werden die
    automatisch vom System gesichert.
    (Bedingung deine SPS muss ein NVRAM oder USV - also SPS fährt geregelt herunter und wird nicht nur ausgeschaltet)
    Du hattest sonst immer zum Pi Fragen gestellt also nehme ich man an du bist auf dem PI.

    Es ist so das der Raspberry Pi ja kein NVRAM hat und meist auch keine USV.
    Jetzt gibt es eigentlich 5 Möglichkeiten (je nachdem was du genau für Anforderungen hast)so was zu realisieren.
    1. USV nachrüsten -dann die Var Retain Persisiten verwenden (schau mal in die Hilfe wie man die verwendet)
    2. ohne USV den selben Retain Mechanismus verwenden aber händisch getriggert in deiner Applikation die Retains in ein File schreiben und auch beim starten über Applikation wieder die retains laden - das tun wohl manche PI User dazu gibs im englischen CODESYS Pi Forum ein Applikationsbeispiel.
    3. Application Composer - Persistente Variablen - schreibt - müsste ich dir ein Beispiel erstellen
    4. du schreibst dir deine Variablen selber in ein File per CAA File oder aber SysFile Bibiothek - im Store gibs ein Beispiel wie man CAA File verwendet und lädst diese wieder beim initialisieren deiner Applikation
    5. Rezeptur verwenden um deine Werte zu sichern und wieder herzustellen.

    Was sind die vor und Nachteile der Möglichkeiten?
    Für wirklich 100% zuverlässige Retains ist USV oder NVRAM notwendig!
    Punkt 2 hat den Nachteil das man nur den Stand hat der gesichert wurde (manuell über Applikation) der kann sich ja unterscheiden von dem
    vom Auschaltzeitpunkt.
    2,3,4,5 haben auf dem Pi immer das Risiko das was schief geht wenn gerade geschrieben wird und dabei der Pi ausgeschaltet wird.
    Grüße
    Edwin

     
  • almot89 - 2017-10-28

    Habe Jetzt umgebaut auf wago 750-8202 ( PFC200)

    Hätten sie mal ein Beispiel für mich, wie ich Die Variable so sichere, das sie immer gespeichert bleibt? Habe beim erstellen einen haken bei retain und Perisistent rein geklickt. Jetzt bekomme ich eine Warnung:

    Zitat:
    ------ Übersetzungslauf gestartet: Applikation: Device.Application -------
    Code typisieren ...
    Code erzeugen...
    [INFORMATION] Code für __VAR__PERSISTENT__WRITE__MAINTASK erzeugen...
    [INFORMATION] Code für __IMPLICITREFERENCETYPESINIT erzeugen...
    [INFORMATION] Code für __CYCLE__CODE__MAINTASK erzeugen...
    [INFORMATION] Code für HWR__4971__GVL__INIT erzeugen...
    [INFORMATION] Code für HWR erzeugen...
    [INFORMATION] Code für EINSTELLUNGEN__INP__VIS.EXECUTEMOUSECLICK erzeugen...
    [INFORMATION] Code für EINSTELLUNGEN__VIS.UPDATE erzeugen...
    globale Initialisierungen erzeugen...
    Code-Initialisierung erzeugen...
    Relokationen erzeugen...
    [WARNUNG] wagopfc 200 Denny: HWR Device: SPS-Logik: Application: C0244: Kein passender Instanzpfad gefunden für Variable HWR.Licht_Zeit_HWR in der VAR_PERSISTENT-Liste. Verwenden Sie den Befehl "Alle Instanzpfade hinzufügen" um der VAR_PERSISTENT-Liste alle Instanzpfade hinzuzufügen. (siehe Onlinehilfe für Details).
    [INFORMATION] Größe des erzeugten Codes: 2373232 Bytes
    [INFORMATION] Größe der globalen Daten: 881700 Bytes
    [INFORMATION] Gesamter allozierter Speicherumfang für Code und Daten: 3691500 bytes
    [INFORMATION] Speicherbereich 0 enthält Daten, Eingang, Ausgang, Speicher und Nicht-sichere Daten: Größe: 1253304 Bytes , höchste verwendete Adresse: 964080, größte zusammenhängende Speicherlücke: 289224 Bytes (23 %)
    [INFORMATION] Speicherbereich 1 enthält Retain-Daten: Größe: 1000 Bytes , höchste verwendete Adresse: 196, größte zusammenhängende Speicherlücke: 804 Bytes (80 %)
    [INFORMATION] Speicherbereich 2 enthält Persistente Daten: Größe: 1000 Bytes , höchste verwendete Adresse: 88, größte zusammenhängende Speicherlücke: 912 Bytes (91 %)
    [INFORMATION] Speicherbereich 3 enthält Code: Größe: 3545630 Bytes , höchste verwendete Adresse: 2727408, größte zusammenhängende Speicherlücke: 818222 Bytes (23 %)
    Übersetzung abgeschlossen -- 0 Fehler, 1 Warnungen : Bereit für Download

    Gibt es eine Möglichkeit, die Gespeicherten/nachträglich eingeben Werte von der Steuerung in das Programm zu kopieren, ohne sie Abtippen zu müssen?

    Bei Step 7 kann man ja einfach den Datenbaustein im Online Modus von der der Steuerung in das Projekt kopieren, schon sind alle werte wieder Aktuell und ein Austausch der SPS steht nichts mehr im Wege.

     
  • eschwellinger

    eschwellinger - 2017-10-28

    Hi,
    du musst die Variablen
    VAR_GLOBAL PERSISTENT RETAIN
    byPersitent: BYTE;
    END_VAR

    und dann in dieser Globalen PersitenzVarliste einfügen lassen durch CODESYS.
    Siehe Screenshot.

    Grüße
    Edwin

    IMG: PersistentVars.jpg

     

Log in to post a comment.