跳到主要内容

HMI 配方管理

配方(Recipe)是 Darra HMI 的核心工艺数据管理功能,用于在 HMI 界面上创建、编辑、存储、下发一组工艺参数。操作员无需接触 PLC 程序即可快速切换产品规格。

本文档聚焦 HMI 侧的配方操作。PLC 侧配方引擎的详细参考见 PLC 配方管理


配方概念

配方 = 一组命名的工艺参数集合。每个配方项绑定一个 PLC 变量地址,激活配方时将参数值写入对应的 PLC 地址。

配方组: "焊接参数"
├── 配方: "碳钢 3mm"
│ ├── 焊接电流: 180A → DB1.SetCurrent
│ ├── 焊接电压: 22V → DB1.SetVoltage
│ ├── 送丝速度: 8.5m/min → DB1.WireSpeed
│ ├── 行走速度: 600mm/min → DB1.TravelSpeed
│ └── 气体流量: 15L/min → DB1.GasFlow

├── 配方: "不锈钢 2mm"
│ ├── 焊接电流: 120A
│ └── ...

└── 配方: "铝合金 4mm"
└── ...
概念说明
配方组 (Group)按工艺分类的配方集合(如焊接组、切割组)
配方 (Recipe)一组命名的工艺参数集合
配方项 (Item)单个参数,绑定到 PLC 变量地址
激活配方当前生效的配方,参数已下载到 PLC

HMI 配方编辑器

配方面板

HMI 提供内置的配方面板(<darra-recipe-panel> 控件),支持完整的配方管理操作:

<darra-recipe-panel
group="焊接参数"
recipe="碳钢_3mm"
show-history="true"
show-compare="true"
></darra-recipe-panel>
属性默认值说明
group''默认选中的配方组
recipe''默认选中的配方名
show-historytrue显示版本历史
show-comparefalse显示版本对比按钮
readonlyfalse是否只读(不显示编辑按钮)
heightauto面板高度

配方编辑器界面

配方面板由以下区域组成:

┌──────────────────────────────────────────────────────┐
│ 配方组 ▼ [焊接参数] 搜索... [+ 新建] │
├──────────────────────┬───────────────────────────────┤
│ 配方列表 │ 配方参数编辑 │
│ │ │
│ ● 碳钢 3mm (激活) │ 参数名 值 单位 │
│ ○ 不锈钢 2mm │ 焊接电流 180.0 A │
│ ○ 铝合金 4mm │ 焊接电压 22.0 V │
│ │ 送丝速度 8.5 m/min │
│ │ 行走速度 600.0 mm/min │
│ │ 气体流量 15.0 L/min │
│ │ │
│ │ [下发] [编辑] [历史] [对比] │
└──────────────────────┴───────────────────────────────┘

通过脚本操作配方

// 获取配方列表
const recipes = Darra.getRecipes({ group: '焊接参数' })
// [{ name: '碳钢 3mm', group: '焊接参数', version: 'v4' }, ...]

// 加载配方(下发到 PLC)
Darra.loadRecipe('焊接参数', '碳钢_3mm')

// 获取当前激活的配方
const active = Darra.getActiveRecipe()
// { group: '焊接参数', recipe: '碳钢_3mm', loadedAt: 1721894400000 }

// 保存当前参数为配方
Darra.saveRecipe('焊接参数', '碳钢_3mm_v5', {
description: '优化送丝速度',
reason: '试焊调整'
})

配方数据绑定

绑定到 Darra 变量

每个配方项通过 var 属性绑定到 PLC 变量:

<!-- 在 HMI 页面中绑定配方参数显示 -->
<darra-numeric var="DB1.SetCurrent" format="0.0" unit="A"></darra-numeric>
<darra-numeric var="DB1.SetVoltage" format="0.0" unit="V"></darra-numeric>

配方激活时自动将存储的值写入这些变量,绑定的控件自动更新。

使用配方表达式

在 HMI 脚本中读取配方绑定变量的值:

// 读取当前激活的配方参数
const current = Darra.readVariable('DB1.SetCurrent')
const voltage = Darra.readVariable('DB1.SetVoltage')

// 计算并显示功率
const power = current * voltage
document.getElementById('power-display').textContent = power.toFixed(1) + ' W'

从 HMI 下发配方

手动下发

操作员在配方面板中选择配方,点击"下发"按钮。系统执行:

  1. 校验:检查当前机器状态(安全条件)
  2. 写入:将配方参数写入绑定的 PLC 变量
  3. 验证:回读 PLC 变量值确认写入成功
  4. 记录:写入审计日志

脚本触发下发

// 根据产品编码自动选择配方
const productCode = Darra.readVariable('DB1.ProductCode')
let recipeName

switch (productCode) {
case 1: recipeName = '碳钢_3mm'; break
case 2: recipeName = '不锈钢_2mm'; break
case 3: recipeName = '铝合金_4mm'; break
default: Darra.showToast('未知产品编码', { type: 'error' }); return
}

Darra.loadRecipe('焊接参数', recipeName)
.then(() => Darra.showToast(`配方 ${recipeName} 已加载`, { type: 'success' }))
.catch(err => Darra.showToast(`配方加载失败: ${err}`, { type: 'error' }))

