802 lines
25 KiB
Markdown
802 lines
25 KiB
Markdown
# 智能内镜储存柜系统 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
|
|
|
|
---
|
|
|
|
**文档结束**
|