IndraControl L65: Daten von Analogeingang bei jedem Zyklus speichern

Heiko89

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPS Gemeinde,
ich bin absoluter Neuling im Gebiet der SPS. Als System habe ich eine IndraMotion MTX Performance auf einer IndraControl L65 mit diversen Eingängen und Ausgängen. Als Panel PC habe ich ein VPP40 zur Verfügung.
Nun möchte ich die gemessene Spannung eines Analogeingang bei jedem Zyklus mit Zeitstempel in eine .csv Datei schreiben. Ich bin mir bewusst, dass dies die Zyluszeit (erheblich?) verlängern wird. Da dies aber erstmal nur zum Testen eines Sensors ist, sollte dies erst mal nicht wichtig sein und später wieder entfernt werden. Die .csv sollte verzugsweise auf dem Panel PC erstellt und gespeichert werden. Falls das nicht gehen sollte, ist es auch kein großes Problem wenn die Datei auf dem internen Speicher der Steuerung gespeichert wird, da der Sensor erstmal immer nur einige Minuten laufen wird und die Datei deshalb nicht sehr groß sein wird.

Ich habe mich natürlich erstmal durch die Anleitungen der IndraControl geschlagen und geschaut ob es für meinen Anwendungsfall schon etwas passendes gibt, bin aber leider nicht fündig geworden. Man kann zwar Logfiles erstellen lassen, diese beziehen sich aber nur auf Ereignisse oder Fehler und nicht auf bestimmte Variablen. Habe ich vielleicht nach den falschen Buzzwords gesucht? Ich kann mir kaum vorstellen, dass es nicht die Möglichkeit gibt Sensordaten zu loggen.

Nichtsdestotrotzt habe ich mich mal an einem Code versucht. In der Simulation funktioniert der Code. Da ich aber leider keine Erfahrung habe, frage ich euch um Rat. Kann das so überhaupt funktionieren, bzw. erfüllt das den Zweck? In diesem Fall könnte ich ja nur auf der Steuerung selbst speichern oder? Bin für jeden Tipp und Anmerkung dankbar.
Grüße
Code:
PROGRAM LOGGING
VAR
    writebuffer: STRING(250);
    filenumber: DWORD;
    filemode:STRING(1):='a';
    delimiter_file: STRING(1):= ';';
    delimiter_time: STRING(1):= ':';
    voltage: STRING(10);
    output: STRING(250);
    hour: STRING(2);
    minute: STRING(2);
    second: STRING(2);
    millis: STRING(3);
    timestamp: STRING(15);
    path: STRING(250) :='S:\..';
    systime:SystemTimeDate;
END_VAR

hour := UINT_TO_STRING(systime.Hour);
minute := UINT_TO_STRING(systime.Minute);
second := UINT_TO_STRING(systime.Second);
millis := UINT_TO_STRING(systime.Milliseconds);
voltage := INT_TO_STRING(Analog_In4);

timestamp := CONCAT(hour,delimiter_time);
timestamp := CONCAT(timestamp,minute);
timestamp := CONCAT(timestamp,delimiter_time);
timestamp := CONCAT(timestamp,second);
timestamp := CONCAT(timestamp,delimiter_time);
timestamp := CONCAT(timestamp,millis);


output := CONCAT(timestamp,delimiter_file);
output := CONCAT(output,voltage);
output := CONCAT(output,'\n');


filenumber := SysFileOpen (path, filemode);
writebuffer := output;
SysFileWrite(filenumber, ADR(writebuffer), LEN(writebuffer));
SysFileClose(filenumber);
 
Darf ich nach deiner Anforderung an die Zykluszeit fragen? Was ist dein Ziel und was dein verkraftbares Maximum?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo DaPivo,
meine Anforderungen sind wie gesagt ziemlich gering. Die LogFile soll erstmal nur für einige Tests für einen Sensor dienen und im Betrieb soll dann nichtmehr "geloggt" werden. Also unter 1 Sekunde sollte die Zykluszeit optimalerweise schon bleiben. Ist das realistisch?
Viele Grüße
 
Zurück
Oben