python解析VALUER湾流倾角传感器的角度代码


发布时间:

2025-08-10

本文使用 Python 语言对 VALUER 动态倾角传感器的角度进行了解析,使用 minimalmodbus 和 pyserial 库基于 Modbus RTU 协议,通过读取指定寄存器获取欧拉角(Roll、Pitch、Yaw)和 X、Y、Z 轴面角。

以下是使用 Python 解析 VALUER 湾流动态倾角传感器中欧拉角(Roll、Pitch、Yaw)和 X、Y、Z 轴面角的实现方案,基于 Modbus RTU 协议:

实现步骤
1、 依赖库安装

使用minimalmodbus库进行 Modbus RTU 通信,pyserial处理串口连接:

pip install minimalmodbus pyserial

2、 核心解析代码

import minimalmodbus
import serial
 
class InclinationSensor:
    def __init__(self, port='/dev/ttyUSB0', slaveaddress=5):
        # 初始化传感器(默认站号5)
        self.sensor = minimalmodbus.Instrument(
            port=port,
            slaveaddress=slaveaddress,
            mode='rtu'
        )
        # 配置串口参数
        self.sensor.serial.baudrate = 115200
        self.sensor.serial.bytesize = 8
        self.sensor.serial.parity = serial.PARITY_NONE
        self.sensor.serial.stopbits = 1
        self.sensor.serial.timeout = 1.0
 
    def _convert_to_signed(self, value):
        """将16位无符号整数转换为有符号整数(补码转换)"""
        if value > 0x7FFF:
            return value - 0x10000  # 处理负数(补码转原码)
        return value
 
    def read_euler_angles(self):
        """读取欧拉角(Roll、Pitch、Yaw)"""
        data = self.sensor.read_registers(
            registeraddress=0x0000,
            number_of_registers=3,
            functioncode=4
        )
        
        # 转换为有符号整数后再计算角度
        return {
            "Roll(°)": self._convert_to_signed(data[0]) / 100.0,
            "Pitch(°)": self._convert_to_signed(data[1]) / 100.0,
            "Yaw(°)": self._convert_to_signed(data[2]) / 100.0
        }
 
    def read_axis_angles(self):
        """读取X、Y、Z轴面角"""
        data = self.sensor.read_registers(
            registeraddress=0x0006,
            number_of_registers=3,
            functioncode=4
        )
        
        # 转换为有符号整数后再计算角度
        return {
            "X轴面角(°)": self._convert_to_signed(data[0]) / 100.0,
            "Y轴面角(°)": self._convert_to_signed(data[1]) / 100.0,
            "Z轴面角(°)": self._convert_to_signed(data[2]) / 100.0
        }
 
# 示例用法
if __name__ == "__main__":
    try:
        sensor = InclinationSensor(port='COM3')  # 替换为实际串口
        euler = sensor.read_euler_angles()
        axes = sensor.read_axis_angles()
        print("欧拉角数据:", euler)
        print("轴面角数据:", axes)
    except Exception as e:
        print("通信错误:", str(e))

关键说明
寄存器映射

欧拉角(Roll、Pitch、Yaw)对应输入寄存器0000H-0002H,采用 16 位有符号整数存储,单位为 0.01°,需除以 100 转换为实际角度。
X、Y、Z 轴面角对应输入寄存器0006H-0008H,格式与欧拉角一致,其中 Z 轴面角为法平面与水平面的二面角。
通信参数
代码中默认参数为:波特率 115200、无校验(8N1)、站号 5,与文档默认设置一致。若传感器参数已修改,需同步调整代码中的对应配置。

功能码
读取输入寄存器需使用功能码04H,这是 Modbus 协议中针对只读输入寄存器的标准操作。

使用时需根据实际硬件连接修改串口名称(如 Windows 系统为COM3,Linux 系统为/dev/ttyUSB0),并确保传感器与主机的电气连接符合文档中的接口定义。

参考:

python解析湾流倾角传感器的角度代码-CSDN博客