1. 文档总览
1.1 文档目标
本文档整合技术规范 与操作指南双重维度,明确 MES 系统、上位机软件(支持西门子 PLC 数据读取)的三层对接逻辑:
- 上位机与西门子 PLC 的底层数据采集实现;
- MES 与上位机的中层数据交互规则;
- 全链路的部署、运维与故障处理方法,为开发、运维及生产人员提供标准化操作依据。
1.2 适用范围与对象
| 适用阶段 | 目标用户 | 核心用途 |
|---|---|---|
| 系统部署与联调 | 开发工程师、PLC 工程师 | 指导接口开发、PLC 配置与联调测试 |
| 日常生产运行 | 运维人员、生产管理员 | 支撑数据监控、异常处理与日常操作 |
| 系统升级与扩展 | 技术负责人、开发团队 | 保障对接架构兼容性与功能扩展可行性 |
1.3 核心术语补充(新增 PLC 相关)
| 术语 | 定义 |
|---|---|
| S7 协议 | 西门子 PLC 专用通信协议,支持数据块(DB)、输入输出(I/O)等地址区的读写操作 |
| 全局数据块(DB 块) | 西门子 PLC 中存储系统信息、工艺参数的结构化数据区域,如 SystemInfo 数据块 |
| OPC UA 网关 | 实现 PLC 协议与 OPC UA 协议转换的硬件设备(如 BL110UA),降低跨平台对接成本 |
| 字节序列反序列化 | 将 PLC 读取的字节流转换为可读数据类型(如整数、浮点型)的过程 |
2. 系统架构与技术实现(新增 PLC 对接层)
2.1 四层交互架构
在原有三层架构基础上新增PLC 数据采集层,形成全链路架构:
- PLC 数据采集层:上位机通过 S7 协议读取西门子 PLC 的 DB 块、I/O 区数据,实现设备状态与工艺参数的原始数据获取;
- 数据交互层:负责 PLC 数据格式转换(字节流→JSON/XML)及 MES - 上位机间的协议传输(TCP/IP/OPC UA/MQTT);
- 业务逻辑层:MES 侧负责工单管理与数据校验,上位机侧负责 PLC 指令解析与数据预处理;
- 数据存储层:MES 存储全量生产数据,上位机缓存 PLC 本地数据,PLC 保留系统核心参数(如 SystemInfo 块)。
2.2 西门子 PLC 对接技术实现
2.2.1 PLC 数据采集方案选择
| 对接方案 | 适用场景 | 优势 | 配置要求 |
|---|---|---|---|
| 直连 S7 协议 | 单台 / 少量西门子 PLC(S7-1200/1500) | 延迟低(≤50ms),无需额外硬件 | 上位机安装 S7 协议库(如 Snap7),配置 PLC IP 与 CPU 型号 |
| OPC UA 网关对接 | 多品牌 PLC 混合场景或远距离传输 | 标准化协议,降低兼容性问题 | 部署 OPC UA 网关(如 BL110UA),配置 PLC 通信参数 |
| MQTT+S7 协议批量采集 | 离散型车间、低带宽环境 | 轻量化传输,支持批量读写 | 上位机部署 MQTT 客户端,PLC 数据通过 XML 配置批量读取 |
2.2.2 PLC 标准化数据配置(基于西门子 PLC)
-
系统信息数据块配置 新建全局数据块
DB100_SystemInfo,数据类型基于typeSystemInfo自定义,包含以下核心字段:plaintext
TYPE typeSystemInfo : STRUCT CPUInfo: STRUCT // CPU模块信息 Name: STRING[32]; // PLC名称 IP: STRING[16]; // IP地址(如192.168.0.100) MAC: STRING[12]; // MAC地址 SubnetMask: STRING[16];// 子网掩码 END_STRUCT; RunInfo: STRUCT // 运行信息 FirstScan: BOOL; // 首次扫描标志 CycleTime: REAL; // 循环周期(ms) Status: INT; // 运行状态(0-停止,1-运行) END_STRUCT; DateInfo: STRUCT // 日期时间信息 DateTime: DATE_AND_TIME;// 实时时间 HourPulse: BOOL; // 小时脉冲信号 END_STRUCT; END_STRUCT; END_TYPE调用标准功能块
FB_SystemInfo置于 OB1 末端,自动填充DB100_SystemInfo数据。 -
工艺参数数据块配置 新建
DB101_ProcessParam,按工序划分数据区,示例如下:地址偏移 数据名称 数据类型 含义 对应 MES 参数 0.0 Temp_Set REAL 目标温度 工艺标准值 4.0 Temp_Actual REAL 实际温度 工艺实际值 8.0 Temp_Upper REAL 温度上限 工艺参数上限 12.0 Prod_Count INT 生产计数 已生产数量
2.2.3 上位机 PLC 数据读取流程(S7 协议 + XML 配置)
-
XML 配置文件定义 按设备 - 数据块 - 数据点三级结构配置,示例如下:
xml
<Root> <Device IP="192.168.0.100" CPUType="S7-1500" Name="Press01"> <DataBlock DBNo="100" StartAddr="0" ByteCount="32"> <DataPoint Addr="0" Type="STRING" Index="1" Meaning="PLC_Name"/> <DataPoint Addr="32" Type="INT" Index="2" Meaning="Run_Status"/> </DataBlock> <DataBlock DBNo="101" StartAddr="0" ByteCount="16"> <DataPoint Addr="0" Type="REAL" Index="3" Meaning="Temp_Actual"/> <DataPoint Addr="12" Type="INT" Index="4" Meaning="Prod_Count"/> </DataBlock> </Device> </Root> -
数据读取与解析步骤 ① 上位机解析 XML 文件,获取 PLC 连接参数与数据点配置;② 开辟独立线程,调用 S7 协议
S7Client.ConnectTo()建立连接;③ 按ByteCount批量读取数据块字节流,超出 N 字节时分次读取;④ 字节序列反序列化:将偏移地址转换为字节列表,按数据类型重组(如 REAL 占 4 字节);⑤ 封装为Key-Value格式(Key=PLC IP,Value = 解析后数据)。
2.3 通信协议与接口适配(新增 PLC 数据映射)
2.3.1 协议适配规则
| 通信协议 | PLC 数据传输适配方式 | 配置示例 |
|---|---|---|
| TCP/IP | 解析后的 PLC 数据直接封装为 JSON,通过 Socket 传输 | 上位机 IP:192.168.0.200,端口:8080 |
| OPC UA | 将 PLC 数据映射为 OPC UA 节点(如 DB101.DBD0→Temp_Actual) | 节点路径:opc.tcp://192.168.0.200:4840/PLC/Press01/Temp_Actual |
| MQTT | 按 PLC 设备创建主题(如 /plc/press01/data),发布解析后数据 | MQTT 服务器:192.168.0.150,主题:/plc/press01/data |
2.3.2 接口数据映射示例(上位机→MES)
生产进度上报接口(Upper-MES-001)新增 PLC 源数据字段:
json
{
"workOrderNo": "WO20240520001",
"已生产数量": 120,
"合格数量": 118,
"不合格数量": 2,
"PLC源数据": {
"PLC_IP": "192.168.0.100",
"数据块地址": "DB101.DBW12",
"采集时间": "2024-05-20 10:30:00",
"原始值": 120
}
}
3. 操作指南(新增部署与使用流程)
3.1 前期部署配置步骤
3.1.1 西门子 PLC 配置(工程师站操作)
- 打开 TIA Portal,创建新项目并添加对应 CPU 型号(如 S7-1500);
- 导入
FB_SystemInfo功能块,创建DB100_SystemInfo和DB101_ProcessParam数据块; - 在 OB1 主循环末端调用
FB_SystemInfo,关联输入参数(如i_HwId绑定本地 PN 接口); - 下载程序至 PLC,通过在线监控确认
DB100_SystemInfo数据正常更新。
3.1.2 上位机 PLC 连接配置
-
直连 S7 协议配置:
- 安装 Snap7 库(Windows:
pip install python-snap7;C#:引用 Snap7.dll); - 打开上位机软件 "PLC 配置" 模块,输入 PLC IP(192.168.0.100)、CPU 型号(S7-1500)、Rack=0、Slot=1;
- 导入 XML 数据配置文件,点击 "测试连接",确认数据块读取状态为 "正常"。
- 安装 Snap7 库(Windows:
-
OPC UA 网关配置:
- 连接 BL110UA 网关至 PLC 与上位机网络,通过 Web 管理页配置 PLC 参数(协议类型:S7,IP:192.168.0.100);
- 上位机 OPC UA 客户端添加网关地址(opc.tcp://192.168.0.110:4840),订阅 PLC 数据节点。
3.1.3 MES 与上位机对接配置
- MES 侧进入 "系统集成 - 接口管理",新增上位机对接节点,选择通信协议(如 MQTT);
- 配置 MQTT 服务器地址(192.168.0.150)、订阅主题(/plc/press01/data)、发布主题(/mes/workorder);
- 上位机侧配置相同 MQTT 参数,测试 "工单下发" 与 "数据上报" 功能,确保交互正常。
3.2 日常操作流程
3.2.1 生产工单执行操作
-
工单下发:
- MES 管理员在 "生产计划" 模块创建工单(WO20240520001),点击 "下发至上位机";
- 上位机接收工单后弹窗提示,操作员确认后系统自动将工艺参数写入 PLC(DB101.DBD0=200.0);
- 上位机返回 "工单接收成功" 确认至 MES,MES 工单状态更新为 "执行中"。
-
生产监控:
- 运维人员通过上位机界面查看 PLC 实时数据(温度、压力、生产计数);
- MES "生产监控" 页面自动刷新进度(基于上位机每 3 秒上报的 PLC 数据);
- 若 PLC 数据超出阈值(如温度 > 220),上位机立即上报异常,MES 触发声光告警。
3.2.2 设备故障处理操作
- 上位机检测到 PLC
DB100.RunInfo.Status=0(故障),自动读取故障代码(DB100.FaultCode=102)并上报 MES; - MES 推送故障信息至设备管理员手机端,管理员通过上位机查看 PLC 故障描述(如 "温度传感器断线");
- 故障排除后,PLC 状态恢复为 1,上位机自动上报 "恢复运行",MES 记录故障处理时长。
3.3 常见问题处理(新增 PLC 相关)
| 问题现象 | 可能原因 | 处理步骤 |
|---|---|---|
| 上位机无法读取 PLC 数据 | S7 协议连接参数错误 | 1. 核对 PLC IP、Rack/Slot;2. 检查 PLC 在线状态;3. 测试网络连通性(ping 192.168.0.100) |
| PLC 数据上报延迟 > 1s | 批量读取字节数过大 | 1. 拆分 XML 数据块配置,减少单次读取字节数;2. 优化线程调度,避免读取阻塞 |
| OPC UA 节点无数据 | 网关配置错误 | 1. 登录网关 Web 页,检查 PLC 协议配置;2. 重启 OPC UA 服务;3. 重新订阅节点 |
| 数据反序列化错误 | 数据类型匹配错误 | 1. 核对 XML 中数据点类型(如 REAL 对应 4 字节);2. 检查 PLC 数据块地址偏移量 |
4. 技术规范(整合原有内容并补充 PLC 适配)
4.1 数据交互接口补充(PLC 数据关联)
4.1.1 下行接口:工艺参数写入 PLC 接口
- 接口编号:MES-Upper-PLC-001
- 数据格式:JSON
- 数据字段:工单编号、PLC_IP、数据块编号、参数地址、目标值、写入超时时间
- 示例:
json
{
"workOrderNo": "WO20240520001",
"PLC_IP": "192.168.0.100",
"DBNo": 101,
"ParamAddr": "DBD0",
"TargetValue": 200.0,
"Timeout": 5000
}
4.1.2 上行接口:PLC 系统信息上报接口
- 接口编号:Upper-MES-PLC-001
- 数据格式:JSON
- 数据字段:PLC_IP、CPU 名称、运行状态、循环周期、采集时间
- 示例:
json
{
"PLC_IP": "192.168.0.100",
"CPU_Name": "S7-1511C",
"Run_Status": 1,
"Cycle_Time": 1.2,
"CollectTime": "2024-05-20 10:30:00"
}
4.2 异常处理补充(PLC 相关)
| 异常码 | 异常类型 | 处理建议 |
|---|---|---|
| 2001 | PLC 连接失败 | 检查 PLC 电源、网络接线,重启 PLC 与上位机 |
| 2002 | PLC 数据块写入超时 | 确认 PLC 处于运行状态,减少单次写入数据量 |
| 2003 | 数据类型不匹配 | 核对 XML 配置与 PLC 数据块类型,重新生成配置文件 |
4.3 运维规范补充
- PLC 定期维护 :每月通过 TIA Portal 备份 PLC 程序与数据块,检查
FB_SystemInfo运行状态; - 网关运维:每季度重启 OPC UA 网关,清理缓存;检查网关与 PLC 的通信日志;
- 数据一致性校验:每周对比 MES 生产数据与 PLC 原始数据(DB101.Prod_Count),确保无偏差。