python 串口接收hex_zp blog

最近需要对一个买来的测温探头进行可靠性测试,探头是通过串口方式接受命令传输数据的,使用串口助手接受到的数据还需要进行计算显示不直观,加之准备连续测试几天,所以就想着写一个脚本把接受到的数据直接转换存入记事本中以便后面分析。

python版本:3.6.3

另需要安装serial模块:pip3 install pyserial   //python3

import serial

import binascii

import struct

import time

# 创建serial实例

serialport = serial.Serial()

serialport.port = 'COM3'

serialport.baudrate = 115200

serialport.parity = 'N'

serialport.bytesize = 8

serialport.stopbits = 1

serialport.timeout = 0.2

while 1:

serialport.open()

# 发送数据

d=bytes.fromhex('0B 0B')

serialport.write(d)

#print (d)

# 接收数据

str1 = serialport.read(2)

data= binascii.b2a_hex(str1)

data1=str((int(data,16)-1000)/10)

print(data1)

# 获取日期

time1=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))

#字符串合并

data2 = time1 + ' ' + data1

#print(data2)

# 写入文件

f1 = open('D:/temprecord.txt','a')

f1.write(data2 + '\n')

f1.close()

time.sleep(0.5)

serialport.close()

再记一个发射率0.1~1可调的验证脚本import serial

import binascii

import struct

import time

# 创建serial实例

serialport = serial.Serial()

serialport.port = 'COM14'

serialport.baudrate = 115200

serialport.parity = 'N'

serialport.bytesize = 8

serialport.stopbits = 1

serialport.timeout = 0.5

#异或校验

def uchar_checkbcc(data, byteorder='little'):

'''''

char_checkbcc 按字节计算异或校验。

@param data: 字节串

@param byteorder: 大/小端

'''

length = len(data)

checkbcc = 0

for i in range(0, length):

checkbcc ^= int.from_bytes(data[i:i+1], byteorder, signed=False)

checkbcc = hex(checkbcc)[2:]

return checkbcc

#LRC校验

def uchar_checklrc(data, byteorder='little'):

'''''

char_checksum 按字节计算校验和补码。

@param data: 字节串

@param byteorder: 大/小端

'''

length = len(data)

checksum = 0

for i in range(0, length):

checksum += int.from_bytes(data[i:i+1], byteorder, signed=False)

checksum &= 0xFF # 强制截断

checklrc = hex(2**8-checksum)[2:]      #补码

return checklrc

i = 1000

while (i > 99):

serialport.open()

# 发送数据

#d=bytes.fromhex('0d03ded0')

value = hex(int(i))[2:]

if len(value) % 2 != 0:

value = '0d0' + value

elif len(value) % 4 != 0:

value = '0d00' + value

xx = bytes.fromhex(value)

yy = uchar_checkbcc(xx)

if len(yy) % 2 != 0:

yy = '0' + yy

d = value + yy

d1 = bytes.fromhex(d)

serialport.write(d1)

print (d1)

# 接收数据

str1 = serialport.read(2)

print(str1)

str2 = str1 + bytes(1)

data2= binascii.b2a_hex(str2)

if(int(data2,16) == 0):

str1 = bytes([1])

data= binascii.b2a_hex(str1)

print(data)

data1=str(int(data,16)/1000)

print(data1)

# 获取日期

time1=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))

#字符串合并

data2 = time1 + ' ' + str(i) + ' '+ str(d) +' ' +data1

print(data2)

# 写入文件

f1 = open('D:/temprecord.txt','a')

f1.write(data2 + '\n')

f1.close()

i = i - 10

time.sleep(3)

serialport.close()