3. 配方视图组态

配方视图,说白了就是操作员跟配方数据打交道的那个界面窗口。你配置得好,操作员点几下鼠标就能完成配方切换;配置得不好,人家可能得翻好几页才能找到想要的数据。

我个人习惯,在开始组态之前,先把配方视图要干的事想清楚:是只用来查看?还是要做选择、加载、保存?不同的用途,控件的属性配置和按钮布局差别很大。

3.1 配方视图控件属性配置

从工具箱里拖一个“配方视图”控件到画面上,双击打开属性对话框。这里我重点说几个关键项:

属性项 说明 我的建议
数据源 绑定到哪个配方变量(如 MyRecipe) 一个画面里如果有多个配方视图,每个必须绑定不同的配方变量
操作模式 可选“仅显示”、“选择+加载”、“全部操作” 操作员站用“选择+加载”就够了,工程师站才开“全部操作”
显示列标题 是否显示表头 建议勾上,不然操作员不知道每列是什么
允许编辑 是否允许在视图内直接修改配方值 产线上建议关掉,防止误改
行高 每行的高度(像素) 触摸屏建议设到 30 以上,手指点选不费劲
小技巧: 如果你希望配方视图在加载时自动选中当前正在使用的配方,可以把“自动选择当前配方”属性设为 True。我在一个饮料灌装项目里用过这个功能,操作员切换产品时少点一次鼠标,效率提升很明显。

3.2 显示列配置

配方视图默认会把配方里的所有元素都列出来。但实际生产中,有些列操作员根本不需要看到。比如内部计算用的中间变量、设备参数等。

嗯,这里要注意:显示列配置不是在控件属性里直接勾选的,而是通过“列配置”对话框来管理。

3.2.1 列配置步骤

  1. 右键配方视图控件 → “列配置”
  2. 在左侧“可用列”中,把不需要的列移到右侧“隐藏列”
  3. 调整列的显示顺序(拖拽即可)
  4. 设置每列的宽度(建议用“百分比”模式,自适应画面大小)

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 配方视图组态知识结构

下面这张图把配方视图组态的核心逻辑串起来了,你可以对照着检查自己的配置有没有遗漏:

配方视图组态知识结构 配方视图控件 控件属性配置 数据源绑定 操作模式选择 允许编辑开关 显示列配置 列显示/隐藏 列顺序调整 列宽度设置 操作按钮布局 加载/保存/新建/删除 C脚本关联 颜色/间距/禁用逻辑 目标:操作员高效、安全地管理配方

3.5 常见问题与避坑

我曾经踩过的坑: 配方视图的“数据源”如果绑定错了配方变量,整个视图会显示空白。排查方法:在变量管理器中先确认配方变量有没有数据,再检查控件绑定是否正确。别一上来就重装软件,那解决不了问题。

还有一个容易忽略的点:配方视图的刷新机制。如果你在后台通过脚本修改了配方数据,视图不会自动刷新。需要调用 RecipeViewRefresh() 函数手动刷新。我习惯在“保存”和“删除”操作后面都加上刷新调用,确保操作员看到的是最新数据。

布局小建议: 如果画面空间有限,可以把操作按钮放在配方视图的右侧,用垂直排列。这样横向占用少,适合 1024×768 这种老式触摸屏。我在一个改造项目里就这么干过,客户很满意。