twisted之RFID數據傳輸整理

一. 發送相關:

  1. self.transport.write()函數只能發送字符串類型的參數!!!
  2. RFID只接收字節流的指令碼!!!

所以:

(1). 可直接發送字節流的字符串表示

data = '\xff\xff\xf1\x07\x06\xf1' #類型是str,但打印出來是無法識別的字節碼
self.transport.write(data)

(2). 給參數賦值字符串指令碼(此時并不是字節流所以要進行下一步)

dataStr ='FF FF F1 06 06 F1'

然后用bytearray.fromhex(dataStr)字符串轉換成字節流

byteData=bytearray.fromhex(dataStr)

最后將字節流轉換成字符串進行發送

self.transport.write(str(bytedata))

二. 接收相關

  1. 從RFID接收過來的數據是字節流的字符串表示(即字節串,字節串其實就是字節流).類型是str.print出來是無法識別的字節碼同一中的(1)
  2. 實踐證明datareceivedRFID傳過來的數據是一個字節一個字節的進行接收的,這個函數宏觀上只執行了一次,但是實際上有幾個字節執行幾次,一直到接受完畢為止.
  3. 對字節流數據進行解析(解包)的construct函數,只接收字節串(字節流)參數所以需要再轉換成字節串才能進行解析

所以:

(1).先使用 binascii.b2a_hex(data)或者hexlify(data).由函數意思binary to ascii.作用是返回的二進制數據的十六進制表示.每一個字節的數據轉換成相應的2位十六進制表示.因此產生的字串是源數據兩倍長度。a2b_hexunhexlify則執行反向操作(所得仍然是字符串類型)

self.data_list += binascii.b2a_hex(data) #累加字符串,注意,字節串是不能直接進行加法的.

若是只進行串口的調試其實到這一步就算通了
(2). 對(1)中轉化成的字符串再次轉化成字節流

byteData = bytearray.fromhex(self.data_list)

(3). 對字節流中的數據進行解包處理.

pkgs, leftovers = self.rfid.parse_pkgs(byteData) # 解析字節流轉化為可識別的指令碼存在pkgs(一個列表),剩下的存在leftovers
if len(pkgs) != 0 and len(leftovers) == 0: 對數據包的正確性進行判斷

(4). 處理數據
調用handlDatas函數.從返回的列表中取有用的數據

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,738評論 18 399
  • 內置函數Python解釋器內置了許多功能和類型,總是可用的。他們是按字母順序列在這里。 abs(x)返回一個數的絕...
    uangianlap閱讀 1,261評論 0 0
  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,081評論 6 13
  • Lancy's Blog Blog Archives About MeTwitterWeiboGitHubRSS ...
    其實也沒有閱讀 5,524評論 0 24
  • 文/柴門內外 【1】 前幾日,和好友駕車外出,在十字路口看到一個衣衫襤褸的婦人抱著孩子,紅燈亮起時挨個敲車窗要錢。...
    柴門內外閱讀 1,345評論 12 6