前面的博客介绍了使用复选框和脚本进行用户归档控件显示和隐藏,我们还可以使用单选框做列的升序和降序排列。
1. 先建立用户归档以及与PLC的连接,画面上设置一个用户归档控件UA,添加一个单选框名字修改为option。
在画面的打开事件中添加以下c脚本
#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
SetPropDouble(lpszPictureName,"option","Process",0);
}
2.在option控件的“事件-属性主题-输出输入-选择框-更改”中添加如下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,ColumnSort,sort[8];
int i,j,ColumnIndex;
process=GetPropDouble(lpszPictureName,"option","Process");
for(i=0;i<=7;i++)
{pows=pow(2,i);
if((DWORD)process&(DWORD)pows)
{for (j=0;j<=7;j++) sort[j]=0;
sort[i]=1;
}
}
for(i=0;i<=7;i++)
{if (sort[i]==1)
{j=i;
if (i%2==0) ColumnSort=1;
else ColumnSort=2;
}
}
ColumnIndex=j/2;
for(i=0;i<=3;i++)
{SetPropDouble(lpszPictureName,"UA","ColumnIndex",i);
SetPropBOOL(lpszPictureName,"UA","ColumnSort",0);
}
SetPropDouble(lpszPictureName,"UA","ColumnIndex",ColumnIndex);
SetPropDouble(lpszPictureName,"UA","ColumnSort",ColumnSort);
}