Watchliste direkt über Codesys Programm speichern und laden

Chris.O
2017-08-15
2017-09-20
  • Chris.O - 2017-08-15

    Hallo liebe CoDeSys Liebhaber

    Wie im Betreff ersichtlich, hätte ich eine Frage zum Thema Watchlisten speichern und laden.
    Ist es möglich Watchlisten direkt aus dem Codesys-programm heraus zu speichern und zu laden?
    Bisher war es mir nur möglich, dies über einen Button mit dem Befehl "Savewatch" und "Loadwatch" zu realisieren.

    Hintergrund:
    Ich habe eine Steuerung, auf der im Hintergrund Windows CE läuft. Um meine Parameter/Rezepturen zu speichern, möchte ich gerne die Watchlisten speichern und laden.
    Ich habe dies bereits auch versucht über Retainvariablen zu realisieren, was auch gut klappt. Jedoch sobald ich irgendetwas an den Retainvariablen verändere und dem Kunden ein Update zukommen lasse, kann er seine alten Parameter nicht wieder in die neue Version laden.
    Realisiere ich das speichern der Variablen über eine Watchliste, ist nur eine bestimmte Anzahl an Variablen pro Watchliste möglich (sonst werden die nicht in der .wtc gespiechert) und ich muss mehrere Watchlisten anlegen. Diese muss ich dann über Buttons einzeln abspeichern und auch wieder einzeln laden, da Windows CE anscheinend Probleme damit hat, über einen Button mehrere Befehle auszuführen, was dann somit sehr umständlich ist (vor allem für den Kunden).

    Nun würde ich gerne über Betätigung von nur einem Button "Speichern" (am besten über einen Aufruf innerhalb meines Programms) alle Watchlisten mit einem vordefinierten Namen in einem vordefiniertem Pfad speichern und mit klick auf Button "Laden" dann auch wieder laden.

    Ich konnte bisher leider nichts in Handbüchern oder Foren finden, was mir helfen könnte.
    Über Ihre Hilfe wäre ich sehr Dankbar.

    Gruß
    Chris

     
  • Chris.O - 2017-09-20

    Hallo nochmal,

    ich war nicht ganz untätig und hab bis jetzt einiges herausgefunden.

    Ich brauche natürlich die SysLibTargetVisu.lib
    Ich kann direkt über das Programm z.B. folgende Funktionen aufrufen:

    IF xDefineReceipt THEN
       ExecuteCommand(stCommand:=sReceiptname, nType:=DEFINERECEIPT);
       xDefineReceipt := FALSE;
    END_IF
    IF xReadReceipt THEN
       ExecuteCommand(stCommand:=sReceiptname, nType:=READRECEIPT);
       xReadReceipt := FALSE;
    END_IF
    IF xWriteReceipt THEN
       ExecuteCommand(stCommand:=sReceiptname, nType:=WRITERECEIPT);
       xWriteReceipt := FALSE;
    END_IF
    IF xLoadWatch THEN
       ExecuteCommand(stCommand:='', nType:=LOADWATCH);
       xLoadWatch := FALSE;
    END_IF
    IF xSaveWatch THEN
       ExecuteCommand(stCommand:='', nType:=SAVEWATCH);
       xSaveWatch := FALSE;
    END_IF
    

    wobei ich folgende defines machen muss:

    VAR_GLOBAL CONSTANT
       PRINT         : INT := 23;
       DEFINERECEIPT : INT := 34;
       READRECEIPT   : INT := 35;
       WRITERECEIPT  : INT := 36;
       SAVEWATCH     : INT := 37;
       LOADWATCH     : INT := 38;
    END_VAR
    

    somit hätte ich einen Großteil meines Problems gelöst.
    Jetzt tritt ein weiteres Problem auf... Ich möchte die aktuellen Werte meiner Watchliste speichern und nicht die vordefinierten. Dies möchte ich mit "READRECEIPT" und anschließendes "SAVEWATCH" machen. So würde ich ja die aktuellen Werte in die Watchliste übertragen und diese dann als .wtc-file speichern. Über meine Codesys Visualisierung hat das auch wunderbar funktioniert, leider aber weder über die Webvisu noch über die Targetvisu, die direkt auf meiner Steuerung läuft (Touchpanel).
    Hier funktioniert leider der Befehl READRECEIPT nicht... warum auch immer... laut Handbuch müsste dieser Befehl auch in der Webvisu und Targetvisu funktionieren... Hat jemand ne Idee oder ne alternative?

    Wäre toll wenn mir jemand helfen könnte...

     

Log in to post a comment.