You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助解析Inficon CDG025D真空计RS232通信数据

Inficon CDG025D 串口数据解析与帧同步修复

核心问题分析

你的代码当前逐字节读取且提前终止,导致无法完整捕获仪表发送的9字节帧。从你提供的数据可以看到,每个有效帧以|(十六进制0x7C)开头和结尾,完整帧长度确实是9字节——你看到的"非9字节"是因为代码截断了后续帧。

帧结构与解析规则

根据CDGxxxD串口通信协议,连续压力数据帧(功能码0xF7)的结构如下:

字节位置内容说明示例值(你的常规数据)
1起始分隔符0x7C(|)
2仪表地址0xBF(默认地址)
3功能码0xF7(连续数据传输)
4压力值高字节0x02
5压力值低字节0x01
6校验和10xF7
7校验和20xD7
8状态字节0x00(无错误)
9结束分隔符0x7C(|)

压力值计算

压力值为16位无符号整数,映射范围对应仪表量程(CDG025D默认0.1~1000 Torr):

实际压力 = 最小量程 + (最大量程 - 最小量程) × (16位值 / 65535)

以你常规数据中的帧为例:16位值为0x0201=513,计算得:

压力 = 0.1 + (1000-0.1) × (513/65535) ≈ 7.93 Torr

状态字节说明

  • 0x00:无错误
  • 其他值对应故障状态(如欠量程、过量程等,需参考通信手册具体定义)

修复后的Python代码

以下代码会自动捕获完整帧并解析压力数据:

import serial

def read_complete_frame(ser):
    # 等待起始分隔符
    while True:
        byte = ser.read(1)
        if byte == b'|':
            break
    # 读取剩余8字节组成完整帧
    frame = byte + ser.read(8)
    # 验证帧完整性
    if len(frame) != 9 or frame[-1] != 0x7C:
        return None
    return frame

def decode_pressure(frame):
    # 验证是否为连续数据帧
    if frame[1] != 0xBF or frame[2] != 0xF7:
        return None, None
    # 提取16位压力值
    pressure_raw = (frame[3] << 8) | frame[4]
    status = frame[7]
    # 转换为实际压力(适配0.1~1000 Torr量程)
    min_range = 0.1
    max_range = 1000.0
    pressure = min_range + (max_range - min_range) * (pressure_raw / 65535.0)
    return round(pressure, 2), status

# 初始化串口
gauge = serial.Serial(
    port="COM8",
    baudrate=9600,
    bytesize=serial.EIGHTBITS,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    timeout=1
)

try:
    print("开始读取真空计数据...")
    while True:
        frame = read_complete_frame(gauge)
        if frame:
            pressure, status = decode_pressure(frame)
            if pressure is not None:
                print(f"压力: {pressure} Torr | 状态码: 0x{status:02X}")
except KeyboardInterrupt:
    gauge.close()
    print("\n串口已关闭")

对你提供数据的解析示例

  1. 常规数据中的完整帧:
    b'|', b'\xbf', b'\xf7', b'\x02', b'\x01', b'\xf7', b'\xd7', b'\x00', b'|'

    • 解析结果:压力≈7.93 Torr,状态码0x00(正常)
  2. 启动后的数据帧:
    b'|', b'\xbf', b'\xf7', b'\x03', b'U', b'\xf7', b'-', b'\x00', b'|'

    • 16位值为0x0355=853,解析结果:压力≈13.10 Torr,状态码0x00(正常)

内容的提问来源于stack exchange,提问作者tsc_roboot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 02:17:06