在WinCC中如何使用VBS读取报警记录数据到EXCEL.docx

上传人:b****1 文档编号:23123628 上传时间:2023-05-08 格式:DOCX 页数:15 大小:590.51KB
下载 相关 举报
在WinCC中如何使用VBS读取报警记录数据到EXCEL.docx_第1页
第1页 / 共15页
在WinCC中如何使用VBS读取报警记录数据到EXCEL.docx_第2页
第2页 / 共15页
在WinCC中如何使用VBS读取报警记录数据到EXCEL.docx_第3页
第3页 / 共15页
在WinCC中如何使用VBS读取报警记录数据到EXCEL.docx_第4页
第4页 / 共15页
在WinCC中如何使用VBS读取报警记录数据到EXCEL.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

在WinCC中如何使用VBS读取报警记录数据到EXCEL.docx

《在WinCC中如何使用VBS读取报警记录数据到EXCEL.docx》由会员分享,可在线阅读,更多相关《在WinCC中如何使用VBS读取报警记录数据到EXCEL.docx(15页珍藏版)》请在冰豆网上搜索。

在WinCC中如何使用VBS读取报警记录数据到EXCEL.docx

在WinCC中如何使用VBS读取报警记录数据到EXCEL

在WinCC中如何使用VBS读取报警记录数据到EXCEL

1概述

介绍如何在WinCC项目中使用VBS脚本读取报警记录归档数据•并把获取的数拯保存成新的Excel文件。

2软件环境

WindowsXPSP3中文版、WinCC7.0SP2ASIA.MicrosoftofficeExcel2007

3访问原理

WinCC报腎记录数据是以斥缩的形式存储在数IK库中.需要通过WinCC连通性软件包提供的OLE・DB接口才能够解压并读取这些数拯。

关于WinCC连通性软件包的详细信息请参考连接:

37436159

呷使用OL&DB方式访问数据库时关键需要注恿连接字符串的写法和查询语句的格式。

连接字符串格式为-ProviderWinCCOLEDBPronder.1;Catalog="七DataSource=***;'\其中:

Catalog为WinCC运行数据库的名称.当修改项目名称或在其它计算机上打开原项目时,Catalog会发生变化。

建议使用WinCC内部变量-@DatasowceNameRT5>获得出前项目的CatalogsDataSource为服务器名称•酪式为《计算机名称KWinCC"。

3.1査询语句格式

査询语句的格式要求如下:

A1ARNI\TEW:

SELECT*FROM[WHEREvCondition>……optional]

其中参数信息如F所示:

ViewName:

数攜库表名。

必须用弼要的语言捋定该表。

比如:

中文字符表名为:

ALGVIEWCHT・英文字符表明为:

ALGVIEWENU等。

Condition:

为过滤标准。

详细说明请参见卜农:

参数

说明

ViewName

数据库表的名称。

必须用需耍的语言指定该表。

例如,五种欧洲诣言的uViewName,,M:

ALGVIEWDEU:

徳语报餐消息归档数据ALGVIEWENU:

英语报饕消息归档数据ALGVIEWESP:

西班牙语报警消息归档数据ALGVIEWFRA:

法语报警消息归档数据

ALGVIEWITA:

意大利语报警消息归档数据

例如,亚洲语詈的"ViewName,'M:

ALGVIEWCHT:

中文(简体)报警消息归档数据ALGVIEWCHT:

中文(唸体)报警消息归档数据ALGVIEWJPN:

日语报警消息归档数摇

ALGVIEWKOR:

韩语消息归档数摇

支持在WinCC基本系统中安装的语言或者在WmCC文本库中组恣的语言。

有关可接受的查询语言或相应的^ViewName"的信息可在SQL-Server链接报誓归档的“视图”下找到。

相应归档中支持的所令语言显于时都带令其ID,例如,此处为“GENVIEWENLT。

Condition

过滤标准,例如:

DateTime^^OOS-Oe-OTANDDateTime<,2003-07-01,

DateTime>,2003-06-0117:

30:

00*

MsgNr=5

MsgNrin(4,5)

