我們在使用Wincc趨勢控件的時候,有時候希望趨勢的顯示和隱藏不通過趨勢控件的“組態對話框”來設定,而通過復選框進行設置,這樣更加直觀,便於操作。下面就介紹如何實現這種功能。
1. 假設一個趨勢控件里面有32個變量的趨勢要顯示出來,那么我們先在趨勢控件中添加進去這32個趨勢,把數值軸時間軸設定好,還可以在工具欄上不顯示“組態對話框”按鈕。
2.變量管理里面新建兩個內部32位無符號數變量,pows,result
3. 畫面上加入一個復選框按鈕,修改名字為ctrlCheckbox,屬性-幾何-框數量設定為32,屬性-字體中分別編輯好這32個趨勢的名字,然后在趨勢控件事件-“屬性主題-輸入輸出-選擇框-更改”添加c腳本如下:
#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 i;
for (i=0;i<=31;i++) //因為有32個趨勢,所以是0到31,如果趨勢沒那么多,修改相應數字就是了。
{
pows=pow(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); //則使其不顯示
}
}