如何使用 WinCC 全局脚本访问系统时钟.docx
《如何使用 WinCC 全局脚本访问系统时钟.docx》由会员分享,可在线阅读,更多相关《如何使用 WinCC 全局脚本访问系统时钟.docx(8页珍藏版)》请在冰豆网上搜索。
如何使用WinCC全局脚本访问系统时钟
如何使用WinCC全局脚本访问系统时钟?
说明:
使用下列函数设置或读取系统时间:
∙SetSystemTime
∙SetLocalTime
∙GetSystemTime
∙GetLocalTime
系统中本地计算机时间和格林威治时间是有区别的。
函数“SetSystemTime/GetSystemTime”用于设置或读取格林威治时间。
函数“SetLocalTime/GetLocalTime”用于设置或读取本地计算机时间。
两种时间会因地理的时区不同而改变,也会受到冬令时和夏令时的影响。
两个函数使用方法相同。
操作本地计算机时间的函数是Windows系统函数,因此它独立于WinCC函数“GetLocalTimeString”或WinCC早期版本的“GetLocalTime”函数。
下面的例子程序说明如何在WinCC中操作本地计算机时间:
示例:
读取时间并将其存入Word类型变量中
#pragmacode("kernel32.dll")
VOIDGetLocalTime(SYSTEMTIME*lpst);
#pragmacode();
SYSTEMTIMEzeit;
GetLocalTime(&zeit);
SetTagWord("varname",zeit.wYear);
SetTagWord("varname",zeit.wMonth);
SetTagWord("varname",zeit.wDayOfWeek);
SetTagWord("varname",zeit.wDay);
SetTagWord("varname",zeit.wHour);
SetTagWord("varname",zeit.wMinute);
SetTagWord("varname",zeit.wSecond);
SetTagWord("varname",zeit.wMilliseconds);
示例:
读取时间并存入原始数据类型变量中
#pragmacode("kernel32.dll")
VOIDGetLocalTime(SYSTEMTIME*lpst);
#pragmacode();
SYSTEMTIMEzeit;
GetLocalTime(&zeit);
SetTagRaw("varname",(Byte*)&zeit,sizeof(SYSTEMTIME));
示例:
通过Word类型变量设置时间
#pragmacode("kernel32.dll")
BOOLSetLocalTime(SYSTEMTIME*lpst);
#pragmacode();
SYSTEMTIMEzeit;
zeit.wYear=GetTagWord("varname");
zeit.wMonth=GetTagWord("varname");
zeit.wDayOfWeek=GetTagWord("varname");
zeit.wDay=GetTagWord("varname");
zeit.wHour=GetTagWord("varname");
zeit.wMinute=GetTagWord("varname");
zeit.wSecond=GetTagWord("varname");
zeit.wMilliseconds=GetTagWord("varname");
SetLocalTime(&zeit);
示例:
通过原始数据类型变量设置时间
#pragmacode("kernel32.dll")
VOIDSetLocalTime(SYSTEMTIME*lpst);
#pragmacode();
SYSTEMTIMEzeit;
GetTagRaw("varname",(BYTE*)&zeit,sizeof(SYSTEMTIME));
SetLocalTime(&zeit);
设置时间的参数可以通过WinCC的内部变量来指定,例如通过过程画面中的输入/输出域来实现。
注意:
年份必须用四位数字表示。
条目号:
24019500
日期:
2012-09-20
如何在WinCCRuntimeProfessional中读取、显示或设置本地计算机时间或协调世界时间?
描述
该FAQ描述了在WinCCRTProfessional中访问系统时间(本地计算机时间或协调世界时间)的几种方式。
注释
∙设置时间的用户权限
本文介绍的用于设定时间的方法需要操作系统级别的管理权限。
如果WinCCRTProfessional运行在受限的环境中,本文所述的用于设定时间的示例代码不会正常运行。
∙避免时间跳跃
在操作期间应该避免使用本文所述的方法设置系统时间,原因是由此带来的时间跳跃可能导致与WinCCProfessional的冲突(例如,当显示归档数据时)。
因此,推荐在WinCCRTProfessional终止后使用时间同步或者设置时间。
为此可以利用"RuntimeStop"触发器使用scheduler。
No.
选项
1
WinCC时钟
"Clock"控件提供了一种简单和快速的方法在过程画面中显示WinCCRTProfessional的时间。
关于该控件的详细信息,可以参考TIAPortal的在线帮助文档,位于"Visualizingprocesses>Creatingscreens>Displayandoperatingobjects>Objects>Clock"。
注释
该控件不提供在其它应用程序中评估时间(例如Scheduler),或者设置或修改时间。
2
WindowsAPI函数
可以使用WindowsAPI函数...
∙GetLocalTime(),
∙SetLocalTime(),
∙GetSystemTime()和
∙SetSystemTime()
...可以在C脚本中读取或设置本地计算机时间或协调世界时间(UTC),这些函数使用"SYSTEMTIME"数据类型(结构体),该结构体的成员变量为数字类型(年、月、日、时、分、秒、毫秒...)。
注释
如果需要周期执行的脚本,可以使用"Scheduler"。
关于"Scheduler"的详细信息,请参见TIAPortal的在线帮助文档,位置如下:
∙"Visualizingprocesses>Schedulingtasks>Basics>WorkingareaoftheSchedulereditor"或
∙"Visualizingprocesses>Schedulingtasks>Basics>Tasktype>IntegratinglocalCscripts(RTProfessional"
条目ID24019500介绍如何使用这些函数的示例。
3
VBS
可以在WinCC中使用VBS读取或设置日期和时间。
提供以下方法:
∙Time函数
Time函数返回本地计算机时间(不包括日期)。
∙Now函数
Now函数返回本地计算机时间(包括日期和时间)。
∙WindowsManagementInstrumentation(WMI)
WindowsManagementInstrumentation(WMI)提供对所有系统参数的访问。
WMI能够读取信息和管理系统参数。
因此可以使用VBS读取本地计算机时间或协调世界时间(UTC),或者读取、设置计算机时区。
关于"WindowsManagementInstrumentation(WMI)"的详细信息,可以参见微软的文档:
在以上链接中,可以找到VBS的示例代码、简短描述和与Windows不同版本的兼容性。
条目ID24198647介绍如何在WinCC中使用WMI访问日期和时间的示例。
4
Windows命令"date"和"time"
Windows操作系统提供命令行指令"time"和"date",用于显示和设置系统时间和日期。
在Windows命令行中输入"helptime"或"helpdate",可以看到这些命令的简短描述。
可以在脚本中使用上述的命令行指令(C脚本或VBS)。
以下是使用C脚本或VBS的示例代码。
∙C脚本
ProgramExecute("cmd/ctime14:
16");
或
system("time14:
16");
∙VBS
DimobjWshShell
SetobjWshShell=CreateObject("Wscript.Shell")
objWshShell.Run"cmd/Ctime14:
16",1
表01
下载
为了进行简单的测试,可以下载下面的库。
使用相应的任务卡打开全局库,将包含在库中的元素托拽到项目中。
Time_Functions.zip(489KB)
图.01
创建环境
在该FAQ中的画面和下载,创建在WinCCProfessionalV11SP2中。
条目号:
59558655
日期:
2012-05-04