2016-06-28 5 views
0

Ich versuche, vb.net-Programm zu erstellen, um Daten von Waagen mit der seriellen Schnittstelle zu erhalten.Serial Port seltsame Datenanzeige und Absturz

Ich weiß nicht Waage Modell, nur Modell anzeigen: IND231.

Problem ist, ich dumm Daten erhalten:

PICTURE 1 with my program

aber wenn wiederum auf Putty i diese:

PICTURE 2 Putty Window

Wie Sie in Kitt sehen gibt es nur eine Linie, die refresh jede Sekunde, das wahre Gewicht ist zuerst zwei 00 (in der Mitte), in meiner Situation ist diese Linie nicht erfrischend, aber mache eine riesige Linie und nach 5-10 s stürzt mein Programm einfach ab.

Mein Programmcode ist:

Imports AxSerial 

Public Class Form1 
    Dim Q As Queue(Of String) = New Queue(Of String) 

    Private Sub Form1_Load(ByVal sender As System.Object, 
      ByVal e As System.EventArgs) Handles MyBase.Load 
     For Each s In System.IO.Ports.SerialPort.GetPortNames() 
      lstPorts.Items.Add(s) 
     Next s 
    End Sub 


    Private Sub btnStart_Click(ByVal sender As System.Object, 
     ByVal e As System.EventArgs) Handles btnStart.Click 
     Try 
      If lstPorts.SelectedIndex = -1 Then 
       MsgBox("Please select a port") 
       Exit Sub 
      Else 
       SerialPort1.BaudRate = 9600 
       SerialPort1.DataBits = 8 
       SerialPort1.Parity = IO.Ports.Parity.None 
       SerialPort1.StopBits = 1 
       SerialPort1.RtsEnable = False 
       SerialPort1.PortName = lstPorts.SelectedItem.ToString 
       SerialPort1.Open() 
       Timer1.Start() 
      End If 
     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 
    End Sub 

    Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, 
     ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _ 
     Handles SerialPort1.DataReceived 
     Q.Enqueue(SerialPort1.ReadExisting()) 
    End Sub 
    Private Sub Timer1_Tick(ByVal sender As System.Object, 
      ByVal e As System.EventArgs) Handles Timer1.Tick 
     SyncLock Q 
      While Q.Count > 0 
       txtReceived.Text &= Q.Dequeue 
      End While 
     End SyncLock 
    End Sub 


    Private Sub btnStop_Click(ByVal sender As System.Object, 
     ByVal e As System.EventArgs) Handles btnStop.Click 
     SerialPort1.Close() 
     Timer1.Stop() 
    End Sub 
End Class 

Dies ist IND321 Serial Port Parameter

SerialPort1.BaudRate = 9600 
      SerialPort1.DataBits = 8 
      SerialPort1.Parity = IO.Ports.Parity.None 
      SerialPort1.StopBits = 1 
      SerialPort1.RtsEnable = False 

Ich bin nicht sicher mit RTSEnable, ich denke, das ist Flowcontrol.

Was muss ich korrigieren, um Daten wie Kitt zu bekommen?

+1

Es sieht für mich aus, als ob Sie die gleichen Daten bekommen ... Ihre Putty sagt ") 0 00 00" und Ihre Textbox sagt auch ") 0 00 00", aber es folgt eine Rückkehr. Versuchen Sie, das Textfeld jedes Mal zu löschen, wenn Ihr Timer ausgelöst wird, bevor es mit einem neuen Wert – SilverShotBee

+0

Smart aktualisiert wird. Aber jetzt blinkt es und einmal bekomme ich 00 00, nächstes Mal) 0, und das nächste Mal nur leere Textbox. –

+1

Versuchen Sie es mit 'ReadLine()'. Sie müssen möglicherweise ".Newline" auf "vbCr" einstellen. –

Antwort

0

Es sieht so aus, als ob Ihre Waage/serielle Schnittstelle Daten in einem anderen Format zurückgibt. Überprüfen Sie Ihre Maßstabsangaben. Es könnte e72 oder eine andere gerade/ungerade/bits/Paritätskombination sein.

+0

Ich überprüfte im Handbuch, alles ist in Ordnung mit Parametern. Vielen Dank. –