[Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Hmm ein "°C" hinterklemmen. DAs dürfte schwer werden :P

Meinst du mit Datenbank, dass jeder sich selbst um nen server kümmern muss, oder dass wir einen Server einrichten (z.B. über Sourceforge, oder AT wenn die die Software anbieten wollen) und jeder user ne Tabelle bekommt?
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Am besten wäre es, wenn man dazu einen lokalen Server nutzt, also den eigenen Rechner. Es gibt ein Programm, mit dem man das machen kann, das sich Xampp Lihgt nennt. Ich glaube nämlich nicht, dass Aquatuning extra für die Software einen Server bereitstellen würde.


Momentan versuche ich, die Abfrage kontinuierlich ablaufen zu lassen, sodass die Werte auch aktualisiert werden. Das geht natürlich mit while(1), allerdings flackert dann die Anzeige, weil der Text erst gelöscht werdne muss, ansonsten wird alles hintereinander geschrieben.
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

ja klar, xampp kenn ich, arbeitet man ja, wenn man lokal entwickelt, eigentlich immer mit ;)

frage ist nur, inwieweit leute das nutzen und was es bringen soll.
weil von außen auf den pc kriegen die wenigsten hin, ist auch eher nen sicherheitsrisiko..
und at braucht ja keinen neuen server dafür hosten. die haben wahrscheinlich eh nen root und brauchen nur ne neue db anlegen ;) aber hast recht, das ist eher unwahrscheinlich...
deswegen ja sourceforge ;) da kriegt man sowas gestellt.


Edit: gibts keinen clear befehl?
 
Zuletzt bearbeitet:
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Solange es keine Kosten verursacht, kann man natürlich auch diese Möglichkeit in Betracht ziehen.

Ich halte es nämlich schon für sinnvoll, wenn man extern auf seine Messdaten zugreifen kann, auch auf schon gespeicherte Werte.

Ich schlage vor, dass du wartest, bis das Programm von der Grundfunktion her läuft, und dann beginnst du mit einer einfachen Datenbank für die Messwerte (Internal, Temp1-Temp5, Durchfluss, Fan1/Pumpe-Fan4). Die Werte kannst du dann einfach aus der Log Datei des C-Programmes auslesen.


Edit: Doch, system("Cls"); Allerdings flackert es ja, weil der Inhalt der Konsole gelöscht und anschließend neu beschrieben wird.
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Jop auch wieder wahr. Ich denke das lässt sich in ner Console auch nicht sonderlich gut beheben, von daher würd ich immer 15 Zeilen ausgeben untereinander und die oberste immer weglöschen. Weißt du was ich mein?
Loggen kannst du ja trotzdem.
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Huch mein Name fällt.

ja was ihr mit der Programmierung macht bzw wie ist eure Sache da ich nicht viel Ahnung von C habe. Delphie wäre eher mein Fall gewessen aber das habe ich mit L.B schon besprochen und wir haben uns auf C geeinigt.

Also wenn zcei lust und Zeit hat kann er gerne Mitmachen. Vlt entwickeln wir bald ein eigenes Programm anstelle der HM software. (Die ich nicht mehr aufrufen kann). :daumen:

Nichts desto trotz bin ich mit meinen Aufgaben auch ganz gut ran. hype stellt sich nicht mehr quer und auch die anderen experimente funktionieren. :hail:
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Ich bin jetzt über da Wochenende nicht zuhause, weshalb ich kaum mit dem Programm weiterkommen werde. (Notebook mit Vista :schief:)

Es wäre auf jeden Fall klasse, wenn wir einen Datenbankanwendung für unsere Software hätte, denn das würde das Programm deutlich attraktiver machen. ;)

@zcei: Ich habe verstanden, was du mit dem zeilenweisen Schreiben und Löschen meinst. Allerdings werde ich das Programm am Ende sowieso so schreiben, dass es im Hintergrund läuft, sodass eine Benutzeroberfläche entfällt. Das dient momentan mehr zur Kontrolle.

