VBS访问WINCC过程值归档数据

主要内容:

1、WinCC中的过程值归档

2、WinCC/Connectivity Pack

3、ADO

4、VBS脚本使用ADO

 

一、WinCC中的过程值归档

 

很多人刚使用WINCC时应该都会问,WINCC过程值归档咋这么复杂,什么压缩不压缩,备份不备份,慢速、快速……

 

 

WinCC有以下两种归档模式:

 

快速变量记录

WinCC 默认会自动在快速变量记录 (TagLogging Fast) 中归档周期小于 1 分钟的所有归档变量(具体可在“归档内容”配置)。这些过程值最初保存并压缩在一个二进制文件中(可以降低快速归档对系统资源的开销)。当二进制文件达到特定大小时,将其存储到短期归档数据库中。在项目文件\ArchiveManager\TagLoggingFast路径下。

 

慢速变量记录

WinCC 会自动在慢速变量记录 (TagLogging Slow) 中归档周期大于 1 分钟的所有归档变量。并立即将数据写入短期归档数据库中但不进行压缩。在项目文件\ArchiveManager\TagLoggingSlow路径下。

 

要归档的过程值(快速变量记录与慢速变量记录)存储在归档数据库的两个独立的循环归档(A、B)中。各短期归档均由数目可组态的数据缓冲区(分段)组成。数据缓冲区(分段)根据大小(以 MB 计)和时间周期(例如一天)定义。这些分段可存储在归档数据库中的硬盘上,或存储在变量记录运行系统的主内存中。

 

 

过程值被连续写入数据缓冲区(分段)中(1)。如果达到数据缓冲区(分段)所组态的大小或超出时间段,系统切换到下一个数据缓冲区(2)。当所有数据缓冲区满时,如果过程值归档存储位置设置为“硬盘”,为了使最早的归档数据分段不被覆盖过程破坏(3),可以将其先换出(激活备份),生成归档备份文件(长期归档)。

 

说明:

与存储在硬盘中不同,在主内存中归档的过程值只在WINCC系统激活时有效。存储在主内存中的优点是可以非常快速地写入和读出数据,但存储在主内存中的数据无法换出。

 

数据缓冲区(分段)的大小和时间限制可根据项目需要设置:

所有分段的时间范围及最大尺寸:
这个设置定义了归档数据库的大小。如果超出其中一个标准,则启动新的分段并删除最旧的分段。

单个分段的时间范围及最大尺寸:
如果违反了其中任意一个限制,则将启动一个新的单个分段。

 

设置备份功能:

 

二、WinCC/Connectivity Pack

 

高级语言,如 Visual Basic 或 VBScript,可使用ADO通过WINCC OLE DB Provider访问压缩归档数据。

需要在访问端安装“连通性软件包客户端”(ConnectivityPackClient)。

注意:

如果访问端已安装 WinCC,则无需再安装。从 WinCC/Connectivity Pack V7.0 开始,访问端不再需要 WinCC 客户端访问许可证 (WinCC/CAL)。

要使用三个以上的客户端,则服务端必须安装服务器版操作系统。使用工作站版操作系统(WIN7/8.1/10)时,最多只能使用三个客户端。

 

三、ADO

 

ADO(ActiveX Data Objects,ActiveX 数据对象)是 OLE DB 的高级别、 简单易用的界面。

ADO 提供了一个中间层应用程序与低级别的 OLE DB 接口之间的抽象层 。ADO 和 OLE DB 可以访问关系 (表格) 和非关系 (层次结构或流) 数据。它们都属于Microsoft/Windows 数据访问组件(MDAC/WDAC)。ADO会随微软的 IIS 被自动安装。ADO的主要优点是易于使用、高速度、低内存开销和小磁盘空间占用量。

 

一张图看懂ADO、OLE DB、ODBC关系:

注册表查看ADO版本:
HKEY_LOCAL_MACHINE\Software\Microsoft\DataAccess下Version项,Windows 7下ADO版本为6.1(msado15.dll)。

