访问WinCC归档数据库的方法
目录
- WinCC归档数据库介绍
- 安装ConnectivityPack
- 在SQL Server中通过链接服务器访问归档数据库
- 创建链接服务器
- 使用OPENQUERY查询连接服务器
- 在SQL Server中通过OPENDATASOURCE访问归档数据库
- 通过存储过程访问归档数据库
- 重新排列数据
- 用VB脚本访问归档数据库
- 创建数据库连接
- 查询数据库
- 访问另一台电脑的WinCC归档数据库
WinCC归档数据库介绍OPENQUERY,传递给OPENQUERY查询语句不同于SQL,是WinCC的特定查询语句,可通过变量ID或变量名查询。如下:
select * from openquery(LnkRtDb_WinCCOLEDB,'Tag:R,1,''0000-00-00 01:00:00.000'',''0000-00-00 00:00:00.000''')
使用变量ID查询:
使用变量名查询:
在SQL Server中通过OPENDATASOURCE访问归档数据库语法如下:
SELECT *
FROM OPENDATASOURCE('WinCCOleDbProvider.1',
'Provider=WinCC OLEDB Provider for Archives;
Catalog=CC_WinCCSer_19_02_14_10_59_03R;
Data Source=WIN-54UD17PRU0N\WINCC').
N'Tag:R,1,''0000-00-00 00:10:00.000'',''0000-00-00 00:00:00.000'''
通过存储过程访问归档数据库数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
适用于WinCC归档数据库的存储过程有哪些
如下图的路径,在System Databases -> master数据库下有部分存储过程,在WinCC项目程序对应的数据库下也有部分存储过程。
大部分存储过程都找不到对应的使用说明,下面对已知的几个存储过程简单介绍。
cp_TagStatistic
cp_TagStatistic是对过程值统计分析的存储过程,它的使用方法在官方文档中有描述。
CC_SP_ReadTags
是一个读取过程值的存储过程,查询到的值会被存储到一个临时表中。
在SQL Server中CC_SP_ReadTags源代码是被加密的,从网络上查到的源代码如下,仅做参考:
USE CC_SIR_16_07_29_11_30_35R GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER OFF GO CREATE PROCEDURE [dbo].[CC_SP_ReadTags] ( @List varchar(1000), @TimeBegin varchar(32), @TimeEnd varchar(32), @WHEREClause varchar(1000)= NULL, @ORDERBYClause varchar(1000) = NULL, @Timestep varchar(500) = NULL, @Aggregationmode int = 0, @SymDataSource varchar(512) = NULL, @SymCatalog varchar(512) = NULL, @LS_Name varchar(255)=NULL ) WITH encryption AS BEGIN SET NOCOUNT ON --DECLARE @LS_Name varchar(255) DECLARE @Catalogname varchar(255) DECLARE @Internal_LS bit DECLARE @NoTime bit SET @Internal_LS = 0 -- check valid datetime or Aggregationmode = 0 DECLARE @ret int SET @ret = ISDATE(@TimeBegin) IF (@ret = 0 and @Aggregationmode <> 0) RETURN IF ISNULL(@LS_Name,'') = '' BEGIN SET @LS_Name = 'CA_'+ CAST(@@SPID as varchar(10)) SET @Catalogname = DB_NAME() if @SymDataSource = NULL set @SymDataSource = 'Hallo' if ISNULL(@SymDataSource,'') = '' or ISNULL(@SymCatalog,'') = '' BEGIN EXEC sp_addlinkedserver @server = @LS_Name,@srvproduct = 'CommonArchiving', @provider = 'WinCCOLEDBProvider', @datasrc = @@servername, @catalog = @CatalogName set @Internal_LS = 1 END ELSE BEGIN EXEC sp_addlinkedserver @server = @LS_Name,@srvproduct = 'CommonArchiving', @provider = 'WinCCOLEDBProvider', @datasrc = @SymDataSource, @catalog = @SymCatalog set @Internal_LS = 1 END END DECLARE @Statement varchar(8000) SET @Statement = '' SET @Statement = 'SELECT * FROM OPENQUERY('+@LS_Name+',''Tag:R,('+@List+'),'''''+@TimeBegin+''''','''''+@TimeEnd+'''''' IF(LEN(@TimeStep) <> 0) BEGIN SET @Statement = @Statement + ',' + @Timestep + ',' + CAST(@Aggregationmode AS VARCHAR(6)) END SET @Statement = @Statement + ' '') ' IF(LEN(@WHEREClause) <> 0) BEGIN SET @Statement = @Statement + @WHEREClause END IF(LEN(@ORDERBYClause) <> 0) BEGIN SET @Statement = @Statement + ' ORDER BY ' + @ORDERBYClause END --print @Statement BEGIN EXEC( @Statement ) END if @Internal_LS = 1 BEGIN EXEC sp_dropserver @server = @LS_Name set @LS_Name = NULL END SET NOCOUNT OFF END GO
CC_SP_ReadTags的参数说明如下:
参数 |
说明 |
@List |
变量列表 |
@TimeBegin |
查询的起始时间 |
@TimeEnd |
结束时间 |
@WHEREClause |
过滤条件 |
@ORDERBYClause |
排序 |
@Timestep |
时间间隔(以秒计),格式为’TimeStep=60’ |
@Aggregationmode |
汇总类型(定义时间间隔结果) |
@TempTable |
临时表名称,默认值为“TlgDataTmp” |
@SymDataSource |
建立链接服务器的数据源 |
@SymCatalog |
建立链接服务器的数据目录 |
@LS_Name |
指定要使用的链接服务器 |
语句示例:
USE [CC_WinCCSer_19_02_14_10_59_03R] GO IF OBJECT_ID('tempdb..##TagsTempTable') is not NULL DROP Table ##TagsTempTable DECLARE @return_value int EXEC @return_value = [dbo].[CC_SP_ReadTags] @List = N'archive1\tag1;archive1\tag2', @TimeBegin = N'0000-00-00 00:01:00', @TimeEnd = N'0000-00-00 00:00:00', @WHEREClause = default, @ORDERBYClause = default, @Timestep = default, @Aggregationmode = default, @TempTable = N'##TagsTempTable', @SymDataSource = default, @SymCatalog = default, @LS_Name = N'LnkRtDb_WinCCOLEDB' SELECT 'Return Value' = @return_value GO
重新排列数据 连接 查看文档
过程值字段类型:查看文档
查询WinCC报警消息归档的语法详解:查看文档
报警消息归档字段类型:查看文档