wincc历史数据库_wincc查询历史报警记录,归档数据
我用報警控件做了個操作記錄的組態,有214個操作事件 分別占用一個編號(公214個編號),可以通過編號查詢不同位號的操作情況。顯示全部操作記錄也沒有問題。問題出在根據編號查詢的時候我只能查詢編號在128以下的不同位號的記錄,編號128以上的查了沒有反映 全部顯示空白。這是為什么呢?
問題補充:編號 就是系統塊里邊那個編號(就是第一列) 我用標準函數AXC_SetFilter("操作記錄.pdl","控件1",&Filter,&Error)來設置過濾器。明明把過濾器的編號開始和結束位置設置好了(我看了的確實設置好了的)
Filter.dwMsgNr[0]=GetTagDWord("start");//起始
Filter.dwMsgNr[1]=GetTagDWord("end");//結束
這里dwMsgNr[0]和dwMsgNr[1]設置成了大于128的都沒有用。就是不查詢,但是我在全部歷史記錄中能看得到大于128編號的記錄.
最佳答案
首先你先使用報警控件的過濾器,看看能不能實現過濾功能。如果可以就說明你的報警控件沒有問題。如果不行,新建一個控件作如下測試:
新建一個按鈕,把如下代碼加入到你的鼠標動作中(C腳本)
BOOL ret;
MSG_FILTER_STRUCT Filter;
CMN_ERROR Error;
//Reset the filter struct
memset( &Filter, 0, sizeof( MSG_FILTER_STRUCT ) );
//Set the filter name
strcpy( Filter.szFilterName, "控件1");
// Choose selection elements
Filter.dwFilter = MSG_FILTER_NR_FROM | MSG_FILTER_NR_TO;
// Message number from
Filter.dwMsgNr[0] = 130;
// Message number to
Filter.dwMsgNr[1] = 200;
ret = AXC_SetFilter("NewPdl1.PDL","控件1",&Filter,&Error);
控件1為你的報警控件名稱。
我做過測試,沒有問題!
如果上面的代碼沒有問題,把報警記錄的起始點改為變量測試:
// Message number from
Filter.dwMsgNr[0] = GetTagWord("start");
// Message number to
Filter.dwMsgNr[1] = GetTagWord("end");
我測試的也沒有問題。
注意檢查你的Tag變量的數據類型。
具體說明參見Wincc系統幫助.
AXC_SetFilter example
回答者: HTLearn - 畢業實踐員 第4級 2008-3-4 10:06
提問者對于答案的評價:
我已經用其他方法解決了 你的方法和我的差不多 但我的就是不行 我看了哈 我查詢128以上的時候 控件工具條的“選擇對話框”中“編號”的 查詢條件 居然是 “MSGNR >= 1056964671 AND MSGNR <= 0”顯然益出了,不知道什么原因;
我用另外的方法實現了 如下:
char SQLcmd[130];
sprintf(SQLcmd,"MSGNR >= %d AND MSGNR <= %d",GetTagDWord("start"),GetTagDWord("end"));
SetPropChar("操作記錄.pdl","控件1","MsgFilterSQL",SQLcmd);
這個非常好用 還是要謝謝你 也感謝前邊那個提問的兄弟把代碼貢獻出來了。又學到一招,呵呵!
是從消息歸檔中讀出的數據記錄的最大數據限制為128了吧,你把WINCC報警控件屬性--統計列表---設置----數量限
總結
以上是生活随笔為你收集整理的wincc历史数据库_wincc查询历史报警记录,归档数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ActiveX控件开发流程
- 下一篇: 全国计算机二级考试2008版教材,全国计