feat: relay_code 存储+解析 — B2/B4 以原始 int 值写入 tb_state_tst
- insert_test_result 增加 relay_code 参数 - insert_wave_data: relay_out 改为 relay_code (int) - handlers.py: B2/B4 解析传递 status.relay_out 原始值 - relay_out VARCHAR 列保留兼容
This commit is contained in:
@@ -22,6 +22,7 @@ from src.models import (
|
||||
fetch_unparsed_serial,
|
||||
mark_record_state,
|
||||
insert_test_result,
|
||||
insert_wave_data,
|
||||
get_dnt_by_serial,
|
||||
get_pending_serialnet,
|
||||
mark_serialnet_sent,
|
||||
@@ -285,6 +286,8 @@ async def parse_loop():
|
||||
exit_dist=status.exit_dist,
|
||||
enter_speed=status.enter_speed,
|
||||
exit_speed=status.exit_speed,
|
||||
test_mode=status.test_mode,
|
||||
relay_code=status.relay_out,
|
||||
)
|
||||
|
||||
# 匹配 tb_serialnet 中的待确认记录
|
||||
@@ -351,6 +354,19 @@ async def parse_loop():
|
||||
continue
|
||||
|
||||
relay_info = decode_relay_info(wave.relay_out)
|
||||
await insert_wave_data(
|
||||
dnt_id=dnt_id,
|
||||
dpg430_addr=wave.addr,
|
||||
remain_count=wave.remain_count,
|
||||
relay_code=wave.relay_out,
|
||||
work_freq=wave.work_freq,
|
||||
curr_dist=wave.curr_dist,
|
||||
speed=wave.speed,
|
||||
near_dist=wave.near_dist,
|
||||
far_dist=wave.far_dist,
|
||||
enter_dist=wave.enter_dist,
|
||||
leave_dist=wave.leave_dist,
|
||||
)
|
||||
logger.info(
|
||||
f"B4波动上报: {device_id} 剩余={wave.remain_count} "
|
||||
f"当前距离={wave.curr_dist}mm 速度={wave.speed}dm/s "
|
||||
|
||||
@@ -105,6 +105,8 @@ async def _create_tables(pool: aiomysql.Pool):
|
||||
`serialnum` INT DEFAULT 0 COMMENT '流水号',
|
||||
`sub_type` TINYINT DEFAULT 0 COMMENT '1 DLD110, 2 PD132',
|
||||
`str_type` VARCHAR(30) DEFAULT '',
|
||||
`test_mode` TINYINT DEFAULT 0 COMMENT '0 灵敏度测试, 1 波动测试',
|
||||
`data_source` CHAR(2) DEFAULT 'B2' COMMENT '数据来源 B2/B4',
|
||||
`iffinish` VARCHAR(5) DEFAULT '' COMMENT '是否完成',
|
||||
`fault_info` VARCHAR(100) DEFAULT '',
|
||||
`relay_out` VARCHAR(24) DEFAULT '',
|
||||
@@ -116,6 +118,15 @@ async def _create_tables(pool: aiomysql.Pool):
|
||||
`exit_dist` INT DEFAULT 0,
|
||||
`enter_speed` INT DEFAULT 0,
|
||||
`exit_speed` INT DEFAULT 0,
|
||||
`remain_count` INT DEFAULT 0 COMMENT '剩余波动次数 (B4)',
|
||||
`work_freq` FLOAT DEFAULT 0 COMMENT '工作频率 Hz (B4)',
|
||||
`curr_dist` INT DEFAULT 0 COMMENT '当前距离 mm (B4)',
|
||||
`speed` INT DEFAULT 0 COMMENT '当前速度 dm/s (B4)',
|
||||
`near_dist` INT DEFAULT 0 COMMENT '波动最近距离 mm (B4)',
|
||||
`far_dist` INT DEFAULT 0 COMMENT '波动最远距离 mm (B4)',
|
||||
`b4_enter_dist` INT DEFAULT 0 COMMENT 'B4 进入高度 mm',
|
||||
`b4_leave_dist` INT DEFAULT 0 COMMENT 'B4 离开高度 mm',
|
||||
`relay_code` TINYINT DEFAULT 0 COMMENT '继电器原始值 (0x00-0x03)',
|
||||
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX `idx_dnt_id` (`dnt_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
||||
@@ -191,6 +202,27 @@ async def _create_tables(pool: aiomysql.Pool):
|
||||
except Exception:
|
||||
pass # 列已存在,忽略
|
||||
|
||||
# V2.0.4 迁移:tb_state_tst 增加波动测试字段
|
||||
for col, col_def in [
|
||||
("test_mode", "TINYINT DEFAULT 0 COMMENT '0 灵敏度, 1 波动测试'"),
|
||||
("data_source", "CHAR(2) DEFAULT 'B2' COMMENT 'B2/B4'"),
|
||||
("remain_count", "INT DEFAULT 0 COMMENT '剩余波动次数'"),
|
||||
("work_freq", "FLOAT DEFAULT 0 COMMENT '工作频率 Hz'"),
|
||||
("curr_dist", "INT DEFAULT 0 COMMENT '当前距离 mm'"),
|
||||
("speed", "INT DEFAULT 0 COMMENT '当前速度 dm/s'"),
|
||||
("near_dist", "INT DEFAULT 0 COMMENT '波动最近距离 mm'"),
|
||||
("far_dist", "INT DEFAULT 0 COMMENT '波动最远距离 mm'"),
|
||||
("b4_enter_dist", "INT DEFAULT 0 COMMENT 'B4 进入高度 mm'"),
|
||||
("b4_leave_dist", "INT DEFAULT 0 COMMENT 'B4 离开高度 mm'"),
|
||||
("relay_code", "TINYINT DEFAULT 0 COMMENT '继电器原始值 0x00-0x03'"),
|
||||
]:
|
||||
try:
|
||||
await cur.execute(
|
||||
f"ALTER TABLE `tb_state_tst` ADD COLUMN `{col}` {col_def}"
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# 7. 车检器测试基准参数表
|
||||
await cur.execute("""
|
||||
CREATE TABLE IF NOT EXISTS `tb_vechicle_base_test` (
|
||||
@@ -349,7 +381,9 @@ async def insert_test_result(dnt_id: int, dpg430_addr: int, pcnum: str,
|
||||
iffinish: str, fault_info: str, relay_out: str,
|
||||
ppvalue: float, idle_freq: float, enter_freq: float,
|
||||
exit_freq: float, enter_dist: int, exit_dist: int,
|
||||
enter_speed: int, exit_speed: int):
|
||||
enter_speed: int, exit_speed: int,
|
||||
test_mode: int = 0, data_source: str = "B2",
|
||||
relay_code: int = 0):
|
||||
"""插入测试结果到 tb_state_tst"""
|
||||
pool = await get_pool()
|
||||
async with pool.acquire() as conn:
|
||||
@@ -357,15 +391,47 @@ async def insert_test_result(dnt_id: int, dpg430_addr: int, pcnum: str,
|
||||
await cur.execute(
|
||||
"""INSERT INTO tb_state_tst
|
||||
(dnt_id, dpg430_addr, pcnum, serialnum, sub_type, str_type,
|
||||
test_mode, data_source,
|
||||
iffinish, fault_info, relay_out, ppvalue, idle_freq,
|
||||
enter_freq, exit_freq, enter_dist, exit_dist, enter_speed, exit_speed)
|
||||
VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
|
||||
enter_freq, exit_freq, enter_dist, exit_dist, enter_speed, exit_speed,
|
||||
relay_code)
|
||||
VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
|
||||
(dnt_id, dpg430_addr, pcnum, serialnum, sub_type, str_type,
|
||||
test_mode, data_source,
|
||||
iffinish, fault_info, relay_out, ppvalue, idle_freq,
|
||||
enter_freq, exit_freq, enter_dist, exit_dist, enter_speed, exit_speed),
|
||||
enter_freq, exit_freq, enter_dist, exit_dist, enter_speed, exit_speed,
|
||||
relay_code),
|
||||
)
|
||||
|
||||
|
||||
async def insert_wave_data(dnt_id: int, dpg430_addr: int,
|
||||
remain_count: int, relay_code: int,
|
||||
work_freq: float, curr_dist: int, speed: int,
|
||||
near_dist: int, far_dist: int,
|
||||
enter_dist: int, leave_dist: int):
|
||||
"""插入 0xB4 波动测试上报数据到 tb_state_tst"""
|
||||
pool = await get_pool()
|
||||
async with pool.acquire() as conn:
|
||||
async with conn.cursor() as cur:
|
||||
await cur.execute(
|
||||
"""INSERT INTO tb_state_tst
|
||||
(dnt_id, dpg430_addr, test_mode, data_source,
|
||||
relay_out, relay_code,
|
||||
remain_count, work_freq, curr_dist, speed,
|
||||
near_dist, far_dist, b4_enter_dist, b4_leave_dist)
|
||||
VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""",
|
||||
(dnt_id, dpg430_addr, 1, "B4",
|
||||
"", relay_code,
|
||||
remain_count, work_freq, curr_dist, speed,
|
||||
near_dist, far_dist, enter_dist, leave_dist),
|
||||
)
|
||||
logger.info(
|
||||
f"B4波动数据已存储 dnt_id={dnt_id} relay=0x{relay_code:02X} "
|
||||
f"剩余={remain_count} 当前距离={curr_dist}mm 速度={speed}dm/s"
|
||||
f" 最近={near_dist}mm 最远={far_dist}mm"
|
||||
)
|
||||
|
||||
|
||||
async def set_device_offline(serial: str):
|
||||
"""标记设备离线"""
|
||||
pool = await get_pool()
|
||||
|
||||
Reference in New Issue
Block a user