Forum: PC-Programmierung Serielle Schnittstelle mit VB auslesen und in Excel Darstellem


von Smoke (Gast)


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?

: Verschoben durch User
von Rainer U. (r-u)


Lesenswert?


von gk (Gast)


Lesenswert?


von Smoke (Gast)


Lesenswert?

Die Datei du du angehangen hast gk sieht schon ganz net aus. Aber das 
bringt mich nich nicht so ganz weiter weil ich da nicht durchblicke was 
wofür ist.

von gk (Gast)


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

von Smoke (Gast)


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?

von Smoke (Gast)


Lesenswert?

Push

von Karl H. (kbuchegg)


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.

von Karl H. (kbuchegg)


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.

von gk (Gast)


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

von Erst E. (ersteinmal)


Lesenswert?

Hallo!

Prima Hilfe   Fast :)

Wie mache ich das bei 64bit?

Danke Carsten

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Carsten Sauermann schrieb:
> Wie mache ich das bei 64bit?

bei 64bit VB geht es genau so wie bei 32bit VB ;-)

von Zwitscher (Gast)


Lesenswert?

Beitrag "Vorstellung: grafisches Terminal serielle Schnittstelle sTerm"

leider scheint der download nicht zu funktionieren, vielleicht einfach 
mal ne e-mail schreiben.

von Erst E. (ersteinmal)


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

von Erst E. (ersteinmal)


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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Carsten Sauermann schrieb:
> Wenn ich das richtig sehe, wird über das
> Bios der Treiber und dann der Port angesprochen.

Nein. Das BIOS spielt seit bald zwei Jahrzehnten keine Rolle mehr, das 
tat es nur für DOS-Programme.

von Erst E. (ersteinmal)


Lesenswert?

Hallo Rufus!

Das gehört ja nicht ganz zum Thema, aber ich bin ja selbst schuld, da 
ich es angesprochen habe.
Also mein Rechner Bj 2013 hat noch ein BIOS.

Aber wie gesagt, das ist ein anderes Thema.


Carsten

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.