workflow-steps.md 6.3 KB

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.deviceStartedcontext.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工位(等完成信号)

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 + 时间条件完成)

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:继电器控制工位(手动提交)

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:拉铆工位(继电器+心跳+数量完成)

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 - 地址配置

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