# 智能内镜储存柜系统 PRD ## 文档信息 - **项目名称**: 智能内镜储存柜系统 - **版本**: v1.0.1 - **文档日期**: 2026-01-20 - **应用平台**: Android (UniApp + Vue3) --- ## 1. 产品概述 ### 1.1 产品定位 智能内镜储存柜是一款面向医疗场景的专业内镜存储管理设备,通过物联网技术实现内镜的智能存取、环境监控、自动消毒等功能,提升医院内镜管理效率和使用安全性。 ### 1.2 核心价值 - **智能管理**: 通过RFID/IC卡技术实现内镜自动识别和存取记录 - **环境监控**: 实时监控储存柜内的温度、湿度、压差等关键指标 - **安全存储**: 自动消毒、真空保鲜、门禁管理等多重保障 - **数据追溯**: 完整的操作日志记录,便于追踪和管理 --- ## 2. 系统架构 ### 2.1 技术栈 - **前端框架**: UniApp + Vue3 - **UI组件**: Ant Design Vue - **状态管理**: Vuex - **本地存储**: SQLite - **硬件通信**: RS485 (传感器 + 门控制) + RS232 (卡片识别 + 设备控制) - **原生插件**: android-serialport (串口通信) ### 2.2 硬件组成 - **RS485串口**: 温湿度传感器、压差传感器、门锁控制器(左右门) - **RS232串口**: 16个内镜位置IC卡读写器,门口1个IC卡读写器(可读取人员卡和内镜卡) - **继电器控制**: 风机、照明、真空泵、消毒设备 - **门系统**: 主门(概念门)、左门、右门(实体门) --- ## 3. 功能模块 ### 3.1 启动模块 #### 功能描述 应用启动页面,负责系统初始化和硬件自检。 #### 核心功能 - **串口初始化** - RS485串口: `/dev/ttyUSB2`, 波特率 9600 - RS232串口: `/dev/ttyUSB1`, 波特率 115200 - 支持通过配置文件自定义串口参数 - **本地存储初始化** - 加载运行参数配置 - 加载基础设置 - 加载服务器配置 - **数据库初始化** - user表: 人员卡信息 - endo表: 内镜卡片信息 - scope表: 16个内镜位置状态 - log表: 操作日志 - **时间同步** - 本地时间初始化 - 网络时间同步(联网状态下) #### 入口控制 - 点击"进入"按钮跳转主界面 - 密码保护: 可设置屏幕解锁密码 - 调试模式: 连续点击标题5次触发,提供Modbus调试、SQLite调试、清除缓存功能 --- ### 3.2 主界面模块 #### 功能描述 系统核心操作界面,实时显示设备状态和内镜存储情况。 #### 核心功能 ##### 3.2.1 环境监控显示 - **温度显示**: 实时显示当前温度(°C),超出阈值自动启动风机 - **湿度显示**: 实时显示当前湿度(%RH),超出阈值自动启动风机 - **压差显示**: 实时显示当前压差(Pa),支持压差补偿值设置 - **联网状态**: 显示当前网络连接状态 - **模式切换**: 自动模式/清扫模式 ##### 3.2.2 内镜存储管理 - **16个存储位置**: 每个位置支持2个内镜存储位 - **实时状态显示**: - 空闲: 显示"已取出" - 占用: 显示内镜编号和存储时长(如: "已存入:32h 42m") - 临期提醒: 黄色高亮显示(超过临期阈值) - 超期提醒: 红色高亮显示(超过超期阈值) - **自动刷新**: 每60秒自动刷新内镜列表数据 ##### 3.2.3 设备控制 | 控制项 | 功能说明 | 手动操作 | 自动逻辑 | |--------|----------|----------|----------| | 照明 | 控制柜内照明 | 开启/关闭按钮 | 开门自动开启,关门自动关闭 | | 开门 | 控制左门/右门 | 手动选择门,通过RS485发送开门指令 | 人员刷卡验证通过后,弹窗选择开左门/右门 | | 消毒 | 控制消毒设备 | 点击开启(运行指定时长后自动关闭) | 根据时间段自动启动/停止 | | 真空 | 控制真空泵 | (预留) | 开门关闭,关门开启,定时运行/停止 | ##### 3.2.4 模式切换 - **自动模式**: 系统自动运行消毒、真空泵、风机等任务 - **清扫模式**: 停止自动任务,便于设备维护清洁 --- ### 3.3 串口通信模块 #### 3.3.1 RS485通信(传感器数据) **支持的传感器:** - **温湿度传感器**: 站号02 - 读取指令: `020300000002C438` - 返回数据格式: `01 03 04 XX XX XX XX XX XX ...` - **压差传感器**: 站号01 - 读取指令: `01030001000295CB` - 返回数据格式: `01 03 02 XX XX XX XX ...` - **门状态监测与控制**: 站号03 - 协议说明: 采用中盛4路数字IO模块,通过Modbus RTU协议通信 - 左门控制(通道1,地址0000H): - 左门开门指令(磁吸通电): `030600000001480A` (发送后,leftDoor状态更新为true) - 左门关门指令(磁吸断电): `03060000000089CA` (发送后,leftDoor状态更新为false) - 右门控制(通道2,地址0001H): - 右门开门指令(磁吸通电): `03060001000109CA` (发送后,rightDoor状态更新为true) - 右门关门指令(磁吸断电): `03060001000048E8` (发送后,rightDoor状态更新为false) - 门状态上报(功能码04,读输入寄存器): - 左门触点开关状态变化时主动上报 - 右门触点开关状态变化时主动上报 - 收到上报数据后需更新对应门状态 - 状态定义: true=开门(磁吸通电), false=关门(磁吸断电,触点触发) **门状态计算规则:** - 门状态(door) = 左门状态(leftDoor) OR 右门状态(rightDoor) - 任一门打开时,door状态为开 - 两门都关闭时,door状态为关 **数据读取策略:** - 定时轮询: 每5秒读取一次温湿度数据,间隔1秒读取压差数据 - 数据校验: 温湿度数据过滤异常值(0-100范围内有效) #### 3.3.2 RS232通信(控制与卡片识别) **指令协议:** | 功能 | 指令码 | 格式 | 说明 | |------|--------|------|------| | 风机控制 | 02 | `5AA5EE02` + `01`(开)/`00`(关) | 控制风机 | | 照明控制 | 03 | `5AA5EE03` + `01`(开)/`00`(关) | 控制照明 | | 真空泵控制 | 04 | `5AA5EE04` + `01`(开)/`00`(关) | 控制真空泵 | | 消毒控制 | 05 | `5AA5EE05` + `01`(开)/`00`(关) | 控制消毒设备 | **门状态逻辑说明:** - 门开关状态(door)是逻辑状态,由左右门物理状态共同决定 - 规则: `door = leftDoor OR rightDoor` - 左门开 或 右门开 → door = true (开) - 左门关 且 右门关 → door = false (关) **门控制流程:** 1. 发送开门指令到RS485站号03 - 左门开门: `cmd.LeftDoor(true)` → 发送 `030600000001480A` (磁吸通电) - 右门开门: `cmd.RightDoor(true)` → 发送 `03060001000109CA` (磁吸通电) 2. 指令发送后,立即更新对应门的物理状态 - 左门打开 → `leftDoor = true` - 右门打开 → `rightDoor = true` 3. 根据左右门状态自动计算门状态 - `door = leftDoor OR rightDoor` 4. 发送关门指令到RS485站号03 - 左门关门: `cmd.LeftDoor(false)` → 发送 `03060000000089CA` (磁吸断电) - 右门关门: `cmd.RightDoor(false)` → 发送 `03060001000048E8` (磁吸断电) 5. 指令发送后,更新对应门的物理状态 - 左门关闭 → `leftDoor = false` - 右门关闭 → `rightDoor = false` 6. 重新计算门状态 `door = leftDoor OR rightDoor` **卡片识别协议:** - **门口IC卡读写器**: 1个,位于门口,可读取人员卡和内镜卡 - 卡存入: `20 01 00 08 04 00 00 00 [卡号4字节] [校验] 03` (14字节) - 卡离开: `20 01 00 01 02 [校验] 03` (7字节) - 卡号位置: 倒数4-8字节为卡号数据 - **16个内镜位置IC卡读写器**: 每个内镜位置1个,仅读取内镜卡 - 卡存入: `20 01 00 08 04 00 00 00 [卡号4字节] [校验] 03` (14字节) - 卡离开: `20 01 00 01 02 [校验] 03` (7字节) - 卡号位置: 倒数4-8字节为卡号数据 **卡片处理逻辑:** - **卡片读取**: 接收卡片数据 → 提取卡号 → 在数据库中比对判断卡片类型 - 在user表中找到 → 人员卡 - 在endo表中找到 → 内镜卡 - 都未找到 → 无效卡片 - **人员卡存入**: 验证人员卡号是否在user数据库中 → 弹窗选择开左门/开右门 → 用户确认后通过RS485发送开门指令 → 更新门状态 → 记录日志 - **内镜卡存入**: 验证内镜卡号是否在endo数据库中 → 弹窗选择存入/取出 → 用户选择后更新scope表对应位置 → 记录日志 - **内镜卡取出**: 弹窗确认取出 → 更新scope表对应位置为空闲 → 记录日志 --- ### 3.4 自动任务模块 #### 3.4.1 自动消毒任务 - **配置**: 支持多时间段配置(如: 08:00-10:00, 14:00-16:00) - **执行逻辑**: - 到达开始时间 → 启动消毒和风机 - 到达结束时间 → 停止消毒 - 仅在自动模式下生效 - **运行时长**: 手动启动时运行指定时长后自动关闭 #### 3.4.2 真空泵任务 - **运行时长控制**: 连续运行超过指定时长后自动停止 - **间隔运行控制**: 停止后间隔指定时长自动启动 - **执行逻辑**: - 开门时 → 关闭真空泵 - 关门时 → 启动真空泵和风机 - 到达运行时长 → 关闭真空泵 - 到达间隔时长 → 启动真空泵和风机 #### 3.4.3 风机自动控制 - **启动条件**: - 温度超过阈值 - 湿度超过阈值 - 消毒设备启动 - 真空泵启动 - **停止条件**: - 温度和湿度均低于阈值 - 照明、真空泵、消毒、门均处于关闭状态 - 清扫模式下不自动控制 #### 3.4.4 门状态监控 - **开门超时报警**: 开门超过3分钟且非清扫模式 → 触发蜂鸣器报警 → 弹窗提示 - **门状态记录**: 记录开门/关门时间 - **门状态同步**: 概念门(door)状态 = 左门(leftDoor) OR 右门(rightDoor) - **门状态监测**: 通过RS485站号03接收触点开关状态上报(功能码04) - 收到DI状态变化上报时解析并更新对应门状态 - 左门触点触发(关门): 更新 `leftDoor = false` - 右门触点触发(关门): 更新 `rightDoor = false` --- ### 3.5 设置模块 #### 功能描述 系统参数配置界面,需密码验证后访问。 #### 3.5.1 设置菜单 **设备信息管理** - 查看设备基本信息 - 设备SN码管理 **基础设置** - 屏幕解锁密码 - 设置密码(访问设置界面) **服务器设置** - 服务器IP地址 - 服务器端口 - API接口配置 **运行参数设置** - 温度阈值(自动启动风机) - 湿度阈值(自动启动风机) - 压差补偿值 - 内镜临期提醒时长 - 内镜超期提醒时长 - 消毒时长(手动启动时的运行时间) - 真空泵运行时长 - 真空泵间隔时长 - 自动消毒时间段配置(支持多时段) **内镜信息管理** - 添加/编辑/删除内镜卡片 - 内镜RFID编号 - 内镜型号、品牌、类型 **人员信息管理** - 添加/编辑/删除人员卡片 - 人员IC卡编号 - 人员姓名 #### 3.5.2 数据同步功能 - **时间同步**: 同步网络时间 - **内镜信息同步**: 从服务器同步内镜列表 - **人员信息同步**: 从服务器同步人员列表 - **运行参数同步**: 从服务器同步运行参数 --- ### 3.6 日志模块 #### 功能描述 显示系统操作日志,支持分页查询。 #### 核心功能 - **日志类型**: - 内镜存入记录 - 内镜取出记录 - 刷卡开门记录 - 设备操作记录 - **日志字段**: - 时间 - 操作对象(人员/内镜编号) - 操作类型(存入/取出/开门等) - **分页显示**: 每页15条,支持上一页/下一页翻页 --- ## 4. 数据库设计 ### 4.1 user表(人员信息) | 字段名 | 类型 | 说明 | |--------|------|------| | ic | TEXT | 人员卡号 | | name | TEXT | 人员姓名 | | create_time | TEXT | 创建时间 | | _openid | VARCHAR(64) | 用户标识 | ### 4.2 endo表(内镜信息) | 字段名 | 类型 | 说明 | |--------|------|------| | rfid | TEXT | 内镜RFID编号 | | ic | TEXT | 内镜IC卡号 | | model | TEXT | 内镜型号 | | brand | TEXT | 品牌 | | type | TEXT | 类型 | | create_time | TEXT | 创建时间 | | _openid | VARCHAR(64) | 用户标识 | ### 4.3 scope表(内镜位置状态) | 字段名 | 类型 | 说明 | |--------|------|------| | key | INTEGER | 位置编号(0-15) | | name | TEXT | 状态名称(enter/leave) | | ic | TEXT | 存储的内镜卡号 | | time | TEXT | 存入时间 | | _openid | VARCHAR(64) | 用户标识 | ### 4.4 log表(操作日志) | 字段名 | 类型 | 说明 | |--------|------|------| | name | TEXT | 操作对象 | | action | TEXT | 操作类型 | | create_time | TEXT | 操作时间 | | _openid | VARCHAR(64) | 用户标识 | --- ## 5. 状态管理(Vuex) ### 5.1 relay(继电器状态) ```javascript { door: false, // 主门状态(概念门) leftDoor: false, // 左门状态 rightDoor: false, // 右门状态 wind: false, // 风机状态 light: false, // 照明状态 vacuum: false, // 真空泵状态 disinfect: false // 消毒状态 } ``` ### 5.2 sensor(传感器数据) ```javascript { temp: 0, // 温度(°C) humi: 0, // 湿度(%RH) pressure: 0 // 压差 } ``` ### 5.3 run(运行参数) ```javascript { temp: 30, // 温度阈值 humi: 60, // 湿度阈值 pressureCom: 0, // 压差补偿值 endoNear: 24, // 临期提醒时长(小时) endoOver: 48, // 超期提醒时长(小时) disinfectTime: 30, // 消毒时长(分钟) vacuumRunTime: 5, // 真空泵运行时长(分钟) vacuumPerHour: 2, // 真空泵间隔时长(小时) group: [ // 自动消毒时间段 { start: {h:8, m:0}, end: {h:10, m:0}, status: true }, { start: {h:14, m:0}, end: {h:16, m:0}, status: true } ] } ``` ### 5.4 timer(计时器状态) ```javascript { door: '', // 开门时间 doorAlert: false, // 门报警状态 disinfect: '', // 消毒开始时间 wind: '', // 风机开始时间 vacuumStart: '', // 真空泵开始时间 vacuumEnd: '' // 真空泵停止时间 } ``` ### 5.5 其他状态 - `clean`: 清扫模式标志 - `autoDisinfect`: 自动消毒标志 - `connect`: 网络连接状态 - `apiUrl`: API服务器地址 - `time`: 当前系统时间 --- ## 6. 接口设计(API) ### 6.1 获取网络时间 - **接口**: `GET /api/time` - **返回**: 时间字符串(如: "2026-01-20 10:30:00") ### 6.2 内镜列表同步 - **接口**: `GET /api/endoscopelist` - **返回**: ```json { "endoscope_list": [ { "endoscope_rfid": "RFID001", "endoscope_model": "型号1", "endoscope_brand": "品牌1", "endoscope_type": "胃镜" } ] } ``` ### 6.3 人员列表同步 - **接口**: `GET /api/userlist` - **返回**: 人员列表数据 ### 6.4 运行参数同步 - **接口**: `GET /api/parameterlist` - **返回**: 运行参数配置数据 ### 6.5 日志上传 - **接口**: `POST /api/logsync` - **参数**: 日志数据数组 --- ## 7. 交互流程 ### 7.1 完整操作流程 ``` 1. 刷人员卡 - 系统读取卡号,验证是否在user数据库中 - 验证通过: 弹窗提示"选择要打开的门",显示"开左门"和"开右门"按钮 - 验证失败: 提示"无权限" 2. 选择门并打开 - 用户点击"开左门"或"开右门" - 通过RS485发送对应开门指令 - 系统自动开启照明和风机 - 提示"左门已打开"或"右门已打开" 3. 刷内镜卡 - 系统读取卡号,验证是否在endo数据库中 - 验证通过: 弹窗提示"选择操作",显示"存入"和"取出"按钮 - 验证失败: 提示"无效内镜卡" 4. 选择操作 - 用户点击"存入": 根据插入位置更新scope表 → 记录日志 → 提示"内镜已存入" - 用户点击"取出": 更新scope表对应位置为空闲 → 记录日志 → 提示"内镜已取出" 5. 关门 - 用户手动关门 - 触点开关触发,IO控制器上报DI状态变化 - 系统收到上报数据,更新对应门状态为关闭 - 自动关闭照明,开启真空泵和风机 ``` ### 7.2 内镜存取详细流程 ``` 1. 用户将内镜卡插入对应位置 2. IC卡读写器检测到卡片 3. 系统解析卡片数据,提取卡号 4. 在数据库中查询卡号,判断卡片类型 - 在endo表中找到 → 内镜卡 - 在user表中找到 → 人员卡 - 都未找到 → 无效卡片 5. 验证内镜卡号是否在endo数据库中 - 验证通过: 弹窗选择"存入"或"取出" - 用户选择存入: 根据插入位置更新scope表对应位置 → 记录日志 → 弹窗提示"内镜已存入" - 用户选择取出: 更新scope表对应位置为空闲 → 记录日志 → 弹窗提示"内镜已取出" - 验证失败: 提示"无效内镜卡" ``` ### 7.2 内镜取出流程 ``` 1. 用户点击"取镜"按钮 2. 弹窗显示"取镜",提示"请刷人员卡" 3. 用户刷人员卡 - 系统读取卡号,验证是否在user数据库中 - 验证通过: 弹窗显示人员姓名 - 验证失败: 提示"无权限" 4. 系统提示"请刷内镜卡" 5. 用户刷内镜卡 - 系统读取卡号,验证是否在endo数据库中 - 验证通过: 弹窗显示内镜名称、钢印号、类型等信息 - 验证失败: 提示"无效内镜卡" 6. 弹窗显示"确定"按钮 7. 用户点击"确定"按钮 - 系统更新scope表对应位置为空闲 - 记录操作日志(包括操作人员、内镜信息) - 弹出Toast提示"取镜成功" - 关闭弹窗 ``` ### 7.3 人员刷卡开门流程 ``` 1. 人员在主门处刷人员卡 2. IC卡读写器检测到卡片 3. 系统解析卡片数据,提取卡号 4. 在数据库中查询卡号,判断卡片类型 - 在user表中找到 → 人员卡 - 在endo表中找到 → 内镜卡 - 都未找到 → 无效卡片 5. 验证人员卡号是否在user数据库中 - 验证通过: 弹窗选择"开左门"或"开右门" - 用户选择左门: 通过RS485发送左门开门指令 `030600000001480A` → 更新leftDoor状态 → 记录日志 → 提示"左门已打开" - 用户选择右门: 通过RS485发送右门开门指令 `03060001000109CA` → 更新rightDoor状态 → 记录日志 → 提示"右门已打开" - 验证失败: 提示"无权限" ``` ### 7.4 手动开门流程 ``` 1. 点击主界面"开门"按钮 2. 弹出门选择对话框(开左门/开右门) 3. 用户选择要打开的门 4. 通过RS485发送对应开门指令 - 左门: 发送 `030600000001480A` → 更新leftDoor=true → 记录日志 → 提示"左门已打开" - 右门: 发送 `03060001000109CA` → 更新rightDoor=true → 记录日志 → 提示"右门已打开" ``` ### 7.5 开门事件自动处理流程 ``` 1. 检测到门打开(通过RS485站号03监测,发送开门指令后立即更新状态) - 左门打开: leftDoor = true - 右门打开: rightDoor = true - door = leftDoor OR rightDoor 2. 关闭真空泵 3. 延迟300ms开启照明 4. 延迟300ms开启风机 5. 记录开门时间 6. 启动开门超时监控(3分钟) ``` ### 7.7 关门事件自动处理流程 ``` 1. 检测到门关闭(通过RS485站号03监测,收到功能码04的DI状态上报) 2. 解析上报数据,识别是左门还是右门的触点触发 - 左门触点触发: 更新 leftDoor = false - 右门触点触发: 更新 rightDoor = false 3. 重新计算door状态: door = leftDoor OR rightDoor 4. 关闭照明 5. 延迟300ms开启真空泵和风机 6. 清除开门超时监控 7. 停止报警 ``` --- ## 8. 异常处理 ### 8.1 串口通信异常 - 串口初始化失败 → 提示"初始化串口失败" - 串口打开失败 → 提示错误信息 - 指令发送失败 → 记录错误日志,不影响系统运行 ### 8.2 数据验证异常 - 无效内镜卡 → 弹窗提示"无效内镜卡" - 无效人员卡 → 弹窗提示"无权限" - 超期内镜 → 黄色高亮提醒 - 超期内镜 → 红色高亮提醒 ### 8.3 网络异常 - 网络未连接 → 显示"未连接"状态 - 网络同步失败 → 提示"同步失败,请检查网络" - 自动重试机制(暂未实现) ### 8.4 设备操作异常 - 开门超时(>3分钟) → 蜂鸣器报警 + 弹窗提示"未关门,请及时关闭" - 温湿度异常 → 自动启动风机 - 压差数据异常 → 过滤无效数据 --- ## 9. 安全设计 ### 9.1 访问控制 - 屏幕解锁密码: 保护主界面访问 - 设置密码: 保护设置界面访问 ### 9.2 操作审计 - 所有关键操作记录到日志表 - 日志包含时间、操作人、操作内容 ### 9.3 卡片验证 - 所有内镜卡和人员卡必须在数据库中注册 - 未经注册的卡片无法操作 ### 9.4 调试模式保护 - 调试入口隐藏(连续点击标题5次触发) - 调试模式提供数据清除功能(需谨慎操作) --- ## 10. 性能要求 ### 10.1 响应时间 - 界面切换: < 300ms - 串口指令响应: < 100ms - 数据刷新间隔: 60秒 ### 10.2 数据处理 - 串口数据解析: 实时处理 - 数据库查询: < 200ms - 日志记录: 异步存储 ### 10.3 资源占用 - 内存占用: < 200MB - CPU占用: < 20%(正常运行时) --- ## 11. 非功能性需求 ### 11.1 可靠性 - 7x24小时不间断运行 - 异常情况下自动恢复 - 断网情况下本地功能正常运行 ### 11.2 可维护性 - 模块化设计,便于功能扩展 - 完善的日志记录 - 调试模式支持问题排查 ### 11.3 可扩展性 - 支持增加内镜位置(需修改硬件) - 支持新增传感器类型 - 支持新增控制设备 --- ## 12. 版本规划 ### v1.0.1 (当前版本) - ✅ 基础功能完整 - ✅ 左右门独立控制 - ✅ RS485门状态监测集成 - ✅ 自动任务执行 - ✅ 日志记录 - ✅ 环境监控 - ✅ 卡片识别 ### v1.1.0 (当前开发中) - 🔄 取镜流程优化(人员卡+内镜卡双卡片验证) - 🔄 串口通信错误处理优化 - 🔄 状态同步逻辑完善 ### v2.0.0 (未来规划) - 📋 网络日志上传 - 📋 远程控制接口 - 📋 数据统计分析 - 📋 多设备管理 --- ## 13. 附录 ### 13.1 术语表 | 术语 | 说明 | |------|------| | 主门(概念门) | 逻辑门状态,由左门和右门状态共同决定(door = leftDoor OR rightDoor) | | 实体门 | 物理门锁(左门/右门) | | IC卡 | 接触式智能卡 | | RFID卡 | 射频识别卡 | | RS485 | 串行通信标准,用于传感器通信和门控制 | | RS232 | 串行通信标准,用于卡片识别和设备控制 | ### 13.2 硬件清单 | 设备 | 数量 | 说明 | |------|------|------| | 温湿度传感器 | 1 | 站号02,RS485通信 | | 压差传感器 | 1 | 站号01,RS485通信 | | 门状态监测与门锁控制 | 1 | 站号03,RS485通信,中盛4路数字IO模块,控制左右门磁吸和触点开关 | | IC卡读写器(门口) | 1 | 位于门口,可读取人员卡和内镜卡,RS232通信 | | 继电器模块 | 1 | 控制风机、照明、真空泵、消毒设备 | ### 13.3 通信协议 #### RS485传感器数据格式 **温湿度数据(站号02)** ``` 帧格式: 01 03 04 [湿度高字节] [湿度低字节] [温度高字节] [温度低字节] [CRC低] [CRC高] 示例: 01 03 04 02 98 00 BC 7B D5 ``` **压差数据(站号01)** ``` 帧格式: 01 03 02 [压差高字节] [压差低字节] [CRC低] [CRC高] 示例: 01 03 02 12 34 B5 33 ``` **门控制数据(站号03,中盛4路数字IO模块)** ``` 硬件配置: - 站号: 03 - 通道1(地址0000H): 左门磁吸控制(DO) + 左门触点开关(DI) - 通道2(地址0001H): 右门磁吸控制(DO) + 右门触点开关(DI) - 控制指令: 功能码06(写单个保持寄存器) - 状态上报: 功能码04(读输入寄存器),DI状态变化主动上报 控制指令: 左门开门(磁吸通电): 03 06 00 00 00 01 48 0A (发送后,leftDoor=true) 左门关门(磁吸断电): 03 06 00 00 00 00 89 CA (发送后,leftDoor=false) 右门开门(磁吸通电): 03 06 00 01 00 01 09 CA (发送后,rightDoor=true) 右门关门(磁吸断电): 03 06 00 01 00 00 49 E8 (发送后,rightDoor=false) 状态上报: 收到功能码04的上报数据,解析DI状态 - 左门触点触发: 更新 leftDoor=false - 右门触点触发: 更新 rightDoor=false ``` #### RS232控制指令格式 ``` 帧格式: 5AA5EE [指令码] [操作码] [校验和] 指令码: 02=风机, 03=照明, 04=真空泵, 05=消毒 操作码: 01=开启, 00=关闭 示例: 风机开启: 5AA5EE0201 照明开启: 5AA5EE0301 真空泵开启: 5AA5EE0401 消毒开启: 5AA5EE0501 ``` #### 门控制说明 - **开门操作**: 通过RS485站号03发送开门指令(磁吸通电) - 左门开启: `cmd.LeftDoor(true)` → 发送 `030600000001480A` (发送后,leftDoor状态更新为true) - 右门开启: `cmd.RightDoor(true)` → 发送 `03060001000109CA` (发送后,rightDoor状态更新为true) - **关门操作**: 通过RS485站号03发送关门指令(磁吸断电) - 左门关闭: `cmd.LeftDoor(false)` → 发送 `03060000000089CA` (发送后,leftDoor状态更新为false) - 右门关闭: `cmd.RightDoor(false)` → 发送 `03060001000048E8` (发送后,rightDoor状态更新为false) - **门状态计算**: - 门状态(door)根据左右门物理状态实时计算 - 规则: `door = leftDoor OR rightDoor` - 任一门打开 → door状态为开 - 两门全关 → door状态为关 - **门状态上报**: - 接收到功能码04的DI状态上报数据 - 解析上报数据识别触点开关状态 - 左门触点触发(关门) → 更新 `leftDoor = false` - 右门触点触发(关门) → 更新 `rightDoor = false` #### RS232卡片数据格式 **卡片数据通过同一通道读取** ``` 卡存入(14字节): 格式: 20 01 00 08 04 00 00 00 [卡号4字节] [校验] 03 卡号位置: 倒数4-8字节(字节位置6-9) 卡离开(7字节): 格式: 20 01 00 01 02 [校验] 03 卡片类型判断: - 从数据库查询卡号 - 在user表找到 → 人员卡 - 在endo表找到 → 内镜卡 - 都未找到 → 无效卡片 ``` ### 13.4 开发环境 - **IDE**: HBuilderX / VSCode - **Node.js**: >= 14.0 - **Android SDK**: API Level 21+ - **UniApp**: 3.x --- **文档结束**