Serialport senden mit Progressbar

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von guccini.

    Serialport senden mit Progressbar

    Hallo zusammen, versuche via COM mit einen Progressbar daten zu versenden, leider ohne erfolg.
    hat jemand eine idee?

    VB.NET-Quellcode

    1. Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
    2. ProgressBar1.Maximum = txtTransmit.Text.Length
    3. ProgressBar1.Value = 0
    4. SerialPort1.Write(txtTransmit.Text & vbCr)
    5. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „guccini“ ()

    Du könntest jedes Zeichen einzeln senden und die Progessbar aktualisieren.
    Ich würde aber davon abraten, der Sinn ist ja die Daten schnell rüber zu bekommen und nicht die Anzeige.
    Wie lange dauert es denn?
    Unter 10sec ist das eh sinnlos. ;)

    guccini schrieb:

    VB.NET-Quellcode

    1. SerialPort1.Write(txtTransmit.Text & vbCr)
    Machst Du

    VB.NET-Quellcode

    1. SerialPort1.NewLine = vbCr
    2. ' ...
    3. ProgressBar1.Maximum = ANZAHL_DER_ZEILEN
    4. For i = 0 To ANZAHL_DER_ZEILEN - 1
    5. SerialPort1.WriteLine(ZEILE(i))
    6. ProgressBar1.Increment(1)
    7. Next
    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!

    RodFromGermany schrieb:

    Machst Du

    VB.NET-Quellcode

    1. SerialPort1.NewLine = vbCr
    2. ' ...
    3. ProgressBar1.Maximum = ANZAHL_DER_ZEILEN
    4. For i = 0 To ANZAHL_DER_ZEILEN - 1
    5. SerialPort1.WriteLine(ZEILE(i))
    6. ProgressBar1.Increment(1)
    7. Next


    Damit ich das verstehe

    VB.NET-Quellcode

    1. SerialPort1.NewLine = vbCr
    2. Dim ANZAHL_DER_ZEILEN = txtTransmit.Text.Length
    3. Dim ZEILE = ?
    4. ProgressBar1.Maximum = ANZAHL_DER_ZEILEN
    5. For i = 0 To ANZAHL_DER_ZEILEN - 1
    6. SerialPort1.WriteLine(ZEILE(i))
    7. ProgressBar1.Increment(1)
    8. Next

    guccini schrieb:

    Damit ich das verstehe
    Fast.

    VB.NET-Quellcode

    1. SerialPort1.NewLine = vbCr
    2. Dim ANZAHL_DER_ZEILEN = txtTransmit.Lines.Length
    3. ProgressBar1.Maximum = ANZAHL_DER_ZEILEN
    4. For i = 0 To ANZAHL_DER_ZEILEN - 1
    5. SerialPort1.WriteLine(txtTransmit.Lines(i))
    6. ProgressBar1.Increment(1)
    7. Next
    Ich gehe mal davon aus, dass Dein Text in etwa gleichlange Zeilen mit Zeilenumbruch aufgeteilt ist.
    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!
    @guccini Dann teilst Du Deinen Text in etwa n gleich lange Stücke und arbeitest mit

    VB.NET-Quellcode

    1. Dim indexStart = 0
    2. Dim length = txtTransmit.Length \ SINNVOLLE_ANZAHL
    3. For i = 0 To SINNVOLLE_ANZAHL - 1
    4. SerialPort1.Write(txtTransmit.SubString(indexStart, length))
    5. indexStart += length
    6. Next
    7. If indexStart < txtTransmit.Length - 1 Then
    8. SerialPort1.Write(txtTransmit.SubString(indexStart))
    9. End If
    Feddich.
    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!
    Irgenwas stimmt da nicht, wenn ich ein text habe der länger ist wird im progressbar anders angezeigt

    VB.NET-Quellcode

    1. Dim indexStart = 0
    2. Dim SINNVOLLE_ANZAHL = 100
    3. Dim length = txtTransmit.Text.Length \ SINNVOLLE_ANZAHL
    4. ProgressBar1.Maximum = length
    5. For i = 0 To SINNVOLLE_ANZAHL - 1
    6. SerialPort1.Write(txtTransmit.Text.Substring(indexStart, length))
    7. indexStart += length
    8. ProgressBar1.Increment(1)
    9. Next
    10. If indexStart < txtTransmit.Text.Length - 1 Then
    11. SerialPort1.Write(txtTransmit.Text.Substring(indexStart))
    12. End If

    guccini schrieb:

    Irgenwas stimmt da nicht
    Klasse Fehlerbeschreibung.
    Wieviele "Portionen" werden gesendet?
    Überprüf mal das Maximum Deiner ProgressBar.
    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!
    @guccini Pro Portion ein Schritt, also

    VB.NET-Quellcode

    1. ProgressBar1.Maximum = SINNVOLLE_ANZAHL
    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!

    RodFromGermany schrieb:

    Pro Portion ein Schritt

    Stimmt, Lieben Dank RodFromGermany klappt

    Wenn man die länge in einen Label mit zählen möchte während der übertragung ,müsste das mit einen timer klappen?

    Habe es so versucht ,jedoch fängt es erst an zu zählen nachdem die übertragung fertig ist

    VB.NET-Quellcode

    1. Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
    2. Timer1.Interval = 1
    3. Timer1.Start()
    4. Dim indexStart = 0
    5. Dim SINNVOLLE_ANZAHL = 100
    6. Dim length = txtTransmit.Text.Length \ SINNVOLLE_ANZAHL
    7. ProgressbarWithPercentage1.Maximum = SINNVOLLE_ANZAHL
    8. For i = 0 To SINNVOLLE_ANZAHL - 1
    9. SerialPort1.Write(txtTransmit.Text.Substring(indexStart, length))
    10. indexStart += length
    11. ProgressbarWithPercentage1.Increment(1)
    12. Next
    13. If indexStart < txtTransmit.Text.Length - 1 Then
    14. SerialPort1.Write(txtTransmit.Text.Substring(indexStart))
    15. End If
    16. End Sub
    17. Private Shared Counter As Integer = 1
    18. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    19. Timer1.Stop()
    20. Counter += 1
    21. Timer1.Enabled = True
    22. Label1.Text = Counter
    23. If Label1.Text = Label2.Text Then 'Label2 = txtTransmit.Text.Length
    24. Timer1.Stop()
    25. End If
    26. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „guccini“ ()

    @guccini Was soll denn das? Der Timer wird ja sofort gestoppt.
    Du brauchst keinen Timer, Du hast doch die Laufvariable i und die Position des zu sendenden Textes indexStart.
    Das reicht doch völlig aus zur Überwachung.
    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!