none
VB.NET2008 RFID字串讀取問題 RRS feed

  • 問題

  • 各位大大好,想請問關於RFID資料讀取的問題,我的問題出現在讀取資料時必須要指定BLOCK為61,tBinData.Text = tmpStr 這段程式碼才生效,若在其他BLOCK寫入資料後,改成讀取其他BLOCK,tBinData.Text卻是空無一物,整個程式好像變成限定要讀取BLOCK 61才能正確執行,所以想拜託各位前輩能否提供給我一些意見!!!非常感謝>"<

    以下是讀取資料和呼叫讀取的主要程式,如有不夠詳細的地方我會馬上補述上來,麻煩大家了!!!!

    Private Sub dataout(ByVal value As String)
    
      Dim tmpStr As String = ""
    
      Dim indx As Integer
    
      Dim tBinBlk As String
    
      Dim tBinLen As String
    
      ' Validate Inputs
    
    
    
      tBinData.Text = ""
    
    
    
    
    
      tBinLen = "16"
    
      tBinBlk = value
    
    
    
      Call ClearBuffers()
    
      'Read Binary Block command
    
      SendBuff(0) = &HFF        'Class
    
      SendBuff(1) = &HB0        'INS
    
      SendBuff(2) = &H0        'P1
    
      SendBuff(3) = CInt(tBinBlk)      'P2 : Block number修改61
    
      SendBuff(4) = CInt(tBinLen)      'Le : Number of bytes to read
    
    
    
      SendLen = 5
    
      RecvLen = CInt(tBinLen) + 2
    
    
    
      retCode = SendAPDU()
    
      If retCode <> ModWinsCard.SCARD_S_SUCCESS Then
    
       Exit Sub
    
      Else
    
       For indx = RecvLen - 2 To RecvLen - 1
    
        'tmpStr = tmpStr & Right$("00" & Hex(RecvBuff(index)), 2)
    
        tmpStr = tmpStr + Microsoft.VisualBasic.Right("00" & Hex(RecvBuff(indx)), 2) + " "
    
    
    
       Next indx
    
    
    
       'Check for response
    
       If tmpStr.Trim = "90 00" Then
    
        tmpStr = ""
    
        'Call displayOut(4, 0, "讀取成工")
    
        For indx = 0 To RecvLen - 3
    
    
    
         'tmpStr = tempstr & Right$(Chr(RecvBuff(index)), 2)
    
         tmpStr = tmpStr + Chr(RecvBuff(indx))
    
         'tmpStr = tmpStr + Microsoft.VisualBasic.Right("00" & Hex(RecvBuff(indx)), 2) + " "
    
    
    
        Next indx
    
    
    
        tBinData.Text = tmpStr
    
       Else
    
        Call displayOut(4, 0, "Read block error!")
    
        Call displayOut(0, 0, "")
    
       End If
    
      End If
    
    
    
     End Sub
    
     
    
     Private Sub bValRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    
      Dim Amount As Integer
    
      Dim indx As Integer
    
      Dim tmpStr As String = ""
    
    
    
      If Authentication() = False Then Exit Sub
    
      Call dataout("61")  '修改61
    
    
    
      tValAmtt = ""
    
    
    
      Call ClearBuffers()
    
      SendBuff(0) = &HFF         ' CLA
    
      SendBuff(1) = &HB1         ' INS
    
      SendBuff(2) = &H0         ' P1
    
      SendBuff(3) = CInt("60")       ' P2 : Block No. 修改60
    
      SendBuff(4) = &H4         ' Le
    
    
    
      SendLen = &H5
    
      RecvLen = &H6
    
    
    
    
    
      retCode = SendAPDU()
    
      If retCode <> ModWinsCard.SCARD_S_SUCCESS Then
    
       Exit Sub
    
      Else
    
       For indx = RecvLen - 2 To RecvLen - 1
    
    
    
        tmpStr = tmpStr + Microsoft.VisualBasic.Right("00" & Hex(RecvBuff(indx)), 2) + " "
    
    
    
       Next indx
    
    
    
       'Check for response   
    
       If tmpStr.Trim = "90 00" Then
    
        ' Call displayOut(1, retCode, "")
    
    
    
        Dim money(3) As Byte
    
        For i As Integer = 0 To 3
    
         money(i) = RecvBuff(3 - i)
    
        Next
    
        Amount = System.BitConverter.ToInt32(money, 0)
    
    
    
        tValAmtt = CInt(Amount)
    
    
    
        Call displayOut(0, 0, tValAmtt)
    
       Else
    
        Exit Sub
    
       End If
    
      End If
    
    
    
    
    
    
    
      If Val(tBinData.Text) <> 0 Then
    
    
    
       If Amount >= 0 Then
    
    
    
        Select Case Val(tBinData.Text)
    
         Case 1
    
          Call displayOut(0, 0, "北部郵件")
    
         Case 2
    
          Call displayOut(0, 0, "中部郵件")
    
         Case 3
    
          Call displayOut(0, 0, "南部郵件")
    
         Case Else
    
          Call displayOut(4, 0, "格式資料錯誤。")
    
        End Select
    
    
    
       Else
    
        Call displayOut(4, 0, "卡片資料錯誤")
    
       End If
    
      Else
    
       Amount = tValAmtt
    
    
    
      End If
    
    
    
    
    
    
    
     End Sub
    
    
    
    

     

    2010年8月27日 上午 03:40

解答

  • 樓樓上大大抱歉,我知道問題在哪裡了,因為儲存字元轉換的不同所造成的。因為我儲存到卡片裡的字元為HEX16進位置,而程式辨別的為ASCII,所以才造成錯誤,抱歉給各位前輩添麻煩了~!   

    • 已標示為解答 amati223 2010年8月27日 上午 07:50
    2010年8月27日 上午 07:50

所有回覆

  • 請問一下你這RFID設備是..網路介面還是..COM PORT  or USB DEVICE ,然後RFID設備是跟廠商買的嗎?還是自己開發?如果是廠商買的,應該有Command 可以查詢

    這個是把資料傳出去嗎? SendAPDU(),還是有同時送完以後接收

    2010年8月27日 上午 05:39
  • 抱歉~沒講清楚,我是用 USB DEVICE,ACS出的ACR122U,然後廠商有附程式範例,上面的程式也是參考廠商給的範例來的,讀取數值和資料的COMMAND都沒問題,SendAPDU()是RFID的通訊部分接收和傳輸資料,我有測試過讀取資料的部分程式可以執行到,但是如果讀取到非BLOCK61的資料,TEXTBOX中就沒有辦法指派和顯示,不知道還有需要補充的嗎??有需要我會盡快補充上來的,希望各位前輩能夠給我一些建議!!!感激不盡~
    2010年8月27日 上午 07:03
  • 樓樓上大大抱歉,我知道問題在哪裡了,因為儲存字元轉換的不同所造成的。因為我儲存到卡片裡的字元為HEX16進位置,而程式辨別的為ASCII,所以才造成錯誤,抱歉給各位前輩添麻煩了~!   

    • 已標示為解答 amati223 2010年8月27日 上午 07:50
    2010年8月27日 上午 07:50