# MES工位系统 - 工作流步骤说明 ## 概述 工作流由可组装的步骤(Step)组成,通过 `station.yaml` 配置文件定义执行顺序。每个步骤独立、可插拔,方便根据不同工位需求灵活组合。 ## 步骤清单 | 步骤ID | 名称 | 说明 | |--------|------|------| | `scan_product` | 扫描产品 | 扫描产品条码,获取产品信息 | | `check_quality` | 质量检查 | 向MES服务器查询产品是否允许加工 | | `relay_open` | 开继电器 | 打开继电器,控制设备通电/启动 | | `relay_close` | 关继电器 | 关闭继电器,控制设备断电/停止 | | `device_start` | 启动设备 | 向PLC发送启动/就绪信号 | | `start_heartbeat` | 启动心跳 | 启动与设备的心跳通信 | | `stop_heartbeat` | 停止心跳 | 停止心跳通信 | | `wait_device_start` | 等待设备启动 | 等待设备发出启动信号(如CNC启动) | | `wait_device_complete` | 等待设备完成 | 等待设备加工完成 | | `upload_result` | 上传结果 | 将加工结果上传到MES服务器 | | `reset_station` | 重置工位 | 清空工位状态,准备下一轮 | ## 步骤详细说明 ### scan_product - 扫描产品 - **功能**:接收扫码枪输入,解析产品条码 - **前置条件**:无 - **输出**:设置 `context.productSn` ### check_quality - 质量检查 - **功能**:调用MES接口检查产品是否允许在本工位加工 - **前置条件**:已扫描产品 - **输出**:设置 `context.qualityPassed` ### relay_open - 开继电器 - **功能**:通过Modbus RTU发送开继电器命令 - **前置条件**:质量检查通过 - **配置依赖**:`device.relay` 配置 - **可跳过**:未配置继电器时自动跳过 ### relay_close - 关继电器 - **功能**:通过Modbus RTU发送关继电器命令 - **前置条件**:无(任何时候都可执行) - **配置依赖**:`device.relay` 配置 - **可跳过**:未配置继电器时自动跳过 ### device_start - 启动设备 - **功能**:向PLC发送就绪/启动信号 - **前置条件**:质量检查通过 - **配置依赖**:`device.addresses.start_command` - **可跳过**:设备未启用时自动跳过 ### start_heartbeat - 启动心跳 - **功能**:启动定时心跳,保持与设备的通信 - **前置条件**:质量检查通过 - **配置依赖**:`device.heartbeat` 配置 - **可跳过**:设备未启用时自动跳过 ### stop_heartbeat - 停止心跳 - **功能**:停止心跳定时器 - **前置条件**:无 - **可跳过**:心跳未启动时自动跳过 ### wait_device_start - 等待设备启动 - **功能**:轮询检测设备启动信号 - **前置条件**:质量检查通过 - **配置依赖**:`device.addresses.start_signal` - **输出**:设置 `context.deviceStarted` 和 `context.deviceStartTime` - **可跳过**:设备未启用时自动跳过 ### wait_device_complete - 等待设备完成 - **功能**:轮询检测设备加工完成 - **前置条件**:质量检查通过 - **完成条件类型**(通过 `device.complete_condition.type` 配置): - `signal`:检测完成信号 - `count`:检测完成数量达到预设值 - `signal_with_time`:检测设备停止 + 满足最小运行时间 - **可跳过**:设备未启用时自动跳过 ### upload_result - 上传结果 - **功能**:将加工结果(OK/NG)上传到MES服务器 - **前置条件**: - 手动模式:用户点击OK/NG按钮 - 自动模式:设备完成信号触发 - **配置依赖**:`workflow.submit_mode` ### reset_station - 重置工位 - **功能**:清空所有状态,准备下一个产品 - **前置条件**:结果已上传 ## 配置示例 ### 示例1:标准S7工位(等完成信号) ```yaml workflow: submit_mode: auto steps: - id: scan_product - id: check_quality - id: device_start - id: start_heartbeat - id: wait_device_complete - id: stop_heartbeat - id: upload_result - id: reset_station device: enabled: true type: s7 complete_condition: type: signal ``` ### 示例2:金玉CNC工位(Modbus TCP + 时间条件完成) ```yaml workflow: submit_mode: auto steps: - id: scan_product - id: check_quality - id: wait_device_start - id: wait_device_complete - id: upload_result - id: reset_station device: enabled: true type: modbus_tcp complete_condition: type: signal_with_time running_value: 1 stopped_value: 0 min_running_time: 3000 ``` ### 示例3:继电器控制工位(手动提交) ```yaml workflow: submit_mode: manual steps: - id: scan_product - id: check_quality - id: relay_open - id: upload_result - id: relay_close - id: reset_station device: enabled: false relay: enabled: true type: modbus_rtu port: COM2 baudrate: 38400 ``` ### 示例4:拉铆工位(继电器+心跳+数量完成) ```yaml workflow: submit_mode: auto steps: - id: scan_product - id: check_quality - id: relay_open - id: start_heartbeat - id: wait_device_complete - id: stop_heartbeat - id: upload_result - id: relay_close - id: reset_station device: enabled: true type: modbus_tcp complete_condition: type: count relay: enabled: true type: modbus_rtu port: COM2 ``` ## 设备配置说明 ### device.type - 设备通信协议 - `s7`:西门子S7协议 - `modbus_tcp`:Modbus TCP协议 - `modbus_rtu`:Modbus RTU协议(串口) ### device.complete_condition.type - 完成条件类型 - `signal`:通过完成信号判断(读取 `complete_signal` 地址) - `count`:通过完成数量判断(`finished_count >= preset_count`) - `signal_with_time`:信号+时间判断(设备停止且运行时间 >= `min_running_time`) ### device.addresses - 地址配置 ```yaml addresses: enable_signal: "DB9.18.1" # S7格式:允许信号 start_signal: "DB1.2.2" # S7格式:启动信号 complete_signal: "DB1.2.5" # S7格式:完成信号 device_status: 15001 # Modbus格式:设备状态 finished_count: 4162 # 完成数量寄存器 preset_count: 4164 # 预设数量寄存器 start_command: 8 # 启动命令寄存器 ``` ## 扩展新步骤 1. 创建新的Step类,继承 `AbstractStep` 2. 实现 `execute()` 方法 3. 在 `StepFactory.registerDefaultSteps()` 中注册 4. 在配置文件中使用新步骤ID