# CNC机床数据采集分析系统 - 完整需求规格说明书

---

## 一、项目概述

本系统用于对多台不同品牌CNC机床进行统一化、分布式、自动化数据采集，实现设备状态监控、零件产量自动统计、加工过程分析、人员与设备绑定管理，并通过BI大屏实时展示生产数据。

系统基于 **.NET Framework 4.0 WebForm** 开发，本地IIS部署，MariaDB数据库，单角色权限管理。

## 二、总体约束

1. **开发框架**

    - 前端：Vue.js

    - 后端：.NET Framework 4.0 WebForm

    - 数据库：MariaDB（本地部署，双库分离）

    - 部署：Windows Server + IIS

2. **权限模式**

    - 单角色管理模式，无需多角色、分级权限控制

3. **数据特性**

    - CNC接口仅返回实时数据，无历史数据

    - 采集间隔远小于程序切换间隔，确保程序切换可被捕获

    - 产量统计依赖前后两次采集数据差分计算

4. **真实数据格式约束（发那科标准）**

    - 采集返回为JSON数组，包含多台设备数据

    - 每台设备结构：`device`、`desc`、`tags`数组

    - 数据项包含：`id`、`desc`、`quality`、`value`、`time`

    - 关键字段通过`id`匹配（如Tag5、Tag8、_io_status）

    - 每次采集`time`时间戳自动更新

    - 产量、程序名、状态均在`tags`数组内，无顶层字段

## 三、核心功能模块

### 1. CNC品牌模板配置系统

1. 支持多品牌CNC（发那科、三菱、西门子、新代、广数等）统一接入

2. 适配发那科JSON结构：

    - 设备列表为JSON数组

    - 数据存储在`tags`数组中

    - 通过`id`定位关键字段

3. 提供JSON字段映射模板，将不同品牌原始字段映射为系统标准字段

4. 后台可可视化配置：

    - NC程序名：匹配`tags.id=Tag5`的`value`

    - 加工累计数量：匹配`tags.id=Tag8`的`value`

    - 设备状态：匹配`tags.id=_io_status`的`value`

    - 运行状态：匹配`tags.id=Tag9`的`value`

    - 主轴/进给/负载/时间等扩展字段自动解析

5. 模板支持新增、编辑、删除、启用/禁用

6. 模板修改后无需重新编译发布，实时生效

7. 支持字段类型转换、数值清洗、去尾缀处理

### 2. 分布式设备数据采集架构

1. 每台CNC独立配置：

    - IP地址（用于Ping检测）

    - HTTP采集接口地址

    - 采集间隔（秒）

    - 绑定品牌模板

    - 设备可用/不可用状态

2. 采集触发规则：

    - 设备必须Ping通

    - 设备状态必须为可用

    - 两者同时满足才执行采集

3. 不采集场景：

    - Ping失败

    - 设备标记为不可用

    - 采集任务暂停/手动关闭

4. 采集机制：

    - 定时轮询采集

    - 采集失败自动重试3次，每次间隔30秒

    - 连续5次采集失败记录异常日志，不改变设备在线状态

    - 网络恢复后自动恢复采集

5. 数据解析规则（发那科专用）：

    - 从`tags`数组遍历，按`id`匹配关键字段

    - 自动提取`device`设备编号、`desc`设备描述

    - 自动提取采集时间`time`作为时间戳

    - 自动去除`.00000`尾缀，转换为数值/字符串

### 3. 零件产量自动统计（核心）

#### 3.1 基础规则

- 以NC程序名（Tag5.value）作为零件唯一识别依据

- 按自然日00:00–23:59统计产量

- 支持跨天加班时段归属配置

#### 3.2 关键字段来源（发那科JSON）

- NC程序名：`tags.id=Tag5 → value`

- 当前加工累计数：`tags.id=Tag8 → value`

- 设备标识：`device`字段

- 采集时间：各tag自带`time`字段

#### 3.3 关键约束

- CNC接口只能获取当前累计值，无历史数据

- 采集间隔 < 程序切换间隔，确保程序变更必被捕获

- 仅程序切换会重置计数起点，设备重启不重置

- 每次切换程序（包括切回旧程序）均视为新加工开始

#### 3.4 差分统计逻辑

1. **同一程序连续加工**

本次产量 = MAX(0, 当前累计数 − 上次累计数)

1. **程序切换（A → B）**

程序A当日产量锁定不再变化；程序B以当前累计数为新起点

1. **切回历史程序（B → A）**

视为程序A重新开始，增量累加到当日总产量

1. **跨天处理**

0点自动重置；新日期以首次采集累计值为起点

1. **异常值保护**

累计数跳变、负数、突变过大时自动忽略并告警

### 4. 统计规则动态配置

1. 后台可配置统计指标、计算公式、分组维度

2. 支持自定义统计字段：

    - 产量（Tag8）

    - 运行时间（Tag23）

    - 切削时间（Tag24）

    - 循环时间（Tag25）

    - 主轴负载、倍率、速度等

