2016-09-22 14 views
0

シリアルデータをサインに送信するPCがあります。私がしたいのは、サインを削除し、.Netプログラムと別のPCを使って自分で表示することです。私は、COMポート(PCからPCへのシリアルケーブル)からデータを読み取る.Netプログラムを持っています - 読み物はうまくいきますが、私が望むデータを正しく解析する方法がわかりません。ラベル。vb.netのシリアルポートデータ受信 - 受信したデータを解析する方法

現在の動作を以下に示します。

  • コンピュータは取引情報(価格)をcomポートに送信します。 30秒後、文字列の終了を送信します。これにより、もはや情報を表示したくないことを示します。

  • 私はこれを見ることができます価格を含めて、メッセージの開始とメッセージ文字の終わり。私の現在のネットで受け取っているデータの画像は以下の通りです。あなたはそれが01を送信したことに気づくでしょう。次に価格、この場合2000($ 20.00)。その後、30秒後に残りの文字が表示されます。ここで

enter image description here

私の現在のコードです:

Imports System 
Imports System.Collections.Generic 
Imports System.Text 
Imports System.Windows.Forms 
Imports System.Drawing 
Imports System.ComponentModel 
Imports System.Threading 
Imports System.IO.Ports 

Public Class Form1 
    Dim myport As Array 
    Delegate Sub settextcallback(ByVal [text] As String) 
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     'This is the connect button 
     SerialPort1.PortName = "COM3" 'Connect on COM3 
     SerialPort1.BaudRate = "1200" 'Set BaudRate to 1200 
     SerialPort1.Open() 
     Button1.Enabled = False 


    End Sub 

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click 
'this is the disconnect button 
     SerialPort1.Close() 

    End Sub 

    Private Sub SerialPort1_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived 
     ReceivedText(SerialPort1.ReadExisting) 

    End Sub 
    Private Sub ReceivedText(ByVal [text] As String) 
'now we display the information 
     If Me.RichTextBox1.InvokeRequired Then 

      Dim x As New settextcallback(AddressOf ReceivedText) 
      Me.Invoke(x, New Object() {(text)}) 


     Else 
      Me.RichTextBox1.Text &= [text] 

     End If 
    End Sub 
End Class 

は、どのように私は大手01を解析することができ、そしてただ、この場合には、ラベル内の$ 20.00表示 - さんがそれを呼びましょう"label1"、私は末尾の '01'を受け取るまで。最後の「01」を受け取ったら、ラベルをクリアしたいと思います。

私は、一度に1つのデータが入ってくるので、スレッドのテキストボックスをクリアしようとしましたが、それは私が探している結果を与えません。

+0

出力は常に$ XXXXX $ XXのようなものですか? – noidea

+0

@noideaはい - 出力は内側の4文字を除いて全く同じです。私は小数点を追加する能力も持っているので、解析が容易になる。例:$ 012000 $ 01 $ 011500 $ 01または、私はすることができます:$ 0120.00 $ 01あなたは考えを得る - それは私たちはもはやそれを表示する必要があることを示すために、30秒後に$ 01後続の$ 01をリードしています。 – Shmewnix

+0

これで、richtextboxの出力値を書式設定したいだけですか?それをラベルに入れますか? – noidea

答えて

1

これは非常に堅牢だと思いますが、あなた自身でそれを把握することができます。

これをタイマーに入れても問題ありません。

Private Sub TimerPrice_Tick(sender As Object, e As EventArgs) Handles TimerPrice.Tick 

Dim output As Array = TextBox1.Text.Split("#") 

    If output.Length = 2 Then 
     Label1.Text = output(1) 
    Else 
     Label1.Text = vbNullString 
    End If 
End Sub 
+0

これは私が必要とされた場所に私を得た。 – Shmewnix

関連する問題