2016-06-28 9 views
0

シリアルポートを使用してスケールからデータを取得するためにvb.netプログラムを作成しようとしています。シリアルポートの奇妙なデータの表示とクラッシュ

私はスケールモデルを知らない、ただ表示モデル:IND231。

問題は、私は愚かなデータを取得することです:

PICTURE 2 Putty Window

あなたはパテで見たようリフレッシュのみの1行がある:

PICTURE 1 with my program

が、パテのターンは、私が取得する場合、これは

真の重みは最初の2時00分(真ん中)、私の状況では、このラインは爽やかではありませんが、巨大なラインを作り、5~10秒後に、私のプログラムはちょうどクラッシュします。

私のプログラムコードは次のとおりです。

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 

これはIND321シリアルポートのパラメータである

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

RtsEnableとわからないイム、私はこれはのFlowControlだと思います。

パテのようなデータを取得するには何が必要ですか?

+1

あなたは同じデータを取得しているように見えます...あなたのパテは "0000 00"とあなたのテキストボックスも ")0 00 00"と言いますが、その後に戻ります。タイマーが起動するたびにテキストボックスをクリアしてから、新しい値 – SilverShotBee

+0

Smartに更新してください。しかし、今は点滅していて、私は00時、次回は0)、次回は空白のテキストボックスを得る。 –

+1

'ReadLine()'を使ってみてください。 '.Newline'を' vbCr'に設定する必要があるかもしれません。 –

答えて

0

スケール/シリアルポートが別の形式でデータを返すようです。 スケール仕様を確認してください。それはe72か他の偶数/奇数/ビット/パリティの組み合わせかもしれません。

+0

私はマニュアルでチェックしました。ありがとうございました。 –

関連する問題