State=2

使用DateTimeat,仅可使用绝对时间表示法。

表1査询参数农

3・2查询结果

査询结果作为记录集返回。

可以根据需要有选择的返回特定的数据塔例如:

oRs.Fields(0).Value返回的是消息的编号:

oRs.Fields

(2).Value返回的是消息的时间戮:

oRs.Fieids(37).Value返回的是消息文本的内容。

记录集的结构如卜•表所示:

位置

域名称

类型

注释

1

MsgNo

整型(4字节}

消息号

2

State

小整型(2字节)

报警记录状态

3

DateTime

日期时间(8字节)

消息的时间霍(不带蠢秒的日期/时间)

4

Ms

小聲型(7字节)

消息的时间戳(毫秒)

5

Instance

VarChar(255)

报警记录的实例名称

6

Flags1

整型(4字节}

(仅限于内部使用)

7

PValueUsed

整型(£字节}

使用的过程值

8到17

PValue!

S

PValuelO

实型(B字节)

数字过程值1到10

185127

PText!

H

PTextW

VarChar(255)

过程值文本1到10

28

ComputerName

VarChar(255)

计算机的名称

29

应用程序

VarChar(255)

应用程序名称

30

Comment

VarChar(255)

注释

31

UserName

VarChar(255)

用户名

32

Counter

整型(4字节}

运行报警消息计数器

33

TimeDiff

整a(4字节)

与“迸入'状态的时间差

34

ClassName

VarChar(255)

消息类别的名称

35

Typename

VarChar(255)

消息类型的名称

36

Class

小熬型(2字节)

消息类别ID

37

Type

小壑型(2字节)

消息类型ID

38到47

Textl到TextIO

VarChar(255)

消息文本1到10

48

AG_NR

小餾型(7字节)

PLC的编号

49

CRU_NR

小墜型(2字节)

CPU的编号

50

Ci-ComeFore

整型(4字节}

“进入”状态的前貴色

表2记录集结构

位置

域名称

类型

注释

51

CrComeBack

整型(4字节)

“进入”状态的背景色

&2

CrGoFore

整型(4字节)

"离开"状态的前景色

53

CrGoBack

整型(4字节)

“离开”状态的背貴色

54.

CrAckFore

整型(4字节)

“已确认”状态的前景色

55

CrAckBack

整型(4字节)

“已确认”状态的背景色

56

LocallD

整型(4字节)

报瞽的位置

57

Priority

整型(4字节)

优尢级

58

APjype

整型(4字节)

报警循环

59

APname

VarChar(255)

报警循环函数名称

60

AP_PAR

VarChar(255)

报警循环画面

61

InfoText

VarChar(255)

信息文本

62

TxtCame

VarChar(255)

已进入的文本

63

TxtWent

VarChar(255)

己离开的文本

64

TxtCameNWent

VarChar(255)

己逬入和己离开的文本

65

TxtAck

VarChar(255)

己确认的文本

66

AlaiTnTag

整型(4字节)

消息变昂

67

AckType

小整型(2字节)

确认类型

68

Params

整型(4字节)

参数

69

Servername

VarChar(255)

Servemame

後3记录集结构(续表)

注氐WinCC的归档数拯是使用UTC(协调世界时)时间保存的。

本例中所采用的时间均为UTC时间.如果需要实现在本地时间和UTC时间之间的转换,请参考下列连接:

如何计算本地时间和UTC时间的时间差,如何转换UTC时间成SQL语句格式?

22115636

如何将本地计算机时间的时间裁(日期时间)转换成协调世界时(UTC)?

24201113

4组态介绍

4・1准备工作

1)创建变St

其中AlmTagAxAlmTagB和AlmTagC用于组态报家MySqlStr用于动态化査询条件。

如卜图所示:

 

二进制变屋

二进制变呈

二进制变量

文本变量8位字符集

|jAlmT&gA|AlmTagB||AlmTagC^MySqlStr\

图]变盘

2)组态报警

在报警记录中组态如卜报警:

图2报警信息

单个消息②冈

