Serielle Schnittstelle mit VB auslesen und in Excel Darstellem

Gast #2986915
Lesenswert?

Hallo Leute,

Ich stehe momentan vor einer für mich schwierigen Aufgabe.
Und zwar möchte ich einen Datenlogger mit einem Mikrocontroller basteln 
zum aufzeichen von Temperaturen.
Dieser Datenloger soll wenn er fertig ist zwischen 10 und 25 Kanäle 
haben aber genau weiß ich das noch nicht.

Die Programierung des Mikrocontollers ist für mich kein problem auch 
nicht das Senden über die Serielle Schnittstelle, zumindest mit 
Hyperterminal.
Nun möchte ich aber gerne die Daten in Echtzeit in Excel speichern und
einen Grafen erstellen.

Ich habe jetzt auch schon eine ganze weile nach passenden Projekten mit 
Visual Basic gesucht aber nie genau das gefunden was ich brauche.
Da ich auch leider nicht viel ahnung habe von Visual Basic verstehe ich 
auch die meisten projekte leider garnicht und Kann sie somit auch nicht 
für meinen Zweck umschreiben.

Nun ist die frage ob jemand vieleicht schon so etwas gemacht hatt und 
mir sein Projekt geben könnte möglichst so Kommentiert das man es gut 
verstehen kann um es einfach zu erweitern.

Und zwar soll es wie folgt ausehen:
Ich sende mit dem Mikrocontroller die werte zb. 1020,1100,3010
wobei die Erste Zahl Kanal 1 ist und die Zeite Zahl Kanal 2  usw. die 
ersten beiden Ziffern sind die Vorkommerstellen und die Letzen beiden 
die Nachkommerstelle.
Diese Zahelen sollen dan in einer Excel Datei dargestellt werden in 
Spalte 1 Kanal 1, in Spalte 2 Kanal 2 usw.

Kann mir da jemand neterweise mit weiterhelfen?
Gast #2987110
Lesenswert?

Eigenschändlich musst Du die Demo nur noch auf Deine Anforderungen 
anpassen. Zum Beispiel die Schnittstellenparameter und die Zeichen die 
Du senden willst. Mit Alt-F11 kommst Du ins VB. Über den 
Projekt-Explorer (Ctrl-R) kannst Du Dir dann die beteiligten Formulare 
und Quellen ansehen und bearbeiten.

gk
Gast #2987886
Lesenswert?

Okay ich habe es jetzt soweit zumindest schon einmal das meine 
gesendeten daten empafangen werden.
Ich weiß jetzt nur nicht wie ich diese auftrennen kann das bedeutet ich 
sende jetzt zb. 1200, 1320, 1450, 1110 dan warte ich ca. 10 sek und dan 
soll die nächste folge kommen zb. 1220, 1400, 1830, 1200 und angezeigt 
werden soll das dann in unterschiedlichen spalten entwar so:

Kanal 1     Kanal 2     Kanal 3     Kanal 4
 12,00       13,20       14,50       11,10
 12,20       14,00       18,30       12,00

weiss jemand vieleicht wie ich das Empfangene Singnal auftrenne das er 
mir daws so anzeigt?
#2989757
Lesenswert?

Smoke schrieb:
> Okay ich habe es jetzt soweit zumindest schon einmal das meine
> gesendeten daten empafangen werden.
> Ich weiß jetzt nur nicht wie ich diese auftrennen kann das bedeutet ich
> sende jetzt zb. 1200, 1320, 1450, 1110 dan warte ich ca. 10 sek

Mach dir gleich mal als allererstes in die Übertragung #NACH# einer 
'Serie' von Daten einen Zeilentrenner (\n) rein!.
Dann hast du logische Zeilen.
d.h. dein VB Programm liest erst mal eine komplette Zeile als String 
ein. Hat es eine Zeile, dann zerlegt es die mittels Stringbearbeitung an 
den ',' in Einzelteile. Da kann dann zb schon die erste Prüfung 
stattfinden, denn in deinem Fall müssen das 4 Einzelteile sein, die sich 
allesamt in Zahlen umwandeln lassen müssen. Und genau das machst du dann 
auch: die 4 Teilstrings in Zahlen umwandeln, durch 100 dividieren und 
ins Arbeitsblatt eintragen.


Aber du hast es in der Hand, den sendenden µC so umzuprogrammieren, dass 
dir die Auswertung des gesendeten leicht von der Hand geht. Und eine 
extrem gute Idee ist es praktisch immer, wenn man erst mal eine Struktur 
in die Datenübertragung bringt, anhand der der Sender einzelne 
'Datensätze' leicht identifizieren kann.
Das ist übrigens beim Dateihandling ganz genau gleich: Es liegt an der 
Funktion, welche Daten auf eine Datei schreibt, ob es einfach möglich 
ist, die Daten wieder von der Datei geordnet und richtig zu lesen.

> weiss jemand vieleicht wie ich das Empfangene Singnal auftrenne das er
> mir daws so anzeigt?

