基于WPF的露天矿生产作业图表可视化系统开发与应用
2020-04-17钟小宇辛凤阳孙效玉田凤亮肖开泰
钟小宇 辛凤阳 孙效玉 田凤亮 孙 健 肖开泰
(1.鞍钢集团鞍千矿业有限责任公司,辽宁鞍山112000;2.东北大学智慧矿山研究中心,辽宁沈阳110819;3.东北大学资源与土木工程学院,辽宁 沈阳110819;4.鞍钢集团矿业有限公司,辽宁鞍山112000;5.煤科集团沈阳研究院有限公司通风防灭火研究分院,辽宁抚顺113112)
露天矿是以采装为中心、运输为纽带的大型生 产系统,采运设备信息管理是矿山生产管理系统的重要内容和基础[1-2],生产作业图表是进行采运设备管理的有效途径。露天矿生产作业图表通常以班为单位,形象直观地展现设备产量、设备状态与起止时间等信息[3]。传统方法通过调度员填表与画图相结合的方式记录和展示相关信息。随着计算机技术的发展,利用Excel 表格、通过编程绘制生产作业图表的新兴形式逐渐崭露头角[4-5]。文献[4]对传统模式和Excel 表格绘图模式的优缺点进行了详细论述,并开发了实用的生产作业图表。但该项研究存在的不足有:①图表只有故障信息,没有产量信息,故称为故障图表更合适;②画线添加故障的时间精准度比较低,更适用于卡车调度系统故障信息的自动采集,需要增加时间精确控制功能;③Winform 采用位图方式,界面不够美观,清晰度受屏幕分辨率影响较大;④图表的内容、格式固定,缺少人工定制功能,通用性和实用性还有提升空间。
由于具体开采条件和设备种类不同,不同矿山的生产作业图表的具体内容和形式也不尽相同。如有的矿山生产作业图表只需要设备故障信息而不需要产量信息,也有的矿山两者缺一不可;有的矿山仅显示采运设备信息,也有的矿山主要生产设备与辅助生产设备作业图表全部绘制,还有矿山分设备类别、设备型号绘制作业图表等;有的矿山安装了智能监控系统,产量与状态信息可以自动形成,也有的矿山全部采用人工绘制与输入,还有的矿山部分设备实现了智能采集,部分设备需要人工绘制等。华能伊敏露天矿于1976 年7 月建成,是国内五大露天煤矿之一,年极端最高气温37.7 ℃,年极端最低气温-45~-47 ℃。1997 年国内第一套露天矿卡车自动化调度系统在该矿山正式投入运行,从此将国内矿山带入数字化矿山时代,由于该系统距离现在年代久远,没有进行定期维护,软硬件系统已经十分落后,所以在2017—2019 年矿山投资进行了全新卡车调度系统升级换代。本研究以生产作业图表的通用性、实用性、灵活性和规范性为目标,采用WPF 技术对文献[4]的生产作业图表系统进行升级改造,开发新的露天矿生产作业图表系统,经伊敏露天矿的应用证明,效果较理想。
1 生产作业图表需求分析
露天矿生产作业图表的基本形式如图1所示,通常以工作日为单位,每天绘制1张作业图表。根据功能可将作业图表划分为以下7个区域。
(1)标题显示区。包括图表名称及当前时间。为确保图表的通用性,图表名称应在配置文件中进行引用。
(2)功能显示区。包括故障添加、修改、删除、产量统计以及故障统计等功能,确保图表的实用性。
(3)人员显示区。分班次记录值班人员与调度人员。由于人员基本固定,应建立相应的人员数据库,并可方便地进行增删改查。实际应用时应主要采取下拉框选择方式,避免人工输入错误,减少人工输入工作量。
(4)设备显示区。分别按设备类别、型号、设备号进行排序,每台设备占一行;按设备类别、型号、设备号进行分组,每组占一列。设备类别、型号、设备号的分组与排序是这一部分需要解决的关键问题。
(5)产量显示区。按班次进行分组,每班设置司机姓名、物料、产量等若干列,产量显示区与设备显示区中的设备号实现一一对应,即产量显示区利用设备号进行横坐标定位。每台设备占一行,实时显示每台设备各班的司机姓名及完成的矿石产量、剥离产量等。
(6)故障显示区。按班次进行分组,每班按小时进行划分,每小时再划分若干列。每台设备占一行,通过不同线型或颜色表示设备的不同状态。分别记录每台设备状态的名称及起止时间等。故障栏是整个作业图表实现的重点和难点,这部分需要解决的关键问题有:①线型设置问题,通过不同线型或颜色表示设备故障的不同状态;②时间精度问题,故障起止时间输入应精确,满足矿山需求精度;③鼠标位置对应问题,在用鼠标进行故障输入、删除、修改过程中,需实现鼠标位置与设备、时间的快速对应与转换;④人工编辑时的新旧故障逻辑关系处理,通过新旧故障之间起止时间大小对比,来判断新旧故障之间属性(新增、修改或删除)关系,以此来处理新旧故障逻辑关系;⑤缩放问题,要求列缩放但行不缩放,故障区域缩放其它区域不进行缩放;⑥设备故障与维修跨班,如果当班故障在下班时仍未解除,应自动延续到下一班。
(7)记录区。对当班的产量完成情况、设备工作与维修等信息进行记录。该区域按内容形式可以分为固定格式部分与机动格式部分,固定格式部分包括采矿量、剥离量、出动设备数量,具体数值应自动生成。
2 系统方案设计
根据以上需求分析,以应用与扩展的通用性与实用性、操作简单、使用方便为目标,进行以下相关内容设计。
2.1 数据库设计
根据作业图表各区域的不同内容,主要设计了
以下数据库:
(1)人员数据库。包括值班人员与调度人员数据,为人员显示区下拉框的选择提供基础数据。
(2)设备数据库。包括设备类别、设备型号、设备号,为生产作业图表设备栏的分组和排序提供数据基础。
(3)作业时间数据库。主要包括班次、班名、班次起止时间等,为产量栏、故障栏、人员栏划分班次与起止时间提供基础数据。
(4)产量数据库。主要包括日期、班次、卡车号、电铲号、排卸点名称、物料名称等字段,由专门计量程序生成,为产量栏提供产量基础数据。
(5)故障数据库。主要包括日期、班次、故障名称、故障起止时间、班故障结束标志等,为故障栏提供基础数据。其形成方式有2种:一是根据采集的设备流水文件自动转换而成;二是由调度员通过人工编辑作业图表方式形成。其中班故障结束标志为故障自动跨班提供依据[6]。
(6)设置数据库。包括图例、显示栏目与内容设置、行列大小等。实现作业图表内容与形式的人工定制功能,满足系统的通用性与实用性需要。
2.2 菜单设计
根据系统功能的不同,设计了以下菜单:
(1)系统。包括选择日期、数据转换、保存、退出等功能。选择具体日期之后,通过数据转换从当天设备流水文件中提取当天的交接班时间、班餐时间以及当天的故障名称与起止时间,从产量数据库中提取对应当天的设备产量信息,显示在生产作业图表中。为防止系统与数据库的直接交互,在人工输入故障时可以将数据保存至相应链表中,缩短系统与数据库的直接交互所带来的系统反应速度时间,为之后的存储做准备。
(2)故障栏缩放。包括放大、缩小与还原。放大与缩小只对应故障栏中的列相应改变,而行不会发生变化。
(3)编辑。包括输入故障、删除故障、修改故障、撤销编辑等。对司机上报给调度人员的故障信息通过人工编辑画线添加至对应的图表中,之后通过保存功能存入数据库中。对现有故障可以通过修改或删除方式进行编辑操作。
(4)数据统计。包括故障时长、设备利用率、班故障查询以及日生产情况查询等,可以对当前时间或某一段时间内的设备故障进行统计,方便调度人员查看。
2.3 鼠标事件设计
该系统在人工进行故障添加、删除、修改时需要对鼠标事件进行处理。在系统设计之前,需要预先了解WPF 中冒泡事件和隧道事件之间的区别与联系[7]。WPF中的事件统称为路由事件,路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件[8]。路由事件实际上分两类:冒泡事件和隧道事件。如图2 所示,冒泡事件是WPF 路由事件中最为常见的一种形式,它表示事件从源元素扩散(传播)到中间元素,直到它被处理或到达根元素[9]。隧道事件采用另一种方式,从根元素开始,向下遍历元素树,直到被处理或到达事件的源元素。这样上游元素就可以在事件到达源元素之前先行截取并进行处理。根据系统设计原理,本研究添加故障画线是向根元素中触发鼠标事件,所以选择隧道事件作为鼠标触发事件最为稳妥[10-11]。
利用鼠标隧道事件由Preview Mouse Left Button Down(简称PMLBD)、Mouse Move(简称MM)和Preview Mouse Left Button Up(简称PMLBU)组成,其中PMLBD 代表故障的开始时间节点,MM 代表故障时长,PMLBU 代表故障终止时间节点,对这3 个变量进行行列变换之后保存至对应的数据库中。
(1)添加故障。选择对应的故障设备行,当鼠标触发PMLBD 事件时为设备故障起始时间,之后触发鼠标MM 事件进行故障添加,直到触发鼠标PMLBU事件之后的对应位置为故障终止时间。这里值得注意的是,添加故障不允许跨班添加,所以当故障终止时间大于当前班次的终止时间时,需要将目前的终止时间重新赋值为当前班次的终止时间。
(2)修改故障。对于已有的设备故障进行修改,当鼠标触发PMLBD事件时的位置所表示的时间如果在现有故障的起止时间内,则允许故障修改,之后触发鼠标MM 事件进行修改故障时长,直到触发鼠标PMLBU 事件之后的对应位置为故障终止时间,以便实现对现有故障的修改。
(3)删除故障。选择当天设备故障时间,并选择对应故障设备行,当鼠标触发PMLBD 事件时对应的设备行存在故障且所在横坐标位置所表示的时间在该故障的起止时间内,即可选中所要删除的故障,之后点击“删除”按键并保存,即可完成操作。
3 系统开发
3.1 开发平台选择
WPF 是用于Windows 的现代图形显示系统[12],引入“内置硬件加速”等创新功能。它不仅可以提供标准的控件,而且能够实现“自行”绘制文本、边框和背景填充,可以改变渲染屏幕上所有内容的方式[13-14]。本研究选择WPF 为集成开发平台的原因如下:
(1)本研究系统主要通过画线的形式来实现人工添加设备故障,这里存在的问题是画线的矢量性,引入路由事件(Routed Event)对元素进行多层监听,通过依赖属性(Dependency Property)动态变更控件树等[15]。在Winform 程序开发时,需要用到橡皮筋技术来实现矢量画线等功能[16],编程复杂。故首选WPF为集成开发平台。
(2)WPF 的界面设计与分辨率无关。传统Windows 应用程序的用户界面是基于像素设计的,当屏幕分辨率变高时,界面会变小影响阅读,分辨率变低时,界面各部分变大可能造成遮挡变形[17-18]。而在WPF 中所有界面元素都使用与设备无关的单位进行度量,可保证在不同分辨率下设计尺寸不变,使生产作业图表的通用性与适用性增加。
(3)WPF 的界面可以用XAML 语言写,后台逻辑用C#语言编写,然而Winform 全部用C#语言编写,也就是说,WPF 真正实现了界面与逻辑分离[19]。WPF的核心是一个与分辨率无关并且基于向量的呈现引擎(可以保证图像和影像具有高清晰度),旨在利用现代图形硬件优势,实现生产作业图表的通用性[20]。
考虑到市场占有率、稳定性、实用性等综合因素,本研究选择SQL Server 2016 作为数据库应用平台。
3.2 关键技术处理
3.2.1 区域划分与关联问题
如图3所示,将核心区从左到右依次划分为设备区、产量区、故障区。从位置上来说,3 个区域左右紧密相连,上下对齐;从内容上来说,3 个区域左右相互独立,上下通过设备(行号)紧密关联,即每个区域从上到下划分为相同的若干行,每行对应1 台设备,假设每行的屏幕像素为h,则第i 行的起止位置分别为( )
i-1·h像素、i·h像素,h取值可以人为控制。
(1)故障栏。根据作业时间数据库中提供的班次、班名、班次起止时间等数据,将时间作为横轴,以每天的一班起始时间作为起点,按照均分方法分为24大格(每一格代表1h),每一大格均分为m 小格,每小格的距离为n个像素单位,这样可以实现时间与列的对应。m、n取值可以人为控制。
(2)设备类别、型号与设备号分组。通过读取设备数据分别建立设备类别、设备型号和设备号的链表及相互之间的关联关系,通过for 循环将所有出动的设备按照设备类别、型号和设备号之间的级别显示在每一列中,如图3所示。
3.2.2 鼠标位置对应问题
假设鼠标的位置为( )x,y,则有下式成立:
式中,Y 为对应位置行号;H 为所在列;h1为一班起始时间。
3.2.3 故障栏放大与缩小
故障栏放大与缩小后的像素可进行如下计算:
式中,n1为原故障栏像素;k为放大或缩小倍数。
放大前后分别如图1、图3 所示。放缩操作只是针对故障栏中横坐标(时间)改变,而纵坐标不变,也就是时间进行放大与缩小,而设备行不发生变化。
3.2.4 跨班故障自动接续显示
对于长期处于故障状态的设备,将其故障按照班次进行分段处理。如果设备故障在一个班的时间内没有得到解决,将故障没有结束的字段变为1,在下一个班的结束时间过后,自动刷新添加一条与之相同的故障,只是开始时间和终止时间转为下个班的开始时间和结束时间。以此类推,即可实现跨班故障自动接续显示。
3.2.5 新旧故障时间逻辑处理
假设原有故障为AB,新增故障为CD,故障AB 在故障栏区的起止位置坐标为( X1,Y )和( X2,Y),故障CD 的起止位置坐标为( X3,Y )和( X4,Y),X、Y 分别为时间、行号(设备号)。X1、X2、X3、X4之间存在关系:
(1)相离。新旧故障位置如图4 所示,故障AB 与故障CD 之间的关系从图中可知:X1<X2<X3<X4。由于是同一设备下的两条故障,所以纵坐标相同。然而故障AB的终止时间要小于故障CD的起始时间,所以在生产作业图表中处理为两条故障,这两条故障是相互独立且毫无关联的。
(2)相交与包含。假设故障AB与故障CD的位置关系如图5 所示,由于是同一设备下的两条故障,所以纵坐标相同。然而故障CD 的起始时间落在故障AB 的起止时间内,所以在生产作业图表中按照故障修改来处理,即将两条故障合为一条故障,该故障的起止坐标为( X1,Y )和( X4,Y);假设存在故障AC 与故障CD 如图5 所示,故障AC 的终止时间等于故障CD的起始时间,故按照故障修改来处理,将故障AC与故障CD合为一条故障AD,起止坐标为( X1,Y )和( X4,Y);假设存在故障AD 与故障CB 的位置关系如图5 所示,由于AD 包含CB,所以将两条故障合为一条故障AD。
3.2.6 时间精确控制
在人工添加故障、修改故障时触发鼠标MBU 事件后会弹出时间精确对话框,如图6所示。对话框包括检索文字、选择故障名称、开始时间和终止时间3个部分。该对话框可实现对起止时间的精确控制,对故障名称的模糊查询。由于矿山的设备故障名称非常繁杂,为方便调度人员选择故障名称,引用了模糊查询方法来检索故障名称,如果不选择,将无法正常添加设备故障。此外,为防止调度人员少画和多画问题的发生,进一步提高了手动添加故障开始时间和终止时间的准确性。
本研究在鼠标事件引用时选择路由事件中的隧道事件,为了在程序中达到人工画线添加故障的效果,因而使用了panel 控件,通过调用鼠标Preview Mouse Left Button Down(PMLBD)和Preview Mouse Left Button Up(PMLBU)两个隧道事件来实现人工添加故障功能。
4 结 论
(1)相对文献[4]的生产作业图表系统,本研究开发的系统其通用性和实用性更强,既适用于卡车自动化调度系统信息自动采集,又适用于完全人工录入,实现了两者的有效融合;产量信息与状态信息既可独立显示,又可有机结合显示;可实现所有设备信息显示,也可只显示当班出动设备信息。
(2)WPF 界面友好、操作简单、模块化程度高、人工定制灵活,便于系统升级扩展。在人工输入的基础上,增加了时间编辑功能,保障了故障起止时间的精确性,为分析生产过程、发掘生产潜力、提高设备工作效率提供了一定支持。