目录
一、前期准备
1.在变量管理里建内部变量
“test1"~"test10","pows","result",如下图红框所示
2.放置控件
WinCC OnlineTrendControl、复选框、10个输入输出域
(1) WinCC OnlineTrendControl
1.对象名称改为"ctrltrend"
2."趋势"里新增10个趋势,数值轴都为"数值轴1",变量名称从test1~test10对应选择。
3.填写"数值轴"中值的范围。
(2) 10个输入输出域
输出值从test1~test10依次填写
(3) 复选框
1.对象名称改为"ctrlcheckbox"
二、效果
三、代码
1.复选框的代码
Function BoxCount_Trigger(Byval Item)
Dim trend,checkbox,count,i
Set trend=ScreenItems("ctrltrend")
Set checkbox=ScreenItems("ctrlcheckbox")
checkbox.BoxCount = trend.TrendCount
count=checkbox.BoxCount
For i=1 To count
checkbox.Index =i
trend.TrendIndex = i-1
checkbox.Text = trend.TrendName '把趋势图里的趋势名称,导入到复选框中
Next
End Function
#include "apdefap.h"
void OnPropertyChanged(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, long value)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END
// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
double process,pows;
DWORD process1,pows1,result;
//int RetMsg;
int i;
for (i=0;i<=9;i++)
{
pows=pow(2,i); //pows=2的i次方
process=GetPropDouble(lpszPictureName,"ctrlcheckbox","Process");
process1=(DWORD)process;
pows1=(DWORD)pows;
SetTagDWord("pows",pows1); //把2的i次方赋值给trendtag32
result=process1&GetTagDWord("pows");//按位做与运算
SetTagDWord("result",result); //把运算结果赋值给result
SetPropDouble(lpszPictureName,"ctrltrend","TrendIndex",i); //选定曲线i
if (GetTagDWord("result")!=0)
SetPropBOOL(lpszPictureName,"ctrltrend","TrendVisible",TRUE); //则使其显示
else
SetPropBOOL(lpszPictureName,"ctrltrend","TrendVisible",FALSE); //则使其不显示
}
}
2.打开画面时的代码
#include "apdefap.h"
void OnOpenPicture(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END
// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
int i;
for (i=0;i<=9;i++)
{
SetPropDouble(lpszPictureName,"ctrlTrend","TrendIndex",i); //选定曲线0-9
SetPropBOOL(lpszPictureName,"ctrlTrend","TrendVisible",FALSE); //使这10条曲线不显示
}
}
四、代码分析
1.SetPropDouble
SetPropDouble(ScreenName, Object, NameOfTheProperty, Value)
2.SetPropBOOL
SetPropBOOL(ScreenName, Object, NameOfTheProperty, Value)
3.GetPropDouble
GetPropDouble(ScreenName, Object, NameOfTheProperty)
4.SetTagDWord
SetTagDWord(Tag Tag_Name,DWORD value)