Stringverarbeitung.
Was dir VB in der jetzigen Version anbietet, weiß ich nicht. Da musst du 
halt mal ein wenig Tutorien bzw. Literatur bzw. das Helpsystem 
studieren. Aber eine Funktion, die in einem String ein Zeichen sucht 
(bei dir der ','), den gibt es in jeder Programmiersprache. Die 
Komfort-Variante ist eine Splitfunktion, der man den Originalstring 
gibt, dazu das Trennzeichen und welches einen 'Container' (Array, Liste, 
was auch immer) zurückliefert, in der die auf diese Art aufgetrennten 
Einzelstrings enthalten sind. Ob das jetzige VB so etwas hat oder nicht, 
weiß ich nicht.
#2989771
Lesenswert?

> Da ich auch leider nicht viel ahnung habe von Visual Basic
> verstehe ich auch die meisten projekte leider garnicht

Die hatte ich auch nicht. Genau gesagt hatte ich von VB6 nicht die 
geringste Ahnung.
Und trotzdem hab ich ein VB6 Projekt übernommen und weitergeführt.

Also: rann an die Buletten. Du kannst nur dabei lernen! Wenn du 
programmieren kannst, dann kannst du die meisten Programmiersprachen aus 
der selben Sprachfamilie auch lesen. VB, C, C#, C++, Pascal, Algol, 
PL/I, Fortran, .... ja, klar. Die haben natürlich alle ihre 
Besonderheiten. Aber die Grundprinzipien sind dann doch überall sehr 
ähnlich. Anweisungen werden sequentiell in der angegebenen Reihenfolge 
abgearbeitet. Es gibt Verzweigungen, Schleifen und eine Möglichkeit der 
Modularisierung (sprich Funktionen). Gerade in VB sind ausgefallenere 
Datenstruktur-Elemente eher selten zu finden. Und den Rest, die im 
vorliegenden Beispiel benutzen Funktionen, die kann man mit dem 
Hilfe-System schnell nachlesen. Gerade VB macht es einem da einfach.

Also: Lesen und Zusammenhänge rausholen kannst du Programme in vielen 
Programmiersprachen. Schreiben ist dann ein wenig aufwändiger. Speziell 
Programm schreiben, wobei man bei 0 beginnen muss.
Aber die Ausrede: Ich versteh nichts von VB, also sehe ich mir die Demos 
erst gar nicht an ... die lass ich nicht gelten. Wenn BWL-er das können, 
dann kannst du das auch.
Gast #2989812
Lesenswert?

Ich dachte das Problem sei schon längst gelöst. Die klassische Basic 
Funktion zum Aufteilen von Strings war MID$. Beim Gurgeln findet man 
dann noch die Funktion .SPLIT. Jetzt musst Du nur noch Deine Tabelle 
erweitern und die aufgeteilten Strings in die Zellen verteilen. Wie das 
geht sollte aus dem vorhandenen Demo ersichtlich sein.

gk
#3514445
Lesenswert?

Ich habe das exel Beispiel herunter geladen. Und beim Starten hat er 
gefordert, im desclimer => "Private Declare PtrSafe Function" 
einzutragen.


Jetzt geht´s! ich habe noch Treiber für den USB I2C ELV umsetzter 
installiert. Jetzt gibt es auch einen Com Port, und ich kann mir das 
Programm genauer anschauen :)))

Danke Carsten
#3536367
Lesenswert?

Hallo!


...... Es ging bis ich man mid dem Debugger durchgeschaut habe, um zu 
erkennen wo man etwas versenden kann.

Dann ist Exel total abgeschmiert und läßt sich nicht mehr abfangen. Ich 
hätte ja gedacht, daß irgendwann ein Timeout die Abfrag abbrechen würde 
- tut es aber auch nicht.
Aber auf dem Weg durch die Initialisierung habe ich festgestellt, daß 
das Programm so gut wie jede Einstellen die Ansteuerung der 
Schnittstelle haben kann gesetzt wird.

Da ist es für mich natürlich unmöglich alle Funktionen zu erlernen um 
den Fehler zu finden.

Was mich auch überrascht hat, ist, das offensichtlich ein Cash Speicher 
auf der Festplatte erstellt wird. Den will ich natürlich auch nicht, 
weil dann die Gefahr besteht, das die Festplatte nicht schnell genug 
ist. Das ist wohl eher was wenn man Datenmengen laden will.

Ich will ja nur aktuelle Temperaturen auslesen. Wenn da mal eine Messung 
außen vor bleibt, habe ich damit kein Problem, wohl aber wenn das 
Programm deshalb abschmiert.

Noch etwas, was mich irritiert. Wenn ich das richtig sehe, wird über das 
Bios der Treiber und dann der Port angesprochen. => Aber ohne 
Interrupt?! Dann wäre es natürlich klar, das Exel abschmiert, wenn VBL 
nicht denn Timout abfragt.


Sagt mal was <ihr mir empfiehlt.

Carsten

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren