使用AS的自定义功能块与OS之间WINCC自定义功能块图标,自定义功能块面板教程。 1.不是采用西门子APL面板实现。 2.AS可以采用LAD或者SCL语言生成功能块。 3.实现弹窗功能。 4.事件可以采用C动作或者VBS。 5. 在PCS7或者STEP7+Wincc都可以实现。 6.可以提供实例源程序。

搞工控的都知道,西门子那套APL面板虽然方便,但用久了总觉得像被套模板。今天咱们直接甩开APL,用AS硬核搓自定义功能块,再给WinCC整点带专属图标的骚操作。
第一步:AS里造个"土制手雷"
先用SCL撸个带爆炸效果的功能块(LAD也行,但SCL写条件判断更爽):
scl
FUNCTION_BLOCK FB_DiyPopup
VAR_INPUT
Trigger : BOOL; // 弹窗触发信号
MsgText : STRING[50];
END_VAR
VAR
bPopupActive : BOOL := FALSE;
END_VAR
IF Trigger AND NOT bPopupActive THEN
// 置位内部弹窗激活标志
bPopupActive := TRUE;
// 这里可以挂接OS的变量操作
SetTagBit("HMI_Popup_Flag", TRUE);
SetTagChar("HMI_Popup_Text", MsgText);
END_IF;
这玩意儿核心逻辑就是个带自锁的触发机制,注意SetTag系列函数是跨系统通信的关键。SCL的优势在于能直接操作绝对地址,适合需要精细控制的老司机。
第二步:给功能块穿皮肤
打开PCS7的Faceplate Designer(STEP7用户用图形编辑器硬改):
- 新建32x32像素的BMP图标
- 在块图标属性里勾选"User-Defined"
- 把画好的爆炸图标(比如💥)塞进C:\Program Files\Siemens\...\Symbols(路径看安装位置)
- 在CFC里插入功能块时,右键属性选自定义图标
有个坑要注意:WinCC的全局调色板是硬编码的,用PS做图标时记得把颜色索引限定在系统调色板,否则显示会鬼畜。
第三步:WinCC弹窗C脚本
在画面里藏个隐形按钮,事件里挂C脚本:
c
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// 读取AS传过来的消息
char msg[51];
GetTagChar("HMI_Popup_Text", msg, 50);
// 动态创建弹窗
HWND hPopup = OpenPictureWindowEx("Popup.pdl", 300, 200, SW_SHOW, "PopupWindow");
// 怼文本到弹窗里的静态文本控件
SetText(hPopup, "StaticText1", msg);
}
用VBS也行,但C脚本执行效率更高,特别是需要高频触发时。注意OpenPictureWindowEx的参数单位是像素,别按工程单位瞎填。
避坑指南
- AS和OS时间戳不同步会导致触发丢失,建议在功能块里加500ms延时确认
- 图标更新后必须重启Simatic Manager才能生效
- 跨系统变量建议用ARSEND/ARRCV功能块打包传输
- 弹窗的.pdl文件里控件命名必须和C脚本里的完全一致
完整实例(包含AS功能块+WinCC画面)可以这么搞:
- AS侧:在CFC里拖出FBDiyPopup实例,绑定到ARSEND
- WinCC侧:用用户自定义对象封装弹窗控件组
- 全局脚本里加个定时器清空弹窗标志位
这么整下来,你的WinCC面板既保留了西门子的稳定性,又有了定制化的逼格。实测在PCS7 V9.0和STEP7 V5.6+WinCC7.4都能跑,设备树不同导致的变量绑定问题,用交叉索引表能快速定位。

使用AS的自定义功能块与OS之间WINCC自定义功能块图标,自定义功能块面板教程。 1.不是采用西门子APL面板实现。 2.AS可以采用LAD或者SCL语言生成功能块。 3.实现弹窗功能。 4.事件可以采用C动作或者VBS。 5. 在PCS7或者STEP7+Wincc都可以实现。 6.可以提供实例源程序。

