Forum: PC-Programmierung Serielle Schnittstelle daten empfangen, wie anfangen?


von stairzup (Gast)


Lesenswert?

Hallo, ich muss zur zeit für die Schule ein Projekt machen, dabei 
handelt es sich um eine Wetterstation, dessen Messwerte an das Lemps12 
Mikrocontroller-System übergeben werden... Das ganze wird in C 
Programmiert und die Daten werden in einem Array gespeichert und ich 
kann sie auch z.B. mit printf an das Lemps-Terminal (das zur IDE gehört) 
ausgeben. Jetzt möchte ich aber ein Programm, am liebsten mit VB oder 
VBA (Excell) schreiben, das die Daten anzeigt und z.B. Visualisiert. 
Jetzt habe ich nur absolut keine ahnung wie ich das anstellen soll. 
Irgendwie muss es ja möglich sein. Ich habe schon versucht mit 
Programmen die den Com-Port auslesen aber irgendwie kriege ich es nicht 
hin. Würde es z.B. möglich sein mit VB die werte zu empfange die ich mit 
printf normalerweise ans Terminal sende? Ich weiß halt echt nicht wie 
ich anfangen soll und aus den vielen anderen Themen über die 
COM-Schnittstelle werde ich auch nicht schlauer...

Danke!

von Helfer (Gast)


Lesenswert?

>Würde es z.B. möglich sein mit VB die werte zu empfange die ich mit
printf normalerweise ans Terminal sende?
Ja

>Ich weiß halt echt nicht wie
ich anfangen soll
http://www.faustweb.de/download/download_soft.htm#VBA

von Helfer (Gast)


Lesenswert?

die exceldatei macht wohl nicht das was du willst sehe ich grad

aber bei der rsapi.dll ist eine doku dabei:
http://www.faustweb.de/download/download_soft.htm#dll
damit sollte es dann kein problem sein ein paar zeilen zu empfangen

viel erfolg bei deinem projekt

von stairzup (Gast)


Lesenswert?

Hi, Vielen Danke habe das ganze mal ausprobiert, aber so richtig 
geklappt hat es nicht. nun habe ich mit vb express versucht daten zu 
empfangen mit folgenden code:
das klappt auch soweit nur das er mir nur die erste zeile ausgibt... und 
wenn ich statt "SerialPort2.ReadLine" "SerialPort2.ReadExisting" nehme 
zeigt er mir nur die ersten drei buchstaben an und sonst nichts...
wie kann ich es machen das er z.B. jede zeile die geschickt wird einzeld 
mit "SerialPort2.ReadLine" ausgib?
1
    Private Sub bsf1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bsf1.Click
2
        SerialPort2.Open()
3
        Dim Incoming As String
4
        lst.Items.Clear()
5
        Incoming = ""
6
        While Incoming = ""
7
            Incoming = SerialPort2.ReadLine
8
            If Incoming <> "" Then lst.Items.Add(Incoming)
9
        End While
10
        SerialPort2.Close()
11
    End Sub

die ausgabe im c code vom programm das aufn mikrocontroller ist:
1
     printf("\n\n\n%u Lemps12 Messwerte\n",MessNr-1);
2
        printf("\nMW Nr:\t\n\n");
3
        for(MessNrb=1;MessNrb<MessNr;MessNrb++){
4
            printf("%u:\t%u Grad\n",MessNrb,Dat[MessNrb-1]);
5
        }

von Karl H. (kbuchegg)


Lesenswert?

Geh das

        Incoming = ""
        While Incoming = ""
            Incoming = SerialPort2.ReadLine
            If Incoming <> "" Then lst.Items.Add(Incoming)
        End While


einmal in Gedanken durch.
Wie lange läuft die while Schleife?
Welchen Wert hat Incoming nachdem die erste Zeile empfangen wurde?
Was bedeutet das für die Schleife?

von stairzup (Gast)


Lesenswert?

hehe ja das weiß ich wohl das es dann nach dem ersten wert abbricht ;)
aber wenn ich das ganze in einer endlosschleife mache klappt es auch 
nicht, dann passiert nix... mein problem ist wie kann ich machen das er 
automatisch erkennt wenn was geschickt wird.. also z.B. werden 10 zeilen 
geschickt woher weiß dann das programm das 10 zeilen kommen? da muss er 
ja irgendwie immer auf standby sein also in einer endlosschleife oder so 
aber wenn ich das mache passiert garnichts:

        While True
            Incoming = SerialPort2.ReadLine
            If Incoming <> "" Then lst.Items.Add(Incoming)
        End While

von Frank (Gast)


Lesenswert?

Polling ist immer blöd ... Sollte in VB nicht ein Event ausgelöst 
werden, wenn was 'reinkommt?

Ich benutze zwar kein VB, sondern RealBasic, da ist das mit den 
seriellen Schnittstellen ganz easy. Ich kann mir nicht vorstellen, dass 
das Basic vom Platzhirsch das nicht auch kann ...

Frank

von juppi (Gast)


Lesenswert?

Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As 
System.IO.Ports.SerialDataReceivedEventArgs) Handles 
SerialPort1.DataReceived
        t_zahl = t_zahl + 1                'variable Global
        If t_zahl = 100 Then t_zahl = 0   'test ob was rein kommt

        ' daten = SerialPort1.ReadByte()
        TextBox2.Text = t_zahl
        byteeinlesen()
    End Sub

'Eingelesener wert mit Timer Anzeigen
'sonst mit invoke arbeiten

von stairzup (Gast)


Lesenswert?

So ich habe es jetzt geschafft die daten an den pc zu schicken, in einem 
array zu speichern und in einem diagramm darzustellen. jetzt habe ich 
noch folgende problem, wo ich nicht weiter komme:
1. Ich habe ein array in dem einmal der messwert und die zeit/datum 
gespeichert werden soll... da irgendwas mit dem mikrocontroller nicht 
stimmt und die zeit immer 00:00:00 ist, muss ich die systemzeit vom pc 
nehmen. wie mache ich das am besten, so dass ich es in dem array 
speichern und wieder abrufen kann... irgendwie bin ich dazu zu blöd.

2. ich möchte das array abspeichern, in einer externen datei oder vllt 
sogar einem excel-blatt. mein problem: ich habe keine ahnung von vb und 
möchte nun wissen wie ich das anstelle das z.B. das array an ein anderen 
sub übergeben wird oder irgendwie so, weil es ja bei knopfdruck 
passieren soll.

3. wenn ich daten an den mikrocontroller senden will, z.B. um einen Teil 
des Programms zu starten oder so, dann benutze ich "SerialPort2.Write()" 
aber wenn ich jetzt "SerialPort2.Write(1)" benutzte kommt beim 
Mikrocontroller "177" an.... und irgendwie ist das alles tüdelig... so 
ist es nicht möglich mal ebend nen paar parameter für irgendeine 
funktion vom pc an den mikrocontroller zu senden.

von Helfer (Gast)


Lesenswert?

1. ich würde in der hilfe nach time und date suchen

2.
daten an sub übergeben:

sub test (variable as Integer)

an dateien kommst du über das file system objekt.
wenn du deine werte in eine textdatei speicherts und mit ";" trennst 
kannst du die daten in excel importieren (=csv datei).

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.