组态王环境下数据库访问技术及其应用

来源:网络  作者:网络转载   2019-10-08 阅读:742
1. 引言   随着工控组态软件功能的不断完善以及可靠性的不断提高,其在工业中得到了非常广泛的应用。但是,尽管组态软件具有强大的实时数据库功能,其数据分析能力却十分薄弱,这一点在一定程度上限制了其在一些领域尤其是在实验室中的应用。本文针对这种情况,以组态王为例,提出利用组态软件数据库访问的技术将数据库中数据取出,送到其他具有数据分析能力的软件(如MATLAB)中去,从而弥补了组态软件在数据分析方面的不足,为其在更大范围内的应用提供了切实可行的方法。 2. 访问组态王数据库的两种方法   在本文中主要介绍和使用了两种方法访问组态王数据库:FileWriteFields函数访问和SQL访问。通过应用这两种方法,将组态王实时数据库中的实时数据直接取出,从而使其他软件可以对数据进行分析。这两种方法是并行的,任何一种都可以完成对组态王数据库的访问。   下面对FileWriteFields函数和SQL分别予以介绍。   2.1 FileWriteFields()函数简介[2]   该函数的功能是往指定文件写入csv(逗号分隔变量)记录。其调用格式为:   FileWriteFields(Filename, FileOffset, StartTag, NumberOfFields);   其中,Filename为指定要写的文件,若文件不存在,则创建它;FileOffset为指定写文件的起始位置(若FileOffset为0,此函数将写到文件末尾;若为1,则写到开头);StartTag指定*个数据项的变量名称(此变量名必须以一个数字结尾),此参数必须是一个表明变量名的字符串(而非实际的变量本身,比如变量名为MyTag1,就需要给出“MyTag1”或MyTag1.name,而不仅仅是MyTag1);NumberOfFields指定要写的字段数目(此文件的每条记录中以逗号隔开的字段的字段数目)。   2.2 SQL简介   SQL(Structured Query Language)是一个通用的、功能极强的关系数据库语言,由于其功能丰富、语言简单、使用方法灵活,已经成为关系数据库的标准语言[3]。   组态王SQL访问功能是为了实现组态王和其他ODBC数据库之间的数据传输。它包括组态王SQL访问管理器和SQL函数:SQL访问管理器用来建立数据库列和组态王变量之间的,通过表格模板在数据库中建立表格,通过记录体建立数据库表格列和组态王之间的;SQL函数可以在组态王的任意一种语言命令中调用,这些函数用来创建表格、插入删除记录等。[1]   下面介绍一下几个主要的SQL函数[2]:   (1)SQLConnect()   SQLConnect用于连接组态王和数据库,其格式为:   SQLConnect( ConnectionID, “ConnectString”);   其中:ConnectionID为SQLConnect()产生的连接号,ConnectString为连接语句。连接语句格式如下:“DSN=data source name [; attribute= value [;attribute= value]…]”。   (2)SQLInsert()   SQLInert用于使用记录体中定义的连接在表格中插入一个新的记录,其格式为:   SQLInsert( ConnectionID, TableName, BindList);   其中:ConnectionID为SQLConnect()产生的连接号,TableName为表格名,BindList为记录体。   (3)SQLDisconnect()   SQLDisconnect用于从使用的数据库中断开连接,其格式为:   SQLDisconnect( ConnectionID);   其中:ConnectionID为SQLConnect()产生的连接号,   2.3 两种方法之间的比较   相比较而言,FileWriteFields函数方法相对简单,只要安装了“组态王”即可,但需要占用软件相当的点数;利用SQL方法相对复杂一点,而且需要安装如Access等支持SQL的数据库软件,但不占用组态软件的点数,在具体应用当中可根据需要和实际情况进行选择。 3. 一个例子   下面通过一个例子来介绍这两种方法的具体应用。该例子的目的是将现场的压力信号采集到MATLAB中对该信号进行分析。为简单起见,本文仅画出压力信号的变化趋势,表明可以在MATLAB中进行分析即可。   *步:将组态王实时数据库采集到的压力信号存到*.txt文件中。   为了方便随时记录,本文定义了一个内存离散型变量record,通过按钮“开始记录”和“停止记录”将该变量置1和置0。   下面分别具体介绍利用FileWriteFields函数和SQL方法对组态王实时数据库进行访问。   (1) 利用FileWriteFields函数   本文利用FileWriteFields函数访问组态王数据库是在应用程序命令语言运行时窗口中编程实现的,具体脚本如下:   //数据记录   if (本站点record==1)   {   Tag1=本站点$日期;   Tag2=本站点$时间;   Tag3=本站点压力;   FileWriteFields(“f:DATARecord.txt”, 0, "Tag1", 3 );   }   (2) 利用SQL实现   建立一个SQL应按如下步骤:   1先在access中建立一个库名为”SQL数据库”的数据库将其保存为:f:DATASQL数据库.mdb,并在SQL数据库中建立一个表名为“监控表”的表,在字段名称处分别键入“日期”,“时间”,“压力”,数据类型前两个为“文本”,zui后一个为“数字”,保存该表。然后在打开的控制面板中的“32bit ODBC”中增加(ADD)一个Microsoft Access Driver数据源,其源名为“SQL数据库”。所指向(select)数据库的路径为:f:DATASQL数据库.mdb。   2在组态王工程浏览器中建立一个名为BIND的记录体,把组态王中的变量和数据库“监控表”中所对应字段名称增加到记录体中,如表1所示。   表1 所创建记录体BIND 3使用下列指令建立组态王和源名为“SQL数据库”的数据源的连接,此例中为在应用程序命令语言中启动时的命令:   //建立SQL连接   SQLConnect(DeviceID, "dsn= SQL数据库");   4在“监控表”中不断插入记录,此例中为在应用程序命令语言运行时的命令:   //SQL插入记录   if (本站点record==1)   {   SQLInsert( DeviceID, "监控表", "BIND" );   }   5在退出程序时断开连接,此例中在应用程序命令语言停止时实现:   //断开SQL连接   SQLDisconnect( DeviceID);   6在数据记录结束后,将该文件另存为txt文件。   第二步:将*.txt文件中的数据导入到MATLAB中,并存为*.mat文件。   本步骤比较简单,利用MATLAB中File菜单下import Data…命令利用向导即可实现,因此不再详述。   第三步:对压力信号进行分析。 图1 MATLAB中绘制的压力曲线   为简单起见,本文仅利用plot命令绘出压力的变化趋势,所得结果如图1所示。 4. 总结   本文首先介绍了组态王环境下访问其数据库的两种方法:FileWriteFields函数访问和SQL访问,并对二者进行了比较;然后针对组态软件数据分析能力相当薄弱的不足,提出利用以上两种方法将组态王数据库中数据取出,送到其他具有强大数据分析能力的软件如MATLAB中进行分析;zui后,本文利用一个例子说明本方法切实可行,确实弥补了组态软件在数据分析方面的不足,为其在更大范围内得以广泛应用打下了基础。
标签: 及其应用
打赏

免责声明:
本站部份内容系网友自发上传与转载,不代表本网赞同其观点;
如涉及内容、版权等问题,请在30日内联系,我们将在第一时间删除内容!

购物指南

支付方式

商家合作

关于我们

微信扫一扫

(c)2008-2018 DESTOON B2B SYSTEM All Rights Reserved
免责声明:以上信息由相关企业或个人自行免费发布,其真实性、准确性及合法性未证实。请谨慎采用,风险自负。本网对此不承担任何法律责任。

在线咨询

在线咨询:

QQ交流群

微信公众号