Monitoring Variable

Peulebo
2011-07-13
2023-08-17
  • Peulebo - 2011-07-13

    Hallo, ich versuche gerade mit Codesys 2.3 Messwerte die ich von einem Slavesystem geschickt bekomme auf einem USB Speicherstick zu speichern. Das klappt auch ganz gut ich verwende syslibfile.lib. So jetzt zu dem eigentlichen Problem ich hab hauptsächlich Stingvariablen jetzt wird bei Speichern auf dem USB Stick alles korrekt abgespeichert, allerdings wird in CoDeSys kein Wert mehr angezeigt sondern "Zu viele Monitoring Variablen". Leider weiß ich damit nix anzufangen. Gibt es eine Einschränkung der Variablen die CoDeSys in Echtzeit anzeigen kann, wenn ja kann man den Wert erhöhen?

    Hab mal die Variablendeklaration und den Code gepostet ist noch unvollständig.

    PROGRAM usb_test
    VAR
       FilePath: STRING:= 'B:\test_neu_2.csv';
       hFile: DWORD;
       dwWritten: DWORD;
       wNewLine: WORD:= 2573;
       Timer: TON;
       zahlzeit: STRING;
       zahldatum: STRING;
       K1: STRING(10);
       K2: STRING(10);
       K3: STRING(10);
       K4: STRING(10);
       K5: STRING(10);
       K6: STRING(10);
       K7: STRING(10);
       K8: STRING(10);
       K9: STRING(10);
       K10: STRING(10);
       K11: STRING(10);
       K12: STRING(10);
       K13: STRING(10);
       K14: STRING(10);
       K15: STRING(10);
       K16: STRING(10);
       Kzeit: STRING(10);
       Kdatum: STRING(10);
    END_VAR
    
    IF Timer.M THEN
    Timer();
    ELSE
    Timer(IN:= TRUE, PT:=t#1s);
    END_IF
    IF Timer.Q THEN
    Kzeit:=CONCAT('Zeit',';');
    Kdatum:=CONCAT('Datum',';');
    K1:=CONCAT('Kanal1',';');
    K2:=CONCAT('Kanal2',';');
    K3:=CONCAT('Kanal3',';');
    K4:=CONCAT('Kanal4',';');
    K5:=CONCAT('Kanal5',';');
    K6:=CONCAT('Kanal6',';');
    K7:=CONCAT('Kanal7',';');
    K8:=CONCAT('Kanal8',';');
    K9:=CONCAT('Kanal9',';');
    K10:=CONCAT('Kanal10',';');
    K11:=CONCAT('Kanal11',';');
    K12:=CONCAT('Kanal12',';');
    K13:=CONCAT('Kanal13',';');
    K14:=CONCAT('Kanal14',';');
    K15:=CONCAT('Kanal15',';');
    K16:=CONCAT('Kanal16',';');
    hFile:=SysFileOpen(FilePath,'a');
    SysFileWrite(hFile,ADR(kzeit),LEN(kzeit));
    SysFileWrite(hFile,ADR(kdatum),LEN(kdatum));
    SysFileWrite(hFile,ADR(K1),LEN(K1));
    SysFileWrite(hFile,ADR(K2),LEN(K2));
    SysFileWrite(hFile,ADR(K3),LEN(K3));
    SysFileWrite(hFile,ADR(K4),LEN(K4));
    SysFileWrite(hFile,ADR(K5),LEN(K5));
    SysFileWrite(hFile,ADR(K6),LEN(K6));
    SysFileWrite(hFile,ADR(K7),LEN(K7));
    SysFileWrite(hFile,ADR(K8),LEN(K8));
    SysFileWrite(hFile,ADR(K9),LEN(K9));
    SysFileWrite(hFile,ADR(K10),LEN(K10));
    SysFileWrite(hFile,ADR(K11),LEN(K11));
    SysFileWrite(hFile,ADR(K12),LEN(K12));
    SysFileWrite(hFile,ADR(K13),LEN(K13));
    SysFileWrite(hFile,ADR(K14),LEN(K14));
    SysFileWrite(hFile,ADR(K15),LEN(K15));
    SysFileWrite(hFile,ADR(K16),LEN(K16));
    SysFileWrite(hFile,ADR(zahlzeit),LEN(zahlzeit));
    SysFileWrite(hFile,ADR(zahldatum),LEN(zahldatum));
    SysFileWrite(hFile,ADR(wNewLine),SIZEOF(wNewLine));
    SysFileClose(hFile);
    Timer (IN:=FALSE);
    END_IF
    
     
  • RolandWagner

    RolandWagner - 2011-07-13

    Generell kann man sagen, dass beim Monitoring Werte in Echtzeit von der Steuerung zum PC mit CoDeSys übertragen werden. Wenn eben zu viele Daten übertragen werden, kommt diese Meldung.

    Mögliche Strategien zur Abhilfe:
    Das Baustein-Fenster schließen, in dem so viele Variablen gemonitort werden. Denn nur solche Daten werden übertragen, die auch in einem geöffneten Fenster angezeigt werden. Vermutlich ist das aber nicht das, was Du willst.

    Eine andere Möglichkeit:
    Teile die Deklaration dieser Variablen auf, z.B. in mehrere globale Variablenlisten. Nur die Liste, die dann gerade geöffnet ist, wird dann auch gemonitort. Damit kannst Du zwar nicht alle Werte sehen, aber wenigstens hast Du eine Chance.
    Aber damit sind das eben keine lokalen Variablen des Bausteins mehr.

     
  • Peulebo - 2011-07-13

    Hallo, das hört sich ja nicht so gut an. Ich hatte gerade noch mal die Suche benutzt, könnte die Erhöhung der Buffersize mich weiterbringen? So viele Stringvariablen sind das ja auch nicht.

     
  • Oberchefe - 2011-07-15

    Zitat:
    So viele Stringvariablen sind das ja auch nicht.

    Ein String mit der Länge 80 (Standard) benötigt 81 Bytes für die Übertragung, das ist so viel wie eben 81 Byte-Variablen, 40,5 Integerwerte oder 20,25 Realwerte.

     
  • Erik Böhm - 2011-07-25

    Moin

    Wie du ja schon in einem früheren Post von mir gelesen hast, ist die Buffersize genau dafür da.
    Probiers doch einfach mal aus...

    Gruß Erik

     

Log in to post a comment.