Daten von serielle Schnittstelle über Sub abfragen

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Daten von serielle Schnittstelle über Sub abfragen

    Hallo,

    ich habe mit Visual Basic angefangen und man kommt sehr schell voran. Wenn ich nicht weiter wusste, hab ich einfach im Internet nachgeschaut und bisher kam ich so auch durch.

    Nun habe ich bei meinem jetzigen Programm ein Problem, mit der Abfrage der empfangenen Daten:

    VB.NET-Quellcode

    1. Private Sub SerialPort1_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    2. Me.Invoke(Sub() Temp(SerialPort1.ReadExisting))
    3. End Sub
    4. Private Sub Temp(ByVal s As String)
    5. Temp1.Text = s
    6. RichTextBox2.Text &= s
    7. End Sub
    8. Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
    9. Dim Uhrzeit As String
    10. Uhrzeit = Now.ToString("HH:mm") 'Timeofday
    11. Dim Datum As String
    12. Datum = Now.ToString("dd.MM.yyyy") 'Dateofday
    13. If TextBox1.Text <> "" Then
    14. SerialPort1.Write(1 & vbCr)
    15. System.Threading.Thread.Sleep(1000)
    16. Dim textResult As String = Datum + " " + Uhrzeit + ";" + Temp1.Text & vbCrLf
    17. My.Computer.FileSystem.WriteAllText(FolderBrowserDialog1.SelectedPath & "\Temperaturwerte.csv", (textResult), True)
    18. End If
    19. End Sub


    Schicke ich über den COM Port die 1 raus, dann erhalte ich die aktuelle Temperatur zurück, die steht dann in Temp1.Text.
    Im Prinzip funktioniert es, aber der Temperaturwert der abgespeichert wird, ist immer der vorherige und nicht der aktuelle, der gerade abgefragt wurde.

    Also angenommen Temp1.Text ist jetzt 23 und ich führe Button7_Click aus, dann frägt er zwar die aktuelle Temperatur z.B. 24°C ab, aber er speichert dann die 23 ab und trägt erst dann die 24 bei Temp1.Text ein.
    Und dann wird erst beim nächsten Mal die 24 verwendet abgespeichert.

    Ich will aber, dass der die aktuelle Temperatur, die er im Moment abgefragt hat, dann sofort abspeichert.
    Ich hab es unter anderem auch schon mit ReadExisting oder ReadLine versucht, aber dann bekomme ich immer den Fehler, das der abgefragte Wert 0 ist.

    Danke vorab.

    gamer29016 schrieb:

    Ich will aber, dass der die aktuelle Temperatur, die er im Moment abgefragt hat, dann sofort abspeichert.


    Dann schreib nicht beim Klick auf den Button in die Datei, denn erst danach kommen wie es aussieht die neuen Daten. Beim klick des Buttons einfach nur an den Port senden, in deiner Sub "Temp" in die Datei schreiben, denn dort sind die Daten aktuell.
    @gamer29016 Willkommen im Forum. :thumbup:
    Ist bei dem Protokoll so was wie ein Zeilenende definiert?
    Wie genau sieht das Daten-Protokoll aus?
    Dann pack das in die Property SerialPort1.NewLine und lies dann bei SerialPort1.DataReceived mit .ReadLine ein.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!