python 串列埠接收hex zp blog

2021-10-11 19:32:51 字數 3376 閱讀 7425

最近需要對乙個買來的測溫探頭進行可靠性測試,探頭是通過串列埠方式接受命令傳輸資料的,使用串列埠助手接受到的資料還需要進行計算顯示不直觀,加之準備連續測試幾天,所以就想著寫乙個指令碼把接受到的資料直接轉換存入記事本中以便後面分析。

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()

python 串列埠接收

最簡單的接收然後列印 如下 1 2 3 4 5 6 7 8 9 10 importserial ser serial.serial com4 115200 data while1 whileser.inwaiting 0 data ser.read 1 ifdata printdata data 掃...

串列埠資料接收處理

串列埠接收函式只需要管理資料的接收就行了,不必管理相應資料接收的是什麼,還有順序對不對,真正尋找資料的地方是在資料處理的地方。void usart2 irqhandler void 資料處理端,函式來自於onenet麒麟板程式 if dataptr null num atoi const char ...

arduino串列埠接收資料報 串列埠通訊

常見的通訊介面有usart can usb ethernet。最常見 用的最多的就是usart,下面主要對串列埠通訊協議的物理層及協議層進行講解。物理層 串列埠通訊的物理層有很多標準及變種,主要講解rs 232標準,rs 232標準主要規定了訊號的用途 通訊介面以及訊號的電平標準。使用rs 232標...