聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> 为站场监控系统提供历史数据服务的解决方案

为站场监控系统提供历史数据服务的解决方案

时间:2012-11-29 22:31:18    下载该word文档

为站场SCADA系统提供历史数据服务的解决方案

The solution of provides historical data services

for the station SCADA system

杨文川 中国石油管道学院 廊坊爱民西道90 065000

[摘要]

本文主要介绍利用工程组态软件RSView32内嵌的VBA程序与Microsoft Office组件相结合,以低廉的造价,高效稳定地实现输油气站场的历史数据报表的生成。并通过具体实例讲解了RSView32的命令设置、VBA定制EXECL报表、VBA调用ACCESS数据库及VBA实现报表自动生成等内容。

[Abstract]

The paper introduces the combination of using RSView32 embedded VBA language and Microsoft Office module module module modulewhich generate the oil and gas station records in low cost, high efficiency and stably manner. Through specific examples, explain RSView32 project set the use of vba to prepare the EXECL statement ,to call the ACCESS database,to generate automaticlly production records,etc.

[关键字]RSView32VBAExcelAccess;报表;历史数据库;

[Key words]RSView32VBAExcelAccessReporthistorical database

1、简介

由于配套专业数据库的各类组态工程软件都比较昂贵,对于中小型输油气站场不太适用,为此,许多站场的SCADA系统,特别是地方燃气公司,脱离了专业组态软件,利用高级语言独立编写人机界面系统(HMI),再结合数据库编程,可以快速方便地实现历史数据库和复杂报表功能,但其整个HMI系统的稳定性和可靠性往往不被行业认可;本文所介绍的解决方案是以专业组态软件为主,利用组态软件内嵌的寄宿程序,如:RSView32内嵌的VBAVisual Basic For ApplicationWincc内嵌的VBSVisual Basic Script),再结合外部数据库如:Microsoft Office AccessMicrosoft SQL Server等),就可以实现调用历史数据或生成比较复杂报表的功能,也保证了HMI系统的稳定和高效。

下面结合实例探讨实现方法。

本案例具体要求为:每天早上8点交接班时,将此前24小时的整点生产记录以Excel报表文件格式自动生成和存盘

编程环境:RSView 32 组态软件和其内嵌的VBA程序, Microsoft Office套装组件中的Excel办公软件Access数据库

主要工作:RSView32工程数据库设置、事件触发命令设置、项目启动设置等;VBA定制EXECL报表、VBA调用ACCESS数据库及VBA实现报表自动生成。

2RSView32工程设置

RSView32组态软件编程功能强大,设置内容繁多,这里只阐述实现定点自动处理的必要相关设置和命令。

2.1 设置数据记录 (见图1 数据设置记录)

2.1.1 ODBC数据源设置

ODBC数据源属于常规设置,不再赘述。需要注意的是,生成的DSN数据源的默认保存路径是在系统盘上,开发人员最好改在自己的工程目录下,否则现场调试时,无法调用,需要重新设置ODBC数据源。

2.1.2 记录触发设置

记录触发必须选择“要求”触发选项。具体设置在事件文件中,见2.2.1数据记录触发周期设置。

2.1.3 标记在模式设置

标记在模式设置比较简单,直接从标记数据库中选择添加需要记录的标记即可。当数据记录设置完成后,工程项目路径下的VBA文件夹内将生成一个数据库文件*.mdb,该数据库文件包括三个数据库表格,即:标记表格TagTable、浮点表格FloatTable和字符串表格StringTable,在此项设置中添加的所有标记将自动写入以上表格。添加标记需要注意的是:排列好标记的添加次序,因为数据库表格中每一个标记自动生成的ID号是依据用户添加顺序决定的。

1 数据记录设置

2.2 事件文件设置

2.2.1 数据记录触发周期设置

命令语句:DataLogSnapshot RSVIEW

命令描述:把指定模式的标记值记录到数据记录文件里

表达式:if ( (system\Minute == 0) && (system\Second == 0)) then 1 else 0

说明:在且只在整点时,RSView32将数据记录的标记值写入指定的Access数据库的表格中。

2.2.2 定点自动生成报表设置(见图2 事件文件表达式)

命令语句:VbaExec VBA程序名

命令描述:执行VBA某个程序

表达式:if ( (system\Hour == 8) && (system\Minute == 1) && (system\Second == 0)) then 1 else 0

说明:每天上午801分交班时,RSView32 将自动执行VBA程序。

2 事件文件命令表达式

2.3 项目启动设置

在项目启动设置中需要选择激活“数据记录”和“事件文件”选项。

3VBA程序编写

主要介绍三部分内容,即VBA如何定制EXECL报表格式、VBA如何调用RSView32生成的ACCESS数据库的三个表和VBA如何实现报表的自动生成。

3.1 VBA如何定制EXECL报表格式

VBA调用EXECL报表常用的办法有二个,一是可以在EXECL中定义具体样式,然后由VBA调用;二是在VBA中直接定义EXECL报表的各种属性,本文采用第二种方法。下面是实例的源代码:

Dim objExcel As Object

'创建EXECL对象

Set objExcel = CreateObject("Excel.Application")

'设置EXECL的属性

