加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用VB或VBS访问WINCC6.0历史数据库

(2012-03-21 16:13:25)
标签:

wincc

历史数据库

变量

管理器

访问

杂谈

分类: WinCC

使用VB或VBS访问WINCC6.0历史数据库

 WINCC6.0开始,就开始采用SQL3000SP3做为WINCC的后台数据库了。而这个SQL2000SP3是由SIEMENS为WINCC做了二次开发的,采用了一些独有的技术,一些是我们知道的,一些是我们所不知道的。所以当我们打开SQL管理器和用高级语言访问时,和常规的SQL访问的方法是有一些出入的。即使我们能够很轻易的访问ACCESS。普通的SQL2000的数据库,不见的你就能顺利的访问到WINCC的历史数据。

    官方的资料显示:

    1WINCC的数据有设计时数据库和运行时数据库,分别放在相关的目录,对于数据使用者而言,我们知道就可以了。设计时数据库我们了解没有什么意义。但运行时数据库至少我们要知道它的名字,它的名字一般是“CC_工程名______R”,这个对于我们使用者而言,是很重要的的,无论你准备以DSNOLEDB的方式访问数据库,你都需要它。如果你实在不知道它的名,你可以将WINCC激活,然后在“ODBC管理器”或“SQL企业管理器”下的“DATABASE”可以看到它,它就在那里.....

    2、运行时库的表的问题

    其实,这个是很多的用户很关心的问题。常规的使用过高级语言访问SQL的技术人员都知道,很多的SQL语句,如SELECT INSERT INTO等等,都需要指明在某一库的表中对它进行操作。因此,这个表的问题可能就是你访问SQL的拦路虎。先告诉大家:WINCC6.0SQL库操作是不需要表名的,因为他有自己定义的SQL语句。其实,WINCC在运行时,根据WINCC的设置,数据归档是以一定时间做为基准,形成数据片段。大体上有三个用户需要了解的表:

    1:ARCHIVE(用户归档记录)

    2:TAGPRESSED(TAGUNPRESSED)(压缩/非压缩变量归档记录)

    3:MSARCLONG(报警记录)

    事实上,我们在操作数据时,还是并不能直接使用常规的SQL来操作这些表,甚至不允许修改它,MSARCLONG情况好一些,允许入/修改等。

    TAGPRESSED的数据和WINCC内设置的变量管理下的归档是对应的、MSARCLONG的数据和WINCC内设置的报警记录下的设置是对应的、 ARCHIVE的数据和WINCC内的用户归档数据是对应的.

    一般的,当我们使用WINCC制作在线表格和在线趋势使用的都是变量管理器下的归档。因此,我们打开TAGPRESSED的表,可以看到的一些都是变量记录的内容。通常也是在这里归档了用户的生产数据。因此,我们访问WINCC历史数据库,实际上是访问这里的变量记录。

    3、访问历史数据库的方法/连接字符/SQL语句

    访问数据库的方法:

    A:WINCCOLEDB访问压缩归档,也可以访问非压缩归档

    B:MS ADO/OLEDB只能访问非压缩归档

    对于这种说法,我只严正了WINCCOLEDB的方法,后者没有测试.

    连接字符:

    WINCCOLEDB的连接字符为(本地):

    provider=winccoledbprovider.1,catalog=.\winccdata source=

    数据库名,user id=DBA,password=SQL

    现在开始讲访问用户归档,过程值归档和消息归档的方法和语法:

    1、查询过程值归档和消息归档的连接字符串

    SET CON=Createobject("adodb.connection")

    con.open

    Provider=winccoledbprovider.1;catalog=cc_工程名______R,data source=.\wincc,user id=DBA,password=SQL

    说明:按照WINCC规定的连接字符串,创建到数据库的连接,并且打开这个连接.其中,我们经常需要修改的是Catalog的值,这个值根据不同的工程和创建的时间不同,我们可以在ODBC管理器下或SQL的库中看到。

    查询过程值归档和用户归档的SQL语句

    TAG:R,'变量名1','起始时间','终止时间' where条件

    说明:WHERE子句只对用户归档有效,对过程值归档无效.

    变量名:这个变量名要和WINCC下的变量管理器的过程值归档名要一致.其格式为:归档名/变量名.

    起始时间和终止时间可以用相对时间和绝对时间,一般绝对时间比较容易理解,就是从开始时间到终止时间就好了.例如,查询从2006/3/12 12:20:20秒到2006/3/13/ 12:20:20秒的数据,则应该写成'2006-3-12 12:20:20' '2006-3-13 12:20:20'就好了。

    当然拉,也可以用相对时间格式,就是比目前时间的相对值,有个前移后移的问题,很简单的。

 

    这里特别需要注意的是:记录到SQL数据库的时间都是格林威治时间,和中国的东8区有8个小时的时间差,也就是说记录的时间比本机PC时区晚8小时,这一点我们在测试是尤其重要。因为你是时间不正确,可能数据就没有显示,而导致你怀疑连接/命令/记录的有效性访问SQL数据库的方法过程描述。这和访问普通的数据库的方法大致上是相同,唯一的就是由于WINCC的数据是经过了压缩的。

    1、定义连接字符串,就是前面所讲到的。

    2、创建ADODBCONNECTION对象,在VB中直接用CREATEOBJECT(ADODB.CONNECTION)函数,在ASPVB脚本中,需要使用内置SERVER对象创建CONNECTIONG对象。

    3、打开到数据库的连接,使用CONNECTIONOPEN函数

    4、创建COMMAND对象,并定义COMMAND对象采用用CMDTEXT方法,表明将要使用命令文本的方式来获取数据记录。

    5、创建RECORDSET对象,并用COMMAND对象的返回记录集填充这个记录集。

    6RECORDSET对象的数据就可以被你任意的使用了

 

源文档 <http://apps.hi.baidu.com/share/detail/45926825>

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有