如果在操作画面时想查看某个变量的变化趋势,如果去趋势画面查看要进行翻页,还要选择相应的曲线查询,如果在画面中直接点击输入输出域就能弹出曲线控件是不是就操作更方便了,我看到某个厂家的DCS就可以配置这项功能,于是我就琢磨一下,还真给实现了。
主要思路就是在画面中放一个趋势曲线控件,默认不显示,鼠标点击趋势曲线时,趋势曲线控件移动到鼠标附件,并加载对应的归档变量以及标题等信息,程序中做了判断如果当前IO域对应趋势曲线处于显示状态,再次点击时关闭显示。
下图为编辑模式:
运行模式:
输入输出域脚本如下:
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
#pragma option(mbcs)
// 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 cmpvalue;
cmpvalue=strcmp(GetPropChar(lpszPictureName,"Trend","TagName"),"Archive\1TE201A_RT");//判断趋势曲线是否时当前输出域的曲线
if((cmpvalue==0)&&(GetVisible(lpszPictureName,"Trend")==1))//如果趋势曲线是当前曲线,且趋势曲线显示状态为真
SetVisible(lpszPictureName,"Trend",FALSE);//隐藏趋势曲线控件
else
{
SetVisible(lpszPictureName,"Trend",FALSE);//隐藏趋势曲线控件
SetPropChar(lpszPictureName,"Trend","Name","窑顶温度1TE201A");//设定曲线名称
SetPropChar(lpszPictureName,"Trend","TagName","Archive\1TE201A_RT");//设定归档变量
SetPropChar(lpszPictureName,"Trend","Caption","窑顶温度1TE201A");//设定趋势控件标题
SetPropChar(lpszPictureName,"Trend","Label","1TE201A");//设定曲线标签
SetLeft(lpszPictureName,"Trend",x-GetWidth(lpszPictureName,"Trend")/2);//设定趋势控件x方向显示位置
SetTop(lpszPictureName,"Trend",y+40);//设定趋势控件y方向显示位置
SetVisible(lpszPictureName,"Trend",TRUE);//显示趋势曲线控件
}
}