2017-09-28 7 views
1

GUI du projetlecture du port série de données HEX et insérer dans les zones de texte séparées (Livre RFID Hex et utilisateur RFID Hex)

[(image 1)]

Dans cette image, je suis en utilisant le logiciel de lecteur UHF pour tester cartes RFID afin mon résultat final dans les zones de texte doivent être uniques HEX 12 octets de la carte RFID [(image 2)](image 2 preview)

en fait, je travaille sur Manageme Bibliothèque nt système (LMS) projet & Je suis en train de publier des livres en utilisant la identité de l'utilisateur (utilisateur ID Tag RFID dans HEX) et identité du livre (livre RFID ID Tag dans HEX). Lorsque l'utilisateur viendra dans la bibliothèque pour émettre un livre, il/elle va glisser sa carte RFID à la suite de l'utilisateur ID (12-bytes) dans HEX apparaîtra dans la première zone de texte instantanément et après il/elle montrera livre au lecteur que la personne veut émettre comme résultat ID Id de livre (12-bytes) dans HEX enverra à la deuxième zone de texte instantanément. (sortie du lecteur est de 20 octets comme représenté sur l'image 2)

Maintenant, les problèmes auxquels je fais face suivent:

1) Je ne reçois 20 octets de HEX dans la seule zone de texte par en utilisant la commande (_SerialPort1.ReadExisting()) certains des octets apparaissent dans la première zone de texte et le reste des octets apparaissent dans la deuxième zone de texte, (SerialPort1.ReadLine) cette commande est en cours de lecture et cette commande n'est pas de mon utiliser

2) Le deuxième problème auquel je suis confronté est que certains des octets qui apparaissent dans les zones de texte sont modifiés (par exemple) (CC FF FF 10 32 0D 01 E2 00 10 26 77 0D 01 51 23 30 23 55 2D) ces 20 octets doit être reçu, mais dans le premier octet reçu est réelle 3F, la deuxième est 3F, 3 est 3F et 19 est 3F et un octet avec une valeur différente HEX.

Aidez-moi! Mon code est fourni ci-dessous:

Imports System      
Imports System.IO.Ports    
Imports System.Threading 

Public Class Form1 

    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 


End Class 
+0

Veuillez me aider! @DavidWilson –

+0

Avez-vous essayé la méthode Read avec un tableau d'octets? Vous lisez les données binaires sous forme de chaîne. https://msdn.microsoft.com/en-us/library/ms143549(v=vs.110).aspx – fofik

+0

Non, je n'ai pas essayé parce que je ne sais pas comment utiliser cette fonction.Je suis débutant dans VB.Net.Peut-on mettre à jour mon code avec cette fonction? –

Répondre

0

Je pense que vous devriez lire les données comme tableau d'octets et convertir ces valeurs de tableau d'octets en chaîne hexadécimale. Vous pouvez trouver un exemple de lecture sur ce link. Voir Evénement DataReceived. C'est quelque chose comme ça.

' Initialize a buffer to hold the received data 
Dim bufferArr(serialPort.ReadBufferSize) as Byte 

' There is no accurate method for checking how many bytes are read 
' unless you check the return from the Read method 
Dim bytesRead as Integer = serialPort.Read(bufferArr, 0, bufferArr.Length) 

Après avoir lu, vous pouvez convertir les valeurs d'octets à chaîne hexagonale comme celle

Dim hexString as String = "" 
For Each item as Byte In bufferArr 
    hexString &= item.ToString("X2") 
Next 
+0

Je travaille dans VB.Net et c'est je pense que C# –

+0

veuillez me donner le code dans vb.net @fofik –

+0

m'aider aimablement @DavidWilson –