Die grafische Ausgabe könnte man dann lieber über ein PHP Script im Browser realisieren, in dem direkt die Datenbank angesprochen und beschrieben wird.


@Nobody: Auf die Software des Heatmasters werden wir vorerst nicht verzichten können, denn irgendwie muss man ja den Treiber ansprechen und die Messwerte aufnehmen.
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Naja wenn das Programm irgendwann steht und es an die Verbesserungen geht kann man schon die HM software "umgehen".
Wenn man nur low-level genug programmiert kann man auch den heatmaster ansprechen.

Eine Idee wäre es das Programm zu Assambler zu Dekompilieren und zu sehen wann welcher Speicherbereich oder was auch immer angesprochen wird.
Das wird aber aufwändig und ist echt nur ganz am Ende zu empfehlen
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Naja erstmal wollen wir sehen das das Programm läuft. Danach können wir immer weiter verbessern.

Und ich muss endlich mal die HM Software zum rennen bekommen. Weil auf den Patch der bald kommt will ich nicht warten.

Achja es kommt ein Patch falls ihr es noch nicht wisst.
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Schöner Thread, hab zwar keine Wakü aber trotzdem durchaus interessant. :)
Und C ist btw. eine prozedurale Programmiersprache und keine Objektorientierte Programmiersprache.
C++ dagegen kann prozedural und/oder Objektorientiert sein.
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Eine Idee wäre es das Programm zu Assambler zu Dekompilieren und zu sehen wann welcher Speicherbereich oder was auch immer angesprochen wird.
Das wird aber aufwändig und ist echt nur ganz am Ende zu empfehlen
Wird ohne Debugging-Symbole aber keine leichte Angelegenheit (wenn man fit in x86 ASM ist -- ansonsten sollte man es erst garnich probieren)...
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Das ist schon klar, war auch eher eine hypothetische Aussage!
Wird wahrscheinlich garnicht umgeseetzt werden bzw wenn dann nur als "Spaß" nebenbei, der erst angekündigt wird wenn man es nach gefühlten 3 Jahren fertig hat. :ugly:
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Hier ist ja Einiges los. :)

Zuerst einmal wird die Grundfunktion in C programmiert, danach kann man imer noch Ergänzungen bzw. Verbesserungen vornehmen. Das Prinzip der Software ist ja relativ einfach, schließlich wird nur ein String von einer Datei in eine andere kopiert. Wobei hier noch die passende Datei für das LCD Programm gefunden werden muss.
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Momentan hänge ich an einem Problem und komme nicht weiter. Ich möchte nämlich mehrere einzelen Ziffern (als char Datentyp gespeichert) in einen einzigen String packen und in eine globale Variable (volatile) speichern. Hat jemand eine Idee, wie ich das machen könnte?

Theoretisch müsste es ja ganz einfach sein, denn es müssen nur vier der "character" zu einem String zusammengefasst werden.
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Meine beschränkten Kenntnisse:

Code:
char c[4]; <-- wos reinsoll - länge 4
char a[]="a"; <-- dein einer char
strcpy(c,a); <-- der char wird nach c kopiert

wenn du das mit deinen 4 chars machst sollte das doch gehen oder :huh:
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Danke für den Tipp, zcei. ;) Soweit war ich allerdings auch schon und die Sache ist schon etwas komplizierter, denn char c ist eine globale Variable und char a eine Variable, in der der character gespeichert ist.

Allerdings gibt es eine Notlösung, die zwar nicht sonderlich elegant ist, allerdings funktioniert. Und zwar kann ich einfach sehr viele Variablen definieren, sodass ich für jeden Messwert "Zehner", "Einer", "Komma" und "Dezimale" einzeln definiere. Dann gibt es keinerlei Probleme, es ist nur etwas semiprofessionell. :schief:


Edit: Step One ist erledigt. Die Messwerte werden jetzt korrekt eingelesen und sind global verfügbar, sodass ich sie nun problemslos in der Schreib-Funktion verarbeiten kann.
 
