我用报警记录实现的,现在遇到一个问题,如何只显示从某个时刻开始的记录?其他时间的记录不必显示.
问题补充:
wincc flexible报警视图属性-"显示"中有一个显示区的控制变量输入,我输入了一个时间变量,不知为何不能实现从该时间开始显示记录.
最佳答案
找WinCC的DemoV6来看看,里面有相应的例子。
例子里面是用户在画面上的I/O域中输入希望的起止日期、时间,然后点击按钮,则报警控件按照输入的时间范围进行显示。按钮的脚本如下:
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
#define APCMsgFilterSQL "MsgFilterSQL"
#define APCday_begin "day_begin"
#define APCmonth_begin "month_begin"
#define APCyear_begin "year_begin"
#define APChour_begin "hour_begin"
#define APCminute_begin "minute_begin"
#define APCday_end "day_end"
#define APCmonth_end "month_end"
#define APCyear_end "year_end"
#define APChour_end "hour_end"
#define APCminute_end "minute_end"
// next TagID : 12
// WINCC:TAGNAME_SECTION_END
// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
WORD day_b,month_b,year_b,hour_b,minute_b;
WORD day_e,month_e,year_e,hour_e,minute_e;
char SQLcmd[120];
day_b=GetTagWord(APCday_begin);
month_b=GetTagWord(APCmonth_begin);
year_b=GetTagWord(APCyear_begin);
hour_b=GetTagWord(APChour_begin);
minute_b=GetTagWord(APCminute_begin);
day_e=GetTagWord(APCday_end);
month_e=GetTagWord(APCmonth_end);
year_e=GetTagWord(APCyear_end);
hour_e=GetTagWord(APChour_end);
minute_e=GetTagWord(APCminute_end);
sprintf(SQLcmd,"DATETIME >= ''%d-%02d-%02d %02d:%02d:00.000000000'' AND DATETIME <= ''%d-%02d-%02d %02d:%02d:00.000000000''",year_b,month_b,day_b,hour_b,minute_b,year_e,month_e,day_e,hour_e,minute_e); //Rückgabe-Typ :BOOL
//printf("SQL: DATETIME >= ''%d-%02d-%02d %02d:%02d:00.000000000'' AND DATETIME <= ''%d-%02d-%02d %02d:%02d:00.000000000''",year_b,month_b,day_b,hour_b,minute_b,year_e,month_e,day_e,hour_e,minute_e); //Rückgabe-Typ :BOOL
SetTagChar(APCMsgFilterSQL,SQLcmd);
例子的核心部分是在报警控件的“MsgFilterSQL”属性由一个内部文本变量“MsgFilterSQL”控制,而控制可以通过脚本或其它方式构建一个筛选的字符串给MsgFilterSQL这个变量。
提问者对于答案的评价:
问题已解决,谢谢!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc278319.html