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函数.从返回的列表中取有用的数据

你可能感兴趣的:(twisted之RFID数据传输整理)