Zuletzt bearbeitet:
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

ich finde es klasse das ihr eucht der sache widment !
Weil ich immoemnt selber entscheiden muss ob ich mir ne aquaero oder ein hm + ein shcickes display hole wovon ich keinen plan habe ;D
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Nimm den Heatmaster und ein 4x20Zeichen Character LCD, das ist die optimale Kombination. Mit unserer Software stellt eine Übertragung der Messwerte auf das LCD ja kein Problem mehr da. Warte aber bis die Software läuft, denn zuerst muss ich die Übertragung der Messwerte in LCD Hype hinbekommen. ;)


Edit: Ich möchte euch die gestrigen Erfolge nicht vorenthalten. Der Quellcode sieht jetzt wie folgt aus:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>
#include <tchar.h>
#include <windows.h>



//globale Variablen definieren 

//Sub-Variablen  
char Zehner_Internal;
char Einer_Internal;
char Komma_Internal;
char Dezimale_Internal;
     
char Zehner_temp1;
char Einer_temp1;
char Komma_temp1;
char Dezimale_temp1;
     
char Zehner_temp2;
char Einer_temp2;
char Komma_temp2;
char Dezimale_temp2;
     
char Zehner_temp3;
char Einer_temp3;
char Komma_temp3;
char Dezimale_temp3;


/*************Lesefunktionen***********************/

//LOG Datei der HM Software auslesen

void rdpm() //Messwertaufnahme
{          
     //Dateistream öffnen
     FILE *t;// Dateistream definieren (Pointer)
     
     //zum reinen Lesen öffnen
     t = fopen("C:\\Program Files (x86)\\Alphacool\\Heatmaster 2009\\log.txt","r"); 
     
     if(t==NULL) //falls die Datei nicht geöffnet werden kann...
     {
           printf("Streaming Error\n");
           system("pause");
     }              
         
     //LESEN DER WERTE    
     //Internal lesen
     fseek(t, -110L, SEEK_END);  //letzte Zeile, der LOG erster Wert
     Zehner_Internal = fgetc(t); //1. Zahl einlesen
     Einer_Internal = fgetc(t); 
     Komma_Internal = fgetc(t); 
     Dezimale_Internal = fgetc(t);          
     
     fseek(t, 1L, SEEK_CUR); //Zeichen (;) überspringen
      
     //temp1 lesen
     Zehner_temp1 = fgetc(t); 
     Einer_temp1 = fgetc(t); 
     Komma_temp1 = fgetc(t); 
     Dezimale_temp1 = fgetc(t);
     
     fseek(t, 1L, SEEK_CUR); //Zeichen (;) überspringen
     
     //temp2 lesen
     Zehner_temp2 = fgetc(t);
     Einer_temp2 = fgetc(t); 
     Komma_temp2 = fgetc(t); 
     Dezimale_temp2 = fgetc(t);
     
     fseek(t, 1L, SEEK_CUR); //Zeichen (;) überspringen
     
     //temp3 lesen 
     Zehner_temp3 = fgetc(t); 
     Einer_temp3 = fgetc(t); 
     Komma_temp3 = fgetc(t); 
     Dezimale_temp3 = fgetc(t);
     
     
     //AUSGEBEN DER WERTE IM CMD
     //Internal ausgeben
     printf("Internal: ");
     printf("%c", Zehner_Internal); 
     printf("%c", Einer_Internal);
     printf("%c", Komma_Internal);
     printf("%c^C\n", Dezimale_Internal);
     
     //temp1 ausgeben
     printf("Temp1:    ");
     printf("%c", Zehner_temp1);
     printf("%c", Einer_temp1);
     printf("%c", Komma_temp1);
     printf("%c^C\n", Dezimale_temp1);
     
     //temp2 ausgeben
     printf("Temp2:    ");
     printf("%c", Zehner_temp2);
     printf("%c", Einer_temp2);
     printf("%c", Komma_temp2);
     printf("%c^C\n", Dezimale_temp2);
     
     //temp3 ausgeben
     printf("Temp3:    ");   
     printf("%c", Zehner_temp3);
     printf("%c", Einer_temp3);
     printf("%c", Komma_temp3);
     printf("%c^C\n", Dezimale_temp3);     
}


