wincc
结构体变量
在变量管理窗口-----右键“结构变量”----新结构类型,如下图添加了气动阀门输出和电机输出两种类型。
右键“气动阀输出”----新结构类型元素,如下图添加了和气动阀相关的信号和控制元素:开到位,关到位,前缀,开关,手/自动,阀门报警。
鼠标左键“结构变量”-----在右侧“结构变量"窗口添加新结构变量。
然后在各个结构类型元素
然后在各个结构类型元素中,会自动出现对应的结构变量元素-------结构变量.结构类型元素
创建了一个公共的气动阀窗口如下图
(对象右键--属性)下图是开到位的圆形信号灯显示颜色配置,关到位,异常与否(阀门报警),开按钮显示信号同理
(对象右键--属性)开按钮---事件----按左键---雷电符号右键,选C动作。
开按钮控制脚本:
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
{
if(!GetTagBit("开关"))
{
x=MessageBox(NULL,"确认手动开'?","手动开'",MB_OKCANCEL|MB_ICONQUESTION|MB_SYSTEMMODAL|MB_DEFBUTTON2);
if(x==1)
SetTagBit("开关",1);
}
else if(GetTagBit("开关"))
{
x=MessageBox(NULL,"确认手动关'?","手动关'",MB_OKCANCEL|MB_ICONQUESTION|MB_SYSTEMMODAL|MB_DEFBUTTON2);
if(x==1)
SetTagBit("开关",0);
}
}
}
气动阀
气动阀公共弹窗脚本:
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
#define TagPrefix "AV-B17." //变量前缀
#define PictureTitle "AV-B17" //窗口标题
#define PictureName "公共-气动阀.pdl" //模板画面名称
#define blqz "AV-B17.前缀"
char* sp;
SetVisible(lpszPictureName,"画面窗口2",0);// 关闭画面窗口
SetTagPrefix (lpszPictureName,"画面窗口2", TagPrefix);//传递变量前缀
SetPropChar(lpszPictureName,"画面窗口2","CaptionText",PictureTitle);//传递标题
SetPictureName(lpszPictureName,"画面窗口2",PictureName);//设置画面窗口调用的模板画面
SetVisible(lpszPictureName,"画面窗口2",1);// 打开画面窗口
sp=GetTagPrefix(lpszPictureName,"画面窗口2"); //获取画面窗口的变量前缀
SetTagChar (blqz, sp);//set prefix// WINCC:TAGNAME_SECTION_START
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END
}
代码解析:
- SetTagChar:WinCC提供的API函数,用于设置字符串类型标签(Tag)的值。
- 第一个参数
blqz
:目标标签的名称(此处为宏定义"AV-B17.前缀"
,实际对应WinCC中的某个全局字符串标签)。 - 第二个参数
sp
:要赋给标签的值(此处为通过GetTagPrefix
获取的“画面窗口2”的当前变量前缀)。 - 将其存储到全局标签
blqz
中,供后续逻辑调用(例如在其他脚本中通过GetTagChar(blqz)
读取前缀,动态构建变量名)。
- 第一个参数
在WinCC模板画面中,变量通常使用前缀+基础名称的格式(如AV-B17.开到位
)。通过SetTagPrefix
将前缀"AV-B17."
绑定到“画面窗口2”,使模板画面内的变量能自动拼接前缀,正确映射到PLC的DMTag(如AV-B17.开到位
)。