杨 洋,李凤霞,靳宝全,王吉星
(1.太原理工大学 电气与动力工程学院,太原 030024;2.太原理工大学 新型传感器与智能控制教育部与山西省重点实验室,太原 030024)
工业控制系统中,为集中掌握现场设备运行状况,需对数据对象进行实时存储与查询,因此,研究组态软件与数据库相结合的数据查询技术具有重要意义[1]。早期工控系统中,利用程序语言将数据库中数据从报表输出,开发较为复杂。随着计算机技术的不断发展,专家、学者设计组态软件内嵌数据库技术应用到各种工程项目中,王普等设计组态软件与SQL Server数据库结合管理历史数据,完成对现场的实时监控[2];耿乙文等采用iFIX组态软件与Access数据库实现信息共享、报表制作[3]。
近年来,组态软件与数据库的连接、数据库的实时访问技术已获得较大发展[4-6],但在对数据库内数据对象进行即时调用并按时间顺序进行查询的功能,仍需要进一步研究开发。本文利用KingView组态软件的时间、日期控件,结合数据库内嵌函数,设计了基于KingView的SQL Server数据库数据查询方案,完成了数据库中历史数据对象在KingView中按时间顺序的查询,实现了对现场运行状态数字化、有序化监测。
根据工控系统上位机软件的设计要求,上位机需对关联数据库内的历史数据进行合理的调用、显示,但在编写数据查询语言时可能会出现查询出来的数据不能按顺序排列,即只按日期顺序排列数据但时间顺序混乱,或出现时间顺序排序正常但日期排序混乱的问题,为解决这一问题,设计了综合KingView时间、日期控件及SQL函数的数据查询方案,通过对时间、日期条件的判断及表格模板的调用,使数据库数据按日期时间顺序以报表形式有序输出。
数据库数据查询设计方案如图1所示。创建数据库、数据源并连接到KingView,编写查询条件语句并调用报表,完成数据按日期、时间顺序有序查询。
图1 数据库数据查询方案示意图Fig.1 Schematic diagram of database query program
KingView与SQL Server数据库实现数据传输时,首先将SQL Server数据库添加到ODBC数据源中,执行如下脚本连接到名为“项目数据”的数据源,即可通过变量间接访问数据库:
SQLConnect(数据库变量,"dsn=项目数据;uid=;pwd=");
KingView中的变量和ODBC数据源之间的数据传输通过KingView的SQL访问管理器实现。SQL访问管理器包括表格模板和记录体2部分。
表格模板是在数据库中创建存储报表的模板,也是数据报表输出格式,通过如下脚本函数在数据库中创建一个名为“表格名”的存储表格:
SQLCreateTable(数据库变量,"表格名","表格模板");
记录体可关联KingView中的多个变量,每执行一次如下脚本函数,即将一组“记录体1”所关联变量组存入数据库的表格中:
SQLInsert(数据库变量,"表格名","记录体 1")。
以上命令语言为数据库按时间顺序查询奠定了基础,使得KingView软件开发平台与数据库通信正常连接。
在工业控制领域,要求能在历史数据库查询任意时间段内的数据,以便检查现场工作情况。
2.2.1 查询数据显示区设置
在KingView中,在数据查询画面中插入通用控件KVADODBGrid class,在画面内拉出控件,在属性选项中建立与SQL Server数据库的连接,选择前期新建的ODBC数据源(项目数据)、数据库及在数据库内创建的表格(表格名),选择数据参数显示表头,数据居中,查询超时设为100,并在索引表中将地址指针按顺序排列,并按顺序指向每条记录体(每条记录体按插入顺序从上到下排列),如图2所示,实现数据查询按顺序排列。
图2 按时间顺序排列原理Fig.2 Principle of chronological ordering
2.2.2 日期控件程序设计
在数据查询画面中,插入2个时间日期通用控件MicrosoftDateand TimePickerControl6.0(sp4),查询开始时间 2 个,分别为 DATE1、TIME1,查询结束时间2个,分别为DATE2、TIME2。DATA1、DATA2作为日期条件,属性设置为1-dtpShort-Date。双击控件DATE1,在事件的closeup右侧关联函数端双击,函数声明为closeup1(),并设计函数。
将DATE1控件输入的年月日整数转化为字符串形式作为查询开始条件,与数据库表格中的时间比较,并从数据库表格中与DATE1输入时间相同的位置开始输出,同时要把所有转化字符串的格式进行统一格式转换,并调整上位机的时间格式与此格式保持一致,否则函数无法从数据库内调用数据。控件closeup1()函数设计流程框架如图3所示。
图3 日期控件程序设计流程图Fig.3 Flow chart of date control procedures
DATA2控件函数声明为closeup2(),作为日期查询结束条件,数据库表格输出的数据到输入日期结束,函数设计方法与closeup1()相同。
2.2.3 时间控件程序设计
TIME1、TIME2控件属性设置为 2-dtptime,双击控件,选择事件,点击change后的关联内容,函数分别声明为 change1()、change2()。
函数 change1()、change2()作为查询时间开始条件、结束条件,程序设计流程与closeup1()大致相同:定义长整形变量,将控件中的变量值赋给对应的长整形变量,统一数据库内时间格式与上位机中的时间格式,通过控件读出输入时间(输入时间格式为:时:分:秒),即完成在KingView中时间赋值。
2.2.4 查询按钮的程序设计
查询按钮设计时,因为前期时间格式都是字符串格式,字符串没有比较大小的功能,想要查询一段时间内的数据,必须把字符串格式的时间转化为长整形。在KingView界面内,新建一个按钮,双击按钮,选择按下时执行程序,查询按钮程序设计流程如图4所示,将时间开始条件与日期开始条件组成总开始条件,时间结束条件与日期结束条件组成总结束条件,比较结果正确后,将总开始时间与总结束时间组成综合查询时间作为输出条件并按时间顺序输出数据报表。
图4 查询按钮程序设计流程图Fig.4 Flow chart of query button programming
在设计完成的控件中,开始时间设定为2014-07-18、11:21:40,结束时间设定为 2014-07-18、11:22:40,点击查询按钮,报表输出结果如表1所示。可见满足查询条件的数据全部显示并按时间顺序从早到晚依次排列,查询数据以3路流量(流量A1、流量B1、流量C1)为例,但由于新建数据库中变量未连接设备寄存器,所以数据显示均为0。
表1 数据查询结果Tab.1 Data query results
使用KVADODBGrid控件查询方法简单,容易被设计人员开发使用,但不适合现有工业技术领域应用,此种方法开发的查询功能操作步骤繁琐,且不易观察历史数据,只可查询全部数据信息,且没有筛选数据的功能,使用灵活度差。
利用SQL函数查询方法基本能满足用户的各种要求,单一使用SQL函数,不易开发数据查询功能,一般借助报表窗口控件,设计开发程序较为繁琐,容易出现错误,对工程技术开发人员要求极高,不易掌握,灵活度相对上一方法较好,程序过程复杂。开发的软件对硬件要求很高,且在运行过程中容易造成死机现象。
充分利用KingView内的控件、内嵌SQL函数,开发了灵活方便、适用性强的数据查询功能,满足工控领域对数据查询的各种要求,软件开发难度适中,对工程开发人员要求合适,且开发技术容易掌握。开发的数据查询软件操作简单灵活,容易理解。
主要利用KingView时间日期控件并结合SQL内嵌函数,设计了数据库数据报表调用查询方案,并完成了查询结果按时间顺序有序排列。该方案设计方法简单,工作可靠,使用户可以方便地访问和管理数据库,实时掌握系统运行参数,优化了工控系统性能。
[1] 杨立保,许忠仁.组态软件实时数据库的研究与设计[J].自动化仪表,2009,30(8):19-21.
[2] 王普,郭继业,孙崇正,等.基于SQL Server 2000的组态软件实时数据库[J].北京工业大学学报,2006,32(3):197-201.
[3] 耿乙文,伍小杰.基于ODBC技术实现iFIX组态软件与关系数据库 Access的通信[J].工矿自动化,2006(4):30-32.
[4] 赵秀梅.基于WINCC工控组态软件的关系数据库的研究[J].微型机与应用,2010(6):1-2,6.
[5] 陈慧,王中庆.基于ADO的组态软件与关系数据库通信研究[J].工业控制计算机,2012,25(4):74-75.
[6] 孙淳.基于OPC技术的组态软件与SQL Server数据库的通信研究[J].实验技术与管理,2012,29(5):143-146. ■