在下图中,我使用 UHF阅读器软件来测试RFID卡。我自己的文本框中的最终结果应该是 RFID卡的唯一12字节HEX 。
基本上,我正在开发图书馆管理系统(LMS)项目,我正在尝试使用用户身份( HEX中的用户RFID标签来发行图书)和图书标识(在HEX中预订RFID标签)。
当用户进入图书馆发行图书并且他/她刷他/她的RFID卡时,HEX中的他/她的用户ID(12字节)应出现在第一个文本框中。之后,用户将扫描他/她想要发布的书,结果书签ID(12字节)将在第二个文本框中显示为HEX(阅读器的输出 20字节< / strong>如上图所示。
现在我遇到的问题是:
调用SerialPort1.ReadExisting()
方法时,我没有在第一个文本框中收到所有20个字节的HEX。一些字节出现在第一个文本框中,其余字节出现在第二个文本框中。造成这种情况的原因是什么?
在下面的图片中,您可以看到我得到的输出:
我也试过调用SerialPort1.ReadLine()
,但它没有返回任何数据。
我希望这20个字节(如上图所示)显示在第一个文本框中,因为这是20字节用户RFID 。然后,当扫描书籍时,它应该通过串口读取接下来的20个字节(书签RFID )并将它们插入第二个文本框中。
我的代码如下:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SerialPort1.BaudRate = 9600
SerialPort1.DataBits = 8
SerialPort1.Parity = IO.Ports.Parity.None
SerialPort1.StopBits = IO.Ports.StopBits.One
SerialPort1.Handshake = Handshake.None
SerialPort1.PortName = "Com7"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
SerialPort1.Open()
End Sub
Private Shared buffer As String = ""
Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Try
'Dim rcv As String = SerialPort1.ReadLine
'Dim rcv As String = SerialPort1.ReadByte
Dim rcv As String = _SerialPort1.ReadExisting()
buffer = String.Concat(buffer, rcv)
Dim hexVal As String = ""
For Each c As Char In rcv
hexVal = hexVal & AsciiCharToHexSring(c)
Next
If txtReceived1.Text = "" Then
txtReceived1.Text = hexVal
ElseIf txtReceived2.Text = "" Then
txtReceived2.Text = hexVal
Else
txtReceived1.Text = ""
txtReceived2.Text = ""
End If
Catch ex As Exception
End Try
End Sub
Private Function AsciiCharToHexSring(s As Char) As String
Dim hexdigit As String = Hex(Asc(s))
If hexdigit.Length = 1 Then
hexdigit = "0" & hexdigit
End If
Return hexdigit
End Function
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
SerialPort1.Close()
txtReceived1.Text = ""
txtReceived2.Text = ""
End Sub
答案 0 :(得分:-1)
尝试使用有形软件解决方案的免费C ++到VB.NET converter获取小代码片段。
仅供参考 - 我尝试转换你的代码,并在转换后的代码中出现了一个Copywritten字符串函数(在VB.NET中),这是由Tangible开发的。字符串函数的注释表明,Tangible最初提供了基于经典C字符串函数的即用型VB.NET函数,这些函数不容易转换为VB.NET。