feat(wits): 添加WITS数据验证和字段规则配置

- 在model.__init__.py中新增REQUIRED_SIMPLIFIED_FIELD_RULES和REQUIRED_TRANSMISSION_CHANNELS导出
- 移除app/mqtt_sender.py中的MQTT发送功能,禁用相关逻辑
- 在model/wits.py中添加WITS字段验证规则和传输通道映射配置
- 实现validate_required_wits_fields函数进行必填字段验证
- 在WitsData类中添加__post_init__方法执行字段验证
- 为wits_sender.py添加传输值验证和数据包验证功能
- 更新随机WITS数据生成逻辑,使用真实钻井参数范围
- 实现数据包解析和验证功能,确保必传字段完整性
This commit is contained in:
2026-03-12 13:58:19 +08:00
parent 0a123ba210
commit dc8aed8156
4 changed files with 135 additions and 80 deletions

View File

@@ -1,6 +1,41 @@
from dataclasses import dataclass
REQUIRED_SIMPLIFIED_FIELD_RULES = {
"ts": (1, None),
"deptbitm": (0.0, 20000.0),
"chkp": (0.0, 20000.0),
"sppa": (0.0, 20000.0),
"rpma": (0, 400),
"torqa": (0.0, 100000.0),
"hkla": (0.0, 2000.0),
"blkpos": (0.0, 1000.0),
"woba": (0.0, 2000.0),
}
REQUIRED_TRANSMISSION_CHANNELS = {
"0108": "deptbitm",
"0112": "blkpos",
"0114": "hkla",
"0116": "woba",
"0118": "torqa",
"0120": "rpma",
"0121": "sppa",
"0122": "chkp",
}
def validate_required_wits_fields(data):
for field_name, (minimum, maximum) in REQUIRED_SIMPLIFIED_FIELD_RULES.items():
value = getattr(data, field_name)
if value is None:
raise ValueError(f"WITS field '{field_name}' is required")
if value < minimum:
raise ValueError(f"WITS field '{field_name}' must be >= {minimum}, got {value}")
if maximum is not None and value > maximum:
raise ValueError(f"WITS field '{field_name}' must be <= {maximum}, got {value}")
@dataclass(frozen=True)
class WitsData:
ts: int
@@ -52,6 +87,9 @@ class WitsData:
space4: float
space5: float
def __post_init__(self):
validate_required_wits_fields(self)
WITS_CHANNEL_MAPPING = [
("0101", "wellid", "string"),
@@ -74,6 +112,7 @@ WITS_CHANNEL_MAPPING = [
("0119", "torqx", "float6"),
("0120", "rpma", "int"),
("0121", "sppa", "float6"),
("0122", "chkp", "float6"),
("0123", "spm1", "int"),
("0124", "spm2", "int"),
("0125", "spm3", "int"),