前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【续坑】如何心平气和地填坑之拿RSViewSE的报表说事(2)

【续坑】如何心平气和地填坑之拿RSViewSE的报表说事(2)

作者头像
剑指工控
发布2021-11-09 10:42:28
2.9K0
发布2021-11-09 10:42:28
举报
文章被收录于专栏:剑指工控

JZGKCHINA

工控技术分享平台

上一篇《【坑】如何心平气和地填坑之拿RSViewSE的报表说事》中,我们在RSViewSE软件的画面内嵌入了一个Spreadsheet控件表格,通过VBA脚本对它进行一系列控制实现了将PLC内直接读回来标签数显示在表格内,定时存储到指定的位置,从而达到每天或每小时或每分钟记录一次报表数据的目的。

但是显而易见地,这种方式的缺点是不可以灵活的查询历史数据报表,你只能人工按文件名的日期时间去查找生成的Excel表格,这种方式稍显麻烦。

众所周知,在RSViewSE的世界里,要记录和获取历史数据需要专门的历史数据库Historian的参与,但是由于某些原因,很多人不会选择使用它。退而求其次,RSViewSE提供了另外一种历史数据存储的方式:数据记录(Datalog),按官方说法,RSViewSE软件内最多可以创建20个Datalog文件,每个Datalog文件最多可以存储10000的标签的数据,这足够我们使用了。但是,这种方式记录的数据也只能被历史趋势曲线所调用,其他地方读取不到这些历史数据。所以,提取Datalog里面的数据做灵活的报表就不可取了。当然,Datalog文件也提供了将数据通过ODBC数据源存储到数据库的接口,这部分后面我们会说到。

作为一个老湿级别的组态画面设计者,追求的当然是一个完美,要能够随心所欲的查历史报表,还要能随心所欲的导出某一天的数据,更丧心病狂的,还想自动打印出来。

其实这些都不叫事儿。关键你得学会数据库的骚操作,学会了数据库的操作,标志着你已经迈上了组态界填大坑的道路。

如果有人回顾RSViewSE软件的安装过程,会注意到RSViewSE软件会自动的为用户安装部署一个SQL Server数据库,安装过程中会出现一个输入SQL Server超级管理用户sa的密码的页面,如果你记住了这个密码,恭喜你,后面会很轻松。如果忘了,请百度。这个数据库你可以直接用而不需要额外安装。

  • 提起数据库,就不得不提到很多人入门的轻量级数据库Access,这是附带在Microsoft Office套装里面的一款产品,如果你是初学者,建议以Access数据库入门最合适。当然,Access数据库也支持ODBC数据源方式的访问。
  • 同样还有一种常用的数据库,也是当前使用最为广泛的数据库之一,MySQL,目前属于Oracle公司,开源,该公司还有一款收费的大型数据库Oracle。MySQL自面世以来就以其访问快速的特点受到广大用户的青睐,它可以跨平台地部署在Windows和Linux平台上。同样支持ODBC数据源方式访问。不同的是,其ODBC数据源驱动需要在官网下载安装。

好了,言归正传,在RSViewSE里面做报表,常用的就是使用Datalog的ODBC数据源方式将数据存储在数据库内,然后在画面内编写VBA脚本按时间或其他方式查询这些数据。

那么,除此之外,其实还有一种方法,就是在RSViewSE软件之外编写程序,实现数据的记录和数据的显示,RSViewSE软件只需要调用编译好的exe文件就可以了,甚至,全程都不需要RSViewSE的参与。数据记录到数据库我们通过RSLinx 软件的DDE方式实现。读取数据库内数据,实现查询,存储,打印,显示等功能我们可以使用一些高级语言编程实现,如VB、C#、C++等。这部分我们最后再做扩展介绍

先澄清几个概念:

什么是ODBC数据源

前面我们说很多数据库都支持ODBC数据源方式访问,RSViewSE软件本身也支持通过该方式与数据库交互,那么,ODBC数据源是什么呢?

ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC 技术为访问不同种类的sql数据库提供了通用接口。ODBC是基于结构查询语言(sql)的,以此作为访问数据的标准。

简单点说,ODBC就是一种统一的对SQL数据库的连接接口,用户可以通过ODBC接口编写SQL语句实现对数据库的增删查改操作。这是Windows系统才有的。其实这个的坑也有很多

不止是RSViewSE软件,其他任何软件做报表时,都分为两个步骤:

第一, 记录数据

第二, 展示数据。

