前面博客介紹的是輸入輸出域等控件通過設置“操作員消息”屬性為“是”從而在報警空間中做操作記錄,但並非所有Wincc控件有這個屬性,比如按鈕。按鈕是Wincc中使用率非常高的控件,這個控件經常用作重要操作,我們也非常希望可以知道什么時間點擊過這個按鈕,本文通過c腳本介紹如何實現按鈕的操作記錄。
在畫面上放置一個按鈕,名字修改成btn1,假設這個按鈕的作用是“啟動水泵”,那么我們在按鈕的鼠標點擊事件中加入c腳本(本例重點介紹如何記錄操作員消息,啟動水泵功能不在本例討論范圍)。
int ret;
ret=GCreateMyOperationMsg(1,1100,lpszPictureName,lpszObjectName,83,0,1,"操作員按下了btn1按鈕");
這里面使用了一個wincc自帶的函數GCreateMyOperationMsg,這個函數放置在“標准函數”-“Alarm”函數組里面。它的定義是這樣子的:
int GCreateMyOperationMsg( DWORD dwFlags, DWORD dwMsgNum, char* lpszPictureName, char* lpszObjectName, DWORD dwMyTextID, double doValueOld, double doValueNew, char* pszComment)
它的參數如下:
dwFlags 這個參數有3種數值:數值為1表示“操作員輸入”(也即是點擊按鈕這個動作)添加固定的注釋,而不會在運行時點擊按鈕彈出一個對話框讓操作員輸入注釋,這個可以省去麻煩,本例使用的就是這個方法;數值為3表示運行的時候點擊按鈕會彈出對話框讓操作員輸入注釋,不推薦這樣;數值為100表示使用dwMyTextID指定的文本快中的文本。
dwMsgNum 操作員輸入信息的消息號,需要預先創建。在變量記錄-消息表格中,添加一個未使用的消息號,這個例子輸入的是1100,消息等級為“系統,無確認”,消息類型為“操作員輸入信息”,消息文本為“操作員啟動水泵”,其他默認設置。
lpszPictureName 為要引用操作員消息的畫面,因為本例就是在當前畫面,所以不需要設置,使用默認即可。
lpszObjectName 為引用操作員消息的控件,因為本例就是在當前控件的事件中寫腳本,使用默認名稱即可。
dwMyTextID 文本庫的ID,為消息文本的多語言顯示,如果不是那種需要多語言切換的項目,不需要實際設置文本庫的其他語言文本。打開文本庫,記下該按鈕的號碼抄過來就是了。
doValueOld和doValueNew 為按鈕事件的新值和舊數值,本例設置的是1和0,這個數字可以隨便設置。實際使用時,如果勾選了顯示“過程值2”和“過程值3”,將顯示舊值和新值。
pszComment 為預設值的注釋。
保存之后運行,當點擊按鈕之后,再通過報警控件的短期歸檔或者長期歸檔,就可以查詢到按鈕操作記錄了。