关于Modbus RTU协议的相关资料可以自行查看
在这我做的是RS485转usb口,用树莓派获取数据。
我是基于 pySerial 获取的数据
在确定设备没问题、PC也可以正常获取数据后,连接树莓派
首先查看串口号
ls /dev/ttyUSB*
确定串口号之后,写程序
import time
import serial
# 初始化串口
s = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
# Modbus RTU请求帧,以十六进制字符串形式给出
temp_send = '01 03 00 00 00 01 84 0A'
# 将十六进制字符串转换为字节串
temp_send = bytes.fromhex(temp_send)
# 保存数据
def save_data(data, file_name):
with open(file_name, 'a', encoding='utf-8') as f:
f.write(data + '\n')
f.close()
# 无限循环读取数据
while True:
if s.is_open:
s.write(temp_send)
time.sleep(0.1)
# 获取串口缓冲区中的数据长度
buffer_data = s.in_waiting
if buffer_data:
# 读取缓冲区中的所有数据
return_data = s.read(buffer_data)
# 将返回的二进制数据转换为十六进制字符串
return_data_hex = return_data.hex()
# 解析返回数据,获取压力数据
pressure = int(return_data_hex[6:10], 16) / 100
# 获取当前时间
local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print("当前时间为:", local_time)
print("当前压力为:", pressure)
# 保存数据
texts = str(local_time) + ',' + str(pressure) + "\n"
save_data(texts, 'data.txt')
print("保存的数据为:", texts)
time.sleep(0.5)