龚伟平(1976-) 男,湖南双峰人,中南大学信息科学与工程学院在读工程硕士研究生,(湖南娄底华菱涟钢集团信息自动化中心,湖南 娄底 417009)主要研究方向为先进控制技术及工程应用、过程工业控制、智能控制与智能自动化。
摘要:本论文详细介绍了基于ODBC技术实现iFix 组态软件与关系数据库通讯的原理和方法,增强了报表功能;某工程应用实例表明该方法行之有效。
关键词:关键字 ODBC;iFix;三级机;SQL2000
Abstract: This paper describes in detail the communication principle and method of iFix configuration software and relational database based on ODBC technology, and the function of report is also added to this system. The practical engineering application shows the effectiveness of the method.
Key words: ODBC;iFix;Level3;SQL2000
1 引言
iFix是Intellution Dynamics(全世界上第一套基于组件技术的自动化监控软件家族)最为重要的上位监控软件产品之一,该软件产品无疑为全球自动化生产制造业提供了易于使用,高性能的自动化监控解决方案,平台功能强大,集控制技术、人机界面技术、数据库技术、网络技术于一身,可实现数据采集、实时过程监控、报警和报警管理、报表查询打印、趋势分析等功能,并且可与信息自动化管理系统进行无缝连接。借助ODBC技术,将iFix采集的现场数据通过以太网传送到L3系统的关系数据库中,实现共享信息资源的全方位、全过程信息系统。
2 总体思路
开放式数据库互连(ODBC)是Microsoft的标准API,用来访问、显示和修改多种关系数据库数据;结构化查询语言(SQL)是关系数据库使用的标准语言,用来检索、更新和管理数据,不提供公共应用程序接口(API)。ODBC技术的最大优势是开放的互操作性,通过安装多种ODBC驱动程序,可实现同一应用程序对不同数据库的访问。由于iFix和SQL2000都支持ODBC标准,可以通过ODBC接口实现SCADA节点和数据库服务器之间的通讯。

图1 多层ODBC驱动程序结构图
在本应用中是通过在iFix端安装ODBC驱动程序,把SQL2000数据库作为数据源来实现连接的。在iFix中可通过两种ODBC结构(多层ODBC驱动和单层ODBC驱动)来实现通讯。数据库文件和应用可位于同一台计算机上,也可以通过网络位于另外计算机上。多层驱动更为普遍,通常与远程数据库服务器如SQL2000和Oracle等一起使用。多层驱动处理由应用引起的ODBC呼叫,传递实际SQL命令到数据库系统。由于SQL2000属于远程服务器数据库,所以采用的是多层ODBC驱动程序,其结构如图1所示。
当iFix ODBC应用请求连接时,由ODBC驱动管理器装载相应的驱动程序,ODBC驱动程序将iFix ODBC的调用转换成对特定数据库的调用,并与数据库客户端支持层通讯。网络层将请求处理并传送到数据库服务器,监听进程负责接收客户端服务的请求,最终由数据库引擎查询实现数据的操作。
3 数据通讯原理
通过ODBC API提供访问SQL数据源,iFix允许使用下列方法:iFix SQL接口选项,称为iFix ODBC;以及在Microsoft Visual Basic for Applications通过DAO或RDO。iFix到SQL数据源的路径如图2所示。