/******************Schreiben-Funktion**************/

void write()
{
     //...dann Dateistream öffnen
     FILE *s;// Dateistream definieren (Pointer)
     
     //zum reinen Schreiben öffnen
     s = fopen("C:\\Users\\Lukas\\AppData\\Roaming\\LCDHype\\test.txt","w"); //LOG Datei wird geöffnet
     
     if(s==NULL) //falls die Datei nicht geöffnet werden kann...
     {
           printf("Streaming Error\n");
           system("pause");
     }
     
     
     fseek(s, 0L, SEEK_SET); //Pointer setzten
     
     //Internal ablegen
     fputc(Zehner_Internal, s);
     fputc(Einer_Internal, s);
     fputc(Komma_Internal, s);
     fputc(Dezimale_Internal, s);
     fputs("\n", s);
     
     //temp1 ablegen
     fputc(Zehner_temp1, s);
     fputc(Einer_temp1, s);
     fputc(Komma_temp1, s);
     fputc(Dezimale_temp1, s);
     fputs("\n", s);
     
     //temp2 ablegen
     fputc(Zehner_temp2, s);
     fputc(Einer_temp2, s);
     fputc(Komma_temp2, s);
     fputc(Dezimale_temp2, s);
     fputs("\n", s);
     
     //temp2 ablegen
     fputc(Zehner_temp3, s);
     fputc(Einer_temp3, s);
     fputc(Komma_temp3, s);
     fputc(Dezimale_temp3, s);
     fputs("\n", s);
}



/******************LOG-Funktion********************/
/*
void LOG()
{    
     //Funktion für die Uhrzeit
     struct tm *Zeit;
     long Jetzt;
     time(&Jetzt);
     Zeit = localtime(&Jetzt);     
     
     
     
     //erstmal die Messwerte und andere Zahlen in Zeichenketten umwandeln...
     //1. Durchfluss
     char Durchfluss[20];  //String
     sprintf(Durchfluss,"%d",DF);  //Umwandlung 
     printf("Durchfluss: %s\n",Durchfluss); //Ausgabe 
     
     //2. Wassertemperatur
     char Wassertemperatur[20];  
     sprintf(Wassertemperatur,"%d",Wa_Tp);  
     printf("Wassertemperatur: %s\n",Wassertemperatur); 
     
     //3. Datum
     char Jahr[20];
     char Monat[20];
     char Tag[20];
     sprintf(Jahr,"%d",Zeit->tm_year + 1900);  
     sprintf(Monat,"%d",Zeit->tm_mon + 1);  
     sprintf(Tag,"%d",Zeit->tm_mday);
     
     //4. Uhrzeit
     char Stunde[20];  
     char Minute[20];
     char Sekunde[20];
     sprintf(Stunde,"%d",Zeit->tm_hour);  
     sprintf(Minute,"%d",Zeit->tm_min);  
     sprintf(Sekunde,"%d",Zeit->tm_sec);  
          
                                        
     
     //...dann Dateistream öffnen
     FILE *f;// Dateistream definieren (Pointer)
     f = fopen(".\\data\\LOG.txt","w"); //LOG Datei wird geöffnet
     
     if(f==NULL) //falls die Datei nicht geöffnet werden kann...
     {
           printf("Streaming Error\n");
           system("pause");
     }
     
     //...dann Zeichenketten in die LOG Datei schreiben
     fputs("\nMesswertaufzeichnung:\n\n", f);
     fputs("Datum:\n",f);
     fputs(Tag,f);
     fputs(".",f);
     fputs(Monat,f);
     fputs(".",f);
     fputs(Jahr,f);
     fputs("\n\nUhrzeit:\n",f);
     fputs(Stunde,f);
     fputs(":",f);
     fputs(Minute,f);
     fputs(":",f);
     fputs(Sekunde,f);     
     
     
     fputs("\n\n\nDurchfluss: ",f);
     fputs(Durchfluss,f);
     fputs("\nWassertemperatur: ",f);
     fputs(Wassertemperatur,f);
     fputs("\n",f);
}
*/