不同的系统要注意ADO兼容性。关于ADO引用方法:http://1t.click/bwCM

(提示:此网址由新浪短网址生成)

 

ADO文件通常保存在C:\Program Files (x86)\Common Files\System\ado\目录下。

 

OLE DB

 

OLE DB(Object Linking and Embedding, Database,对象链接嵌入数据库)是微软为了以统一方式访问不同类型的数据存储,而设计的一种应用程序接口(API),是一组用组件对象模型(COM)实现的接口。

它被设计成为ODBC的一种高级替代者和继承者,把它的功能扩展到支持更多种类的非关系型数据库,例如电子表格Excel。

 

一些常见的OLE DB Provider:

  • SQL Server OLE DB Provider,以SQL Server为主的OLE DB资料提供者。

  • Microsoft Jet OLE DB Provider,以Access, Excel等档案型资料库为主的OLE DB资料提供者。

  • OLE DB Provider for ODBC,呼叫ODBC的OLE DB资料提供者。

  • OLE DB Provider for Oracle Client,呼叫Oracle资料库的OLE DB资料提供者,通常由Oracle原厂提供。

 

对ADO感兴趣想深入学习的,可访问:

https://docs.microsoft.com/zh-cn/sql/ado/microsoft-activex-data-objects-ado?view=sqlallproducts-allversions

ADO 教程:

https://www.w3school.com.cn/ado/index.asp

 

四、VBS脚本使用ADO

ADO对数据源涉及四个主要操作:获取数据、 检查数据、 编辑数据更新数据

ADO 对象模型

ADO 对象和它们的集合:

 

VBS使用ADO/WINCC OLE DB读取本地归档数据

示例建立的WINCC RT 过程值归档:

 

ADO读取数据的操作:首先使用ADO连接对象连接到数据源,然后使用ADO命令对象将查询传递到数据源,最后通过ADO记录集对象接收数据。

1、与归档数据库建立连接

使用ADO Connection对象连接数据库,对象中连接字符串ConnectionString属性是最重要的参数。在此连接字符串中,ADO仅识别"Provider="参数,指定作为 ADO 数据源的OLE DB访问接口。其余的参数/值对,"Data Source=; Catalog=",传给WINCC OLE DB提供程序。

 

ConnectionTimeout属性:以秒为单位,表示多长时间等待要打开的连接。默认值为15。如果将属性设置为0,ADO将无限期地等待打开连接。

 

CursorLocation属性:指定游标服务的位置。可以设置为3(adUseClient):客户端来调用用于OLE DB 的 Microsoft 游标服务(http://1t.click/bwGu),它支持批量更新。默认值为2(adUseServer): 使用由数据访问接口或驱动程序提供的游标。

 

示例vbs脚本:

Dim sProDim sDsnDim sSerDim sConDim sSqlDim connDim oRsDim oComDim m
sPro = "Provider=WinCCOLEDBProvider.1;"sDsn = "Catalog=CC_wincctes_18_07_11_22_23_06R;"sSer = "Data Source=.\WinCC"sCon = sPro & sDsn & sSer
Set conn = CreateObject("ADODB.Connection")conn.ConnectionString = sConconn.CursorLocation = 3conn.Open

 

连接字符串参数说明:

参数

说明

Provider

WINCC OLE DB Provider的名称:WinCCOLEDBProvider.1

Data Source

服务器名称

本地机:.\WINCC

远程机:ComputerName\WINCC

Catalog

WINCC数据库的名称

对于wincc运行数据库,用数据库的名称末尾加一个R:<DatabaseName_R>;

如果用Wincc Archive Connector连接交换出Wincc归档,则用其符号名称

 

2、使用命令文本进行查询

 

使用ADO Command对象,从提供程序请求任何受支持的类型的操作。常见操作是查询取回数据,此数据将以一个 RecordSet 对象返回。

 

CommandType属性:可设置或返回一个 CommandTypeEnum 值,该值可定义 Command 对象的类型。默认是 8(adCmdUnknown):指示 CommandText 属性中命令的类型未知。

一般设置为1(adCmdText):按命令或存储过程调用的文本定义计算 CommandText。如果没有规定此类型,ADO 将需要联系 provider 以确定命令的类型。如果定义了该类型,则 ADO 将有能力更快地处理此命令。

 

CommandText 属性:可设置或返回一个字符串,该字符串包含一个 provider 命令,比如一条 SQL 语句、一个表名称、一个相对 URL、或者一个存储过程调用。

 

ActiveConnection 属性:可指示 Command 对象当前所属的 Connection 对象。

 

查询WINCC过程值归档语法

 

8 字节长 ValueID 的请求语法:

TAG_LLVID:R,<ValueID 或 ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]