3. 支持自定义表达式/简单公式计算

4. 支持分组维度：设备、员工、日期、NC程序

5. 配置实时生效，无需修改代码

### 5. 设备状态监控体系

1. **在线/离线状态**

    - 仅由Ping结果判断

    - 与HTTP采集成功与否无关

2. **可用性状态**

    - 可用/不可用（人工设置）

    - 不可用设备不参与采集

3. **运行状态来源（发那科）**

    - 设备状态：`_io_status.value`

    - 运行状态：`Tag9.value`

    - 操作模式：`Tag11.value`

    - 加工状态：`Tag26.value`

4. **展示项**

    - 在线/离线、可用/不可用

    - 当前NC程序

    - 当日产量

    - 最后采集时间、距离上次采集时长

### 6. 数据存储与清理策略

1. **双数据库架构（同一MariaDB实例）**

    - 业务库：设备、员工、模板、产量、配置

    - 日志库：原始采集JSON、系统日志、异常日志

2. 每次采集：

    - 原始JSON完整存入日志库

    - 解析后结构化数据存入业务库

3. 自动清理机制：

    - 后台配置日志保留天数

    - 每日自动清理过期日志

    - 业务统计数据永久保留

4. 数据安全：

    - 采集记录可追溯审计

    - 支持原始数据回放校验

### 7. 后台管理系统功能

#### 7.1 设备管理

- 设备增删改查、批量导入/导出

- 按状态筛选（在线/离线/可用/不可用）

- 绑定品牌模板、配置采集间隔/Ping间隔

- 查看采集历史与异常记录

#### 7.2 CNC品牌模板管理

- 模板增删改查

- JSON路径可视化配置（支持tags数组、id匹配）

- 关键字段指定（NC程序名、计数、状态等）

- 模板复制、数值清洗规则配置

#### 7.3 员工与设备分配

- 员工信息管理

- 员工与机床绑定（默认2–3台/人，可调整）

- 绑定记录可追溯、可修改

- 按员工查看负责设备与产量

#### 7.4 统计规则配置

- 自定义统计指标

- 计算公式配置

- 分组条件配置

- 统计周期配置

#### 7.5 系统全局配置

- Ping检测间隔

- 采集重试次数与间隔

- 日志保留天数

- BI大屏刷新频率

- 系统默认参数

#### 7.6 数据查询与导出

- 多维度产量查询（设备/员工/日期/程序）

- 原始采集JSON查看

- 系统日志、异常日志查询

- 数据导出Excel

#### 7.7 告警管理

- 采集失败告警

- 设备长时间离线告警

- 产量异常跳变告警

- 告警列表与标记已处理

### 8. BI数据大屏

1. 实时可视化展示

2. 支持后台自定义展示指标

3. 支持图表：折线图、柱状图、饼图、设备状态卡片

4. 刷新频率后台可配置

5. 支持全屏展示

6. 支持按车间/班组筛选视图

### 9. 容错与稳定性机制

- HTTP采集失败重试3次，间隔30秒

- 连续5次采集失败仅记录日志

- 网络中断恢复后自动接续采集

- 设备重启不影响产量统计连续性

- 数据库异常自动重试

- 采集服务异常自动记录

## 四、非功能需求

1. **性能**

    - 单服务器支持 ≥ 100台CNC同时采集

    - 采集响应延迟 < 3秒

    - 大屏刷新无卡顿

2. **可靠性**

    - 7×24小时稳定运行

    - 日志不丢失

    - 产量统计100%可追溯

3. **可维护性**

    - 所有配置页面化，无需改代码

    - 日志清晰，便于排查

    - 代码规范、注释完整

4. **兼容性**

    - 兼容主流品牌CNC HTTP/JSON接口

    - 支持IE11 / Edge / Chrome

## 五、数据库设计要点

### 业务库cnc_business

- 品牌模板表（JSON路径、tags匹配规则）

- 设备信息表

- 员工信息表

- 员工-设备绑定表

- 产量日统计表

- 采集快照表（差分计算用）

- 系统配置表

- 告警记录表

### 日志库cnc_log

- 原始采集JSON表（完整tags结构）

- 系统操作日志表

- 采集异常日志表

- 自动清理事件任务

### 索引优化

- 设备ID + 时间 联合索引

- 日期 + 设备 + 程序 联合索引

- 日志表按时间分区

## 六、接口与采集规范（发那科标准）

1. 接口返回格式：JSON数组

2. 设备结构：`device`、`desc`、`tags`

3. 数据项：`id`、`desc`、`quality`、`value`、`time`

4. 关键字段匹配：按id精确匹配

5. 数值处理：自动去除`.00000`尾缀

6. 采集失败返回空值，不抛异常

7. 所有采集行为必须记录日志

## 七、交付物

1. 需求规格说明书（本文档）

2. 数据库设计文档

3. 后台管理系统

4. BI数据大屏

5. Windows采集服务
