水晶报表调用窗体picturebox_RSViewSE软件用VBA做报表【3-1】

前文提过,在RSViewSE里面做报表,有一种高级玩法,完全不依赖RSViewSE软件,而是通过RSLinx软件编写程序将PLC内的数据直接读取回来,按照一定的时间规律记录到数据库内,这个过程是不需要显示出来的,所以这个程序只需要默默的在后台执行就可以了。当然这个程序可以使用VB、C#、C++等高级语言编写。

其实在工控领域,很多软件支持VBA和VBS脚本,这两种语言都跟VB有很大关系,VB也算是一种上了年纪的编程语言了,微软目前也已经停止了对它的更新,但这不妨碍VB在工程领域内的应用。王老湿学习VB还是跟年龄有关系了。当然,市面上目前已经有逼格高的组态软件把脚本支持到了JS和Python了,看到这两种语言好像一下子让我想到了90后00后,算了,先搞VB吧。本文主要介绍如何在VB内编写程序实现从AB的PLC内读取数据并记录到数据库。

跟前面一样,我们依然使用ADODB这种方式在vb内与数据库建立连接,此次我们使用ODBC的替代者和继承者OLEDB来作为统一的数据库连接工具。

OK,闲言少叙,直接开干。这是一个比较骚的操作,其运行将完全与RSViewSE软件隔离开,数据记录到数据库后再编写程序读取出来,全程都不依赖于组态软件。本次实验我们使用SQL Server数据库来记录需要的报表变量。

场景模拟:跟以前一样,假设有个水厂,要做一些生产报表的数据,数据包括所有泵站的日供水量,耗电量,运行时间,月供水量,耗电量,运行时间等数据。要求每天记录一次。

  1. 新建个RSLogix5000的项目,在其内部创建一些模拟报表的数据。

在Logix5000里面新建变量数组,创建泵站编号命名的数组,使用DINT数据类型,我们先创建50个元素的数组,每个数组的具体内容定义在在Logix5000的程序内完成,创建数组的目的也是在编程读取的时候方便做循环语句。

6cc57c4c0f90f51a01d4528c823e375d.png

将其下载到PLC内,本文档使用模拟器模拟PLC,下载完之后直接运行项目。

  1. 在RSLinx内新建OPC/DDE通讯的Topic名称并关联到PLC。

262dd7fb51328c6031366a5ea37433df.png
  1. 在SQL Server内新建数据库,用于存储报表数据,新建表,自定义字段和字段类型。

本文档中我们使用安装RSViewSE软件时自带的SQL Server,由于其安装时没有数据库管理器,我们需要自行安装一个免费的数据库管理工具,用于新建和管理数据库内的数据。同理,其实也可以用Access、MySQL等其他关系数据库。

在数据管理工具内新建数据库名为Report

在该数据库下创建名为WaterReport的表,用于存储报表数据,同时创建名为WaterPumpName的表,用于存储泵站编号。

9aeb40e168a0f80a5ee495f9b6e2bdf6.png

对于泵站编号表里面的内容,我们手动添加进去即可,此表只用来存放泵站的编号,注意,该编号必须与PLC内变量前缀完全相同,因为我们在程序里面会根据该表内的泵站编号自动从PLC内读取相应的数据。这么做的好处就是以后如果泵站有增加的,你只需要在PLC按照规定的要求编写好程序,在此表内添加泵站名称,不需要改变我们的数据记录程序就可以自动记录新的泵站数据了。这个表里面的内容可以手动添加进去,DataStartAddr表示通讯开始读取的地址,DataLength字段表示要读取的数据长度。

31d35006c6f8639e8f19bd781baedb4b.png

4、数据库建好后我们开始编写vb程序读取PLC内的数据

打开VB 6.0 新建标准程序,新版本的VB已经升级到了VisualStudio里面,成了http://VB.Net,程序的空间页面也更好看了。你可以自己去安装尝试一下。

cc2f9e9b37f0644402dcb8680f09c7fb.png

此处我们其实不需要窗体,在VB里面添加个模块就可以了

开始编写程序

1)编写子程序,从RSLinx里面通过DDE方式获取PLC变量数据。

c08d1bedaacb56f6d93eec0931fb8678.png

2)编写子程序,从数据库获取泵站编号及数据起始地址,定义几个全局的数组

d7b48774ca3c7be858e975423ff2e075.png

9e060a57e00a26f4a9ff4502fb34ec64.png
  1. 编写子程序,利用从数据库读取的数据地址和数据长度,自动从PLC内读取数据

1484c497946645ae53ed89cd854d48b4.png

4)主程序调用子函数

faeb9012b3243f5dac09c58a15e98f7c.png

5)测试一下,使用msgbox控件显示读取回来的数据

注意:在最后读取回来的二维数组内,行表示泵站编号,列表示对应的数据,如下表所示arrPumpValue(x,y)

f6ab12962dbd5a765347c09d009353bd.png

139ae2f7a3bcdfe9df5e3c399cc065b6.png

550ecee3180d5ec0beb2ba07156332f0.png

6)将读回来的数据写入数据库

4b056432d64dd99ec4b5e2f5c4f5cc07.png

看看效果

4e58d483164cf99e51b42a2537dd748d.png

7)将VB的程序打包成exe文件,使用windows的计划任务功能定时调用就可以了

c3faa7b315c1a6d49888e767940b5dff.png

记录数据时你可以选择在RSViewSE软件里面创建个事件,按一定的时间规律来执行这个exe文件,实现数据记录,也可以创建的windows的任务计划执行该文件。

OK 使用DDE方式读取PLC内数据并记录到数据库的操作说完了,其实在RSLinx软件的帮助文档里,提供了两种直接访问RSLinx内变量的方法,DDE和OPC,我们平时在做OPC通讯的时候都会创建利益Topic名称,这个名称在RSLinx里面称为OPC/DDE Topic,显然,这个名称OPC通讯和DDE通讯都可以用。而且其帮助文档里面也列出了如何去编写程序使用它。根据王老湿的使用经验,初级选手还是从DDE通讯搞起来比较合适。

需要项目文件及VBA源码请私信作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值