Loggingprogramm- Loggingzeit und -Name ändern
-
Hi,
ich habe ein Problem und hoffe hier ein paar Tips zu bekommen, da ich einfach kein Licht sehe...Wir habe eine neue Wasserkraftanlage bekommen, die die Daten automaitsch aufnimmt (Wasserhöhe, Leistung usw.)
Ich würde diese Daten gern auswerten. Dazu habe ich ein Programm gefunden, die .csv Daten visualisieren kann.
Das aktuelle Programm gibt mir die Daten, die an einem Tag gesammelt werden in einer csv. datei aus. Jeden Tag eine neue.
Nun würde ich gern das Programm soweit ändern, dass es mir eine Datei schreibt, in der die Daten fortlaufend (Jahresanfang bis Jahresende) aufgezeichnet werden um es besser auswerten zu können.
Die Jahresdatei soll auch automatisch mit dem Namen z.B. 2012-Jahresdatei angelegt werden.
Die Loggingabstände sollen variabel sein.Nur finde ich die dementsprechenden Zeilen nicht, die geändert werden müssen...

Das größte Problem ist erstmal, dass ich beim Programmieren nur die Grundkenntnisse in C habe/hatte. Leider fällt es mir zunächst schwer, das Programm einer Sprache zuzuordnen. Der größte Anteil dürfte wohl C++ sein. Leider sind auch viele Begriffe drin, die ich nicht finden kann (C/C++ Referenzbuch).
/*#include "FileSystem.h"*/ ... /* wenn in der nächsten Zeile "0" nach #if steht, KEIN LOGGING */ #if 0 static LONG LastLoggingTime = 0; /* -- Im Moment sind Vielfache von 1 sec Logging-Zeit eingestellt. -- */ if( LastLoggingTime + tm_tickcount( VariableLoggingTimeJahr * 1 * _sec_ ) < tm_ticktime() ) { FILEHANDLE File = NULL; char DatumBuffer[15]; char ZeitBuffer[15]; char Filename[25]; int Tag = 0, Monat = 0, Jahr = 0; BOOL NewFile = FALSE; /* -- Aufbau des Zeit- u. Datums-Strings -- */ SystemDateToString( SysDatum, DatumBuffer, NULL ); SystemTimeToString( SysZeit, ZeitBuffer, NULL, FALSE ); sscanf( DatumBuffer, "%d.%d.%d", &Tag, &Monat, &Jahr ); /* -- ev. Erstellen des Monatsverzeichnisses -- */ sprintf( Filename, "d:\\%04d-%02d", Jahr, Monat ); sfs_mkdir( Filename ); sprintf( Filename, "d:\\%04d-%02d\\%04d-%02d-%02d.csv", Jahr, Monat, Jahr, Monat, Tag ); if( sfs_findfile(Filename) == 0 ) { /* -- Keine Datei mit diesem Namen vorhande -- */ NewFile = TRUE; } /* -- Bereitstellung der Datumsangaben für die SPS --*/ Paneljahr = Jahr; Panelmonat= Monat; Paneltag = Tag; UPDATE( Paneljahr ); UPDATE( Panelmonat ); UPDATE( Paneltag ); /* -- Öffnen des Files -- */ File = sfs_fopen( Filename, "a" ); if( File != NULL ) { char LoggingBuffer[100]; short TempVariable1; ... LONG TempVariableA; if( NewFile ) { /* -- Zunächst Header in neue Datei schreiben -- */ sprintf( LoggingBuffer, "Datum;Zeit;Wasser;Öffnung;Leistung;Wehr;Leerschuss;RRM-Zyklen;kWh\r\n"); sfs_fwrite( LoggingBuffer, 1, strlen( LoggingBuffer ), File ); /* -- Loggingbuffer löschen -- */ memset( &LoggingBuffer, 0, sizeof(LoggingBuffer) ); } /* -- Aufbau des Zeit- u. Datums-Strings -- */ /*SystemDateToString( SysDatum, DatumBuffer, NULL );*/ SystemTimeToString( SysZeit, ZeitBuffer, NULL, FALSE ); /* -- Skalierung der Variablen -- */ TempVariable1 = Variable1 * 1; /* Wasser */ ... TempVariableA = VariableA / 100; /* kWh */ /* -- Schreiben des Logging-Strings in das File -- */ /*ZeitBuffer[5] = '\0'; */ sprintf( LoggingBuffer, "%s;%s;%4d;%4d;%4d;%4d;%4d;%4d;%4d\r\n", DatumBuffer, ZeitBuffer, ... TempVariableA ); sfs_fwrite( LoggingBuffer, 1, strlen( LoggingBuffer), File ); } else printf( "Fehler beim Öffnen des Files\n" ); /*FFS_fclose( File );*/ sfs_fclose( File ); /* -- Ablegen des letzten Loggings -- */ LastLoggingTime = tm_ticktime(); } #else static LONG LastLoggingTime = 0; /* -- Im Moment sind Vielfache von 1 sec Logging-Zeit eingestellt. -- */ if( LastLoggingTime + tm_tickcount( VariableLoggingTimeJahr * 1 * _sec_ ) < tm_ticktime() ) { char DatumBuffer[15]; int Tag = 0, Monat = 0, Jahr = 0; /* -- Aufbau des Zeit- u. Datums-Strings -- */ SystemDateToString( SysDatum, DatumBuffer, NULL ); sscanf( DatumBuffer, "%d.%d.%d", &Tag, &Monat, &Jahr ); /* -- Bereitstellung der Datumsangaben für die SPS --*/ Paneljahr = Jahr; ... UPDATE( Paneltag ); /* -- Ablegen des letzten Loggings -- */ LastLoggingTime = tm_ticktime(); } #endif return 0; }Warscheinlich ist´s total pippieinfach :p
Wäre echt überglücklich, wenn mir jemand helfen kann, ich komm einfach nicht weiter, weil ich auch nicht genau weiß, in welchem Programmiersprachenbuch ich noch weiter suchen kann...

