访问WinCC归档数据库的方法_第1页
访问WinCC归档数据库的方法_第2页
访问WinCC归档数据库的方法_第3页
访问WinCC归档数据库的方法_第4页
访问WinCC归档数据库的方法_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

访问WinCC归档数据库的方法WinCC归档数据库介绍WinCC的历史工艺数据和报警消息保存在SQLServer数据库,数据以分段和压缩形式储存,不方便直接通过SQL去读取,用WinCCOLEDBProvider访问这些数据时会自动合并分段并解压缩数据。安装ConnectivityPackWinCCOLEDBprovider由WinCC的ConnectivityPack选件提供,在安装WinCC时需要安装ConnectivityPack。在提供数据的WinCC的计算机需安装ConnectivityPackserver,读取数据的计算机上安装ConnectivityPackclient,可以在计算机上同时安装ConnectivityPackserver和ConnectivityPackclient。在SQLServer中通过链接服务器访问归档数据库创建链接服务器安装了WinCC的计算机中,启动WinCC项目时会自动创建链接服务器。在未安装WinCC的计算机需要手动创建链接服务器。打开SQLServerManagementStudio,在对象资源管理器中,展开“服务器对象”,右键单击“链接服务器”,然后单击“新建链接服务器”。如下图填入链接服务器信息,数据源(DataSource)中填入WinCC服务器的数据库完整实例名,目录(Catalog)中填入归档数据库名。使用OPENQUERY查询连接服务器查询链接数据库使用OPENQUERY,传递给OPENQUERY查询语句不同于SQL,是WinCC的特定查询语句,可通过变量ID或变量名查询。如下:select

*from

openquery(LnkRtDb_WinCCOLEDB,'Tag:R,1,''0000-00-0001:00:00.000'',''0000-00-0000:00:00.000''')使用变量ID查询:使用变量名查询:在SQLServer中通过OPENDATASOURCE访问归档数据库通过OPENDATASOURCE()函数可直接查询OLEDB数据源,语法如下:SELECT

*FROM

OPENDATASOURCE('WinCCOleDbProvider.1','Provider=WinCCOLEDBProviderforArchives;Catalog=CC_WinCCSer_19_02_14_10_59_03R;DataSource=WIN-54UD17PRU0N\WINCC').N'Tag:R,1,''0000-00-0000:10:00.000'',''0000-00-0000:00:00.000'''通过存储过程访问归档数据库存储过程(StoredProcedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。适用于WinCC归档数据库的存储过程有哪些如下图的路径,在SystemDatabases->master数据库下有部分存储过程,在WinCC项目程序对应的数据库下也有部分存储过程。

大部分存储过程都找不到对应的使用说明,下面对已知的几个存储过程简单介绍。cp_TagStatisticcp_TagStatistic是对过程值统计分析的存储过程,它的使用方法在官方文档中有描述。CC_SP_ReadTags是一个读取过程值的存储过程,查询到的值会被存储到一个临时表中。在SQLServer中CC_SP_ReadTags源代码是被加密的,从网络上查到的源代码如下,仅做参考:+ViewCodeCC_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]GOIFOBJECT_ID('tempdb..##TagsTempTable')is

not

NULLDROP

Table

##TagsTempTableDECLARE

@return_valueintEXEC

@return_value=[dbo].[CC_SP_ReadTags]@List=N'archive1\tag1;archive1\tag2',@TimeBegin=N'0000-00-0000:01:00',@TimeEnd=N'0000-00-0000:00:00',@WHEREClause=default,@ORDERBYClause=default,@Timestep=default,@Aggregationmode=default,@TempTable=N'##TagsTempTable',@SymDataSource=default,@SymCatalog=default,@LS_Name=N'LnkRtDb_WinCCOLEDB'SELECT

'ReturnValue'

=@return_valueGO重新排列数据

上面的示例图片中查询出的数据是以列的形式排序的,通过下面代码可以把相同时间戳的数据放在同一行。1234567891011121314151617181920212223242526272829303132declare

@TimeBegindatetime=

'2020-09-0300:00:00.000';declare

@TimeEnddatetime=

'2020-09-0400:00:00.000';declare

@TimeStepnvarchar(64)=

'10'Declare

@List

Varchar(1000)=N'SysInfo\CPU_1;SysInfo\CPU_2;SysInfo\CPU_3;SysInfo\CPU_4'declare

@strTimeBeginnvarchar(64)=format(Dateadd(hh,DATEDIFF(hh,GETDATE(),GETUTCDATE()),@TimeBegin),'yyyy-MM-ddHH:mm:ss.fff')declare

@strTimeEndnvarchar(64)=format(Dateadd(hh,DATEDIFF(hh,GETDATE(),GETUTCDATE()),@TimeEnd),'yyyy-MM-ddHH:mm:ss.fff')declare

@strTimeStepnvarchar(500)if@TimeStep<>''

set

@strTimeStep=N',''''TimeStep='

+@TimeStep+',1'''''else

set

@strTimeStep=

''declare

@temp

table(

ValueID

bigint,

TimeStamp

datetime,

RealValue

float,

Quality

int,

Flags

int)declare

@SQLnvarchar(1000)set

@SQL=

'select*fromopenquery(LnkRtDb_WinCCOLEDB,''Tag:R,('+@List+'),

'''''+@strTimeBegin+''''','''''+@strTimeEnd+''''''

+@strTimeStep+

''')'insert

into

@temp

exec(@SQL)SELECT

Dateadd(hh,DATEDIFF(hh,GETUTCDATE(),GETDATE()),[TimeStamp])

AS

TimeStamp,[1]

AS

CPU_1,[2]

AS

CPU_2,[3]

AS

CPU_3,[4]

AS

CPU_4From(SELECT

[ValueID],[TimeStamp],[RealValue]

from

@temp

)

AS

SourceTablePIVOT(max(Realvalue)

for

ValueID

in

([1],[2],[3],[4]))

AS

PivotTableorder

by

PivotTable.TimeStamp用VB脚本访问归档数据库创建数据库连接

12345dimconnSet

conn=CreateObject('ADODB.Connection')conn.ConnectionString=

'Provider=WinCCOLEDBProvider.1;Catalog=CC_OpenArch_03_05_27_14_11_46R;DataSource=.\WinCC'conn.CursorLocation=3conn.open查询数据库

1234Dim

rs,SqlSet

rs=CreateObject('ADODB.Recordset')Sql=

'Tag:R,1,''0000-00-0000:10:00.000'',''0000-00-0000:00:00.000'''rs.OpenSql,conn,1,3访问另一台电脑的WinCC归档数据库假如有两台电脑,命名为A和B,A和B电脑上都安装了ConnectivityPack,从A电脑上通过WinCCOleDbProvider.1去访问B电脑中的WinCC归档数据库,需要按照如下做法:B

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论