wincc中的时间控件
- 格式:doc
- 大小:22.00 KB
- 文档页数:1
有时候我们需要在wincc画面中输入时间值,传送给PLC。
以下就是wincc7.2中输入开始时间和结束时间做定时用,传送给PLC s7-1500,经过变换,PLC输出一个定时状态。
1、在wincc中变量管理-结构变量中新建结构类型(类型名为:时间输入)。
结构类型包含两个元素:时和分。
都为无符号的32位值,外部变量。
2、在新建的结构类型“时间输入”下建两个变量,分别为“JS_T_输入”和“KS_T_输入”作为定时结束时间和定时开始时间,数据类型默认为“时间输入”选择连接到的位置,我的是之前建好的连接1500,选择地址,我的如下表。
地址一定要按照字节长度排好。
3、在WINCC画面中做输入输出域,我的例子共4个,开始时间的“时”,开始时间的“分”,结束时间的“时”,结束时间的“分”。
做好4个输入输出域的数据连接,输入输出域的属性。
“时”-上限值位23,下限值为0,数据格式10进制,输出格式99。
“分”-上限值59,下限值为0,数据格式10进制,输出格式为99。
以上的操作是wincc部分的操作,接下来需要做PLC的操作了。
4、首先在s7-1500编程软件中新建变量。
地址要与我们在wincc中建立的变量吻合。
5、接下来新建一功能,编写程序。
以下是我的程序。
思路如下:在S7-1500中数据格式TIME_OF_DAY(时间),占用4个字节,例如10小时11分58秒312毫秒的表示格式为:TOD#10:11:58.312,按照时分:秒.毫秒排序。
在规定的取值范围内,Time_OF_DAY类型数据可以与DINT类型的数据相互转换(TOD#00:00:00.000对应0),DINT数据每增加1,时间增加1ms。
我们在程序中输入的时,换算成ms,则应该乘以3600000;输入的分,换算成ms,则应该乘以60000。
输入时与分相加,则为总的输入时间。
程序中,我们使用RD_LOC_T读取系统时间DATE_AND_TIME,然后用T_CONV将时间转换为TIME_OF_DAY格式。
如何使用WinCC 全局脚本访问系统时钟?
说明:
使用下列函数设置或读取系统时间:
∙SetSystemTime
∙SetLocalTime
∙GetSystemTime
∙GetLocalTime
系统中本地计算机时间和格林威治时间是有区别的。
函数“SetSystemTime / GetSystemTime”用于设置或读取格林威治时间。
函数“SetLocalTime / GetLocalTime”用于设置或读取本地计算机时间。
两种时间会因地理的时区不同而改变,也会受到冬令时和夏令时的影响。
两个函数使用方法相同。
操作本地计算机时间的函数是Windows 系统函数,因此它独立于WinCC 函数“GetLocalTimeString”或WinCC 早期版本的“GetLocalTime”函数。
Time_Functions.zip
图. 01
创建环境
在该FAQ 中的画面和下载,创建在WinCC Professional V11 SP2 中。
条目号:59558655 日期:2012-05-04。
SIMATIC HMI WinCC V6.2 SP2使用控件在线帮助的打印输出在线帮助的打印输出安全技术提示为了您的人身安全以及避免财产损失,必须注意本手册中的提示。
人身安全的提示用一个警告三角表示,仅与财产损失有关的提示不带警告三角。
警告提示根据危险等级由高到低如下表示。
危险表示如果不采取相应的小心措施,将会导致死亡或者严重的人身伤害。
警告表示如果不采取相应的小心措施,可能导致死亡或者严重的人身伤害。
小心带有警告三角,表示如果不采取相应的小心措施,可能导致轻微的人身伤害。
小心不带警告三角,表示如果不采取相应的小心措施,可能导致财产损失。
注意表示如果不注意相应的提示,可能会出现不希望的结果或状态。
当出现多个危险等级的情况下,每次总是使用最高等级的警告提示。
如果在某个警告提示中带有警告可能导致人身伤害的警告三角,则可能在该警告提示中另外还附带有可能导致财产损失的警告。
合格的专业人员仅允许安装和驱动与本文件相关的附属设备或系统。
设备或系统的调试和运行仅允许由合格的专业人员进行。
本文件安全技术提示中的合格专业人员是指根据安全技术标准具有从事进行设备、系统和电路的运行,接地和标识资格的人员。
按规定使用请注意下列说明:警告设备仅允许用在目录和技术说明中规定的使用情况下,并且仅允许使用西门子股份有限公司推荐的或指定的其他制造商生产的设备和部件。
设备的正常和安全运行必须依赖于恰当的运输,合适的存储、安放和安装以及小心的操作和维修。
商标所有带有标记符号 ® 的都是西门子股份有限公司的注册商标。
标签中的其他符号可能是一些其他商标,这是出于保护所有者权利的目地由第三方使用而特别标示的。
责任免除我们已对印刷品中所述内容与硬件和软件的一致性作过检查。
然而不排除存在偏差的可能性,因此我们不保证印刷品中所述内容与硬件和软件完全一致。
印刷品中的数据都按规定经过检测,必要的修正值包含在下一版本中。
Siemens AG Automation and Drives Postfach 48 48 在线帮助的打印输出09/2007Ⓟ 2007.本公司保留技术更改的权利目录1 使用控件 (5)2 关于 WinCC 控件和附加控件的简述 (7)3 如何插入智能 OLE 对象 (9)4 如何从“控件”标签中插入控件 (11)5 如何调整控件大小 (13)6 如何定位控件 (15)7 组态对象选项板的控件选择 (17)8 如何更改控件的注册 (19)9 如何更改控件的属性 (23)10 IXDiskSpace.DiskSpace 控件 (25)10.1 “IXDiskSpace.DiskSpace”控件 (25)10.2 如何组态磁盘空间控件 (26)10.3 如何控制内存的使用 (28)11 Siemens HMI 符号库 (31)11.1 “Siemens HMI 符号库”控件 (31)11.2 如何选择符号库中的符号 (32)11.3 如何改变对齐方式 (34)11.4 如何更改显示选项 (35)11.5 如何更改颜色 (38)12 WinCC 数字/模拟时钟控件 (41)12.1 “WinCC 数字/模拟时钟”控件 (41)12.2 如何更改时钟控件的外观 (42)12.3 如何更改数字时钟控件显示的字体 (44)12.4 如何更改时钟控件的颜色 (45)12.5 如何更改时钟控件的背景画面 (47)13 WinCC 量表控件 (49)13.1 “WinCC 量表”控件 (49)13.2 如何更改量表控件的外观 (50)13.3 如何组态量表控件的刻度 (52)13.4 如何标记特殊值范围 (54)13.5 如何更改量表控件的字体 (55)目录13.6 如何更改量表控件的颜色 (56)13.7 如何将画面分配给量表控件 (58)14 WinCC 按钮控件 (61)14.1 “WinCC 按钮”控件 (61)14.2 如何更改按钮的外观和标签 (62)14.3 如何更改按钮的颜色 (63)14.4 如何更改按钮的字体 (64)14.5 如何将画面分配给按钮 (66)15 WinCC 滚动条控件 (69)15.1 “WinCC 滚动条”控件 (69)15.2 如何更改滚动条控件的外观 (70)15.3 如何更改滚动条控件的测量区和标签 (72)15.4 如何更改滚动条控件的 3D 效果 (73)15.5 如何更改滚动条控件的字体 (75)15.6 如何更改滚动条控件的颜色 (76)15.7 如何将画面分配给滚动条控件 (77)16 Autodesk Volo 视图控件 (79)索引 (83)使用控件 1内容ActiveX 控件提供了将控制和监控系统过程的元素集成到过程画面中的选项。
一、方法一1.设置一个或多个变量,类型为内存字符串或者是一个连接PLC的外部变量的字符串2.全局脚本:C脚本#pragma code("kernel32.dll"); 定义系统链接文件GetLocalTimes(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);毫秒3.在输入输出域关联变量,记住要修改显示类型为字符串如果要在一个中显示,则把Varname1-Varname8通过字符串连接即可方法二:char* temp=(char*)SysMalloc(26);time_t *p=(time_t*)SysMalloc(sizeof(time_t)),CT;CT=time(p);strcpy(temp,ctime(&CT));*(temp+24)='\0';return temp;方法三:利用控件中的wincc digital/analog clock contol。
wincc时间的问题
在做WINCC历史数据及曲线的控件时,数据的时间都是根据操作系统的时间,而操作系统的时间又可以随便调整,严格的讲,这些数据对应的时间存在很大的风险,比如操作人员随意更改了系统时间,WINCC存取的数据时间就不正确了,有什么办法可以很好的处理呢。
最佳答案
1、对于服务器/客户机结构,将WinCC时基设置为服务器时间,再做好服务器时间的校准和Windows操作权限设置工作即可;
2、对于单站结构,归档数据各自为政,无法共享,做好单站时间的校准和Windows操作权限设置工作即可;
3、规范的话,可以将AS时间设置为主时钟源,为网络上其他设备授时,或者设置单独的GPS或NTP服务器作为主时钟源。
再做好各Windows系统的操作权限设置工作即可。
时间显示的格式是在WinCC在线趋势控制中通过“控制面板>区域和语言设置>区域选项>自定义>时间”设置的。
在此可指定想使用12还是24小时的显示格式。
如果设置被更改,系统必须重新启动才能使更改生效。
1.利用Wincc本身的时间控件,就是那个不能变24小时制的。
在打开画面中做一C动作。
代码如下:SetPropChar(lpszPictureName,"控件1","LocaleID","2052");问题解决。
对于时间控件显示时间的一点补充在第一种方法里,在打开画面里赋了C动作之后,在画面一打开的时候时间控件就有个框,非得在其他地方点一下才可以,问我怎么解决。
我刚看了一下,出现那个虚线框的原因是因为在对控件N赋值之后,控件自然就成为了画面的焦点。
我看了一下,在控件的属性里,有一项叫“FocusRect”,把这个取消就可以了。
2.在全局脚本中做一动作。
代码如下:#pragma code("kernel32.dll");void GetLocalTime(SYSTEMTIME* lpst);#pragma code();SYSTEMTIME time;GetLocalTime(&time);SetTagWord("Time1",time.wYear );SetTagWord("Time2",time.wMonth );SetTagWord("Time3",time.wDay );SetTagWord("Time4",time.wHour );SetTagWord("Time5",time.wMinute );SetTagWord("Time6",time.wSecond );SetTagWord("Time7",time.wDayOfWeek );其中Time1~Time7为所建立的变量,我建立的是16位有符号数,在画面上做几个输入输出域连上即可。
wincc系统日期时间获取系统时间的获得,有两种办法,一是建立TAG,二是使用函数获取系统时间方法一:在[Tag Management]添加新的驱动"System Info.chn",然后在新添加的[SYSTEM INFO]新建连接,这样就可以创建实际TAG了;下面新建几个TAG: 名字:date, 数据类型:text tag 8-bit character set,地址设定为Function:date,format:"MM-DD-YYYY"名字:time, 数据类型:text tag 8-bit character set,地址设定为Function:Time,format:"HH:MM:SS"根据上面的方法依次建立year,mon,day,week等TAG,请分别设置对应的format内容TAG建立完成了,就可以读到系统时间了。
新建一个图形文件,分别放置几个静态文本框[static text],把TEXT属性连接到上面新建的TAG,就可以显示系统日期时间,利用WEEK还能显示今天是星期几了.方法二: 使用C脚本获得系统时间#include "apdefap.h"char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){time_t timer;struct tm *ptm;char *p;time(&timer);ptm=localtime(&timer);p=SysMalloc(9);sprintf(p,"%04d:%02d:%02d",ptm->tm_year+1900,ptm->tm_mon+1,p tm->tm_mday);return(p);}其中//系统时间已经获得//年: ptm -> tm_year+1900//月: ptm-> tm_mon+1//日: ptm -> tm_mday//星期: ptm -> tm_wday *注意这个,tm_wday返回的是整数,必须经过转换才能用来表示星期几。
WinCC中定时器使用方法介绍1定时器功能介绍WinCC中定时器的使用可以使WinCC按照指定的周期或者时间点去执行任务,比如周期执行变量归档、在指定的时间点执行全局脚本或条件满足时打印报表。
WinCC已经提供了一些简单的定时器,可以满足大部分定时功能。
但是在有些情况下,WinCC 提供的定时器不能满足我们需求,这时我们就可以通过 WinCC 提供的脚本接口通过编程的方式实现定时的功能,因为脚本本身既可以直接调用WinCC其他功能,比如报表打印,也可以通过中间变量来控制其他功能的执行,比如通过置位/复位归档控制变量来触发变量记录的执行。
WinCC 提供了C 脚本和VBS脚本,本文主要以全局 C 脚本编程为例介绍定时功能的实现。
2脚本中定时器介绍既然在全局脚本中可以编程控制其他功能的执行,那么首先看看全局脚本的触发:图1 脚本触发器分类如图1所示:脚本触发器分为使用定时器和使用变量,定时器又分为周期执行和非周期执行一次,比如每分钟执行一次脚本属于周期执行,指定2012年10月1日执行一次属于非周期执行。
使用变量触发脚本,即在变量发生变化时,脚本就执行一次,而变量的采集可以根据指定周期循环采集,或者根据变化采集,根据变化实际是1秒钟采集变量一次。
3使用脚本实现更多定时器功能利用脚本自身的定时器,可以通过在脚本中编程的方式实现更多其它定时功能。
整点归档WinCC提供了变量归档,变量归档分为周期归档和非周期归档,不管是周期归档或非周期的归档,都又可以通过一些变量或脚本返回值来控制归档,比如:整点归档。
下面的设置结合WinCC脚本,实现了在整点开始归档,归档五分种后停止归档,即每个小时仅归档前五分钟的数据。
软件环境:Windows 7 Professional Service Pack1 , WinCC SP3归档名称:ProcessValueArchive归档变量:NewTag归档周期:1 分钟归档控制变量 startarchiveC脚本触发周期:10秒脚本代码:#include ""int gscAction( void ){#pragma option(mbcs)#pragma code ("");void GetLocalTime (SYSTEMTIME* lpst);#pragma code();SYSTEMTIME time;int t1;GetLocalTime(&time);t1=;if(t1==00){SetTagBit("startarchive",1);}if(t1==05){SetTagBit("startarchive",0);}return 0;}归档设置如图2:图2 归档设置同理,在以上脚本的基础上做修改,可以实现在某个指定的时间点打印报表,只要在满足触发条件时调用下列函数:RPTJobPrint("Myprintjob");Myprintjob为事先创建好的打印作业。