图2 iFix到SQL数据源的路径示意图
iFix ODBC由SQL触发块(SQT)、SQL数据块(SQD)、SQL任务三部分组成,其中SQL触发块用于指定SQL命令的名称,并确定数据传输触发的时间或事件,SQL数据块用于指定采集和传送的数据以及数据传送的方向。SQL任务除处理和ODBC驱动的通讯外,还和SQT块、SQD块通讯。以iFix过程数据库到关系数据库为例说明数据的传输过程:
(1)当SQL触发块(SQT)由时间或事件触发时,把要执行的SQL 命令的名称和数据源的名称DSN 一起传给SQL任务;
(2)SQL任务根据接收到的信息到关系数据库的SQL库表检索与命令名对应的SQL命令。数据库引擎以字符串的形式返回SQL命令;
(3)SQL任务把从SQL库表获得的SQL命令和SQL数据块(SQD)中列出的数据块中的数据结合,形成完整的命令;
(4)SQL任务用该命令对关系数据库进行操作,由数据库引擎把数据写入数据表中。
4 实现方法
4.1 数据库服务器的配置
(1)创建SQL2000数据库与表单:数据库名称为iFix ;创建SQL命令表、错误记录表与实时数据采集表 。创建SQL命令:在SQL Query Analyzer中使用SQL语言创建SQL库表,用以存放将要执行的SQL命令。该库表只能有sqlname和sqlcmd两个字段,分别存放SQL命令的名称和内容。创建错误记录表和数据表:错误记录表用于记录所有SQL运行的错误消息,其字段也需根据要求设置;数据表用于存放实际传输的数据,可根据应用的需要创建合适的字段(需要传输多少个标签数据就需要有多少个字段)。
(2)创建ODBC数据源:打开WINDOWS控制面板中管理工具的数据源(ODBC),选中系统DSN或用户DSN项,单击添加后选择SQL2000驱动程序,填写数据源DSN名称:iFixODBC与服务器名称:SUNOK。
(3)在SQL Server Network Utility Gerneral中允许TCP/IP协议,在其属性中设置端口。
(4)在客户端配置中网络库选用TCP/IP,注意端口设置与步骤C中一致,使服务器能响应iFix ODBC应用的请求。
4.2 SCADA节点(iFix端)的配置
在对iFix软件进行配置前,需安装SQL2000的网络服务和基本客户机软件(ODBC驱动程序包括在其中),以支持ODBC的运行。
(1)添加SQL帐户:在创建完ODBC数据源后,就可在系统设置SCU中添加SQL帐户,把SQL2000数据源添加进来。此处选择的数据库类型为SQL2000,填写的用户名和密码必须具有访问在数据库中创建的SQL库表和数据表的权限,数据库ID便是SQL2000数据源名DSN。
(2)配置SQL任务:在SCU的配置SQL任务对话框中完成。首先需启用SQL支持,启用后SQL任务会以WSQLODC.EXE任务的形式自动添加。然后需分别设置主、次备份文件的路径,以便与数据库服务器的通讯出现故障时将数据备份,等故障排除后重新发送。此外还需分别输入数据源名、数据库中SQL库表和错误记录表的名称。
(3)定义SQT和SQD块:iFix过程数据库与SQL2000数据库的通讯方式及传输内容是通过配置SQT和SQD块具体实现的。在iFix过程数据库管理器中添加标签SQT与SQD。SQT块中需添加将执行的SQL命令名(需与SQL2000数据库中表单名称一致)与数据库ID,命令执行的时间事件或块事件与事件类型,以及与该SQT块链接的SQD块。在SQD块中需定义需要传输的过程数据标签(时间日期标签默认为TMTD)以及传输的方向。
4.3 报表的实现
iFix基于时间调度事件可以生成每天的Excel格式报表,但经过实践后,发现iFix运行缓慢,其后台服务占有相当的系统资源。如果采用API计时器也需占用大量的系统资源,造成控制系统死机。因此,建议不采用调度事件或API计时器触发。Intellution推荐所有iFix的VBA脚本中使用ADO来处理数据库的访问。
(1)创建ADO对象
为了使用ActiveX数据对象来处理数据,需要参考画面工程中的ActiveX数据对象库。从VBE的工具菜单中选择参考指令然后选择ADO类型库。对象变量被声明为模块级,这意味着在本例中可以应用在所有其他程序中。如果读取它们之后不处理这些记录,那么它们被声明为程序级。 创建ADO记录集:
Dim conODBC As ADODB.Connection Dim adoRS As ADODB.Recordset Private Sub InitADO() Dim strQuery As String On Error GoTo ErrorHandler strQuery = "select * from iFixNo1 " Set conODBC = New ADODB.Connection conODBC.Open "driver= _ & " SQL server};server=SUNOK;uid=sa;pwd=;database=iFix" Set adoRS = New ADODB.Recordset adoRS.Open strQuery, conODBC, adOpenDynamic, _ adLockPessimistic, adCmdText Exit Sub ErrorHandler: HandleError End Sub (2)初始变量定义 Dim ReportArray As Variant “存放日报中所有要显示的参数的数组” Dim FirstPoint1 As Variant“ 第一个变量” Dim tempvar As Variant “中间变量” Dim strStartTime, strEndTime “报表查询的时间范围” Dim Interval As Variant “报表查询的间隔时间” Dim OutReportfile As Variant “输出EXCEL表格的文件名” Dim TemplateName As String “这个是日报表模板的文件名” (3)建立对EXCEL的引用,并打开报表的模板文件: Set msExcel = CreateObject("Excel.Application") With msExcel .WindowState = xlMinimized .Visible = False .Workbooks.Open ReportTemplateName, , False Rem“ 打开报表的模板文件” .ActiveWorkbook.ActiveSheet.Select .DisplayAlerts = False .DisplayAlerts = False .Wait (Now() + 0.00002) End With (4)建立查询数据库后的记录集,并把数据写到Excel中后另存为Excel文件: Set adoRS = New ADODB.Recordset adoRS.CursorLocation = adUseClient adoRS.Open SQL1, conODBC, adOpenForwardOnly, adLockReadOnly If adoRS.BOF Then adoRS.Close conODBC.Close With msExcel DoEvents .ActiveWorkbook.Close .Quit End With Set msExcel = Nothing Rem MsgBox “第一个表查询条件为空,请检查查询条件” Exit Sub Else c = 1 While adoRS.EOF <> True With msExcel.Worksheets(1) For j = 1 To 24 If adoRS(0) <> "" Then msExcel.Worksheets(1).Cells(j, c).Value = adoRS(0) adoRS.MoveNext End If Next j End With c = c + 1 Wend msExcel.ActiveWorkbook.SaveAs “d:\” & OutReportfile & “.xls” msExcel.Quit msExcel.DisplayAlerts = True msExcel.Visible = True Set msExcel = Nothing Set conODBC = Nothing adoRS.Close
5 应用实例
本方法已用于湖南涟钢焦化厂自动配煤智能控制与专家系统中。iFix从施耐德PLC采集的各种配合煤的累积重量、水份、配煤比等实时数据需要传送到铁前L3系统数据库中。为便于数据的管理,在数据库中创建2个生产数据表。累积重量的数据,采用块事件触发传输方式,事件标签设置为新煤三号皮带运行,事件类型为高到低。对于水份、配煤的数据,也采用时间触发传输方式,但将其时间间隔设置为较长。通过把iFix采集的过程数据传输到SQL2000关系数据库,实现了对运行工况数据的掌握,从而达到有效的生产调度、合理配置资源、提高生产效益、及时发现和迅速排除故障的目的。
6 结束语
笔者采用以上方法成功实现了iFix过程数据库与SQL2000关系数据库的连接,该方法实现简单,只需掌握基本的SQL语言,大大节省了开发时间。测试表明通过该ODBC接口能实时、准确地将过程数据传送到数据库服务器,能满足对现场实时数据的要求。 |