Forum: PC-Programmierung mit µC in Excel schreiben


von Fritz F. (beni123)


Lesenswert?

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
von Anja (Gast)


Lesenswert?

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?

von Bal T. (baltic)


Lesenswert?

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

von Fritz F. (beni123)


Lesenswert?

Danke für die schnelle Antwort.

Mein Problem ist aber nicht nur das Speichern in Excel, sondern das 
speichern (egal wohin) im Allgemeinen.

von Vlad T. (vlad_tepesch)


Lesenswert?

mit durchschnitltichen c++-Kenntnissen, sollte es kein Problem sein, 
einen Filestream zu öffnen und die Daten da reinzuschreiben.

von abraxas (Gast)


Lesenswert?

google, "vc++ datei schreiben"
ersten 10 links durchlesen
bei detailproblemen fragen

von Fritz F. (beni123)


Lesenswert?

naja durchschnittlich ist eine definitions frage

von Rainer (Gast)


Lesenswert?

Hier http://www.b-kainka.de/buch2.htm könnte man Beispiele finden.

Rainer

von (Gast) (Gast) (Gast) (Gast)


Lesenswert?


von (Gast) (Gast) (Gast) (Gast)


Lesenswert?


von (Gast) (Gast) (Gast) (Gast)


Lesenswert?


von Fritz F. (beni123)


Lesenswert?

danke an alle

werde mir das vorgeschlagene jetzt einmal anschauen

von ... (Gast)


Lesenswert?

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

von Tom E. (tkon)


Lesenswert?

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

von Jean P. (fubu1000)


Lesenswert?

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ß

von Andreas W. (geier99)


Lesenswert?

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

von Ronny (Gast)


Lesenswert?

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

von Fritz F. (beni123)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Pezi (Gast)


Lesenswert?

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. ;)

von Chris (Gast)


Lesenswert?

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.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Eine Beschreibung des Excel-Formates gibts hier:

http://sc.openoffice.org/excelfileformat.pdf

Frank

von Fritz F. (beni123)


Lesenswert?

@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.

von alfred (Gast)


Lesenswert?

>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?

von Detlev T. (detlevt)


Lesenswert?

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

von Toni Holiday (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Vlad T. (vlad_tepesch)


Lesenswert?

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

von Detlev T. (detlevt)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

> ich finde deinen Kommentar ("lächerlich") ziemlich unqualifiziert.

Naja, is halt ne "Quick & Dirty" Methode.

von Karl H. (kbuchegg)


Lesenswert?

Klaus schrieb:
>> ich finde deinen Kommentar ("lächerlich") ziemlich unqualifiziert.
>
> Naja, is halt ne "Quick & Dirty" Methode.

Ziemlich "Dirty"

von Karl H. (kbuchegg)


Lesenswert?

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.

von Gast? (Gast)


Lesenswert?

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".

von Vlad T. (vlad_tepesch)


Lesenswert?

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.

von Detlev T. (detlevt)


Lesenswert?

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."

von Fritz F. (beni123)


Lesenswert?

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.

von Vlad T. (vlad_tepesch)


Lesenswert?

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?

von Fritz F. (beni123)


Lesenswert?

ab der version 2007

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
Noch kein Account? Hier anmelden.