しばらくの間、私はVB.NETをプログラミングする方法を学びました。このページとインターネットの助けを借りて、私はいくつかの16進値をインターフェースボックスに送り、そこからルーチンの応答を得るプログラムを作りました。シリアルポートを使用する
ここでの問題は、通信がTCP/IPであったことです。しかし今、私はUSBインターフェースを備えた新しいボックスを持っています。そして今、シリアルポートを使って同じ16進数値を送受信する方法は少ししかありません。
以下はコードです。 COM13という名前のシリアルポートをセットアップするのを助けることができるかどうか、あるいは少なくとも私に何をすべきかを説明することはできません。
これはプログラムの機能です。
- プッシュスキャン
- ボックスのTCP/IPに接続し(10.2.12.65)が
- は、起動プロトコルE1 33
- がGET dateコマンド05 6C 29 F1を送信する送信3C 81
- Boxはバイトでバックデートに応答します
- プログラムが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
新しいTcpClientを宣言したように、代わりにPorts.SerialPortオブジェクトを宣言します(現在のImportsステートメントを指定します)。次に、ポートのプロパティ(名前、ボーなど)を設定します。その後、それを開きます。 Writeメソッドを使用します。それを閉じます。次に、ポートのDataReceivedイベントを処理してレスポンスをバッファし、それに従って処理します。 – topshot
本当にありがとうございました、あなたは正しいです、それはtcpと同じです、私はちょうどポートを設定する必要がありました。 – Omegads