我们先看记录数据。对于多种数据库,我们尽量同时讲述,方便我们相互比较他们之间的区别和相同之处。

第一步、记录数据

场景设计:以上阶段某水厂生产报表为例,将表格内所需数据按一定的时间周期存储到数据库内,然后提取出来显示在表格控件上,报表需实现能够按照时间和泵站编号方式查询历史数据。

1、 通过ODBC方式记录数据到Access和SQL Server

王老湿不愿意使用这种方式,因为后面查询的时候会很麻烦,很麻烦

通过ODBC方式记录数据到Access、SQL Server、MySQL等数据库的过程都是类似的,区别只是创建连接程序的时候选择数据连接驱动不一样,此处分别以Access和SQL Server为例描述。

1)、在指定位置新建一个Access数据库文件

2)、在RSViewSE内新建Datalog,选择ODBC数据库存储

选择系统数据源,然后点New新建,选中系统数据源

关于文件数据源、用户数据源、系统数据源的区别可自行百度了解,此处我们选择系统数据源即可。

接下来选择数据源驱动,列表内列出了很多驱动,后面括号内为该驱动支持的连接文件格式,对于2007及以前的Access数据库,使用包含.mdb的驱动,2007以后的,使用.accdb驱动。此处我们选择一个兼容性较大的

接下来选择已经创建好的数据库文件

按照默认的表名称RSViewSE软件会自动在Access数据库内创建对应的表。如果要为你的Access数据库配置密码权限,需要勾选后面的登录选项,配置用户名和密码。

创建完可在Access里面看到这些表

在Datalog的第二个选项内为路劲(Path),是选择ODBC备用路劲的,感兴趣的可以自己设置试试。

Datalog第三个选项为文件管理,即选择是否周期性删除存储的数据库文件,可选最大多长时间后删除文件。

Datalog的第四个选项是数据记录方式,可选的为周期性记录(Periodic)、值变记录(OnChange)、触发记录(OnDemand)

周期性:按一定的时间周期,记录所有变量的值,可选的时间间隔有秒、分钟、小时等

值变记录:顾名思义,只有在标签值发生改变时会记录。当然根据需要可以选择数据变化的百分比、死区时间、数据刷新时间等

触发记录:该记录需要使用DatalogOn和Datalogsnapshot命令触发该数据记录,可理解为是一种事件触发记录的类型。

Datalog里面第五个选项为添加标签,在此处添加需要记录的标签名即可。

此时Datalog数据记录配置完成。

3)、对于SQLServer,配置过程类似,只是在创建数据源的时候系统数据源并且使用SQL Server驱动。

首先在SQL Server里面新建一个数据库。单独作为报表数据存储

选择新建数据库,并且将数据库文件保存在自定义的文件存储位置。

创建完之后可在数据库目录看到。

题外话:上图里面有很多数据库,事实上,RSViewSE软件在你每创建一个项目时,都会在SQLServer里面自动创建一个数据库,里面存储的是RSView软件项目的变量表。

接下来创建Datalog里面使用SQL Server驱动的ODBC文件数据源

紧接着需要选择连接到那个SQLServer服务器,服务器一定要选择带斜杠FTVIEW,如果选不到,就手动输入

下一步选择连接SQL Server时的账户验证方式,可用安装RSViewSE软件时配置的账户sa和密码来连接。注意,原则上,我们不推荐使用sa用户登录数据库,因为这是数据库的超级管理员账户,拥有最高权限,用户可以登录到SQL Server管理器新建账户作为其连接账户。

更改默认连接数据库为我们创建的数据库

下一步默认即可

点击完成后弹出数据源创建成功提示。可点击测试连接状态

点击确定后即可完成数据源的创建。

接下来的设置与Access一样了,默认创建三个数据记录的表

Datalog内其他的设置与Access连接时设置的一样,此处不再赘述。

4)、使用RSViewSE软件的事件功能触发Datalog记录历史数据

启动事件:事件配置完成后,需要在RSViewSE项目的(HMI 服务器属性)对话框中,点击 Components(组件)选项卡,点选 Events(事件)复选框,然后选择一个事件组件。事件组件会在 HMI 服务器下次运行时或者当 HMI 服务器组件手动启动时才启动。当然,此处也可以选择项目启动时启动DatalogON命令。如果有很多命令要执行,可以创建一个Macro,在Macro里面写命令,在此处调用。

配置完成后即可将RSView软件运行起来按照规定的时间记录需要的标签数据。

运行一段时间后可在Access和SQL Server内查看到记录的数据。