/*********************main*************************/

int main(int argc, char *argv[])
{    
    system("color 1F"); 
    
    //LCD Hype starten... (im Hintergrund)
    //ShellExecute(NULL,"open","C:\\Program Files (x86)\\LCDHype\\lcdhype.exe",NULL,NULL,SW_MINIMIZE);
    //ShellExecute(NULL,"open","C:\\Program Files (x86)\\Alphacool\\Heatmaster 2009\\Heatmaster.exe",NULL,NULL,SW_MINIMIZE);
    
    
    //while(1) //Hauptschleife  [soll alle 2 Sekunden aufgerufen werden]
    //{ 
         
         printf("\nControlCenter\n");
         printf("Datenerfassungssystem\n\n\n");  
      
         //...dann die Funktionen ausführen
      
         rdpm();  //Werte lesen
         //system("Cls");
    
     
         //hier kommt noch eine Schleife hin {}
         //    LOG();    //LOG 
        
         //Schreiben-Funktion
         write();
    //}
    system("pause");
    return 0;  
}
Edit: Ich habe das Programm noch einmal angehängt und die exe hat jetzt auch ein Symbol. ;)
 
Zuletzt bearbeitet:
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Nach einer kurzen Google-Anfrage, was dieses LCDHype überhaupt is, habe ich gesehen, dass die ein Plugin-System haben. Ich stelle jetzt mal die Behauptung auf, man könnte die Daten direkt an LCD Hype senden. Wenn man jetzt noch die Daten von diesem Heatmaster direkt anzapfen könnte, wäre kein Umweg über die Dateien mehr notwendig. Allerdings müsste man für das Anzapfen des Heatmaster mehr über den Aubau wissen. Hab mir mal das Paket runtergeladen und nen ersten Blick drauf geworfen. Da es sich netterweise unter anderem um Treiber handelt, ist Reverse Engineering schonmal ne Stufe krasser geworden. Vielleicht bekommt man ja Auskunft von Alphacool, wenn man lieb fragt :ugly:

Zum Code an sich: Sieht soweit ganz brauchbar aus ("nich schön, aber selten" :D - kleiner Spaß am Rande). Wenn ihr fertig seid bzw. euch der Fertigstellung nähert, würde ich euch anbieten, einen Blick zwecks Optimierungen drauf zu werfen - natürlich unverbindlich! Die system()-Funktion zählen z. B. zur Kategorie der Dinge die man machen kann, aber aus mehren Gründen nicht machen sollte ;)
 
AW: [Projekt] Messdatenverarbeitung für den Alphacool Heatmaster

Ich befasse mich wie gesagt noch nicht allzu lange mit nicht objektorientiertem C (um genau zu sein seit drei Wochen), weshalb es mir natürlich noch an fundiertem Hintergrundwissen fehlt. Deshalb begrüße ich deinen Vorschlag sehr. ;)

Bezüglich des Quellcodes haben wir bereits angefragt, allerdings ohne Erfolg. Eventuell bekommen wir ihn, wenn wir unsere ersten Ergebnisse vorweisen können, sodass Alphacool auch sicher weiß, dass wir den Quellcode nur für das Programm benötigen.

Ich denke, dass wir bei LCD Hype auf jeden Fall über die Plugin Schnittstelle arbeiten müssen, da ich keine Config Datei gefunden habe, in die man die Daten schreiben kann, sodass sie auf dem LCD ausgegeben werden können. Das muss ich mir aber noch einmal genauer angucken.
 
Zurück