2、腳本中定時器介紹
3、使用腳本實現更多定時器功能
3.1 整點歸檔
3.2 WinCC 項目激活時避免腳本初次執行及延遲執行腳本1 定時器功能介紹
WinCC 中定時器的使用可以使 WinCC按照指定的周期或者時間點去執行任務,比如周期執行變量歸檔、在指定的時間點執行全局腳本或條件滿足時打印報表。WinCC 已經提供了一些簡單的定時器,可以滿足大部分定時功能。但是在有些情況下,WinCC 提供的定時器不能滿足我們需求,這時我們就可以通過 WinCC 提供的腳本接口通過編程的方式實現定時的功能,因為腳本本身既可以直接 調用 WinCC其他功能,比如報表打印,也可以通過中間變量來控制其他功能的執行,比如通過置位/復位歸檔控制變量來觸發變量記錄的執行。WinCC 提供了 C 腳本和 VBS 腳 本,本文主要以全局 C 腳本編程為例介紹定時功能的實現。
2 腳本中定時器介紹 既然在全局腳本中可以編程控制其他功能的執行,那么首先看看全局腳本的觸發:

3使用腳本實現更多定時器功能
利用腳本自身的定時器, 可以通過在腳本中編程的方式實現更多其它定時功能。
3.1整 點歸檔
WinCC提供了變量歸檔,變量歸檔分為周期歸檔和非周期歸檔,不管是周期歸檔或非周期的歸檔,都又可以通過一些 變量或腳本返回值來控制歸檔, 比如:整點歸檔。下面的設置結合WinCC腳本,實現了在 整點開始歸檔,歸檔五分種后停止歸檔,即每個小時僅歸檔前五分鐘的數據。
軟件環境:bbbbbbs 7 Professional Service Pack1 , WinCC V7.0 SP3
歸檔名稱:ProcessValueArchive
歸檔變量:NewTag
歸檔周期:1 分鐘
歸檔控制變量 startarchive
C腳本觸發周期:10秒
腳本代碼:
#include "apdefap.h"
intgscbbbbbb( void )
{
#pragma option(mbcs)
#pragma code ("kernel32.dll");
void GetLocalTime (SYSTEMTIME* lpst);
#pragma code();
SYSTEMTIME time;
int t1;
GetLocalTime(&time);
t1=time.wMinute;
if(t1==00)
{
SetTagBit("startarchive",1);
}
if(t1==05)
{
SetTagBit("startarchive",0);
}
return0;
}
歸檔設置如圖2:
圖2 歸檔設置
同理,在以上腳本的基礎上做修改,可以實現在某個指定的時間點打印報表,只要在滿足觸發條件時調用下列函數:
RPTJobPrint(" Myprintjob");
Myprintjob為 事先創建好的打印作業。
腳 本主要部分在于獲取系統當前時間,下 面的腳本實現了獲取當前時間并分別獲取年、月、日、時、分、秒、毫秒,星期幾的功能。
Varname1 到 Varname8 為 WinCC 內部變量。若在 WinCC畫面上顯示時,由于默認 I/O 域的 格式為999.99, 要把 Varname1 的顯示格式改為9999。
#include "apdefap.h"
intgscbbbbbb( void )
{
#pragma option(mbcs)
#pragma code ("kernel32.dll");
void GetLocalTime (SYSTEMTIME* lpst);
#pragma code();
SYSTEMTIME time;
GetLocalTime(&time);
SetTagWord("Varname1",time.wYear);
SetTagWord("Varname2",time.wMonth);
SetTagWord("Varname3",time.wDayOfWeek);
SetTagWord("Varname4",time.wDay);
SetTagWord("Varname5",time.wHour);
SetTagWord("Varname6",time.wMinute);
SetTagWord("Varname7",time.wSecond);
SetTagWord("Varname8",time.wMilliseconds);
return 0;
}
設置或讀取系統時間的函數如下:
SetSystemTime
SetLocalTime
GetSystemTime
GetLocalTime
系統中本地計算機時間和格林威治時間是有區別的。函數“SetSystemTime / GetSystemTime”用于設置或讀取格林威治時間。
函數“SetLocalTime / GetLocalTime”用于設置或讀取本地計算機時間。
兩種時間會因地理的時區不同而改變。兩個函數使用方法相 同。
3.2 WinCC 項目激活時避免腳本初次執行及延遲執行腳本
全局腳本在項目激活時,是要執行一次的,在有些情況下,需要避免腳本執行,就采用在腳本中去判斷。比如 可以創建 WinCC 內部布爾型變量 flag,腳本如下:
#include "apdefap.h"
intgscbbbbbb( void )
{
#pragma option(mbcs)
if ( GetTagBit("flag")==1)
SetTagWord("NewTag",1);//根據自己的需求編寫對應代碼.
else
SetTagBit("flag",1); //Return-Type: BOOL
return0;
}
除了避免項目運行激活時觸發腳本執行,我們 還可以通過 Sleep() 延遲腳步功能執行,比如開機后五分鐘開始執行腳本具體功能,代碼如下:
#include "apdefap.h"
intgscbbbbbb( void )
{
#pragma option(mbcs)
#pragma option(mbcs)
#pragma code("Kernel32.dll");
voidSleep(int milliseconds);
#pragma code()
Sleep(300000); //延遲300秒即五分鐘
int temp;
//根據自己的需求編寫對應代碼.
temp=GetTagWord("NewTag");//Return-Type: WORD
temp++;
SetTagWord("NewTag",temp);
return 0;
}
不管是整點歸檔或者延遲執行腳本,腳本中的參數都可以在運行期間通過 WinCC 的畫面動態設定。
注意事項
應用示例與所示電路、設備及任何可能結果沒有必然聯系,并不完全相關。應用示例不表示客戶的具體解決方案。它們僅對典型應用提供支持。用戶負責確保所述產品 的正確使用。這些應用示例不能免除用戶在確保安全、專業使用、安裝、操作和維護設備方面的責任。當使用這些應用示例時,應意識到西門子不對在所述責任條款 范圍之外的任何損壞/索賠承擔責任。我們保留隨時修改這些應用示例的權利,恕不另行通知。如果這些應用示例與其它西門子出版 物(例如,目錄)給出的建議不同,則以其它文檔的內容為準。










