3. 配方视图组态
配方视图,说白了就是操作员跟配方数据打交道的那个界面窗口。你配置得好,操作员点几下鼠标就能完成配方切换;配置得不好,人家可能得翻好几页才能找到想要的数据。
我个人习惯,在开始组态之前,先把配方视图要干的事想清楚:是只用来查看?还是要做选择、加载、保存?不同的用途,控件的属性配置和按钮布局差别很大。
3.1 配方视图控件属性配置
从工具箱里拖一个“配方视图”控件到画面上,双击打开属性对话框。这里我重点说几个关键项:
| 属性项 | 说明 | 我的建议 |
|---|---|---|
| 数据源 | 绑定到哪个配方变量(如 MyRecipe) | 一个画面里如果有多个配方视图,每个必须绑定不同的配方变量 |
| 操作模式 | 可选“仅显示”、“选择+加载”、“全部操作” | 操作员站用“选择+加载”就够了,工程师站才开“全部操作” |
| 显示列标题 | 是否显示表头 | 建议勾上,不然操作员不知道每列是什么 |
| 允许编辑 | 是否允许在视图内直接修改配方值 | 产线上建议关掉,防止误改 |
| 行高 | 每行的高度(像素) | 触摸屏建议设到 30 以上,手指点选不费劲 |
小技巧: 如果你希望配方视图在加载时自动选中当前正在使用的配方,可以把“自动选择当前配方”属性设为 True。我在一个饮料灌装项目里用过这个功能,操作员切换产品时少点一次鼠标,效率提升很明显。
3.2 显示列配置
配方视图默认会把配方里的所有元素都列出来。但实际生产中,有些列操作员根本不需要看到。比如内部计算用的中间变量、设备参数等。
嗯,这里要注意:显示列配置不是在控件属性里直接勾选的,而是通过“列配置”对话框来管理。
3.2.1 列配置步骤
- 右键配方视图控件 → “列配置”
- 在左侧“可用列”中,把不需要的列移到右侧“隐藏列”
- 调整列的显示顺序(拖拽即可)
- 设置每列的宽度(建议用“百分比”模式,自适应画面大小)
3.2.2 我常用的列显示方案
| 列名 | 是否显示 | 宽度 | 说明 |
|---|---|---|---|
| 配方名称 | ✔ 显示 | 20% | 操作员识别配方用 |
| 版本号 | ✔ 显示 | 10% | 方便追溯 |
| 创建时间 | ✔ 显示 | 15% | 按时间排序时有用 |
| 参数1 ~ 参数5 | ✔ 显示 | 各 10% | 核心工艺参数 |
| 内部标志位 | ✘ 隐藏 | — | 操作员不需要看到 |
| 校验和 | ✘ 隐藏 | — | 系统内部使用 |
注意: 隐藏列只是不在视图里显示,数据仍然存在。我曾经遇到一个情况:操作员说“配方数据丢了”,结果发现只是列被隐藏了,数据其实还在。所以排查问题时先检查列配置。
3.3 操作按钮布局
配方视图本身不带操作按钮,你需要自己在画面上放按钮,然后关联配方函数。你想想看,如果按钮放得乱七八糟,操作员用起来得多难受。
3.3.1 标准按钮组
我一般会在配方视图下方或右侧放一排按钮,按使用频率从左到右排列:
- 加载配方 — 最常用,放最左边
- 保存配方 — 次常用
- 新建配方 — 较少用
- 删除配方 — 放最右边,防止误点
3.3.2 按钮关联函数
每个按钮需要关联一个 C 脚本或 VBS 脚本。举个例子,加载配方的按钮脚本:
// C 脚本示例:加载选中的配方
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// 获取当前选中的配方名称
char szRecipeName[256];
GetPropChar(lpszPictureName, "RecipeView1", "SelectedRecipeName", szRecipeName);
// 执行加载
RecipeLoad("MyRecipe", szRecipeName);
// 提示操作员
SetPropChar(lpszPictureName, "StatusText", "RecipeLoaded", szRecipeName);
}
经验之谈: 加载配方前最好加一个确认对话框。我在一个化工项目里没加确认,操作员不小心点错了配方,整批原料都投错了,损失不小。从那以后,凡是涉及写 PLC 的操作,我都加二次确认。
3.3.3 按钮布局原则
- 间距均匀:按钮之间留 5~10 像素间隙,触摸屏上至少 15 像素
- 大小一致:所有操作按钮用相同尺寸,视觉上整齐
- 颜色区分:加载用绿色、删除用红色、其他用灰色或蓝色
- 禁用状态:未选中配方时,“加载”和“删除”按钮置灰
3.4 配方视图组态知识结构
下面这张图把配方视图组态的核心逻辑串起来了,你可以对照着检查自己的配置有没有遗漏:
3.5 常见问题与避坑
我曾经踩过的坑: 配方视图的“数据源”如果绑定错了配方变量,整个视图会显示空白。排查方法:在变量管理器中先确认配方变量有没有数据,再检查控件绑定是否正确。别一上来就重装软件,那解决不了问题。
还有一个容易忽略的点:配方视图的刷新机制。如果你在后台通过脚本修改了配方数据,视图不会自动刷新。需要调用 RecipeViewRefresh() 函数手动刷新。我习惯在“保存”和“删除”操作后面都加上刷新调用,确保操作员看到的是最新数据。
布局小建议: 如果画面空间有限,可以把操作按钮放在配方视图的右侧,用垂直排列。这样横向占用少,适合 1024×768 这种老式触摸屏。我在一个改造项目里就这么干过,客户很满意。