3)创建Excel模板

在特定的路径卞预先创建一个Excel文件作为模板.这样可以很好的控制输出格式。

本例中任

D:

\WinCCWriteExcel卜创建一个名称为abc.xlsx的Excel文件。

如卜图所示:

A1

Ams读取报警记录测试报表

1

2

A

B

C

D

编号

YBS读取报警记录测试报表II

状态日期吋间消息文本

3

4

5

6

7

图4EXCEL模板

4.2组态査询界面

画而上新建五个按机.上面的四个按纽分别用于设置不同的查询条件。

按纽卜•方的紳态文本用于显示查询条件。

玻卜•方的按纽用于执行査询报警记录的VBS脚本。

其中査询条件的设定是通过按钮的直接连接方式实现。

图5查询界面

在按钮属性对话框的鼠标动作中选择直接连接打开如卜界面.配置查询条件。

其中来源部分为査询字符串.目标部分为存储査询条件的变显。

图6按紐直接连接配置

4.3详细脚本介绍

1)打开Excel模板

以后台方式打开之前创建好的Excel模板。

其中sheetname作为变駅对以定义Excel中Sheet的名字。

需要注童模板文件的存储路径。

SetobjExcelApp=CreateObjectCExcel.Application'*)

objExcelApp.Visible=False

objExcelApp.Workbooks.Open"D:

\WinCCWriteExcel\abc.xlsx'*

objExcelApp.Worksheets(sheetname).Activate

2)准备查询条件

主要是确定和格式化Catalog和査询条件。

关键抑本如卜•:

■准备査询条件Catalog

SettagDSNName=HMIRuntime.TagsC'^^DatasourceNameRT")

tagDSNName.Read

'拼接查询条件

MySqIStr.Read

sSql=-ALARMVIEW^elect*FROMAlgViewCHTH&MySqlSmVMe

其中NlySqlStr为定义的内部字符串类型的变显.当点击査if|J条件中的按钮时•就会把相应的査询*件字符串传给该变齟(需要根抑:

项目的实际情况调整査询条件〉。

木例中的四*盘询条件的完整i?

l句如卜•图所示:

Sqlis:

ALARMV1EW:

Select*FROMAlgViewCHT

Sqlis:

ALARMVIEW:

Sclcct*FROMAlgViewCHTWhereMsgNr=10

Sqlis:

ALARMVlEW:

Select•FROMAlgViewCHTWhereState=2

Sqlis:

ALARMVlEV/:

Select*FROMAlgViewCHTWhereDateTime>'2011-09-08*ANDDateTime<7011-09-1O'

图7査询条件

3)完整的代码

•变显定义和初始化

DimsPro.sDsiLsSensCon.conn.sSql.oRs.oCom

DimtagDSNName

Dimm.i

DimobjExcelApp.objExcelBook.objExcelSheet.sheetname

DimMySqlStr

SetMySqlStr=HMIRuntime.Tags(MMySqlStr*f)

item.Enabled=False

OnErrorResumeNext

sheetname="Sheetl"

•打开Excel模板

SetobjExcelApp=CreateObjectC'Excel.Application")objExcelApp.Visible=False

objExcelApp.Workbooks.Open"D:

\WinCCWriteExcel\abc.xlsx'*objExcelApp.Worksheets(sheetname).Activate

•准备査询条件Catalog

