2017-01-10 8 views
0

しばらくの間、私はVB.NETをプログラミングする方法を学びました。このページとインターネットの助けを借りて、私はいくつかの16進値をインターフェースボックスに送り、そこからルーチンの応答を得るプログラムを作りました。シリアルポートを使用する

ここでの問題は、通信がTCP/IPであったことです。しかし今、私はUSBインターフェースを備えた新しいボックスを持っています。そして今、シリアルポートを使って同じ16進数値を送受信する方法は少ししかありません。

以下はコードです。 COM13という名前のシリアルポートをセットアップするのを助けることができるかどうか、あるいは少なくとも私に何をすべきかを説明することはできません。

これはプログラムの機能です。

  1. プッシュスキャン
  2. ボックスのTCP/IPに接続し(10.2.12.65)が
  3. は、起動プロトコルE1 33
  4. がGET dateコマンド05 6C 29 F1を送信する送信3C 81
  5. Boxはバイトでバックデートに応答します
  6. プログラムが81(16進数)に対応するバイトを読み取ると、プログラムは文字に変換し、文字列に追加して下部のテキストボックスに表示します。

これは基本的にそれです。問題は、今まで私はテキスト文字列だけを送ることができましたが、ボックスはそれを認識せず、ガベージに応答し、日付ではありません。ここで

コードです:

Imports System.Net.Sockets 
Imports System.Threading 
Imports System.IO 

Public Class Form1 
    Dim client As New TcpClient 
    Dim transmit As NetworkStream 
    Dim protocol As Byte() 
    Dim data As Byte() 
    Dim ByteArrayToHexStr As String = String.Empty 
    Dim message As String 
    Dim datos_byte As Byte() 
    Dim respuesta As [String] = [String].Empty 
    Dim transision As [String] = [String].Empty 
    Dim Date_full As [String] = [String].Empty 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     TextBox1.Clear() 
     client = New TcpClient("10.2.12.65", 10001) 
     transmit = client.GetStream() 
     protocol = {225, 51} ' E1 33 in hex value 
     transmit.Write(protocol, 0, protocol.Length) 
     Thread.Sleep(45) 

     data = {5, 108, 41, 241, 60, 129} ' 05 6c 29 f1 3c 81 in hex value 
     transmit.Write(data, 0, data.Length) 
     data = New Byte(66) {} 
     Thread.Sleep(45) 

     Dim bytes As Int32 = transmit.Read(data, 0, data.Length) 
     Dim Date1 As String = String.Empty 
     Dim Date2 As String = String.Empty 
     Dim Date_temp As Integer = 0 

     For i As Integer = 0 To UBound(data) 
      Date1 = data(i) 
      If Date1 = "129" Then 
       Date_temp = i + 1 
       i = 1000 
       For k As Integer = 0 To 5 
        If k = 0 Then 
         Date1 = data(Date_temp + k) 
         Date_full = Chr(Date1) 
        Else 
         Date1 = data(Date_temp + k) 
         Date2 = Chr(Date1) 
         Date_full = Date_full & Date2 
        End If 
       Next 
      Else 
      End If 
     Next 
     Thread.Sleep(45) 

     transmit.Close() 
     client.Close() 
     TextBox1.Text = TextBox1.Text & Date_full 
    End Sub 
End Class 
+0

新しいTcpClientを宣言したように、代わりにPorts.SerialPortオブジェクトを宣言します(現在のImportsステートメントを指定します)。次に、ポートのプロパティ(名前、ボーなど)を設定します。その後、それを開きます。 Writeメソッドを使用します。それを閉じます。次に、ポートのDataReceivedイベントを処理してレスポンスをバッファし、それに従って処理します。 – topshot

+0

本当にありがとうございました、あなたは正しいです、それはtcpと同じです、私はちょうどポートを設定する必要がありました。 – Omegads

答えて

0

SERIALPORTクラスのMicrosoftの例を見てください:https://msdn.microsoft.com/en-us/library/system.io.ports.serialport(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

あなたはボーレートが正しく構成されている可能性がありますガベージバックを取得する場合。私はあなたが 'ボックス'によって何を意味するのか分からないが、このデバイスはデータシートまたは製品情報で見つけることができるはずの指定されたボーレートを持っているはずです。

+0

ありがとうございました。 – Omegads

関連する問題