以VB、ACCESS数据库及EXCEL电子表格为平台设计开发报表系统 点击:369 | 回复:0



saic2018

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:199帖 | 0回
  • 年度积分:0
  • 历史总积分:290
  • 注册:2017年12月15日
发表于:2017-12-28 15:34:04
楼主

摘要:本文介绍了一种以VB、ACCESS数据库及EXCEL电子表格为平台进行自动报表系统开发的OPC客户端解决方案。

1 引言 

  目前国内外常见的PLC、DCS系统其在线监控软件都存在一个普遍性的缺陷,即监控功能强大而报表生成功能弱小,无法满足各类工业企业在报表方面的特殊要求,比如,各种结构复杂的表头、表体,数据查询、统计、备份、打印、交接班记事、正点或非正点时间记录等要求,因此必须开发专门的报表系统软件解决这一问题。另一方面,面对不同厂家、不同软硬件结构的PLC、DCS系统,由于相互之间互不兼容,也需要找到一种普遍适用的报表解决方案。针对这些问题,本文以上海自动化仪表三厂PLC系统的在线报表开发为例,介绍一种采用VB+ACCESS数据库+EXCEL电子表格为平台进行在线自动报表开发的OPC客户端解决方案。

  OPC客户端软件的开发所应用的核心技术就是OPC技术(O:OLE,对象链接和嵌入;P:process,过程;C:control,控制),OPC意为“在过程控制领域的对象链接和嵌入技术”,它是一个用于解决不同结构的工控系统之间进行数据交换的、世界通用的工业技术标准,也是开发通用型报表系统的必要条件。 

2 系统开发

  作为OPC客户端,本系统的运行需要OPC服务器在后台的支持,而OPC服务器实际上是一种软件,它既可以独立存在也可以是与监控软件集成在一起。PLC系统提供的OPC服务器就是以组件形式集成在其上位机监控软件WinCC(WINDOWS CONTROL CENTER,视窗控制中心)中,并随着WinCC的安装、运行而自动安装、运行,因此系统开发时不需要对OPC服务器做任何操作,只需与OPC服务器建立通讯连接即可,以下为系统开发的关键技术。 

2.1 程序设计 

2.1.1 工作流程设计 

  本系统主要的任务就是周期性地从OPC服务器中读取所需的在线工艺参数,并定期存入后台数据库及报表模板中完成自动采集、自动生成报表的工作,因此系统的流程设计如图1所示。

 

图1 “自动报表系统”工作流程图 

2.1.2 定义OPC对象及相关变量 在VB编程中,为了定义OPC对象首先必须在所建工程中引用OPC控件,具体操作是在打开工程进入VB编程窗口后,通过“工程”→“引用”菜单将西门子提供的Siemens OPC DAAutomation 2.0控件加入即可。OPC控件引用之后即可定义与OPC客户端相关的各种OPC对象全局变量,包括OPC服务器对象OPCServer、OPC组对象OPCGroup、客户端句柄数组clienth()、服务器端句柄数组serverh()、错误句柄数组errors()、标签数组itemids()、标签值数组values()这几个关键的全局变量,其中,标签值数组values()必须设为变体型Variant数据类型。 该部分关键的程序代码: • 定义OPC服务器对象:Dim WithEvents myopcserver As OPCServer; • 定义OPC组对象:Dim Wi thEvents myopcgroup As OPCGroup; • 定义客户端句柄数组:Dim clienth() As Long; • 定义服务器端句柄数组:Dim serverh() As Long; • 定义错误句柄数组:Dim errors() As Long; • 定义标签数组:Dim itemids() As String; • 定义标签值数组:Dim values()。 

2.1.3 建立与OPC服务器的连接在相关对象与全局变量定义之后即可建立与OPC服务器的通讯连接,这一步的关键是必须首先获得所连接OPC服务器的“程序ID(progid)”及OPC服务器所在计算机的“节点名称(Node)”,这些信息可从PLC系统生产厂家的OPC服务器的技术说明中获得。对西门子而言,其OPC服务器的程序ID为“OPCServer.WinCC”,而OPC服务器的节点名称其实就是运行OPC服务器软件所在的计算机名称,建立连接时如果客户端运行所在的计算机就是服务器,那么节点名称可以省略。 该部分关键的程序代码: • 定义OPC服务器的程序ID:progid="OPCServer.WinCC"; • 生成新的OPC对象:Set myopcserver = New OPCServer; • 建立与OPC服务器的连接:myopc s e rve r.Conne c t progid。 执行连接指令之后,连接过程是否成功需要进行状态判断,可利用OPC服务器的运行状态(ServerState)属性来进行判断,如果ServerState值等于“1”则表示OPC正在运行并且连接成功,其它值则表示连接失败,需要再次进行连接操作直到成功为止,否则后续工作将无法进行。 