SettagDSNName=HMIRunlime.Tags(”@DalasourceNameRT")tagDSNName.Read

•创建数拯库联接

sPro='Provider=WinCCOLEDBProvider.1

sDsn="Catalog="&tagDSNName.Value&

sSer=*DataSource=.\WinCC"

sCon=sPro+sDsn+sSer

Setconn=CreateObject('AIX)DB.ConnectionM)conn.ConnectionString=sConconn.CursorLocation=3

conn.Open

•定义查询的命令文本SQL

MySqIStr.Read

sSql=-ALARMVIEW:

Select*FROMAlgViewCHTH&MySqlStr.\5ue

HMIRuntime.Trace”Sqlis:

"&sSql&vbCrLf

SetoRs=CreateObjectCADODB.Recordset")

SetoCom=CreateObject(HADODB.Command*)

oCom.CommandType=1

SetoCom.ActiveConnection=connoCom.CommandText=sSql

•填充数搦到Excel中

SetoRs=oCom.Execute

m=oRs.RecordCount

If(m>0)Then

oRs.MoveFirst

i=3

DoWhileNotoRs.EOF'是否到记录末尾.循环填写农擀objExcelApp.Worksheets(sheetname).cells(i,1).value=CStrtoRs.Fields(O).Value)objExcelAppAVorksheets(sheetnaine).cells(i,2).value=CStr(oRs.Fields

(1).Value)objExcelApp.Worksheets(sheetname).cells(i3)value=CStr(oRs.Fields

(2).Value)objExcelApp.Worksheets(sheetname).cells(i4).value=CStr(oRs.Fields(37).Value)oRs.MoveNexti=i+l

Loop

oRs.Close

Else

MsgBox”没有所需数据……w

item.Enabled=True

SetoRs=Nothing

conn.Close

Setconn=Nothing

objExcelApp.Workbooks.Close

objExcelApp.Quit

SetobjExcelApp=Nothing

ExitSub

EndIf

•释放资源

SetoRs=Nothing

conn.Close

Setconn=Nothing

•生成新的文件•关闭Excel

Dimpatch,!

ilename

filename=CStr(Year(Now))&CStr(MoiHh(Now))&CStrfDiiy(Now))&CStr(Hour(Now))+CStr(M!

nute(Now))&CStr(Second(Now))patch=Hd:

\M&filename&"demo.xlsx"

objExcelApp.ActiveWorkbook.SaveAspatch

objExcelApp.Workbooks.Close

objExcelApp.Quit

SetobjExcelApp二Nothing

MsgBox“成功生成数据文件!

item.Enabled=True

5结果和建议

卜图为程序执行的结果。

仅供参考^

1

2

A

B

C

D

r编号

YES读取报警记录测试报表II

状态日期时间消息文本

3

10

2

2011-9-807

07:

4:

4:

餅错误消息文卑

4

11

2

2011-9-807

07:

46

E#错误消息文本

5

12

2

2011-9-807

07:

4:

8C#错误消息文本

6

10

1

2011-9-907

08:

35肘错误消息文本

7

11

1

2011-9-907

08:

37

餌错误消息文本

8

12

1

2011-9-907

08:

38C#错误消息文本

9

10

1

2011-9-908

贾:

44肘错误消息文本

10

11

1

2011-9-908

33:

4:

6错误消息文本

11

12

1

2011-9-908

33:

钉瑞错误消息文本

12

10

3

2011-9-908

33:

4:

9AS错误消息文本

13

11

3

2011-9-908

33:

4:

9瑞错误消息文本

14

12

3

2011-9-908

33:

4=9

B错误消息文本

15

10

2

2011-9-908

33:

51

时错误消息文本

ie.

17

11

12

2

2

2011-9-908

2011-9-908

33:

53E#错误消息文本

33:

55C#错误消息文本

18

10

1

2011-9-908

33:

58

时错误消息文本

19

11

1

2011-9-908

33:

59

B#错误消息文本

20

12

1

2011-9-908

34:

:

01

C#错误消息文本

21

10

2

2011-9-908

34:

05

紂错误消息文本

22

11

2

2011-9-908

34:

06时错误消息文本

~23"

12

2

2011-9-908

3i:

08C#错误消息文本

24

10

3

2011-9-908

34:

:

10制错误消息文本

25

11

3

2011-9-908

34:

10

E#错误消息文本

26

12

3

2011-9-908

34:

10

C#错误消息文本

27

28

29

144卜/Sheet3/^lJ

图8输出结果

建议:

为了改善本地访问期间的性能.请输入y计算机名称>\WinCC-作为数据源.而不是-.\WmCC\为了捉髙系统的执行效率.建议仅读取少駅的数拥。

为了避免町能造成的数抵损失,建议在执行操作之前先退fllExcel用程序。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1