# 普罗生物MES报警页面 - LabVIEW对接 > 版本:v1.0.46 > 日期:2025-12-13 > 状态:需求分析 --- ## 一、需求背景 建设基于参数判断的设备故障分析与预警系统,实现LabVIEW数据采集端与MES系统的对接,完成故障数据的记录、展示和趋势分析功能。 --- ## 二、系统架构 ``` ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ LabVIEW │ │ 数据库 │ │ MES │ │ 数据采集端 │ ──▶ │ 故障记录表 │ ──▶ │ 报警页面 │ │ (报警运算) │ │ │ │ (读取展示) │ └─────────────────┘ └─────────────────┘ └─────────────────┘ ``` **数据流向:** 1. LabVIEW采集设备传感器数据 2. LabVIEW进行报警运算(三次一致性确认) 3. 超限数据写入数据库故障记录表 4. MES读取数据库并展示 --- ## 三、数据库设计 ### 3.1 故障记录表 (device_fault_record) | 字段名 | 类型 | 说明 | 示例 | 来源 | |--------|------|------|------|------| | id | bigint | 主键ID | 1 | 自增 | | device_name | varchar(100) | 设备名称 | 发酵罐1号 | LabVIEW | | sensor_name | varchar(100) | 传感器名/通道 | 温度传感器-CH01 | LabVIEW | | device_status | tinyint | 设备状态:0-停机,1-待机,2-生产 | 2 | LabVIEW | | nominal_value | decimal(10,2) | 标称值(标准/理想值) | 25.00 | LabVIEW | | normal_min | decimal(10,2) | 正常范围下限(下限) | 20.00 | LabVIEW | | normal_max | decimal(10,2) | 正常范围上限(上限) | 30.00 | LabVIEW | | lower_lower_limit | decimal(10,2) | 下下限(严重超限下限) | 15.00 | LabVIEW | | upper_upper_limit | decimal(10,2) | 上上限(严重超限上限) | 35.00 | LabVIEW | | actual_value | decimal(10,2) | 实测值 | 35.50 | LabVIEW | | deviation_rate | decimal(10,2) | 偏离度(%),MES计算 | 18.33 | MES计算 | | fault_level | tinyint | 故障等级:1-轻微,2-一般,3-严重 | 2 | LabVIEW | | fault_tag | varchar(200) | 故障标注/描述 | 温度超上限 | LabVIEW | | analysis_type | tinyint | 分析类型:1-瞬态,2-趋势 | 1 | LabVIEW | | fault_time | datetime | 故障发生时间 | 2025-12-13 10:00:00 | LabVIEW | | creator | varchar(64) | 创建者(LabVIEW写入时可为系统) | labview | LabVIEW | | create_time | datetime | 记录创建时间 | 2025-12-13 10:00:05 | LabVIEW | | updater | varchar(64) | 更新者 | | MES | | update_time | datetime | 更新时间 | | MES | | deleted | bit | 是否删除 | 0 | 默认0 | ### 3.2 门限说明 ``` 门限层级(从内到外): ├── 标称值 (nominal_value):标准/理想值 ├── 正常范围:normal_min ~ normal_max(一般报警) └── 严重范围:lower_lower_limit ~ upper_upper_limit(严重报警) 故障等级判断: - 实测值在 normal_min ~ normal_max 范围内:正常 - 实测值超出 normal 但在 upper_upper/lower_lower 范围内:一般故障 - 实测值超出 upper_upper_limit 或 lower_lower_limit:严重故障 ``` ### 3.3 偏离度计算公式(MES端计算) ``` 偏离度(%) = (实测值 - 门限值) / 门限值 × 100 其中门限值: - 实测值 > 正常上限时,门限值 = 正常上限 (normal_max) - 实测值 < 正常下限时,门限值 = 正常下限 (normal_min) - 实测值在正常范围内时,门限值 = 标称值 (nominal_value) ``` --- ## 四、MES功能设计 ### 4.1 故障记录页面(含趋势分析) **页面路径:** `/mes/device/fault-record` **页面布局:** ``` ┌─────────────────────────────────────────────────────────┐ │ 查询条件:设备名、传感器名、设备状态、故障等级、时间范围 │ ├─────────────────────────────────────────────────────────┤ │ 趋势分析图表区域 │ │ (圆滑折线图,显示实测值走势和门限参考线) │ ├─────────────────────────────────────────────────────────┤ │ 故障记录列表区域 │ │ (分页表格,展示故障详情) │ └─────────────────────────────────────────────────────────┘ ``` **功能点:** - [x] 列表展示故障记录 - [x] 支持分页查询 - [x] 支持条件筛选:设备名、传感器名、设备状态、故障等级、时间范围 - [x] 支持导出Excel - [x] 趋势分析图表(圆滑折线图) **列表字段:** | 序号 | 字段 | 说明 | |------|------|------| | 1 | 设备名称 | device_name | | 2 | 传感器/通道 | sensor_name | | 3 | 设备状态 | 停机/待机/生产 | | 4 | 标称值 | nominal_value | | 5 | 正常范围 | normal_min ~ normal_max | | 6 | 严重范围 | lower_lower_limit ~ upper_upper_limit | | 7 | 实测值 | actual_value | | 8 | 偏离度 | deviation_rate%(MES计算) | | 9 | 故障等级 | 轻微/一般/严重(带颜色标识) | | 10 | 故障标注 | fault_tag | | 11 | 故障时间 | fault_time | ### 4.2 趋势分析图表(集成在故障记录页面) **图表类型:** 圆滑折线图(smooth line chart) **功能点:** - [x] 设备下拉选择 - [x] 传感器/通道下拉选择(联动设备) - [x] 时间范围选择(按天) - [x] 圆滑折线图展示趋势 - [x] 显示门限参考线 **图表设计:** ``` Y轴:实测值 X轴:时间(按天聚合) 曲线:圆滑折线(smooth: true) 参考线: - 上上限(红色虚线) - 上限(橙色虚线) - 标称值(绿色实线) - 下限(橙色虚线) - 下下限(红色虚线) 数据点:每日平均值/最大值/最小值 ``` ### 4.3 故障预测(二期) 基于趋势数据的二次分析: - 线性回归预测 - 异常趋势识别 - 预警通知 --- ## 五、接口设计 ### 5.1 LabVIEW写入接口(数据库直连) LabVIEW直接写入数据库表 `device_fault_record`,需提供: - 数据库连接信息 - 表结构DDL脚本 ### 5.2 MES读取接口 #### 5.2.1 故障记录分页查询 ``` GET /admin-api/mes/device-fault-record/page 请求参数: - deviceName: 设备名称(模糊查询) - sensorName: 传感器名(模糊查询) - deviceStatus: 设备状态 - faultLevel: 故障等级 - faultTimeStart: 故障时间开始 - faultTimeEnd: 故障时间结束 - pageNo: 页码 - pageSize: 每页条数 响应: { "code": 0, "data": { "list": [...], "total": 100 } } ``` #### 5.2.2 设备列表(下拉用) ``` GET /admin-api/mes/device-fault-record/device-list 响应: { "code": 0, "data": ["发酵罐1号", "发酵罐2号", ...] } ``` #### 5.2.3 传感器列表(下拉用,按设备筛选) ``` GET /admin-api/mes/device-fault-record/sensor-list 请求参数: - deviceName: 设备名称 响应: { "code": 0, "data": ["温度传感器-CH01", "压力传感器-CH02", ...] } ``` #### 5.2.4 趋势数据查询 ``` GET /admin-api/mes/device-fault-record/trend 请求参数: - deviceName: 设备名称(必填) - sensorName: 传感器名(必填) - startDate: 开始日期(yyyy-MM-dd) - endDate: 结束日期(yyyy-MM-dd) 响应: { "code": 0, "data": { "normalMin": 20.00, "normalMax": 30.00, "trendList": [ { "date": "2025-12-01", "avgValue": 25.5, "maxValue": 28.0, "minValue": 23.0, "faultCount": 2 }, ... ] } } ``` --- ## 六、LabVIEW端说明 ### 6.1 报警运算逻辑 ``` 三次一致性确认机制: ├── 采集周期:10秒/次 ├── 使用全局变量 + 移位寄存器 ├── 连续3次超限才触发报警 └── 目的:抗干扰,避免误报 ``` ### 6.2 标准范围配置 - 存储位置:`.xls` 文件 - 便于现场升级和修订 - 包含字段:设备名、传感器名、正常下限、正常上限、故障等级规则 ### 6.3 数据写入规范 LabVIEW写入数据库时需填写以下字段: - device_name(必填) - sensor_name(必填) - device_status(必填) - normal_min(必填) - normal_max(必填) - actual_value(必填) - deviation_rate(必填,需计算) - fault_level(必填) - fault_tag(选填) - analysis_type(必填,默认1-瞬态) - fault_time(必填) - creator(固定为 'labview') - create_time(当前时间) - deleted(固定为 0) - tenant_id(固定为 1) --- ## 七、开发任务清单 ### 7.1 后端开发 | 序号 | 任务 | 优先级 | 状态 | |------|------|--------|------| | 1 | 创建数据库表 device_fault_record | P0 | 待开发 | | 2 | 创建实体类 DeviceFaultRecordDO | P0 | 待开发 | | 3 | 创建 Mapper 接口 | P0 | 待开发 | | 4 | 创建 Service 层 | P0 | 待开发 | | 5 | 创建 Controller 接口 | P0 | 待开发 | | 6 | 趋势数据聚合查询 | P1 | 待开发 | ### 7.2 前端开发 | 序号 | 任务 | 优先级 | 状态 | |------|------|--------|------| | 1 | 故障记录列表页面 | P0 | 待开发 | | 2 | 查询表单组件 | P0 | 待开发 | | 3 | 趋势分析图表 | P1 | 待开发 | | 4 | 导出功能 | P2 | 待开发 | ### 7.3 对接工作 | 序号 | 任务 | 负责方 | 状态 | |------|------|--------|------| | 1 | 提供数据库连接信息 | MES | 待提供 | | 2 | 提供DDL脚本 | MES | 待提供 | | 3 | LabVIEW数据写入测试 | LabVIEW | 待测试 | | 4 | 联调验证 | 双方 | 待联调 | --- ## 八、后续规划(YIOT升级FIIH) ``` 当前方案:YIOT数据采集 → LabVIEW处理 → 数据库 → MES 升级方案:FIIH(内置门限) → UMS软件处理 → 数据库 → MES ``` 升级后优势: - 门限参数内置于采集设备 - 减少中间处理环节 - 普罗生物定制UMS软件直接处理 --- ## 九、附录 ### 9.1 设备状态枚举 ```java public enum DeviceStatusEnum { SHUTDOWN(0, "停机"), STANDBY(1, "待机"), PRODUCTION(2, "生产"); } ``` ### 9.2 故障等级枚举 ```java public enum FaultLevelEnum { MINOR(1, "轻微"), NORMAL(2, "一般"), SEVERE(3, "严重"); } ``` ### 9.3 分析类型枚举 ```java public enum AnalysisTypeEnum { TRANSIENT(1, "瞬态"), TREND(2, "趋势"); } ```