如果你发现你的数据库内没有记录数据,有可能是事件没有启动,可通过RSViewSE的命令来停止后再启动。

示例中,我将事件的触发时间改成了每分钟触发一下,记录数据到数据库,这种记录还是很准确的。

列举Access内记录的数据

列举SQLServer内记录的数据

如此,我们已经实现了第一步,将RSViewSE里面报表相关的数据记录到数据库内。

第二步、读取数据库的数据并显示

事实上,对于数据库的操作,查询功能应该用的更多一些。在RSViewSE里面,虽然以图形化的方式完成了数据记录功能,但却并没有集成直接读取数据的接口,所以,我们还是需要编写VBA脚本来实现对数据库的读取。

至于将数据读取回来后显示在哪里,这就可以选择了,为了方便,你可以直接显示在SE的画面内,就像之前我们在第一阶段设计的在画面内嵌入Spreadsheet表格控件一样,将读取回来的数据填充在这个表格内。还有个办法,就是在RSViewSE软件之外,使用高级语言编写一个exe程序,在该程序内实现对数据的读取和展示,RSViewSE软件只需要调用其即可。两种方式各有利弊,根据自己的能力选择使用。

示例中,我们使用在SE内嵌入spreadsheet表格控件显示方式实现。后面的高级扩展我们会说到编写外部程序调用。

示例设计:我们设计报表功能应该具有按时间查询功能、按泵站编号查询功能、查询完的数据导出到指定位置、查询完的数据可直接打印。

1)、编写脚本读取Access数据库内表的内容

VBA脚本代码中会涉及一个数据库的连接接口ADODB,它是一种兼容的各类数据库应用程序接口(API),各种数据库都可以。MySQL,PostgreSQL,Interbase,Firebird,Informix,Oracle,MS SQL 7,Foxpro,Access,ADO,Sybase,FrontBase,DB2等。关于此API的使用可自行百度查看。这是一种非常方便的连接数据库的接口。

注意,要在VBA环境中使用ADODB接口程序,需要在VBA的IDE里面引用一个叫Microsoft ActiveX Data Objects x.x Library的东西,根据你自己计算机的情况,勾选最大的版本即可

勾选即可。

我们使用该接口通过ODBC方式访问到已经创建的数据库。通过ADODB接口读取回来的数据库数据会存放在一个记录集Recordset内,我们需要对Recordset进行操作获取内容。

实际操作

1、 书接第一章节,将第一章节使用的画面复制一份出来,增加一个DTPicker控件和一个ComboBox控件,第一个是日期时间控件,第二个是下拉框控件。在放个按钮用于触发查询的过程

2、编写脚本,从Access数据库读取数据

因为从Access和从SQL Server里读取数据时SQL 语句会稍有差异,我们需要单独分开说。

思路:将数据库里读回来的数据按数组的形式返回给子函数,这样以后调用的时候就很方便了。先建一个带输入参数和返回值的子函数,其输入参数是一条SQL查询语句,输出参数是一个二维数组

3、调用数据库读取函数,填充到下拉框里面去

思路:下拉框内应该显示数据库内现有的泵站编号,并且可以选择单独查询一个和查询全部。下拉框的内容应当在画面加载时就调用。

4、写读回来的泵站数据到表格里面去

思路:因为使用RSViewSE软件自动存储数据到数据库的功能,我们查询的结果跟我们设计的报表格式很不一样,所以只能每次查询一部分,多次查询再填进去。我们设计定义一个带输入参数的过程,输入的参数为计划写数据的表格的列和每个列要查询的关键字。

注意SQL语句的书写,原则上,SQL语句在这里是一段字符串,可以拼凑,中间还可以嵌入变量。使用SQL语句查询是需要注意日期格式,在查询Access中的日期时间时在两边加上#符号,如#2020/03/22 12:00:00#。另外,在Access中通配符需要注意。

填坑:在Access里面执行SQL语句时,任意字符串的通配符为“*”符号,但是如果把SQL语句放在ODBC里面执行,就要用“%”了。

5、按钮调用写入数据

思路:给表格写入数据之前应该先将表格的内容清空,再写入

6、运行效果

期待下集精彩继续!

好了,由于篇幅有限,第三节我们继续讲从SQL Server里面读取数据

王老湿最近测试了一款神奇的国产组态软件,以上功能基本不需要脚本就能轻松实现,而且还有很多风骚的功能,等测试完成后会安利给大家,敬请期待。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 剑指工控 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档