4 字节长 ValueID 的请求语法:

TAG:R,<ValueID 或ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]

 

注意:

ValueID 的长度可以不同。

  • 对于在中央归档服务器 (CAS) 上处理的数据库,ValueID 为 8 字节长,并且包括 HI-DWORD 区域中的服务器 ID,以及 LO-DWORD 区域中由相应服务器分配的 ValueID。

  • 对于所有其它数据库,ValueID 为 4 字节长,并且仅包括由 WinCC 服务器分配的唯一ValueID。

为了保持兼容性,通过 TAG:R 的 4 字节请求仍然可用。在 CAS 数据库的情况下,返回的 4 字节 ValueID 不再唯一。

对过程值归档的查询,最多限于 20 个变量,对每个变量的查询最多为 128 个字符。

查询语句不能包含任何空格。

 

示例vbs脚本:查询 PVArchives_1\tag8 归档变量最新10秒数据

sSql = "TAG:R,'PVArchives_1\Tag8','0000-00-00 00:00:10.000','0000-00-00 00:00:00.000'"Set oCom = CreateObject("ADODB.Command")oCom.CommandType = 1Set oCom.ActiveConnection = connoCom.CommandText = sSql

 

3、填充记录集、输出指定值

 

使用ADO Recordset 对象,用于容纳一个来自数据库表的记录集。一个 Recordset 对象由记录和列(字段)组成。在 ADO 中,此对象是最重要且最常用于对数据库的数据进行操作的对象。通常使用Command对象Execute方法来从数据源接收数据记录集:Execute 方法可执行 Command 对象的 CommandText 属性中指定的查询、SQL 语句。

 

WINCC过程值归档的记录集结构:

 

EOF 属性:如果当前记录的位置在最后的记录之后,则返回 true,否则返回 fasle。

MoveFirst 方法:把记录指针移动到第一条记录。

MoveNext 方法:把记录指针移动到下一条记录。

Fields 集合:指示在此 Recordset 对象中 Field 对象的数目。其Count属性:返回 fields 集合中项目的数目,以 0 起始。Item(named_item/number)属性:返回 fields 集合中的某个指定的项目。

 

注意:并非所有的OLE DB 提供者(providers)支持 Recordset 对象的所有方法和属性。

 

示例vbs脚本:​​​​​​​

Set oRs = CreateObject("ADODB.Recordset")Set oRs = oCom.Executem = oRs.Fields.Count
If (m > 0) ThenoRs.MoveFirstDo While (Not oRs.EOF)'打印归档变量值HMIRuntime.Trace   oRs.Fields(3).Value & vbCrLfoRs.MoveNextLoopoRs.CloseElseEnd If
Set oRs = Nothingconn.CloseSet conn = Nothing

 

关于VBS脚本访问WINCC过程值归档数据,就写到这。本文涉及内容比较多,初学者可循序渐进来阅读。有疑问可留言。

 

-END-      

说明

本文由个人编辑并整理,难免有笔误及错误。

更多内容请关注WX公众号:自控技术FAQ

创建环境

WINCC V7.4 SP1,Windows 7专业版 SP1,ADO 6.1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章