MaterialDeductionActivity - 物料扣减
概述
MaterialDeductionActivity 是一个 MES 专用的物料扣减节点,用于在生产过程中自动扣减物料库存。该节点通过监听扣减信号或条码变量的变化,实时执行物料扣减操作,支持多物料并行扣减。
基本信息
| 属性 | 值 |
|---|---|
| 显示名称 | 物料扣减 |
| 类名 | MaterialDeductionActivity |
| 命名空间 | CMS.Plugin.MesSuite.Activitys |
| 基类 | ProcessBusinessActivity |
| 分类 | 工序步骤 |
| 排序 | 10 |
| 发布 | 是 |
| 退出模式 | Manual(手动退出) |
配置说明
配置属性
| 属性名 | 显示名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| SerialNumberVariableName | 产品码变量 | string | "Inbound_SerialNumberVariable" | 产品码变量名 |
| TriggerType | 扣减触发类型 | MaterialDeductionTriggerType | DeductionSignal | 触发扣减的方式 |
| DeductionSuccessWriteValue | 扣减成功下发值 | int | 1 | 扣减成功时写入的值 |
| DeductionFailWriteValue | 扣减失败下发值 | int | 2 | 扣减失败时写入的值 |
| IsRestVerificationResult | 复位扣减结果 | bool | true | 触发信号复位时是否复位结果 |
| DeductionRestWriteValue | 复位结果下发值 | int | 0 | 复位时写入的值 |
| ReadRetryCount | 读取重试次数 | int | 10 | 读取变量失败时的重试次数 |
| ReadRetryDelay | 读取重试延时 | int | 500 | 读取重试间隔(毫秒) |
| WriteRetryCount | 写入重试次数 | int | 10 | 写入变量失败时的重试次数 |
| WriteRetryDelay | 写入重试延时 | int | 500 | 写入重试间隔(毫秒) |
| IsDeliverResults | 下发结果 | bool | true | 扣减完成后是否下发结果 |
触发类型
| 枚举值 | 说明 |
|---|---|
| DeductionSignal | 监听扣减信号变量变化触发 |
| BarcodeVariable | 监听条码变量变化触发 |
工艺配置
| 配置项 | 说明 |
|---|---|
| MaterialDeduction | 物料扣减功能开关 |
| MaterialDeductions | 物料扣减配置列表 |
物料扣减配置(MaterialDeductionVariable)
| 字段 | 说明 |
|---|---|
| Name | 物料名称 |
| DeductionTriggerSignal | 扣减触发信号变量 |
| BarcodeVariable | 条码变量 |
| DosageMode | 用量提供方式 |
| DosageQtyVariable | 使用量变量 |
| DeductionResultSignal | 扣减结果信号变量 |
| ExceptionVariable | 异常描述变量 |
业务逻辑
执行流程
┌─────────────────────────────────────────────────────────────┐
│ MaterialDeductionActivity │
├─────────────────────────────────────────────────────────────┤
│ EnterAsync - 初始化阶段 │
│ ├─ 检查工位是否启用 │
│ ├─ 检查功能是否启用 │
│ ├─ 根据触发类型收集监听变量 │
│ ├─ 创建变量监听通道 │
│ └─ 注册变量变化事件处理 │
├─────────────────────────────────────────────────────────────┤
│ OnTagValueChanged - 变量变化处理 │
│ ├─ 判断变化的变量是否为监听目标 │
│ ├─ 触发信号 = 1 → 执行扣减 │
│ ├─ 触发信号 = 0 → 执行复位(如果启用) │
│ └─ 并行处理多个物料的扣减 │
├─────────────────────────────────────────────────────────────┤
│ DeductionAsync - 扣减处理 │
│ ├─ 读取产品码、物料条码、使用量 │
│ ├─ 获取产品型号和工单 │
│ ├─ 调用物料服务执行扣减 │
│ └─ 下发扣减结果 │
└─────────────────────────────────────────────────────────────┘
用量提供方式
| 模式 | 说明 |
|---|---|
| Device | 从设备变量读取使用量 |
| 其他 | 使用系统配置的默认用量 |
扣减结果输出
每个物料扣减完成后,会在流程上下文中设置以下变量:
| 变量名模式 | 类型 | 说明 |
|---|---|---|
| {物料名}_MaterialDetailId | string | 物料明细 ID |
| {物料名}_MaterialCode | string | 物料条码 |
| {物料名}_DeductionResultSignal_Value | bool | 扣减结果 |
| {物料名}_DosageQty | double? | 扣减量 |
| {物料名}_ExceptionVariable_Value | string | 异常描述 |
| {物料名}_MaterialDeduction_Counter | int | 扣减计数器 |
| {物料名}_MaterialDeduction_Result | DataItemCollection | 扣减结果集合 |
使用示例
基本配置
{
"Name": "物料扣减",
"Type": "MaterialDeductionActivity",
"TriggerType": "DeductionSignal",
"DeductionSuccessWriteValue": 1,
"DeductionFailWriteValue": 2,
"IsRestVerificationResult": true,
"DeductionRestWriteValue": 0,
"IsDeliverResults": true
}
使用条码变量触发
{
"Name": "物料扣减",
"Type": "MaterialDeductionActivity",
"TriggerType": "BarcodeVariable",
"ReadRetryCount": 5,
"ReadRetryDelay": 200
}
典型流程
┌──────────────────┐
│MaterialVerificationActivity│
│ 物料校验 │
└────────┬─────────┘
│ 校验通过
▼
┌──────────────────┐
│MaterialDeductionActivity│ ← 持续监听扣减信号
│ 物料扣减 │
│ (手动退出模式) │
└────────┬─────────┘
│ 扣减完成
▼
┌──────────────────┐
│ 后续工序处理 │
└──────────────────┘
错误处理
| 错误场景 | 处理方式 |
|---|---|
| 工位未启用 | 记录警告,不执行扣减 |
| 功能未启用 | 记录警告,不执行扣减 |
| 物料码为空 | 设置错误信息"物料码获取失败" |
| 未找到产品型号 | 设置错误信息"未找到产品型号" |
| 扣减失败 | 记录错误信息,下发失败结果 |