From 72f1ccae3026feea62e32613639c3c80ad6652e0 Mon Sep 17 00:00:00 2001 From: root <13910913995@163.com> Date: Mon, 29 Jun 2026 08:45:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E8=87=AA=E6=A3=80?= =?UTF-8?q?=E3=80=81=E4=BA=8B=E4=BB=B6=E8=AE=B0=E5=BD=95=E7=AD=89=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/.env | 6 +- backend/app/adapters/device_client.py | 183 +++++++++++----- backend/app/api/routes/config.py | 8 + backend/app/core/config.py | 3 +- backend/app/main.py | 10 + backend/app/schemas/platform.py | 12 +- backend/app/services/platform_service.py | 207 +++++++++++++++++- backend/tests/test_api.py | 106 ++++++++- backend/tests/test_modbus_client.py | 83 +++++++ document/显示界面modbus协议寄存器定义.md | 80 ++++++- document/显示界面modbus协议寄存器定义.pdf | Bin 0 -> 528659 bytes ...气量测控平台系统需求分析及技术框架设计.md | 16 +- frontend/src/api/platform.ts | 5 + frontend/src/layout/components/header.vue | 126 ++++++++--- frontend/src/routes/index.ts | 11 +- frontend/src/types/platform.ts | 10 + frontend/src/utils/alarmEvent.ts | 3 + frontend/src/websocket/client.ts | 11 +- 18 files changed, 771 insertions(+), 109 deletions(-) create mode 100644 document/显示界面modbus协议寄存器定义.pdf diff --git a/backend/.env b/backend/.env index d8cab6d..3ea4e48 100644 --- a/backend/.env +++ b/backend/.env @@ -4,10 +4,10 @@ EMCP_BACKUP_DIR=/userdata/emcp/data/backups # true: use MockDeviceClient # false: use real Modbus client -EMCP_USE_MOCK_DEVICE=true +EMCP_USE_MOCK_DEVICE=True -# mock | rtu | tcp -EMCP_MODBUS_TRANSPORT=mock +# | rtu | tcp +EMCP_MODBUS_TRANSPORT=rtu EMCP_MODBUS_SLAVE_ID=1 EMCP_MODBUS_TIMEOUT_SECONDS=1.0 diff --git a/backend/app/adapters/device_client.py b/backend/app/adapters/device_client.py index 4c2ae90..1eac5f1 100644 --- a/backend/app/adapters/device_client.py +++ b/backend/app/adapters/device_client.py @@ -94,6 +94,17 @@ class DeviceClient(ABC): def send_switch_control(self, payload: SwitchControlIn) -> Dict[str, Any]: raise NotImplementedError + @abstractmethod + def startup_self_check(self) -> bool: + """开机自检:通过 03H 读取参数区,验证通讯链路是否正常。 + + 返回值 + ---- + bool + True 表示通讯正常,False 表示通讯失败 + """ + raise NotImplementedError + VALUE_GROUP_FIELDS = [ "Ua", @@ -130,6 +141,8 @@ AI_INPUT_COUNT = 8 DI_INPUT_REGISTER = 0x00E3 DO_INPUT_REGISTER = 0x00E4 EVENT_FLAG_REGISTER = 0x00E5 +STATUS_WORD_00E6_REGISTER = 0x00E6 +STATUS_WORD_00E7_REGISTER = 0x00E7 EVENT_INPUT_START_REGISTER = 0x0100 EVENT_SUCCESS_REPLY_REGISTER = 0x0100 UART_CONFIG_START_REGISTER = 0x0004 @@ -147,6 +160,30 @@ NET_ITEM_REGISTER_COUNT = 7 TIME_SYNC_START_REGISTER = 0x0000 +def _status_label(is_abnormal: bool, abnormal_label: str) -> str: + return abnormal_label if is_abnormal else "正常" + + +def _build_device_status(event_count: int, status_word_00e6: int, status_word_00e7: int) -> DeviceStatus: + return DeviceStatus( + self_check=_status_label(bool(status_word_00e6 & (1 << 15)), "异常"), + net1=_status_label(bool(status_word_00e6 & (1 << 8)), "断开"), + net2=_status_label(bool(status_word_00e6 & (1 << 9)), "断开"), + net3=_status_label(bool(status_word_00e6 & (1 << 10)), "断开"), + net4=_status_label(bool(status_word_00e6 & (1 << 11)), "断开"), + uart1=_status_label(bool(status_word_00e6 & (1 << 0)), "断开"), + uart2=_status_label(bool(status_word_00e6 & (1 << 1)), "断开"), + uart3=_status_label(bool(status_word_00e6 & (1 << 2)), "断开"), + uart4=_status_label(bool(status_word_00e6 & (1 << 3)), "断开"), + frequency_limit=_status_label(bool(status_word_00e7 & (1 << 3)), "越限"), + ct_break=_status_label(bool(status_word_00e7 & (1 << 2)), "断线"), + pt_break=_status_label(bool(status_word_00e7 & (1 << 1)), "断线"), + event_count=max(0, int(event_count)), + status_word_00e6=int(status_word_00e6) & 0xFFFF, + status_word_00e7=int(status_word_00e7) & 0xFFFF, + ) + + def _clamp_byte(value: Any) -> int: try: number = int(round(float(value))) @@ -394,13 +431,38 @@ class MockDeviceClient(DeviceClient): return RealtimeData(line_list=line_list, switch=switch, ai_collect=ai_collect) def read_device_status(self) -> DeviceStatus: - return DeviceStatus( - self_check="正常", - net1="正常", - net2="正常", - uart1="正常", - uart2="正常" if self._tick % 4 else "断开", - ) + current_tick = max(self._tick, 1) + event_count = 1 if current_tick % 6 == 0 else 0 + + status_word_00e6 = 0 + if current_tick % 10 == 0: + status_word_00e6 |= 1 << 15 + if current_tick % 7 == 0: + status_word_00e6 |= 1 << 8 + if current_tick % 9 == 0: + status_word_00e6 |= 1 << 9 + if current_tick % 11 == 0: + status_word_00e6 |= 1 << 10 + if current_tick % 13 == 0: + status_word_00e6 |= 1 << 11 + if current_tick % 8 == 0: + status_word_00e6 |= 1 << 0 + if current_tick % 12 == 0: + status_word_00e6 |= 1 << 1 + if current_tick % 14 == 0: + status_word_00e6 |= 1 << 2 + if current_tick % 4 == 0: + status_word_00e6 |= 1 << 3 + + status_word_00e7 = 0 + if current_tick % 15 == 0: + status_word_00e7 |= 1 << 3 + if current_tick % 16 == 0: + status_word_00e7 |= 1 << 2 + if current_tick % 18 == 0: + status_word_00e7 |= 1 << 1 + + return _build_device_status(event_count, status_word_00e6, status_word_00e7) def read_alarm_events(self) -> List[AlarmEvent]: if self._tick % 6 != 0: @@ -496,6 +558,10 @@ class MockDeviceClient(DeviceClient): action_text = "合" if payload.action == 1 else "分" return {"control_status": f"执行成功: 开关{payload.ch}{action_text}"} + def startup_self_check(self) -> bool: + """Mock 实现:始终返回通讯正常。""" + return True + class CDeviceClient(DeviceClient): """基于 Modbus 协议的真实设备客户端。""" @@ -586,12 +652,6 @@ class CDeviceClient(DeviceClient): pass return {f"do{index}": self._do_state.get(index, 0) for index in range(1, 13)} - def _build_status(self) -> DeviceStatus: - transport = settings.modbus_transport.strip().lower() - if transport == "tcp": - return DeviceStatus(self_check="正常", net1="正常", net2="正常", uart1="断开", uart2="断开") - return DeviceStatus(self_check="正常", net1="断开", net2="断开", uart1="正常", uart2="正常") - def _category_map(self, category: str) -> str: normalized = category.strip().upper() return { @@ -853,53 +913,63 @@ class CDeviceClient(DeviceClient): return RealtimeData(line_list=line_list, switch=switch, ai_collect=self._read_ai_collect()) def read_device_status(self) -> DeviceStatus: - self.transport.read_input_registers(EVENT_FLAG_REGISTER, 1) - return self._build_status() + registers = self.transport.read_input_registers(EVENT_FLAG_REGISTER, 3) + event_count = int(registers[0]) if len(registers) >= 1 else 0 + status_word_00e6 = int(registers[1]) if len(registers) >= 2 else 0 + status_word_00e7 = int(registers[2]) if len(registers) >= 3 else 0 + return _build_device_status(event_count, status_word_00e6, status_word_00e7) def read_alarm_events(self) -> List[AlarmEvent]: - event_flag = self.transport.read_input_registers(EVENT_FLAG_REGISTER, 1)[0] - event_count = int(event_flag) - if event_count <= 0: - return [] - - registers = self.transport.read_input_registers(EVENT_INPUT_START_REGISTER, event_count * 5) alarms: List[AlarmEvent] = [] - for index in range(event_count): - start = index * 5 - event_registers = registers[start : start + 5] - if len(event_registers) < 5: - continue - signature = tuple(int(value) for value in event_registers[:4]) - if signature == self._last_event_signature: - continue - self._last_event_signature = signature + remaining_guard = 32 + while remaining_guard > 0: + remaining_guard -= 1 + event_flag = self.transport.read_input_registers(EVENT_FLAG_REGISTER, 1)[0] + event_count = int(event_flag) + if event_count <= 0: + break - timestamp = int(event_registers[0]) | (int(event_registers[1]) << 16) - milliseconds = int(event_registers[2]) & 0xFFFF - encoded = int(event_registers[3]) & 0xFFFF - action_value = int(event_registers[4]) & 0xFFFF - line_no = (encoded >> 12) & 0x0F - event_type = (encoded >> 8) & 0x0F - event_code = encoded & 0xFF + registers = self.transport.read_input_registers(EVENT_INPUT_START_REGISTER, event_count * 5) + batch_alarms: List[AlarmEvent] = [] + for index in range(event_count): + start = index * 5 + event_registers = registers[start : start + 5] + if len(event_registers) < 5: + continue + signature = tuple(int(value) for value in event_registers[:4]) + if signature == self._last_event_signature: + continue + self._last_event_signature = signature - event_name = self._decode_event_name(event_type, event_code) - event_time = datetime.fromtimestamp(timestamp).replace(microsecond=min(milliseconds, 999) * 1000) - line_text = "装置" if line_no == 0 else f"线路{line_no}" - alarms.append( - AlarmEvent( - event_time=event_time, - line_code=line_no, - event_type=event_type, - event_code=event_code, - event_value=action_value, - content=f"{line_text}{event_name},动作值={action_value}", + timestamp = int(event_registers[0]) | (int(event_registers[1]) << 16) + milliseconds = int(event_registers[2]) & 0xFFFF + encoded = int(event_registers[3]) & 0xFFFF + action_value = int(event_registers[4]) & 0xFFFF + line_no = (encoded >> 12) & 0x0F + event_type = (encoded >> 8) & 0x0F + event_code = encoded & 0xFF + + event_name = self._decode_event_name(event_type, event_code) + event_time = datetime.fromtimestamp(timestamp).replace(microsecond=min(milliseconds, 999) * 1000) + line_text = "装置" if line_no == 0 else f"线路{line_no}" + batch_alarms.append( + AlarmEvent( + event_time=event_time, + line_code=line_no, + event_type=event_type, + event_code=event_code, + event_value=action_value, + content=f"{line_text}{event_name},动作值={action_value}", + ) ) - ) - if alarms: + if not batch_alarms: + break + # 协议文档将“读事件成功回复”描述为 03 读取保持寄存器,但该流程需要携带成功个数; # 这里通过写保持寄存器把已成功读取的事件个数回告给设备。 - self.transport.write_registers(EVENT_SUCCESS_REPLY_REGISTER, [len(alarms)]) + self.transport.write_registers(EVENT_SUCCESS_REPLY_REGISTER, [len(batch_alarms)]) + alarms.extend(batch_alarms) return alarms def _decode_event_name(self, event_type: int, event_code: int) -> str: @@ -1116,3 +1186,14 @@ class CDeviceClient(DeviceClient): "control_status": f"执行成功: 开关{payload.ch}{action_text}", "modbus_written": {"coil_address": coil_address, "state_register": DO_STATE_REGISTER}, } + + def startup_self_check(self) -> bool: + """开机自检:通过 03H 读取参数区(时间同步保持寄存器),验证通讯链路。 + + 若读取成功,通讯链路正常;若抛出异常,通讯失败。 + """ + try: + self.transport.read_holding_registers(TIME_SYNC_START_REGISTER, 2) + return True + except Exception: + return False diff --git a/backend/app/api/routes/config.py b/backend/app/api/routes/config.py index 56644bc..979fc5c 100644 --- a/backend/app/api/routes/config.py +++ b/backend/app/api/routes/config.py @@ -26,6 +26,14 @@ def save_device_password(payload: DevicePasswordUpdateIn) -> Dict[str, Any]: return success_response(platform_service.save_device_password(payload), msg="保存设备密码成功") +@router.post("/device/self-check", dependencies=[Depends(verify_api_token)]) +def startup_self_check() -> Dict[str, Any]: + result = platform_service.startup_self_check() + if result["success"]: + return success_response(result, msg="开机自检通过") + return success_response(result, msg="开机自检(通讯链路)异常") + + @router.get("/device/net", dependencies=[Depends(verify_api_token)]) def get_net_config(nic: str = Query(..., min_length=1)) -> Dict[str, Any]: return success_response(platform_service.get_net_config(nic=nic), msg="获取网卡配置成功") diff --git a/backend/app/core/config.py b/backend/app/core/config.py index d55473f..c72e4ce 100644 --- a/backend/app/core/config.py +++ b/backend/app/core/config.py @@ -11,12 +11,13 @@ class Settings(BaseSettings): app_version: str = "0.1.0" api_prefix: str = "/api" realtime_ws_path: str = "/ws/real-time" + status_ws_path: str = "/ws/status" alarm_ws_path: str = "/ws/alarm" time_sync_ws_path: str = "/ws/time-sync" poll_interval_seconds: float = 0.5 time_sync_poll_interval_seconds: float = 1.0 auth_password: str = "admin123" - use_mock_device: bool = True + use_mock_device: bool = False modbus_transport: str = "rtu" modbus_slave_id: int = 1 modbus_tcp_host: str = "127.0.0.1" diff --git a/backend/app/main.py b/backend/app/main.py index c4a39b0..c73c160 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -57,6 +57,16 @@ async def realtime_ws(websocket: WebSocket) -> None: ws_manager.disconnect("real-time", websocket) +@app.websocket(settings.status_ws_path) +async def status_ws(websocket: WebSocket) -> None: + await ws_manager.connect("status", websocket) + try: + while True: + await websocket.receive_text() + except WebSocketDisconnect: + ws_manager.disconnect("status", websocket) + + @app.websocket(settings.alarm_ws_path) async def alarm_ws(websocket: WebSocket) -> None: await ws_manager.connect("alarm", websocket) diff --git a/backend/app/schemas/platform.py b/backend/app/schemas/platform.py index 95571f1..f036291 100644 --- a/backend/app/schemas/platform.py +++ b/backend/app/schemas/platform.py @@ -54,8 +54,18 @@ class DeviceStatus(BaseModel): self_check: str = "正常" net1: str = "正常" net2: str = "正常" + net3: str = "正常" + net4: str = "正常" uart1: str = "正常" - uart2: str = "断开" + uart2: str = "正常" + uart3: str = "正常" + uart4: str = "正常" + frequency_limit: str = "正常" + ct_break: str = "正常" + pt_break: str = "正常" + event_count: int = 0 + status_word_00e6: int = 0 + status_word_00e7: int = 0 class HardwareVersion(BaseModel): diff --git a/backend/app/services/platform_service.py b/backend/app/services/platform_service.py index cfee0a1..1dbe564 100644 --- a/backend/app/services/platform_service.py +++ b/backend/app/services/platform_service.py @@ -10,6 +10,7 @@ from app.core.security import hash_password from app.repositories.alarm_repo import AlarmRepository from app.repositories.json_config_repo import JsonConfigRepository from app.schemas.platform import ( + AlarmEvent, AiAlarmSettingIn, ChannelConfigIn, DeviceConfigIn, @@ -23,11 +24,69 @@ from app.schemas.platform import ( SystemConfigIn, TimeSyncConfigIn, ValueGroup, - ValueGroup, UartConfigItem, ) from app.ws.manager import ws_manager +# 主站侧操作类事件代码 +OPERATION_EVENT_CODE = { + 1: "控制分/合", + 2: "读定值失败", + 3: "线路定值修改", + 4: "AI报警参数修改", + 5: "AI通道参数修改", + 6: "AO通道参数修改", + 7: "通讯参数修改", + 8: "密码修改", +} + +# 操作类事件 event_type +EVENT_TYPE_OPERATION = 4 + +# 开机自检异常归入报警类,避免前端事件报表出现未知类型 +EVENT_TYPE_SELF_CHECK = 3 +SELF_CHECK_COMMUNICATION_ERROR_CODE = 99 + + +def _generate_operation_event_content(event_code: int, line_code: int = 0, detail: str = "") -> str: + """根据操作事件代码生成事件内容描述文字。 + + 参数 + ---- + event_code : int + 操作事件代码 (1~8) + line_code : int + 关联线路编号,0 表示装置级 + detail : str + 附加描述信息,如网卡名、端口号等 + """ + label = OPERATION_EVENT_CODE.get(event_code, f"未知操作事件(code={event_code})") + parts = [label] + if line_code > 0: + parts.append(f"线路{line_code}") + if detail: + parts.append(detail) + return ";".join(parts) + + +def _collect_startup_status_abnormalities(status: DeviceStatus) -> List[str]: + abnormal_items: List[str] = [] + if status.self_check != "正常": + abnormal_items.append(f"装置自检={status.self_check}") + for label, value in ( + ("网口1", status.net1), + ("网口2", status.net2), + ("网口3", status.net3), + ("网口4", status.net4), + ("串口1", status.uart1), + ("串口2", status.uart2), + ("串口3", status.uart3), + ("串口4", status.uart4), + ): + if value != "正常": + abnormal_items.append(f"{label}={value}") + return abnormal_items + class PlatformService: def __init__(self) -> None: @@ -239,6 +298,65 @@ class PlatformService: memory_store.set_status(status) return status + def startup_self_check(self) -> Dict[str, Any]: + """开机自检:通过 03H 读取参数区,验证通讯链路。 + + 若通讯失败,生成"开机自检(通讯链路)异常"报警事件, + 并将设备状态置为"断开",网络/串口状态清空。 + + 返回值 + ---- + dict + {"success": bool, "status": DeviceStatus} + """ + success = self.device_client.startup_self_check() + if success: + status = self.device_client.read_device_status() + memory_store.set_status(status) + abnormal_items = _collect_startup_status_abnormalities(status) + if abnormal_items: + alarm = AlarmEvent( + event_time=datetime.now(), + line_code=0, + event_type=EVENT_TYPE_SELF_CHECK, + event_code=SELF_CHECK_COMMUNICATION_ERROR_CODE, + event_value=len(abnormal_items), + content=f"开机自检状态异常:{', '.join(abnormal_items)}", + ) + alarm.id = self.alarm_repo.save_alarm(alarm) + memory_store.push_alarm(alarm) + return {"success": True, "status": status.model_dump()} + + # 通讯失败:生成报警事件 + alarm = AlarmEvent( + event_time=datetime.now(), + line_code=0, + event_type=EVENT_TYPE_SELF_CHECK, + event_code=SELF_CHECK_COMMUNICATION_ERROR_CODE, + event_value=0, + content="开机自检(通讯链路)异常", + ) + alarm.id = self.alarm_repo.save_alarm(alarm) + memory_store.push_alarm(alarm) + + # 设置状态为断开 + status = DeviceStatus( + self_check="断开", + net1="断开", + net2="断开", + net3="断开", + net4="断开", + uart1="断开", + uart2="断开", + uart3="断开", + uart4="断开", + frequency_limit="未知", + ct_break="未知", + pt_break="未知", + ) + memory_store.set_status(status) + return {"success": False, "status": status.model_dump()} + def _default_device_config(self) -> Dict[str, Any]: return { "password": "", @@ -333,6 +451,13 @@ class PlatformService: data["uart"] = self._merge_keyed_items(data["uart"], payload_data["uart"], "port") if payload.password.strip(): data["password"] = hash_password(payload.password) + self._save_operation_event(event_code=8, detail="设备密码") + if payload_data.get("net"): + nics = [item.get("nic", "") for item in payload_data["net"] if isinstance(item, dict)] + self._save_operation_event(event_code=7, detail=f"网卡: {', '.join(nics)}") + if payload_data.get("uart"): + ports = [item.get("port", "") for item in payload_data["uart"] if isinstance(item, dict)] + self._save_operation_event(event_code=7, detail=f"串口: {', '.join(ports)}") path = self.config_repo.write_device_config(data) device_result = self.device_client.send_device_config(payload) return {"save_path": f"/config/{path.name}", **device_result} @@ -341,6 +466,7 @@ class PlatformService: data = self._load_device_config_with_defaults() data["password"] = hash_password(payload.password) path = self.config_repo.write_device_config(data) + self._save_operation_event(event_code=8, detail="设备密码") return {"save_path": f"/config/{path.name}", "target": "password", "send_status": "成功"} def get_device_config(self) -> Dict[str, Any]: @@ -354,9 +480,13 @@ class PlatformService: def save_net_config(self, payload: NetConfigItem | List[NetConfigItem]) -> Dict[str, Any]: if isinstance(payload, list): + nics = [item.nic for item in payload] results = [self.device_client.send_net_config(item) for item in payload] + self._save_operation_event(event_code=7, detail=f"网卡: {', '.join(nics)}") return {"send_status": "成功", "target": "net_batch", "items": len(results), "results": results} - return self.device_client.send_net_config(payload) + result = self.device_client.send_net_config(payload) + self._save_operation_event(event_code=7, detail=f"网卡: {payload.nic}") + return result def get_uart_config(self, port: str) -> Dict[str, Any]: device_config = self._load_device_config_with_defaults() @@ -369,10 +499,13 @@ class PlatformService: device_config = self._load_device_config_with_defaults() if isinstance(payload, list): results = [] + ports = [] for item in payload: device_config["uart"] = self._upsert_keyed_item(device_config["uart"], item.model_dump(), "port") + ports.append(item.port) results.append({"target": "uart", "port": item.port, "send_status": "成功"}) path = self.config_repo.write_device_config(device_config) + self._save_operation_event(event_code=7, detail=f"串口: {', '.join(ports)}") return { "save_path": f"/config/{path.name}", "target": "uart_batch", @@ -382,10 +515,17 @@ class PlatformService: } device_config["uart"] = self._upsert_keyed_item(device_config["uart"], payload.model_dump(), "port") path = self.config_repo.write_device_config(device_config) + self._save_operation_event(event_code=7, detail=f"串口: {payload.port}") return {"save_path": f"/config/{path.name}", "target": "uart", "port": payload.port, "send_status": "成功"} def save_channel_config(self, payload: ChannelConfigIn) -> Dict[str, Any]: device_result = self.device_client.send_channel_config(payload) + if payload.ai_channel: + ai_chs = [str(item.ch) for item in payload.ai_channel] + self._save_operation_event(event_code=5, detail=f"通道: {', '.join(ai_chs)}") + if payload.ao_channel: + ao_chs = [str(item.ch) for item in payload.ao_channel] + self._save_operation_event(event_code=6, detail=f"通道: {', '.join(ao_chs)}") return device_result def get_channel_config(self) -> Dict[str, Any]: @@ -420,11 +560,16 @@ class PlatformService: def save_line_alarm_setting(self, payload: LineAlarmSettingIn) -> Dict[str, Any]: device_result = self.device_client.send_line_alarm_setting(payload) + self._save_operation_event(event_code=3, line_code=payload.line_no) return device_result def get_line_alarm_setting(self, line_no: int = 1) -> Dict[str, Any]: - current = self.device_client.read_line_alarm_setting(line_no) merged = self._default_line_alarm_setting(line_no) + try: + current = self.device_client.read_line_alarm_setting(line_no) + except Exception as exc: + self._save_operation_event(event_code=2, line_code=line_no, detail=f"线路{line_no}:{exc}") + current = None if isinstance(current, dict): merged.update(current) normalized_transformer: List[Dict[str, Any]] = [] @@ -444,7 +589,10 @@ class PlatformService: def save_ai_alarm_setting(self, payload: List[AiAlarmSettingIn]) -> Dict[str, Any]: payload_data = [item.model_dump() for item in payload] - return self.device_client.send_ai_alarm_setting(payload_data) + result = self.device_client.send_ai_alarm_setting(payload_data) + chs = [str(item.channel_no) for item in payload] + self._save_operation_event(event_code=4, detail=f"通道: {', '.join(chs)}") + return result def get_ai_alarm_setting(self) -> List[Dict[str, Any]]: return self.device_client.read_ai_alarm_setting() @@ -479,8 +627,56 @@ class PlatformService: end_time=end_time, ) + def _save_operation_event( + self, + event_code: int, + line_code: int = 0, + event_value: int = 0, + detail: str = "", + ) -> AlarmEvent: + """通用操作事件生成保存方法(同步)。 + + 将主站侧操作类事件保存到 SQLite 并推入内存缓存。 + 返回保存后的 AlarmEvent 对象(含数据库自增 id),调用方可进一步广播。 + + 参数 + ---- + event_code : int + 操作事件代码,取值 1~8,对应含义见 OPERATION_EVENT_CODE + line_code : int + 关联线路编号,0 表示装置级 + event_value : int + 事件附带数值,如分合闸通道号 + detail : str + 附加描述(如网卡名、端口号、参数名等) + + 返回值 + ---- + AlarmEvent + 已保存的事件对象(id 已回填) + """ + content = _generate_operation_event_content(event_code, line_code, detail) + alarm = AlarmEvent( + event_time=datetime.now(), + line_code=line_code, + event_type=EVENT_TYPE_OPERATION, + event_code=event_code, + event_value=event_value, + content=content, + ) + alarm.id = self.alarm_repo.save_alarm(alarm) + memory_store.push_alarm(alarm) + return alarm + def switch_control(self, payload: SwitchControlIn) -> Dict[str, Any]: - return self.device_client.send_switch_control(payload) + result = self.device_client.send_switch_control(payload) + action_label = "合闸" if payload.action == 1 else "分闸" + self._save_operation_event( + event_code=1, + event_value=payload.ch, + detail=f"CH{payload.ch} {action_label}", + ) + return result async def poll_time_sync_once(self) -> None: time_sync = self.device_client.read_time_sync_config() @@ -494,6 +690,7 @@ class PlatformService: memory_store.set_realtime(realtime) memory_store.set_status(status) await ws_manager.broadcast("real-time", {"type": "real_time", "data": realtime.model_dump()}) + await ws_manager.broadcast("status", {"type": "status", "data": status.model_dump()}) for alarm in alarms: alarm.id = self.alarm_repo.save_alarm(alarm) diff --git a/backend/tests/test_api.py b/backend/tests/test_api.py index 4efffd8..689318b 100644 --- a/backend/tests/test_api.py +++ b/backend/tests/test_api.py @@ -10,11 +10,14 @@ from app.db.sqlite import get_connection, init_db from app.main import app from app.repositories.alarm_repo import AlarmRepository from app.repositories.json_config_repo import JsonConfigRepository -from app.schemas.platform import AlarmEvent, LineData, RealtimeData, ValueGroup +from app.schemas.platform import AlarmEvent, DeviceStatus, LineData, RealtimeData, ValueGroup from app.services.platform_service import platform_service from app.ws.manager import ws_manager +# 测试固定使用 Mock,避免受本地 .env 中 RTU/TCP 真机配置影响。 +platform_service.device_client = MockDeviceClient() + client = TestClient(app) @@ -29,6 +32,21 @@ def test_healthcheck() -> None: assert response.json()["status"] == "ok" +def test_device_status_endpoint() -> None: + response = client.get("/api/device-status") + assert response.status_code == 200 + payload = response.json() + assert payload["code"] == 200 + assert "self_check" in payload["data"] + assert "net4" in payload["data"] + assert "uart4" in payload["data"] + assert "frequency_limit" in payload["data"] + assert "ct_break" in payload["data"] + assert "pt_break" in payload["data"] + assert "status_word_00e6" in payload["data"] + assert "status_word_00e7" in payload["data"] + + def test_realtime_endpoint() -> None: response = client.get("/api/real-time-data") assert response.status_code == 200 @@ -37,6 +55,92 @@ def test_realtime_endpoint() -> None: assert "line_list" in payload["data"] +def test_status_websocket_receives_payload() -> None: + with client.websocket_connect("/ws/status") as websocket: + asyncio.run(platform_service.poll_device_once()) + payload = websocket.receive_json() + + assert payload["type"] == "status" + assert "self_check" in payload["data"] + assert "net4" in payload["data"] + assert "uart4" in payload["data"] + assert "frequency_limit" in payload["data"] + + +def test_startup_self_check_saves_alarm_when_status_is_abnormal(tmp_path) -> None: + class AbnormalStatusMockClient(MockDeviceClient): + def startup_self_check(self) -> bool: + return True + + def read_device_status(self) -> DeviceStatus: + return DeviceStatus( + self_check="异常", + net1="断开", + net2="正常", + net3="正常", + net4="正常", + uart1="正常", + uart2="断开", + uart3="正常", + uart4="正常", + ) + + old_db_path = settings.alarm_db_path + old_client = platform_service.device_client + settings.alarm_db_path = tmp_path / "alarm.db" + init_db() + with get_connection() as connection: + connection.execute("DELETE FROM alarm_event") + connection.commit() + platform_service.device_client = AbnormalStatusMockClient() + + try: + result = platform_service.startup_self_check() + alarms = AlarmRepository().list_alarms(page=1, size=20) + + assert result["success"] is True + assert result["status"]["self_check"] == "异常" + assert len(alarms) == 1 + assert alarms[0]["event_type"] == 3 + assert alarms[0]["event_code"] == 99 + assert "装置自检=异常" in alarms[0]["content"] + assert "网口1=断开" in alarms[0]["content"] + assert "串口2=断开" in alarms[0]["content"] + finally: + platform_service.device_client = old_client + settings.alarm_db_path = old_db_path + + +def test_get_line_alarm_setting_saves_read_failure_event(tmp_path) -> None: + class FailingLineAlarmClient(MockDeviceClient): + def read_line_alarm_setting(self, line_no: int) -> dict: + raise RuntimeError("线路定值回读失败") + + old_db_path = settings.alarm_db_path + old_client = platform_service.device_client + settings.alarm_db_path = tmp_path / "alarm.db" + init_db() + with get_connection() as connection: + connection.execute("DELETE FROM alarm_event") + connection.commit() + platform_service.device_client = FailingLineAlarmClient() + + try: + result = platform_service.get_line_alarm_setting(2) + alarms = AlarmRepository().list_alarms(page=1, size=20) + + assert result["line_no"] == 2 + assert len(alarms) == 1 + assert alarms[0]["event_type"] == 4 + assert alarms[0]["event_code"] == 2 + assert alarms[0]["line_code"] == 2 + assert "读定值失败" in alarms[0]["content"] + assert "线路定值回读失败" in alarms[0]["content"] + finally: + platform_service.device_client = old_client + settings.alarm_db_path = old_db_path + + def test_realtime_precision_normalization() -> None: realtime = RealtimeData( line_list=[ diff --git a/backend/tests/test_modbus_client.py b/backend/tests/test_modbus_client.py index 1f0a9fc..ac1b180 100644 --- a/backend/tests/test_modbus_client.py +++ b/backend/tests/test_modbus_client.py @@ -16,6 +16,8 @@ from app.adapters.device_client import ( EVENT_FLAG_REGISTER, EVENT_INPUT_START_REGISTER, EVENT_SUCCESS_REPLY_REGISTER, + STATUS_WORD_00E6_REGISTER, + STATUS_WORD_00E7_REGISTER, NET_CONFIG_REGISTER_COUNT, NET_CONFIG_START_REGISTER, LINE_ALARM_REGISTERS_PER_LINE, @@ -156,6 +158,87 @@ def test_modbus_client_reads_alarm_event_once() -> None: assert transport.written_registers[-1] == (EVENT_SUCCESS_REPLY_REGISTER, [1]) +def test_modbus_client_reads_alarm_events_until_event_flag_clears() -> None: + class CyclingTransport(FakeTransport): + def __init__(self, batches: List[List[int]]) -> None: + super().__init__() + self._batches = [list(batch) for batch in batches] + + def read_input_registers(self, address: int, count: int) -> List[int]: + if address == EVENT_FLAG_REGISTER and count == 1: + return [len(self._batches[0]) // 5 if self._batches else 0] + if address == EVENT_INPUT_START_REGISTER: + return list(self._batches[0])[:count] if self._batches else [0] * count + return super().read_input_registers(address, count) + + def write_registers(self, address: int, values: Sequence[int]) -> None: + super().write_registers(address, values) + if address == EVENT_SUCCESS_REPLY_REGISTER and self._batches: + self._batches.pop(0) + + timestamp1 = int(datetime(2026, 5, 25, 12, 0, 0).timestamp()) + timestamp2 = int(datetime(2026, 5, 25, 12, 0, 1).timestamp()) + transport = CyclingTransport( + batches=[ + [ + timestamp1 & 0xFFFF, + (timestamp1 >> 16) & 0xFFFF, + 111, + (1 << 12) | (3 << 8) | 1, + 230, + ], + [ + timestamp2 & 0xFFFF, + (timestamp2 >> 16) & 0xFFFF, + 222, + (2 << 12) | (2 << 8) | 7, + 1, + ], + ] + ) + client = CDeviceClient(transport=transport) + + alarms = client.read_alarm_events() + + assert len(alarms) == 2 + assert alarms[0].line_code == 1 + assert alarms[0].event_type == 3 + assert alarms[1].line_code == 2 + assert alarms[1].event_type == 2 + assert transport.written_registers[-2:] == [ + (EVENT_SUCCESS_REPLY_REGISTER, [1]), + (EVENT_SUCCESS_REPLY_REGISTER, [1]), + ] + assert client.read_alarm_events() == [] + + +def test_modbus_client_reads_status_words() -> None: + transport = FakeTransport() + client = CDeviceClient(transport=transport) + + transport.set_input_block(EVENT_FLAG_REGISTER, [3]) + transport.set_input_block(STATUS_WORD_00E6_REGISTER, [0x8A05]) + transport.set_input_block(STATUS_WORD_00E7_REGISTER, [0x000E]) + + status = client.read_device_status() + + assert status.event_count == 3 + assert status.self_check == "异常" + assert status.net1 == "正常" + assert status.net2 == "断开" + assert status.net3 == "正常" + assert status.net4 == "断开" + assert status.uart1 == "断开" + assert status.uart2 == "正常" + assert status.uart3 == "断开" + assert status.uart4 == "正常" + assert status.frequency_limit == "越限" + assert status.ct_break == "断线" + assert status.pt_break == "断线" + assert status.status_word_00e6 == 0x8A05 + assert status.status_word_00e7 == 0x000E + + def test_modbus_client_reads_and_writes_downstream_registers() -> None: transport = FakeTransport() client = CDeviceClient(transport=transport) diff --git a/document/显示界面modbus协议寄存器定义.md b/document/显示界面modbus协议寄存器定义.md index ed32e1c..43fa23f 100644 --- a/document/显示界面modbus协议寄存器定义.md +++ b/document/显示界面modbus协议寄存器定义.md @@ -28,6 +28,8 @@ | 开入状态 | `0x04` | 输入寄存器 | `0x00E3` | 1寄存器 | 16路,每 bit 一路 | | 开出状态 | `0x04` | 输入寄存器 | `0x00E4` | 1寄存器 | 16路,每 bit 一路 | | 事件总寄存器 | `0x04` | 输入寄存器 | `0x00E5` | 1寄存器 | 内容为 `n` 时表示有 `n` 个事件待读取 | +| 自检 / 串口 / 网口状态 | `0x04` | 输入寄存器 | `0x00E6` | 1寄存器 | `bit15` 自检状态,`bit11 ~ bit8` 为网口1~4状态,`bit3 ~ bit0` 为串口1~4状态 | +| 遥信状态 | `0x04` | 输入寄存器 | `0x00E7` | 1寄存器 | `bit3` 频率越限,`bit2` CT断线,`bit1` PT断线 | | 读事件内容 | `0x04` | 输入寄存器 | `0x0100` | `5 * n` | 当 `0x00E5 != 0` 时读取 | ### 2.2 读/写参数区 @@ -102,6 +104,69 @@ | `0x00E3` | 开入状态 | 16路输入,每 bit 一路 | | `0x00E4` | 开出状态 | 16路输出,每 bit 一路 | | `0x00E5` | 事件总寄存器 | 值为 `n` 表示有 `n` 个事件待读取 | +| `0x00E6` | 自检 / 串口 / 网口状态 | `bit15` 表示自检状态,`bit11 ~ bit8` 表示网口1~4状态,`bit3 ~ bit0` 表示串口1~4状态 | +| `0x00E7` | 遥信状态 | `bit3` 频率越限,`bit2` CT断线,`bit1` PT断线,其余位保留 | + +### 3.6 自检 / 串口 / 网口状态寄存器 + +#### 3.6.1 寄存器 `0x00E6` + +| 项目 | 定义 | +| ---- | ---- | +| 寄存器类型 | 输入寄存器 | +| 功能码 | `0x04` | +| 地址 | `0x00E6` | +| 说明 | 用于监控设备开机自检、4路串口、4路网口状态 | + +| 位位置 | 功能 | 含义说明 | +| ------ | ---- | -------- | +| `Bit15` | 自检状态 | `1 = 自检异常 / 未完成`,`0 = 自检正常完成` | +| `Bit11` | Net4 网口状态 | `1 = 网口4异常 / 断开`,`0 = 网口4正常连接` | +| `Bit10` | Net3 网口状态 | `1 = 网口3异常 / 断开`,`0 = 网口3正常连接` | +| `Bit9` | Net2 网口状态 | `1 = 网口2异常 / 断开`,`0 = 网口2正常连接` | +| `Bit8` | Net1 网口状态 | `1 = 网口1异常 / 断开`,`0 = 网口1正常连接` | +| `Bit3` | Com4 串口状态 | `1 = 串口4异常 / 无数据`,`0 = 串口4正常` | +| `Bit2` | Com3 串口状态 | `1 = 串口3异常 / 无数据`,`0 = 串口3正常` | +| `Bit1` | Com2 串口状态 | `1 = 串口2异常 / 无数据`,`0 = 串口2正常` | +| `Bit0` | Com1 串口状态 | `1 = 串口1异常 / 无数据`,`0 = 串口1正常` | +| 其余位 | 保留 | 未使用,读为 `0` | + +#### 3.6.2 寄存器 `0x00E7` + +| 项目 | 定义 | +| ---- | ---- | +| 寄存器类型 | 输入寄存器 | +| 功能码 | `0x04` | +| 地址 | `0x00E7` | +| 说明 | 用于反馈开机自检及运行过程中的遥信类异常状态 | + +| 位位置 | 功能 | 含义说明 | +| ------ | ---- | -------- | +| `Bit3` | 频率越限 | `1 = 频率超出阈值`,`0 = 频率正常` | +| `Bit2` | CT 断线 | `1 = CT(电流互感器)回路断线`,`0 = CT 回路正常` | +| `Bit1` | PT 断线 | `1 = PT(电压互感器)回路断线`,`0 = PT 回路正常` | +| 其余位 | 保留 | 未使用,读为 `0` | + +#### 3.6.3 使用场景与解读示例 + +- 事件总寄存器 `0x00E5` 用于表示当前待处理事件个数,值非 `0` 时表示存在待读取事件,值为 `0` 表示无事件。 +- 状态寄存器 `0x00E6`、`0x00E7` 用于快速反馈开机自检、通信链路和遥信告警状态,便于上位机快速诊断设备健康状况。 + +读取 `0x00E6` 时,若返回值为 `0x800F`(二进制 `1000 0000 0000 1111`),表示: + +- `Bit15 = 1`,自检异常或未完成 +- `Bit3 ~ Bit0 = 1111`,`Com1 ~ Com4` 全部异常 + +读取 `0x00E7` 时,若返回值为 `0x0006`(二进制 `0000 0000 0000 0110`),表示: + +- `Bit3 = 0`,频率正常 +- `Bit2 = 1`,CT 断线 +- `Bit1 = 1`,PT 断线 + +读取 `0x00E5 ~ 0x00E7` 共 `3` 个寄存器的 Modbus RTU 报文示例: + +- 主机请求:`[从站地址] 04 00 E5 00 03 [CRC16]` +- 从站响应:`[从站地址] 04 06 [00E5值] [00E6值] [00E7值] [CRC16]` --- @@ -364,14 +429,22 @@ typedef struct ### 7.1 开机初始化时序 1. 主站开机后,先通过 `03H` 读取参数区。 -2. 若参数读取失败,主站生成报警事件,可归类为“开机自检(通讯链路)”异常。 -3. 开机自检结束后,进入周期轮询阶段。 +2. 参数读取成功后,主站应通过 `04H` 读取状态寄存器 `0x00E6`、`0x00E7`,确认开机自检、串口、网口及遥信异常状态。 +3. 若 `0x00E6.Bit15 = 1`,表示设备自检异常或尚未完成;若对应串口 / 网口状态位为 `1`,表示对应通信接口异常。 +4. 若 `0x00E7` 中 `Bit3 / Bit2 / Bit1` 置位,则表示频率越限、CT断线、PT断线等遥信异常已出现。 +5. 若参数读取失败,或开机自检状态异常,主站生成报警事件,可归类为“开机自检(通讯链路)”异常。 +6. 开机自检结束后,进入周期轮询阶段。 ### 7.2 周期轮询时序 1. 主站周期发送 `04H`,读取实时输入寄存器。 2. 收到从站 `04H` 应答后,更新实时数据、状态数据。 -3. 随后读取事件总寄存器 `0x00E5`。 +3. 状态数据至少应覆盖 `0x00E3 ~ 0x00E7`,其中: + - `0x00E3` 表示开入状态 + - `0x00E4` 表示开出状态 + - `0x00E5` 表示事件总数 + - `0x00E6` 表示自检 / 串口 / 网口状态 + - `0x00E7` 表示遥信异常状态 4. 若 `0x00E5 = 0`,继续下一轮周期轮询。 5. 若 `0x00E5 = n` 且 `n > 0`,立即进入读事件流程。 @@ -380,6 +453,7 @@ typedef struct - 若上位机需要在页面上动态显示设备当前时间,可额外按固定周期读取时间设置寄存器 `0x0000`。 - 推荐上位机软件每 `1` 秒轮询一次,并通过独立时间推送通道发送给前端页面。 - 推荐的软件推送通道示例:`/ws/time-sync` +- 若需快速巡检设备状态,主站可直接读取 `0x00E5 ~ 0x00E7` 共 `3` 个寄存器,以同时获得事件数量、自检 / 通信链路状态及遥信告警状态。 ### 7.3 读事件时序 diff --git a/document/显示界面modbus协议寄存器定义.pdf b/document/显示界面modbus协议寄存器定义.pdf new file mode 100644 index 0000000000000000000000000000000000000000..474e92f07519db03ca017ccfa38839866cca8f41 GIT binary patch literal 528659 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 z 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