2.1.4 建立OPC组及OPC标签变量 一旦与OPC服务器连接成功,即可建立OPC组对象并由组对象生成标签变量,该部分的关键代码: • 建立OPC组对象:Setmyopcgroup= myopcserver.OPCGroups.Add("ABC"); • 给标签数组及客户端句柄数组赋值:clienth(i) =i(i为顺序编号);itemids(i) =“xxx”(xxx为具体的标签名); • 建立OPC标签变量:myopcgroup.OPCItems.AddItems m, itemids, clienth, serverh, errors (m为标签变量个数)。 该指令为一次性成批建立OPC变量的指令,执行之后,所有的标签变量是否全部建立成功需要逐一进行判断,判断的依据是执行该指令后生成的错误句柄即errors()数组的返回值,若成功建立第i个变量则errors(i)的值为零,否则为非零。在建立标签指令执行之后需要对每一个变量进行判断,确保所有变量都建立成功,如发现存在失败,须终止程序运行并进行排查,直到全部成功为止方可进行后续工作。 

2.1.5 读取OPC变量值,存入数据库及电子表格 当所有的OPC变量都建立成功之后便可开始OPC变量的访问工作,根据需要本系统采用定时访问方式,每隔一分钟采集一次变量数据,一份保存于ACCESS数据库中用于历史数据的查询,另一份则根据当前时间是否处于报表规定的记录时间而确定是否直接写入EXCEL电子表格中,生成这一报表记录时间点的数据。为此,须事先设计好对应的ACCESS数据库结构及EXCEL电子表格模板,为数据保存和报表记录做好准备。数据保存之后,系统将进入下一个工作循环中。

2.2 界面设计本系统的界面设计以简洁、友好、易学易用并能满足生产需要为原则,按功能的划分把界面设计为如图2所示的单窗口、多页面样式。

 

图2 “自动报表系统”操作界面 

  界面上共有三个选项卡如图2所示:“报表查询”用于打开、查询任意日期的在线报表和报表数据历史记录,只要选择好“日期”和“报表”两项内容,点击“打开报表”按钮即可打开相应日期的EXCEL格式报表,点击“生成报表”按钮即可重新生成对应日期的报表;“超标记录”用于查询任意时间段的所有被监控参数的超标情况,可查询到超标参数的工序名称、参数名称、参数位号、超标开始时间、开始值、结束时间、结束值、总超标时间及在超标期间出现的最大值、最小值、最大正偏差、最大负偏差信息,选择好“日期”和“工序”后点击“确定”按钮即可,点击“导出EXCEL”按钮则可将查询结果导出到EXCEL电子表格文件中,供其他应用;“报警记录”用于对参数超标状态实时发出警示,仅有一个“刷新”按钮,用于强制执行超标状态的窗口更新操作。

2.3 系统的启动与关闭

  本报表系统是一个独立于工控系统之外的客户端软件,它的启动与关闭的时机和方式问题也是需要考虑的重要问题,最佳的启停方式应该是与OPC服务器的启停实现同步。因此,有两种解决方法:第一种是通过设置监控软件启动时的附加任务来实现,如上海远东仪表厂的WinCC即可通过此方式实现;第二种是对那些无附加启动任务功能的监控软件而言,可通过设置操作系统的自动启动任务实现报表系统的自动启动。对于关闭的问题则相当简单,只需在OPC服务器关闭时所触发的“服务器关闭(ServerShutDown)”事件中添加一条程序关闭指令,即可实现与OPC服务器的同步关闭操作。

3 结语

  本系统的开发巧妙地利用了OPC技术解决不同工控系统的数据通讯问题和报表的通用性问题,巧妙地利用EXCEL电子表格在报表制作方面的强大功能解决了复杂报表的需求问题,使系统具有通用性和灵活性。 

 



热门招聘
相关主题

官方公众号

智造工程师