Hallo Ich habe folgendes Problem: Ich habe einen µC der laufend Messungen durch führt und diese speichert. Nun möchte ich dieses Programm erweitern, damit ich diese Daten (über serielle Schnittstelle) auf meinen PC bekomme. Das ganze sollte in etwa so ablaufen: ich sage den µC vom PC aus das er mir die Daten schicken soll und wenn ich sie dann empfangen habe, möchte ich diese in ein Excel-Dokument speichern. Die Frage(n) bezieht sich auf das PC-Programm: Ich habe keinen Plan wie ich dies realisieren soll noch welche Sprache ich verwenden soll. Kenntnisse: VB keine, C++ durchschnittlich, alles andere keine Mit C++ (Windows Forms-Anwendung) habe ich schon eine Programm für die Kommunikation zwischen µC und PC, nur bei der Excel Anbindung scheitere ich. Ich hoffe es kann mir wer helfen. mfg
:
Verschoben durch Admin
Warum speicherst Du das ganze nicht einfach im CSV-Format (also mit Semikolons oder Tab's zwischen den Daten) und liest das Ganze dann ein?
Hallo, evtl. wäre die Erzeugung einer CSV-Datei (einzelne Werte + Trennzeichen) ein brauchbarer Kompromiss. Die Dateien lassen sich i.d.R. problemlos von Excel öffnen. Gruß Jens
Danke für die schnelle Antwort. Mein Problem ist aber nicht nur das Speichern in Excel, sondern das speichern (egal wohin) im Allgemeinen.
mit durchschnitltichen c++-Kenntnissen, sollte es kein Problem sein, einen Filestream zu öffnen und die Daten da reinzuschreiben.
google, "vc++ datei schreiben" ersten 10 links durchlesen bei detailproblemen fragen
Als Alternative zu CSV bietet sich auch noch das SYLK Format an (Dateiendung .slk). Ebenfalls ein reines ASCII-Format, daher auch relativ leicht zu schreiben, bietet aber mehr Möglichkeiten als CSV. Einfach mal nach gurgeln. CU
Mittels VBA in Excel kannst die port.dll Datei ansprechen und über diese seriell kommunizieren. Edit: wenn ich mich recht erinnere wird es auch so im Kainka Buch umgesetzt
Hi, wenn du Visual Studio benutzt ist das alles sehr simpel. Datei speichern: System::IO::File::WriteAllLines oder Bytes oder Text benutzen. Falls du Zusätzlich noch auf deinem Windows irgend ein Office laufen hast, die Obejct Lib einbinden. Einfach rechts klick auf dein Solution Explorer, dann References auswählen. Anschliessend "Add New Reference" auswählen und unter Register Karte "COM" ,die Microsoft Office xxx Object Library einbinden. Falls dies nit vorhanden kann ich dir noch die "miniexcel lib" empfehlen. Gruß
Hi, oder mache es doch direkt mit VB in Excel. Suche mal nach: MSComm2 , MSComm oder lies mal das: http://www.activevb.de/tutorials/tut_com/com.html Bye
Oder gleich in fertig.... Such mal nach "hterm derhammer". Das Tool kann empfangene Daten u.a. als Hex oder Ascii interpretieren und auch als solches speichern. Wenn dein Controller die Daten mit einem abschliessendem Zeilenumbruch (und ggf. vorher noch einem Semikolon) sendet, kannst du dass aus HTerm gespeicherte direkt in OpenOffice Calc oder auch Excel per Paste einfügen (Copy As Ascii) oder den gesichterten Dump (Save As...) öffnen. Gruß, Ronny
Danke nochmal für die vielen Antworten. Mit VB möchte ich mich eigentlich nicht beschäftigen. Habe jetzt einen C++ Code gefunden mit dem ich in ein Textdokument schreiben kann. Das mit Excel vergessen wir vorerst mal. #include <fstream> using namespace std; int main() { fstream datei; datei.open("datei_schreiben.txt", ios::out); datei << "Textdatei schreiben." << endl; datei.close(); } Mein Porblem ist dieser Code funktioniert nur in Konsolen Anwendungen und nicht in Windows Forms Anwendung (in der ich schon graphische Oberfläche und die Serielle Anbindung habe). Also mir wäre es am liebsten bei C++ (Windows Forms) zu bleiben. Also kann mir dabei wer helfen?
Fritz Franz schrieb: > Mein Porblem ist dieser Code funktioniert nur in Konsolen Anwendungen > und nicht in Windows Forms Anwendung Warum soll das da nicht funktionieren? Das ist stink normales Standard-C++. Nichts aussergewöhnliches. Dein Problem wird eher sein, dass du in Wirklichkeit nicht C++ sondern das MS-Geraffel 'Managed-C++' programmierst. Aber auch dort gibt es sicherlich Stream-Klassen, mit denen du einen String aus der unmanaged Umgebung in die managed Umgebung oder umgekehrt bringen kannst. Da wirst du dann eben ein wenig dein Framework studieren müssen. Das bleibt dir nicht erspart. Dateihandling ist schliesslich eines der Grundbausteine jeder ernstzunehmenden Programmiersprache.
Hast du dir schon mal überlegt die Daten als XML zuspeichern? Ich bin jetzt leider in C++ nicht so vertieft, aber in VB oder Delphi ist das relativ einfach. Kann mir nicht vorstellen dass das bei C anders ist. Vorteil wäre das du mit mit XML die Daten in nahezu jeden Programm auslesen kannst, auch Excel. ;)
Da gibts etliche Tools die Daten von der seriellen Schnittstelle übernehmen und sie auf die Tastatur umleiten. Damit könntest das realisieren. Z.B. Serikey. Somit bräuchtest auf PC-Seite keine Software schreiben.
@Karl heinz Buchegger du hattest recht habe jetzt auch schon eine Möglichkeit gefunden in ein Textdokument zu schreiben. freu @ all: danke für die hilfe, werde jetzt noch versuchen in excel statt in eine textdokument zu schreiben. Wenn ich genauere Fragen habe werde ich mich wieder melden.
>Da gibts etliche Tools die Daten von der seriellen Schnittstelle >übernehmen und sie auf die Tastatur umleiten. Was machen die Daten dann auf der Tastatur? Blockiern sie die Tasten, oder lassen sie die CAPS-LOCK Led blinken?
Hallo Fritz, ich habe einmal mit dem V-USB-Treiber herumgespielt und dabei als Proof-Of-Concept auch ein Programm geschrieben, das (Pseudo-) Messdaten direkt in Excel "eintippt" indem es eine USB-Tastatur simuliert. Vielleicht ist das ja eine alternative Lösung. Den Sourcecode gibt es hier: http://www.cczwei-forum.de/cc2/thread.php?threadid=3197 (Die neueste Version findet sich im letzten Beitrag der Threads) Gruß, DetlevT
Tom Ekman schrieb: > Mittels VBA in Excel kannst die port.dll Datei ansprechen und über diese > > seriell kommunizieren. > > > > Edit: wenn ich mich recht erinnere wird es auch so im Kainka Buch > > umgesetzt Tom hat doch eigentlich schon alles gesagt. Ich kenne die Dll jedoch unter dem Namen http://www.b-kainka.de/rsapidll.zip. Wenn du wirklich vorhast die Daten unter Excel aufzubereiten, dann finde ich den Umweg über die in C++ eingelesene Datei unglücklich. Excel bietet alles an was du benötigst (ist zwar Basic, aber was solls :-)) ). Das Einbinden der Dll ist simpel und es gibt genügend Beispiele und Anleitungen dazu. Die restliche Programmierung in VBA ist reine Fleißarbeit und auch hier gibt es gute Quellen ftp://ftp.fernuni-hagen.de/pub/pdf/urz-broschueren/broschueren/b012.pdf und http://www.microsoft.com/downloads/details.aspx?FamilyID=2204a62e-4877-4563-8e83-4848dda796e4&displaylang=en. Na dann, vile Spass.
Detlev T. schrieb: > Hallo Fritz, > > ich habe einmal mit dem V-USB-Treiber herumgespielt und dabei als > Proof-Of-Concept auch ein Programm geschrieben, das (Pseudo-) Messdaten > direkt in Excel "eintippt" indem es eine USB-Tastatur simuliert. > Vielleicht ist das ja eine alternative Lösung. Das ist ja lächerlich. Den Computer kann man in dieser Zeit ja nicht benutzen. Da wär es ja soar noch besser, direkt an das Excelfenster die entsprechenden Windows-Nachrichten mit den Tastendrücken zu senden. Mir ist der Sinn dieser Übung komplett unklar. Wo ist der Vorteil, gegenüber dem Schreiben in ein csv-File? dies kann man in Excel, OpenOffice, gnuplot, octave, scilab, R laden und direkt in datenbanken importieren. Excel hat nämlich die äußerst unangenehme Eigenschaft, nur 65xxx Zeilen halten zu können (OOOcalc sogar nur 32000 (zumindest die letzte Version, wo ich das ausprobiert habe)). Nebenbei bemerkt: es gibt für excel APIs
Hallo Vlad, ich finde deinen Kommentar ("lächerlich") ziemlich unqualifiziert. Natürlich hat diese Methode auch Nachteile. Der Vorteil ist, dass die Daten direkt in das Spreadsheet eingetragen werden, ohne Zusatzsoftware, Treiber, zusätzliche Importschritte oder VBA-Skripte und auch unabhängig vom Betriebssystem. Man kann den Rechner in dieser Zeit nicht benutzen, das stimmt, aber will man das überhaupt? Man kann doch ohnehin erst nach der Übertragung weiterarbeiten. Excel mag nur 65000 Zeilen haben, aber um wie viel Daten handelt es sich hier überhaupt? Ein AVR-µC hat selten mehr als 128k RAM an Bord. Gruß, DetlevT
> ich finde deinen Kommentar ("lächerlich") ziemlich unqualifiziert.
Naja, is halt ne "Quick & Dirty" Methode.
Klaus schrieb: >> ich finde deinen Kommentar ("lächerlich") ziemlich unqualifiziert. > > Naja, is halt ne "Quick & Dirty" Methode. Ziemlich "Dirty"
Detlev T. schrieb: > vom Betriebssystem. Man kann den Rechner in dieser Zeit nicht benutzen, > das stimmt, aber will man das überhaupt? Man kann doch ohnehin erst nach > der Übertragung weiterarbeiten. In einem Punkt hast du recht: Es ist unglaublich, welchen Sch..ß Benutzer akzeptieren, wenn sie nur verzweifelt genug sind. Nur ein Beispiel von vielen, was alles passieren kann: Jeder Popoup, und sei er nur vom Virenscanner der dich benachrichtigt, dass er jetzt seinen Update fertig hat, schaltet den Input Focus um und damit landen deine simulierten Tastendrücke im Nirvana.
Ein ähnliches Problem hatte ich auch mal. Der µC legt auf einer SD-Karte Messwerte ab (prinzipiell eine .CSV-Datei), die dann später in eine Excel-Tabelle übernommen und als Diagramm dargestellt werden sollen. Natürlich kann man manuell die Datei einlesen und ein Diagramm erstellen. Da ich das aber wöchentlich machen musste und dabei noch je sieben Dateien zusammenfügen mussste, habe ich mir ein kleines Tool programmiert. Das ganze ist zwar in Delphi, aber ich denke, du siehst wie es funktioniert: http://subversion.leoandres.dyndns.org/filedetails.php?repname=BGCTRL.BiogasControl2.0&path=%2FPC%2FTools%2FLogToGraph%2FMain.pas Excel wird dabei von meinem Programm quasi ferngesteuert. Das wird sicher auch in C++ möglich sein. Du kannst Excel dabei auch im Hintergrund öffnen lassen und am Ende der Übertragung erst zeigen. Statt der CSV-Datei musst du für dein Programm eben die Daten vom Com-Port holen und durch den Interpreter jagen. Eigentlich keine große Sache, das schwierigste sind diese etwas krampfigen Ole-Objekte um Excel zu steuern. Falls das Tool jemand probieren will: http://subversion.leoandres.dyndns.org/filedetails.php?repname=BGCTRL.BiogasControl2.0&path=%2FPC%2F_Export%2FLogToGraph.exe Messwerte dazu: http://subversion.leoandres.dyndns.org/filedetails.php?repname=BGCTRL.BiogasControl&path=%2FMesswerte%2FTag+2%2F17122008.TXT Die Messpunkte erwartet das Programm als *.bgl Datei, einfach in Notepad kopieren und mit dieser Extension speichern. Falls es jemandem auffallen sollte: Ja, die Umrechungsfaktoren der A/D Wandler sind im Programm "hart" eingetippt. Die Software sollte noch erweitert werden, d.h. die Wandler im µC per RS232 kalibrierbar werden. Der µC hätte dann seine Kalibrations-Werte mit in die Messreihe gespeichert und das Tool hätte die dann verarbeitet. Leider ist das Projekt zum Erliegen gekommen, deswegen die "Krücke".
Detlev T. schrieb: > ich finde deinen Kommentar ("lächerlich") ziemlich unqualifiziert. finde ich nicht - jedem seine Meinung > > Natürlich hat diese Methode auch Nachteile. Die ganze Methode ist ein Nachteil. Das ist als wenn man jemanden Zuhause anstellt, der das Auto vor der Garage auseinandernimmt und durch das Fenster reicht, dann das Tor aufmacht, reingeht und das Auto drinnen wieder zusammenbaut. Detlev T. schrieb: > Man kann den Rechner in dieser Zeit nicht benutzen, > das stimmt, aber will man das überhaupt? Man kann doch ohnehin erst nach > der Übertragung weiterarbeiten. Das stimmt, warum sollte ich auch was anderes am Rechner machen, wenn mein Datenlogger eine Langzeitaufzeichnung macht. Detlev T. schrieb: > Excel mag nur 65000 Zeilen haben, aber um wie viel Daten handelt es sich > hier überhaupt? Ein AVR-µC hat selten mehr als 128k RAM an Bord. neimand hat was von zwischenspeichern gesagt. wenn du nur mit 100Hz logst, sind die nach 10min voll.
Vlad Tepesch schrieb: >> Excel mag nur 65000 Zeilen haben, aber um wie viel Daten handelt es sich >> hier überhaupt? Ein AVR-µC hat selten mehr als 128k RAM an Bord. > neimand hat was von zwischenspeichern gesagt. Doch! Im Startbeitrag von Fritz steht :"Ich habe einen µC der laufend Messungen durchführt und diese speichert."
Danke nochmal für die vielen Antworten. Habe mein Problem jetzt schon gelöst, in dem ich in ein csv File geschrieben habe. Ich habe einen Externen Speicher mit 8 MBit. Und im neuen excel kann man doch weit aus mehr als 65000 Zeilen haben, nämlich 1048576.
Fritz Franz schrieb: > Und im neuen excel kann > man doch weit aus mehr als 65000 Zeilen haben, nämlich 1048576. Na das ist ja wenigstens etwas. Ab welcher Version?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.