With objExcel

'显示EXCEL

.Application.Visible = True

'创建新的工作簿

.Application.Workbooks.Add

'EXCEL生成报表后全屏显示

.Application.WindowState = -4137

'激活第一个工作表

.Worksheets("Sheet1").Activate

'给表格加边框

.Range("A4:H35").Borders(3).LineStyle = 1

.Range("A4:I34").Borders(1).LineStyle = 1

' .Range("H4:H34").Borders(12).LineStyle = 1

' .Range("A4:I34").Borders(11).LineStyle = 1

'设置表格背景颜色

.Range("A1:H30").Interior.Color = RGB(198, 242, 220)

'设置小数点位数

.Range("B5:H33").NumberFormatLocal = "0"

'合并单元格

.Range("A1:H2").Merge

.Range("A1") = 站场名称

.Range("A1").HorizontalAlignment = 3

.Range("A1").VerticalAlignment = 2

.Range("A1").Font.Bold = True

'显示系统时间

.Range("A3:H3").Merge

.Range("A3").NumberFormat = "产生报表时间yyyy-mm-dd hh:mm:ss"

.Range("A3") = Now

.Range("A3").Font.Size = 10

.Range("A31:A33").Merge

.Range("A31") = "备注"

.Range("B31:F33").Merge

.Range("A34") = "值班员"

.Range("B34") = "白班"

.Range("D34") = "夜班"

.Range("F34") = "负责人"

'定义列宽

.Columns(1).ColumnWidth = 18

.Columns(2).ColumnWidth = 13

.Columns(3).ColumnWidth = 13

.Columns(4).ColumnWidth = 13

.Columns(5).ColumnWidth = 13

.Columns(6).ColumnWidth = 16

.Columns(7).ColumnWidth = 15

.Columns(8).ColumnWidth = 15

'定义行的内容

.Rows(4).Font.Size = 10

.Rows(5).Font.Size = 11

.cells(4, 1).Value = " 进站压力(Kpa"

.cells(4, 2).Value = " 进站温度()"

.cells(4, 3).Value = " 出站压力(Kpa"

.cells(4, 4).Value = " 出站温度()"

.cells(4, 5).Value = " 瞬时流量(Nm/h"

.cells(4, 6).Value = "1#累积流量(m3)"

.cells(4, 7).Value = "2#累积流量(m3)"

.cells(30, 6).Value = "站内累积流量(m3)"

.cells(31, 7).Value = "日累计流量(m3)"

.cells(32, 7).Value = "月累计流量(m3)"

.cells(33, 7).Value = "年累计流量(m3)"

End With

3.2 VBA如何实现报表的自动生成

3.2.1删除中间因系统启停产生的记录

在实际工业生产作业中,RSView32组态监控系统因各种原因的启停将导致启停时间点的数据自动记录到数据库中,所以需要将这些非所需数据删除。

Dim objaccess As Object

Dim gddel As String

Set objaccess = CreateObject("adodb.recordset")

gddel = "delete from FloatTable where Marker='B' or Marker='E'"

With objaccess 'open FloatTable

.activeconnection = "provider = microsoft.jet.oledb.4.0; data source = " & gProject.Path & "\vba\dezhou.mdb"

.cursorlocation = 3

.cursortype = 1

.locktype = 3

.Source = gddel

.open

End With

3.2.2 交接班的时间函数设置

VBA自带的时间函数不多,datediff函数可以实现大多需求。本文实例是提取前一天上午9点至当天上午8点间的24小时整点记录,在2天的时间跨度内提取数据,所以选用小时h为参数,datediff('h',DateAndTime,date())<=15,表示从当天零点往回推15小时,即为前一天9点整开始采集。如果是需要提取前一工作日的24小时整点数据,那么选用日d为参数,datediff('d',DateAndTime,date())<=1即可。

Dim objaccess As Object

Dim gd As String

Set objaccess = CreateObject("adodb.recordset")

With objaccess 'open FloatTable

.activeconnection = "provider = microsoft.jet.oledb.4.0; data source = " & gProject.Path & "\vba\数据库名.mdb"

.cursorlocation = 3

.cursortype = 1

.locktype = 3

.Source = gd

.open

End With

gd= "select * from FloatTable where datediff('h',DateAndTime,date())<=15 order by DateAndTime"

3.2.3 实现报表的自动命名和存盘

说明:每天的整点记录将以独立的Excel文件格式自动存盘,其保存路径为D盘下的userdata文件夹,其文件名为报表生成时的计算机系统时间,如:2010-12-30 08-01.xls

Dim ai As String

ai = Format(Now, "yyyy-mm-dd hh-mm")

With objExcel.Workbooks("book1")

.saveas "d:\userdata\" & ai & ".xls" 'cstr(val(ai)) & ".xls"

End With

4、结束语

本文探讨的周期性整点报表,不用人员操作,完全由计算机自动生成。如果想人为查看某时间段内的历史数据报表,可以在HMI上设置选项,编程大同小异。总之,利用RSView32内嵌的VBA程序,结合Excel报表和Access数据库,可以实现各类复杂报表功能。

作者简介:

杨文川 中国石油管道学院管道运输系教师;

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服