下发安全条件

配方下发前 HMI 自动检查:

条件说明
机器状态必须在待机或停止状态,运行中禁止下发
参数范围所有参数值在合法范围内(rMinValue ~ rMaxValue
用户权限当前用户有配方的激活权限
互锁条件无正在执行的关键工艺步骤

配方版本管理

版本自动记录

每次配方修改自动生成新版本:

配方: 碳钢_3mm
├── v1 2026-07-20 10:00 wang (初始版本)
├── v2 2026-07-21 14:30 li (调整电流 180→185A)
├── v3 2026-07-22 09:15 wang (调整送丝速度 8.5→9.0)
└── v4 2026-07-23 10:32 wang (当前版本, 电流微调 185→182A)

查看版本历史

const history = Darra.getRecipeHistory('焊接参数', '碳钢_3mm')
// [
// { version: 'v4', modifiedAt: ..., modifier: 'wang', comment: '电流微调' },
// { version: 'v3', modifiedAt: ..., modifier: 'wang', comment: '调整送丝速度' },
// ...
// ]

版本对比

const diff = Darra.compareRecipeVersions('焊接参数', '碳钢_3mm', 'v2', 'v4')
// [
// { field: '焊接电流', old: 185, new: 182, unit: 'A' },
// { field: '送丝速度', old: 8.5, new: 9.0, unit: 'm/min' }
// ]

HMI 内置版本对比视图:

<darra-recipe-compare
group="焊接参数"
recipe="碳钢_3mm"
left-version="v2"
right-version="v4"
></darra-recipe-compare>

回滚

// 回滚到指定版本
Darra.rollbackRecipe('焊接参数', '碳钢_3mm', 'v3')

回滚操作也会生成一个新版本(v5),保留完整的操作轨迹。


配方导入/导出

导出配方

// 导出单个配方为 JSON
const json = Darra.exportRecipe('焊接参数', '碳钢_3mm', 'json')

// 导出整个配方组为 CSV
const csv = Darra.exportRecipeGroup('焊接参数', 'csv')

// 触发浏览器下载
const blob = new Blob([csv], { type: 'text/csv' })
const url = URL.createObjectURL(blob)
const a = document.createElement('a')
a.href = url
a.download = '焊接参数_碳钢_3mm.csv'
a.click()

导入配方

// 从 JSON 导入配方
Darra.importRecipe(jsonData, {
overwrite: false, // 已存在时不覆盖
validate: true // 导入前校验参数范围
})

支持的格式

格式说明适用场景
JSON完整结构,含版本历史备份、系统间迁移
CSV仅参数值,无版本信息Excel 批量编辑
项目文件.dplc 项目保存项目分发

权限控制

操作所需角色
查看配方操作员 / 工程师 / 管理员
激活/下发配方操作员 / 工程师 / 管理员
修改配方参数工程师 / 管理员
创建新配方工程师 / 管理员
删除配方管理员
导入配方管理员
导出配方工程师 / 管理员

角色配置在 设置 → 用户管理 → 配方权限 中管理。


审计日志

所有配方操作自动记录审计日志,可在 HMI 中查看:

const auditLogs = Darra.getRecipeAuditLog({
group: '焊接参数',
startTime: Date.now() - 7 * 86400000, // 最近7天
limit: 100
})

审计日志包含:时间、用户、操作类型、配方名、修改的字段、旧值、新值、原因。

审计日志不可修改,只能追加。日志文件位于 %AppData%/DarraPLC/audit/recipe_YYYYMMDD.log


配方配方切换时序

推荐的 HMI 配方激活流程:

操作员选择配方


1. 检查机器状态 ──→ 非待机 → 提示"机器忙,不能换型"

▼ (待机)
2. 参数校验 ──→ 非法值 → 提示"参数超出范围"

▼ (合法)
3. 写入 PLC 变量


4. 回读验证 ──→ 不一致 → 提示"写入验证失败,请重试"

▼ (一致)
5. 记录审计日志


6. 更新 HMI 显示

最佳实践

  • 配方参数统一用 REAL:便于跨系统转换,精度足够
  • 范围校验必开:每项设置 Min/Max,防止误输入危险值
  • 按工艺分组:焊接组 / 切割组 / 打磨组分开管理
  • 命名规范化材料_厚度_操作(如 碳钢_3mm_焊接
  • 关键配方锁定:调试稳定后在配方属性中勾选"锁定",禁止普通用户改动
  • 版本号嵌入批次记录:生产报表中带上配方版本号,便于质量问题追溯
  • 定期备份导出:配方是核心工艺资产,建议每周导出 JSON 备份

排错表

问题原因解决
配方下发不生效PLC 变量地址绑定错误核对配方项中的变量地址与 PLC 程序一致
参数值被拒绝超出合法范围检查 Min/Max 设置
HMI 看到的值与配方不一致配方尚未激活确认已点击"下发"按钮
版本历史为空项目刚创建创建配方后修改一次即生成 v2
导入失败JSON 格式不匹配用 Darra.exportRecipe 导出模板,按模板修改

相关文档