-
C++ ist es nicht

Das ist C und deswegen hier falsch.
-
Hier ist doch das C/C++ Forum, oder nicht?!
-
drKnilch schrieb:
Hier ist doch das C/C++ Forum, oder nicht?!
Schau dir das Forum bitte genau an, es gibt passende Unterforen. Und du bist hier im Unterforum "C++ (auch C++0x, bzw. C++11)".
-
Sorry, mein Fehler.

-
Was verstehst Du am obigen Code nicht?
Mit grundlegenden C-Kenntnissen sollte das Abändern für Deine gewünschte Funktionalität kein Problem darstellen.Außer dem #if 0 ... #else... #endif ist an dem Code nichts Ungewöhnliches.
-
MichelRT schrieb:
Was verstehst Du am obigen Code nicht?
Mit grundlegenden C-Kenntnissen sollte das Abändern für Deine gewünschte Funktionalität kein Problem darstellen.Außer dem #if 0 ... #else... #endif ist an dem Code nichts Ungewöhnliches.
Das dachte ich eben auch. Aber dann bin ich auf eben diese von dir genannten Befehle und noch andere gestoßen, wo ich nicht mehr weiter kam:
sscanf( DatumBuffer, "%d.%d.%d", &Tag, &Monat, &Jahr );
sfs_findfile(Filename) == 0 )
sfs_mkdir( Filename );
sfs_fclose( File )
if( LastLoggingTime + tm_tickcount( VariableLoggingTimeJahr * 1 * _sec_ ) < tm_ticktime() )
sscanf( DatumBuffer, "%d.%d.%d", &Tag, &Monat, &Jahr );
LastLoggingTime = tm_ticktime();Die ich dann auch leider nirgends finden konnte um sie zu definieren...

-
Du meinst die sfs_xxxx Funktionen?
Die findest Du vermutlich im "filesystem.h"

-
Hm, das hab ich befürchtet,konnte ich da nämlich auch nicht erkennen...
