目录
独创性声明 I
摘要 II
Abstract HI
第1章引言 1
1.1项目背景 1
1.2系统的开发目的 1
1.3课题的提出 2
1.4国内外研究和应用现状 3
1.5论文结构安排 3
第2章相关技术 5
2.1.NET开发框架 5
2.2.NET服务的搭建与实现过程 5
2.2.1.NET服务的创建 6
2.2.2.NET服务的调试运行 6
2.3COM组件技术 7
2.3.1COM 接口 7
2.3.2COM运行机制 8
2.4JQueryEasyUI插件集合功能介绍 9
2.4.1JQueryEasyUI 主要特点 9
2.4.2JqueryEasyUI 常见问题 10
2.5本章小结 11
第3章系统分析 13
3.1业务流程 13
3.1.1电量平衡信息管理系统业务流程 13
3.1.2业务配置管理流程 15
3.2系统实现的总体目标 16
3.3系统数据流程 17
3.4系统开发环境 22
3.4.1系统架构 23
3.4.2开发工具 23
3.4.3数据库服务器 24
3.4.4开发语言 25
3.5本章小结 26
第4章系统设计 27
4.1系统总体设计 27
4.2系统功能的划分 28
4.3主要功能模块设计 29
4.3.1电表基本信息管理模块的设计 29
4.3.2业务配置信息管理模块的设计 30
4.3.3电量基本信息管理模块的设计 31
4.3.4结算信息管理模块的设计 32
4.3.5,电量平衡信息管理模块的设计 33
4.3.6统计查询信息管理模块的设计 34
4.4数据库设计 35
4.4.1数据库设计知识 35
4.4.2数据库表设计 36
4.5本章小结 41
第5章系统实现 43
5.1表底数据采集服务的实现 43
5.2电表基本信息管理模块的实现 44
5.2.1电表信息管理功能的实现 44
5.2.2电表更换信息管理的实现 45
5.3业务配置信息管理模块的实现 46
5.3.1单位与电表关系功能的实现 46
5.3.2工艺与电表关系功能的实现 47
5.3.3线路与电表关系功能的实现 48
5.4电量基本信息管理模块的实现 48
5.4.1电表表底信息管理功能的实现 48
5.4.2小时电量信息管理功能的实现 49
5.4.3班日月电量信息管理功能的实现 51
5.5结算信息管理模块的实现 52
5.5.1结算信息管理功能的实现 52
5.5.2结算单打印管理功能的实现 52
5.6电量平衡信息管理模块的实现 53
5.6.1单位平衡信息管理功能的实现 53
5.6.2工艺平衡信息管理功能的实现 54
5.6.3线路平衡信息管理功能的实现 I... 55
5.7统计查询信息管理模块的实现 55
5.7.1基础数据查询管理功能的实现 55
5.7.2运行数据查询管理功能的实现 56
5.8本章小结 56
第6章系统测试 57
6.1软件测试 57
6.2测试内容 58
6.2.1单元测试 58
6.2.2集成测试 59
6.2.3功能测试 61
6.3测试结论 64
6.4本章小结 64
第7章结论 65
7.1本文工作总结 65
7.2进一步工作展望 66
参考文献 67
致谢 70
攻读硕士学位期间参加的项目 71
参加的项目: 71
第1章引言
1.1项目背景
首钢矿业公司电量平衡信息管理系统是矿业公司四大平台之一,为矿业公司能源管 控提供重要的科学依据。随着矿业公司整体信息化管理水平的不断提高,各级管理部门 对信息化系统的要求也日益提高。原有功能单一、业务拓展性不强的信息化系统存在以 下缺点:
(1)系统功能、灵活性无法满足要求。近年来,随着厂矿组织机构变更以及相关业 务的调整,被固化了的设计模式无法适应使用者对系统的做出的调整或变更,为了满足 管理者的要求,厂矿开发人员不得不做出大量的投入另辟解决方案。
(2)系统维护存在困难。因为系统本身的计算程序是被固化的,因此在每次岀现系 统异常后,厂矿开发人员都增加一套针对此项问题的解决方案,日积月累,直到系统在 出现异常后,根本无法判断数据从哪来的、怎么来的、谁送来的,给系统维护、异常处 理、系统管理带来很多困难。
(3)能源管理存在困难。随着厂矿开发人员不断增加、修改计算程序,造成数据来 源不清、“数出多门”的现象。造成厂矿系统一个数、公司电平衡又一个数的现象时有 发生。甚至出现一条数据频繁变化的问题。给两级管理部门的能源管理和分析带来了很 多困难。
(4)能源数据利用率低。能源管理的最终目的就是起到节能降耗、降低成本的作用, 然而对节能降耗工作直接起到决定性作用的是我们基层的广大职工,只有广大职工的节 能降耗的意识得到提高,我们节能降耗工作才能确确实实的落到实处。因此,厂矿级电 平衡系统在为两级能源管理部门提供科学依据的同时,更应该面向广大职工,为广大职 工提供科学的参考依据,这也是厂矿级与公司级的区别所在。
在这样的背景下,加快厂矿和公司级电平衡系统的升级改造已成了必然的趋势。
1.2系统的开发目的
能源管理的最终目的就是要起到节能降耗、降低成本的作用叫 而对节能降耗工作 直接起到决定性作用的是我们基层的广大职工,只有广大职工的节能降耗的意识得到提 高,我们节能降耗工作才能确确实实的落到实处。而原先粗放的管理模式,从一线职工 到管理人员,都无法把电表中的数字、设备电耗、不同时段的电耗费用与本单位的产量 进行有效的分析,更谈不上工艺平衡和线路平衡,但是随着信息化的发展,我们有条件 把这些工作纳入到精细化管理的轨道上来,把经济用电的思想固化到系统中去。因此,
东北大学硕士学位论文 第1章引 言 矿业公司电量平衡信息管理系统在为两级能源管理部门提供科学依据的同时,更是面向 广大职工,为广大职工提供科学的参考依据。
企业的发展需要科技的创新,然而科技创新的无论怎么发展只是实现方式的不同而 己,最终目的永远是为了更好的解决企业生产经营过程中的问题叫 因此本着这样一个 目的,我们在大石河、球团厂电平衡项目的设计过程中重点从以下几个方面进行了规划 设计:
(1) 系统的稳定性。在管理层我们采用构建三层B/S模式的应用系统架构,有效提 高了系统的响应速度、容错的能力和可扩展能力卩在数据层我们转变思维方式,系统 所有需要计算的内容都是由数据库自身来完成的,在页面展示和数据传递过程中只完成 简单的get和post过程,降低了系统异常的几率,大幅度提高了系统的稳定性。
(2) 系统的灵活性。在保留历史数据的基础上,系统强大的配置管理使系统具有很 强的适应性和灵活性。其中包括组织机构维护、电表关系维护、工艺工序与电表和产量 的关系等灵活的系统配置。
(3) 数据的一致性。一方面在厂矿级系统中,做到“数出一门”。每一条数据都做 到只有一个源头,无论横向、纵向数据保持高度的统一,另一方面缩短了公司电平衡系 统与厂矿电平衡系统数据交互的时间,把时间控制在5分钟左右。避免数据频繁变化和 不一致。
(4) 系统的实用性。在系统基本功能的基础上,增加了同类设备的对比分析功能、 不同历史时段分析功能、不同班组不同时段的对比分析功能,有效的强化了厂矿级能源 管理水平。
1.3课题的提出
在确保系统稳定性和数据的准确性的基础上,进一步对能源数据进行挖掘、分析、 加工和处理,在大量数据的基础上,分析出各厂矿、各单体设备、各工艺流程在能耗方 面的差异,找出原因,提岀节能降耗的具体思路,为企业进一步的高端能源管理提供现 实的可能性。
(1) 通过强化能源数据分析,对不同生产时段、不同班次、不同设备之间的能耗 数据分析,以能源货币化和指标考核为手段,强化能源的管理和利用,有效的形成激励 竞争机制,提高全员节能降耗的意识。
(2) 通过强化能源数据分析,使我们对于每个工艺、每道工序无论从纵向、横向 还是整体上进行综合性的评价分析,暴露能源利用的薄弱环节和工艺能源利用的最佳数 据,得出高能耗设备和低效率的客观数据,为企业技改项目和工艺升级提供科学依据
(3) 强化数据的横向比较,对相同工艺的能耗做具体比对。矿业公司各厂矿有很
多工艺是相同的,比如水厂铁矿一选厂、二选厂,一磁、二磁等,它们具有很多参数的 可比较性,这也为系统的分析功能提供了基础。
在此基础上,我们加快了首钢矿业公司电量平衡信息管理系统的开发工作,经过3 个多月的调研和业务梳理工作,很快进入了系统的搭建阶段,并于2014年年初系统上 线试运行,经过几个月的系统运行来看,已经达到了数据结算、业务分析和原始数据可 查的要求。
1.4国内外研究和应用现状
目前,电量平衡管理及相关的通讯技术己经趋于成熟,但电量采集系统还存在诸多 问题,比如数据通信的可靠性、现场工作的稳定性、通信线路的成本问题、采集系统的 自动化程度水平,以及使用不同厂家、不同型号的电表时,系统的通用性和可适应性等。 这些问题要求生产电表的厂家严格按照要求的规范生产,并统一产品标准,使之具有相 同的基本功能,为电表自动采集系统的实际应用提供便利。目前系统主要应用于场站终 端,所以采用了本地通讯方式,若想进一步实现远距离传输,可借助互联网技术潼光纤 技术,以实现更大距离的电表自动采集,进一步拓展电量平衡系统的统计分析功盛和应 用范围。
矿业公司电量平衡系统的软件建模方法,运用UML中的5种图对面向对象建模的方 法进行讨论及技术研究,提岀如下建模过程:首先是系统需求;随后分析问题领域,建立 系统的用例图;接着,建立系统的静态结构模型,并将系统的功能需求分解到各个对象类, 以确定各个对象类的责任;然后,建立系统的动态行为模型;最后,给出物理模型。通过实 例,对UML的面向对象建模机制做了系统概述,表明UML是一种优秀的建模语言,使用UML 有助于开发者对整个系统有清晰的认识,从而建立各种系统模型,为后期编码工作做好 充分的前期准备。以统一建模语言UML为工具,完成了系统的需求模型、静态模型和动 态模型的设计,最终实现了矿业公司电量平衡系统软件的开发。
1.5论文结构安排
第1章首先简单介绍电量平衡的信息化过程和项目的开发背景,然后据此提出课题, 介绍课题内容和课题的实现步骤,最后详细给出论文结构安排。
第2章主要介绍了系统使用的相关技术,包括.NET开发框架、.NET服务技术、COM 组件技术和JQUERYEASYUI插件集合功能介绍。在介绍.NET服务技术时,从服务定 义、特点及其应用等方面展开;介绍COM组件技术时,主要从COM接口和COM运 行机制方面展开;介绍JQUERYEASYUI插件技术时,从JQUERYEASYUI插件主要特 点和实现过程等方面展开。
第3章主要介绍系统分析。首先介绍电量平衡信息管理系统的工作流程,由此得出 系统的具体功能。然后,从系统架构、开发工具、数据库服务器和开发语言四个方面介 绍了系统的开发环境。然后,给出系统的数据流程图,包括总体图、零级图以及各个模 块的细节图。最后给出本章小结。
第4章主要介绍系统的设计活动。首先介绍系统的总体设计,给出系统的整体功能 模块图,然后详细介绍各个模块的功能。然后,按照划分好的模块介绍系统的详细设计。 首先给出各个模块的功能模块图和功能设计,然后给出了系统的数据库设计,包括对数 据库设计知识的介绍、系统的部分E-R图和部分数据库表结构。最后,给出本章小结。
第5章主要介绍系统的实现部分。首先,介绍.NET月艮务的实现,这是系统实现的 基础。然后,详细介绍各个模块的实现,给出各个模块中重要部分的程序流程图,并详 细介绍系统中对关键技术的使用以及重要功能的实现,包括自动生成Word文档、Excel 文档等,最后给出本章小结。
第6章主要介绍了系统的测试部分,首先,对软件系统测试进行简单的介绍,然后 介绍了本系统的单元测试、集成测试、功能测试,并给出了一些测试用例和典型问题的 解决。最后,给出了测试结论,确定系统基本满足了用户需求。
第7章对本文工作进行了总结,并展望了进一步的研究工作。
第2章相关技术
2.1.NET开发框架
.NET开发框架主要包含以下几个组成部分:首先是整个开发框架的基础,即通用 语言运行时以及它所提供的一组基础类库⑸;在开发技术方面,.NET提供了全新的数据 库访问技术ADO.NET,以及网络应用开发技术ASP.NET和Windows编程技Win Forms; 在开发语言方面,.NET提供了 VB、VC++、C#、Jscript等多种语言支持;而Visual Studio .NET则是全面支持.NET的开发工具。.Net Framework体系结构如图2.1所示。
VB C# C++ Jscript C++
公共语言规范(CLS)
ASP.NET Windows Forms
ADO.NET XML
基类库(Base Class Library)
公共语言进行时(CLR)
Windows Com+服务
图 2.1 .NET Framework 体系结构
Fig. 2.1 The architecture of.NET framework
•NET提供的基础类库包括了从输入输出到数据访问等各方面,为开发人员提供了 统一的面向对象的、层次化的、可扩展的编程接口。它使用一种点号分隔的方法,使得 查找和使用类库非常容易同。跟传统的Windows编程相比,使用和扩展基础类库都非常 容易,这使得开发者能够高效、快速的构建应用程序。
2.2.NET服务的搭建与实现过程
什么是.Net Window服务,简而言之,Windows服务应用程序是一种需要长期运行 的应用程序,它对于服务器环境特别适合⑺。它没有用户界面,并且也不会产生任何可 视输出。任何用户消息都会被写进Windows事件日志。计算机启动时,服务会自动开 始运行。它们不要用户一定登录才运行,它们能在包括这个系统内的任何用户环境下运 行。通过服务控制管理器,Windows服务是可控的,可以终止、暂停及当需要时启动。
Windows服务,以前的NT服务,都是被作为Windows NT操作系统的一部分引 进来的。它们在Windows 9x及Windows Me下没有。你需要使用NT级别的操作系统 来运行 Windows 服务,诸如:Windows NT^ Windows 2000 Professional 或 Windows 2000 Servero 举例而言,以 Windows 服务形式的产品有:Microsoft Exchange> SQL Server, 还有别的如设置计算机时钟的Windows Time服务。
2.2.1.NET服务的创建
服务被启动时会把一个条目信息登记到一个数据库当中来指明这个服务己经启动 To在服务运行期间,它会在指定的时间间隔内定期创建一个数据库项目记录。服务停 止时会创建最后一条数据库记录。这个服务会自动向Windows应用程序日志当中登记 下它成功启动或停止时的记录。
Visual Studio .NET能够使创建一个Windows服务变成相当简单的一件事情。启动 我们的演示服务程序的说明概述如下:
(1)新建一个项目。
(2)从一个可用的项目模板列表当中选择Windows服务。
(3)设计器会以设计模式打开。
(4)从工具箱的组件表当中拖动一个Timer对象到这个设计表面上(注意:要确 保是从组件列表而不是从Windows窗体列表当中使用Timer)。
(5)设置 Timer 属性,Enabled 属性为 False, Interval 属性 30000 毫秒。
(6)切换到代码视图页(按F7或在视图菜单当中选择代码),然后为这个服务填加 功能。
2.2.2.NET服务的调试运行
由于服务必须从服务控制管理器的上下文中运行,而不是从VisualStudio.NET中 运行,因此调试服务不像调试其他Visual Studio应用程序类型那样简单。若要调试服 务,必须首先启动服务,然后将一个调试器附加到正在运行服务的进程中。然后可以使 用Visual Studio的所有标准调试功能来调试应用程序。
除非知道进程是什么,并且知道附加到进程或可能会取消进程所带来的后果,否则 不要附加到进程。例如,如果附加到WinLogon进程,然后停止调试,系统就会暂停, 因为没有WinLogon,系统无法运行。
只能将调试器附加到正在运行的服务。附加进程会中断服务的当前运行;它并不真 正终止或暂停服务的处理。也就是说,如果开始调试时服务正在运行,则在进行调试时, 该服务从技术上说仍处于“已启动”状态,但它的处理己挂起。
附加到服务的进程使您能够调试大多数服务代码,但并非全部;例如,由于服务已 经启动,因此不能用这种方法调试服务的OnStart方法中的代码,或调试用于加载服务 的Main方法中的代码。解决此问题的一个方法是:在唯一作用是帮助调试的服务应用 程序中创建一个临时服务。可以将两个服务都安装上,然后启动此“虚拟”服务加载服务 进程。临时服务启动了进程后,就可以使用VisualStudio.NET中的“调试”菜单来附加 到服务进程。
当附加该进程之后,可以设置断点并使用这些断点来调试代码。当退出用于附加到 该进程的对话框时,实际上已处于调试模式。您可以使用服务控制管理器开始、停止、 暂停和继续您的服务,因此命中已设置的断点。调试成功后,移除此“虚拟”服务。
调试OnStart方法可能比较困难,因为Windows服务管理器将所有尝试启动服务 的时间限制在30秒内。当调试Windows服务应用程序时,服务与“Windows服务管 理器”进行交互。“服务管理器”通过调用OnStart方法启动服务,然后花30秒时间等 待OnStart方法返回。如果在这段时间内方法没有返回,管理器将显示一个服务无法启 动的错误。如果在OnStart方法中放置一个断点并且在30秒内不通过该断点,则管理 器不会启动服务。
2.3 COM组件技术
COM(Component Object Model,组件对象模型)是一种以组件为发布单元的对象模 型,它使各软件组件可以用一种统一的方式进行交互。对于使用组件的集成开发者顾言, 一个组件就是一个接口集,只有通过接口才能与组件进行通信;而对于组件来说,谁口 是包含一个函数指针数组的内存结构,每个数组元素的内容是一个由组件所实现的函数 地址同。在一个应用程序中,起决定作用的是组件的接口而不是组件本身。只要组件的 接口保持不变,组件可以任意升级或更换,而应用程序不必做任何修改。接口将特定的 行为封装起来,一方面使客户可以用同样的方式处理不同组件,一方面同一组件可以在 不同的应用中使用。这些特点决定了组件必然有很好的重用性[% f
2.3.1COM 接 口
在COM中,COM对象仅能通过接口与外界交往,接口定义了一组成员函数,这 组成员函数是组件对象暴露出来的所有信息,客户程序利用这些函数获得组件对象的服 务。COM将接口定义和接口实现分离开来,COM接口定义不依赖于任何编程语言,它 采用COM规范的接口描述语言(Interface Description Language, IDL)来进行接口定义,这 也是COM的语言无关性的体现【⑼。
根据COM规范,所有的接口都必须从IUnknown继承,其原因在于IUnknown接 供了两个非常重要的特性:生存期控制和接口查询。如果客户程序需要对COM对象进 行操作,则它必须保证该对象一直存在于内存中;如果客户对对象的操作已经完成,以 后也不再需要该对象了,则它必须及时地把该对象释放掉,以提高资源的利用率。 IUnknown采用了"引用计数(reference counting)"方法,可以有效地控制对象的生存周 期。另一方面,如果一个COM对象实现了多个接口,在初始时刻,客户程序不可能得 到该对象所有的接口指针,IUnknown通过"接口查询(Queryinterface)"的方法来完成接口 之间的跳转。
“引用计数”的实现原理为:每一个COM对象都记录了一个称为“引用计数”的数值, 该数值的含义为有多少个有效指针在引用该COM对象。当客户得到了一个指向该对象 的接口指针时,调用Addref函数使引用计数增1;当客户用完了该接口指针后,调用 Release函数使引用计数减1。当引用计数减到0时,COM对象就把自己从内存中清除 掉
2.3.2COM运彳亍机制
COM是基于客户/服务器模型的。COM客户程序是任何获得指向COM服务器指 针的代码或对象,它通过调用接口方法使用服务器的服务。COM服务器驻留一个或多 个组件提供服务,这些服务均以COM接口实现的形式出现,主要有两类服务器:进程 内和进程外服务器。
在进程内服务器中,客户程序和组件处于同一个进程内,共享同样的地址空间,组 件的代码用动态链接库@11)形式实现;在进程外服务器中,客户程序和组件各自拥有自 己的进程空间,不共享进程地址,组件的代码以可执行程序(exe)的形式实现,进程外服 务器可以在本机机器上也可以在远程机器上(当在远程机器上时使用的为分布式COM, 即DCOM技术)。
进程内模型的优点是效率高,但组件不稳定会引起客户进程崩溃,因此组件可能会 危及客户;进程外模型的优点是稳定性好,组件进程不会危及客户程序,一个组件进程 可以为多个客户进程提供服务,但进程外组件开销大,而且调用效率相对低一些〔⑵。
虽然COM对象有不同的进程模型,但这种区别对于客户程序来说是透明的,实现 这种透明性的关键在于COM库,COM库负责组件程序的定位,管理组件对象的创建 和对象与客户之间的通信。当客户创建组件对象时,COM库负责装入组件模块或者启 动组件进程,如果客户指定在远程机器上创建对象,则两台机器上的COM库会协作完 成远程COM对象的创建工作,并且在客户进程中创建一个代理对象,客户程序直接与 代理对象进行交互。因此,客户程序可以不管组件对象的进程模型,即使组件对象的进 程模型发生了变化,客户程序也不需要重新编译
当组件程序被安装到机器上之后,必须把它的信息注册到注册表中。进程内组件注 册对于Windows系统可通过系统附带的工具RegSvr32.exe或其它安装程序来进行,进 程外组件的注册可通过调用组件程序自身的命令行参数/RegServer来迸行。
2.4 JQueryEasyUI插件集合功能介绍
JQuery是由John Resig在2006年创建的javascript框架,将其命名为JQuery,意 在强调其查找或''查询"网页元素,并通过javascript操作这些元素的核心用途,JQuery 借鉴了 Html和Css结构中的很多优点,采用了一致性和对称性的设计原则【⑷。
JQuery凭借简介的语法和跨平台的兼容性,极大简化了脚本开发人员遍历Html文 档、操作D0M、处理时间、执行动画和开发Ajax的操作[⑸。短短几年间,Jquery作为 一个正在开源的项目,己经拥有了足以傲视群雄的、由顶尖javascript开发人员组成的 核心团队,以及一个数千万开发人员组成的活跃社区,并被因特网上一些有名的站点广 泛采用。
2.4.1JQueryEasyUI 主要特点
jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是 帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂 的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单映ml 标签,它的特点主要体现在以下几个方面: 跻
(1)简洁且功能强大。只需要简单的一行或几行代码,jQueiy就可以实现传统 JavaScript中需要多行代码才能实现的功能,并且代码非常易懂,即使缺少注释也能基 本理解,并且jQuery将方法设计面向集合的,结合隐式迭代技术,使得当对取得的某一 个类的全部元素操作时,不需要循环遍历每一个返回的元素,极大的提高了开发效率。
jQuery对Ajax操作进行了封装,提供了一些日常开发中需要的快捷操作,例如奮ad、 ajax, get和post等等,这样开发人员就可以将程序集中在业务和用户的体验上,而不 需要理会繁杂的XMLHttpRequest对象和兼容性问题。
在jQuery中$.审缺()方法属于最底层的方法,功能最丰富,有很多的配置参数,通 常用来进行底层的Ajax开发;第二层是load。、$.get()和$』(^()方法,这三个方法在现 实应用中使用频率很高;第三层是$.getScript()和$矽处0!1()方法,它们是针对某种特定 类型的数据进行Ajax开发。
(2)架构美观。jQuery是基于前段分层的思想进行设计,因此,使用jQuery可 以轻松的将结构与行为分离,以介绍D0M时使用的前端代码为例,HTTML代码定义 了页面的结构,而不存在任何的交互逻辑,元素的行为都在脚本文件textjs中进行定义。
$ (document).ready(function(){
$ ("p").click(fimction(){
Alert(“点击我! ”);
});
});
在页面加载时,为段落“Hello World!"添加了一个点击行为,当段落被点击时, 会弹出警告框提示“点击我!”通过一个简单的ready函数,就将交互行为的定义都放 置在独立的脚本文件中,实现了结构和行为的分离。
(3)可扩展性强。与其他一些javascript库不同,jQuery并不单纯是一个javascript 工具集,它是一整套成型的javascript解决方案。基于jQuery的核心库,可以搭建自己 的javascript应用框架或者开发插件,并且jQuery提供了完备的API,使开发者可以轻 松构建自己的个性化模块。
2.4.2JqueryEasyUI 常见问题
(1)post方法传递参数问题。大家在使用post方法过程时,向后台传递参数的过 程,尽量避免将参数以字符串拼接的方式写在url中,而是尽量以对象的方式传递到后 台;用字符拼接url的方式传递参数,容易产生的问题是,页面本地调试过程中没有问 题,项目发布后,点击保存时没有任何反应。
var changeRows= J S ON. stringify (changesRows);
$.post('../ashx/Geology/GeoWinzeGradeHandler.ashx?action=save&changeRows=" + changeRows
,function^ sonResult) {
$.dealAjaxResult(jsonResult, function(jsonResult) {
$.show_waming_inframe(jsonResult.Msg, 'success');
});
});
推荐以对象的方式传递,好处:1•避免中文乱码2•避免字符串长度不够,建议按照 这样方法实^1。
$.post('../ashx/Geology/GeoWinzeGradeHandler.ashx?action=save"
,{ changeRows: changeRows }
,function(j sonResult) {
$.dealAjaxResult(jsonResult, function(jsonResult) { $.show_waming_inframe(jsonResult.Msg, 'success');
});
});
(2)行编辑中下拉框不显示描述,而显示id的问题。可编辑表格中,如果有下拉 框字段,比如“科目“,编辑完一行后,需要显示科目名称,而不是科目id,此时需要 注意两个地方;
1)科目字段的列属性中添加formattero
fonnatter: function(value, row) return row. SubjectDes; }
大家在使用过程中,往往只注意到这一个地方,导致问题依旧;还需要注意的一个 地方就是endEditing()方法;同样需要一次显示描述的操作;
2)在endEditing()方法中添加代码。
var SubjectID = $('#grid').datagrid('getEditor', {index: editindex, field: 'SubjectID'});
var SubjectDes = $(SubjectID.target).combobox('getText'); $('#grid,).datagrid('getRows')[editIndex] ['SubjectDes'] = SubjectDes。
2.5本章小结
本章主要介绍了系统中使用的关键技术。首先介绍了.NET开发框架,然后介绍 了.NET服务技术,其中主要介绍了.NET服务创建、调试运行方式,然后介绍了 ©DM 组件技术,包括COM接口和COM运行机制。
下一章中将详细介绍了系统分析。
第3章系统分析
首钢矿业公司电量平衡信息管理系统主要是通过各厂矿电表自动取数,依据各电表 表底数,计算出各电表按小时、班、日、月的耗电值,电费在尖、峰、平、谷不同时段 的费用不同,与产量进行比较分析,从而做到供电系统的单位平衡、线路平衡和工艺平 衡。系统的设计过程中,在管理层采用构建三层B/S模式的应用系统架构,有效提高了 系统的响应速度、容错能力和可扩展能力;在数据层系统所有需要计算的内容都是由数 据库自身来完成的,在页面展示和数据传递过程中只完成简单的get和post过程,降低 了系统异常的几率,大幅度提高了系统的稳定性。
在实现了系统基本功能的前提下,增加了同类设备的对比分析功能、不同历史时段 分析功能、不同班组不同时段的对比分析功能,有效的强化了厂矿级能源管理水平。同 时在厂矿级,做到“数出一门”,每一条数据都做到只有一个源头,无论横向、纵向数 据保持高度的统一,缩短了矿业公司电量平衡信息管理系统与厂矿电平衡系统数据変互 的时间,把时间控制在5分钟左右,避免数据频繁变化和不一致。通过强能源数据分 析,对不同生产时段、不同班次、不同设备和不同工艺之间的能耗进行数据分析,以能 源货币化和指标考核为手段,强化能源的管理和利用,有效的形成激励竞争机制,提高 全员节能降耗的意识。通过强化能源数据分析,对于每个工艺、每道工序无论从纵向、 横向还是整体上进行综合性的评价分析,暴露能源利用的薄弱环节和工艺能源利用的最 佳数据,得出高能耗设备和低效率的客观数据,为企业技改项目和工艺升级提供科学依
3.1业务流程
3.1.1电量平衡信息管理系统业务流程
矿业公司的电表分机械表和电子表两种,机械表数据是人工抄录,每8小时,也就 是1班抄一个表底,录入系统,这部分表较少,大部分是电子表,这部分表由厂家负责 安装和调试,数据直接存储到工控机里面,我们只需要做一个服务程序,把表底数从工 控机里面的二级数据库取出,换算成电表电量即可,每块电子表每小时出一个数,这些 数据就是整个系统的最基础数据,也是最多的数据,包括小时量、班量、日量和月量等, 通过尖峰平谷不同时期电费单价不同,算出每块表的电费。
矿业公司三级MES系统内,是矿业公司上线较早的生产制造执行系统,各单位、各 系列、各工艺和各生产设备的产量数据均能在MES系统内统计查出,根据查询岀的产量 基础数据,采用存储过程的方式,计算出小时产量、班产量、日产量和月产量等数据, 为单位平衡、工艺平衡做基础数据。
依据存储过程中电量计算出的小时量,该小时所在尖峰平谷等不同时间段的电费标 准,编写存储过程,计算出该小时的电费情况存入数据库表,累计出每块电表的月底结 算量,依据电表和单位关系,生成各单位的结算单,并按月打印结算单。
总体说来,电量平衡信息管理系统工作分为以下几步:
(1)电量计算。表底数据的传输采用.Net服务的形式,服务每隔5分钟运行一次, 将工控服务器数据传输到矿业公司数据库服务器。系统最后一次采集表底的时间是整点 后的第55分,如果某块表的表底仍然没有采集上来,系统默认该块表表底缺失,针对 表底缺失的情况,系统选择该表最近一个小时的小时量,加上最近一个小时的表底,作 为该小时的表底,进行表底数据的自动补录,所有自动补录的表底数据均可以进行手工 修改。表底数据传输到矿业公司数据库服务器后,按照规则采用存储过程等方式进行小 时、班、日、月的计算,分别存入小时表、班表、日表及月表。电量计算的流程图如图 3.1所示。
图3.1电量计算的流程图
Fig. 3.1 Flow chart of the electricity calculation
(2)产量计算。矿业公司三级MES系统内,有产量的基础数据,采用存储过程的 方式,计算出小时产量、班产量、日产量和月产量等数据,为单位平衡、工艺平衡做基 础数据。产量计算的流程图如图3. 2所示。
图3.2产量计算的流程图
Fig. 3.2 Flow chart of production calculation
(3)电量结算。依据电量计算出的小时量,该小时所在尖峰平谷等不同时间段的
电费标准,编写存储过程,计算出该小时的电费情况存入数据库表,累计出每块电表的
月底结算量,依据电表和单位关系,生成各单位的结算单。
(4)结算单打印。依据电量结算产生的结算单,按月打印存档。
通过对首钢矿业公司电量平衡信息管理系统业务流程介绍可以看出,电量结算功能 不但涉及电量计算信息的管理,还涉及产量信息、业务配置等信息的管理。
3.1.2业务配置管理流程
业务配置管理是电量平衡信息管理系统的另一项重要业务。总体说来,业务配置管 理工作分为以下几步:
(1) 电表关系维护。配置联网或未联网电表与工艺、设备、单位、线路的进出口 关系,用于相应的工艺平衡、单位平衡、峰谷管理、线路平衡的计算。
(2) 工序设备关系维护。配置工序设备与工艺、单位的连接关系,用于工艺平衡、 峰谷管理中左侧树型关系的显示。
(3) 结算电表出口关系维护。配置联网或未联网电表与出口电表的关系,用于电 量结算等的计算查询。
(4) 产量关系维护。配置各单位产量与工艺、设备、单位的关系,用于相应的工 艺平衡、单位平衡、峰谷管理的计算。
(5)姓名与IP地址关系维护。配置访问系统的用户姓名与对应计算机IP地址的 关系,用于登录统计等的计算查询。
3.2系统实现的总体目标
根据电表基本信息管理和电量信息管理的需要,系统需要包括以下性能要求:
(1) 数据库记录的及时更新和准确更新。电量平衡信息管理系统中,电量的计算 是一个复杂的过程,首先要通过表底计算出小时量,通过小时量的累计计算出班量、日 量和月量,电量的计算需要通过存储过程来实现,要求在计算的过程中,小时量、班量、 日量和月量的累计计算不能出现错误。在表底基本信息管理模块等,如果用户不小心录 错信息,还需要删除错误记录。数据库记录的增加、删除、修改、查询功能是必不可少 的,也是十分重要的。
(2) 根据数据库记录生成报表、Word文档和Excel文档。一般情况下,客户提 供的结算单是Word文档形式,所以系统也应该尽可能把对应的结算记录转化成文档形 式提供给客户。这样,既方便了客户查阅,也方便了结算管理员对结算信息的管理。有 的客户要结算管理员结算完毕后导出结算明细,方便查看结算的点位名称和对应的费 用,一般都要求是Excel格式。
水晶报表(Crystal Report)是业内最专业、功能最强的报表系统,它除了具有强大的 报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口。根据数据库 记录记录生成水晶报表后,不但数据显示清晰明了,而且窗体美观大方。
自动生成Word文档、Excel文档功能是办公自动化系统中的重要组成部分,而 Word、Excel提供的强大的编程接口技术使得利用各种编程工具通过程序对其控制成为 可能化
(3) 数据的稳定性。电表表底数据进入数据库,采用的是服务程序的方式,从自 动化库中采集到电量平衡系统中去,要求系统的软硬件设计合理,运行正常,网络人员 操作规范,管理严密,整个网络系统能够按照设定的要求正常运转,发挥预定的各项功 能。我们对于服务启动、运行、关闭的各个环节可能出现的不稳定因素要给予充分的考 虑,以确保不影响电量平衡系统的数据采集的需要。
(4) 权限控制。登录到系统后,不同用户身份具有不同的权限。例如结算管理员 有普通用户只具有查询结算信息、电量价格信息和点位信息的权利等,只有业务部部长 具有审核结算单的权限。如果业务部长岀差,需要把审核结算单的权限授权给有资格审 核结算单的其他用户。
(5) 系统的安全性。电量平衡信息管理系统要求能够追溯到5年以上的数据,因 此系统中数据量级别在百万条以上,数据的安全性就显得尤为重要,不允许数据的泄漏
和丢失。为了数据的这些安全性,我们采取用户权限等级管理,不同权限的用户登录系 统看到不同的模块,不同部门的用户只能修改本部门的数据,以保证其他部门数据的安 全性。另外,系统不仅提供了完备的系统日志记录功能,而且对电子文件再归档过程中 的责任链信息进行详细记录。
(6) 系统的易用性和以维护性。电量平衡管理系统是直接面对使用人员的,而使 用人员操作电脑的熟练程度不同,这就要求系统能够提供良好的用户接口,便捷的人机 交互界面,方便不同层次的人群使用。实现这一点,要求系统尽量使用用户熟悉的术语 和中文信息的界面,同时针对用户可能出现的使用问题,提供足够的在线帮助,缩短用 户对系统熟悉的过程。
电量平衡信息管理系统中涉及到的数据是非常重要的信息,系统要提供方便的手段 供系统维护人员进行数据备份,日常的安全管理,系统意外崩溃时的数据恢复等工作。
(7) 远程文件管理。现行系统中,电量平衡信息管理系统的结算单和结算明细都 保存在本地计算机中,管理和使用特别不方便,不能达到文件资源的充分共享和有效利 用。使用远程文件管理功能后,结算单和结算明细都可以保存在服务器上,只要需舉, 随时可以从服务器进行下载查看。这不仅减轻了报价员的负担,同时也对文件的方届查 找,大大提高了工作效率。
3.3系统数据流程
任何数据处理系统的基本功能,都是把输入转变成需要的输出信息。数据决定了处 理的方式,也就是算法;数据显然是系统实现分析的起点。在数据流图分析中,一赛最 常用的方法就是结构化分析方法(简称SA方法),SA方法是面向数据流、自顶向下、逐 步求精进行需求分析的方法。为了细化数据流程图,通常从数据流图的输出端着手分析, 因为系统的目标是产生这些输出,输出数据确定了系统必须具有的最基本的组成元素。
在数据流程图的各个层次中,有的层次展示的是外部实体和系统的关系,而有的层 次表示的是系统的核心处理功能,还有的层次展示的是系统的处理细节。为了区分这些 描述系统不同特征的层次,数据流程图分为三个类型的层次,分别是总体图、零级图和 细节图Bl。
数据流图的基本符号的意思:
(1) 矩形表示数据的外部实体,代表系统之外的实体,可以是人、物或其他软件 系统。
(2) 圆角的矩形表示变换数据的处理逻辑,加工是对数据进行处理的单元,它接 收一定的数据输入,对其进行处理,并产生输出。
(3)右面的边矩形表示数据的存储,表示信息的静态存储,可以代表文件、文件 的一部分、数据库的元素等。
(4)箭头表示数据流,数据流是数据在系统内传播的路径,因此由一组成分固定 的数据组成。由于数据流是流动中的数据,所以必须有流向。
本系统的需要维护的主要信息有:电表基本信息、电量价格信息、用户信息、电表 更换信息、电表表底信息、电表电量信息、电量结算信息等。
系统的总体图描述了系统和周围环境的关系。总体图仅仅由一个处理节点和它周围 的外部实体组成。外部实体既可以是一个人员角色或者一个部门,也可以是一个计算机 系统。总体图上标明的数据流为系统间的共享数据。
本系统的总体数据流图如图3.3所示。
图3.3系统总体数据流图
Fig. 3.3 Overall data flow diagram of system
从图3.3中可以看出,与计量器具检测报价划价系统进行交互的角色包括普通用户、 关键用户、结算员、单位主管和数据采集系统等。这里面值得一提的是,首钢矿业公司 电量平衡管理信息系统并不是孤立的,需要和其它子系统进行交互。如图3.3所示,本 系统需要电子表数据采集系统,把采集到的电表表底按小时送入到电量平衡信息管理系 统中去。
总体数据流图反映了电量平衡信息管理系统总体的数据流向,但是并不能清楚地表 达系统内部的数据处理过程的细节,需要进一步的细化。零级图表示一个系统的主要功 能或一个大型系统的主要组成子系统,它的作用是提供一个总揽全局的视图模型。处理 节点的编号由1开始标识,但编号不表示处理的顺序。处理节点数量应本着“少则拆, 多则合”的原则。
如前所述,本系统包括电表基本信息管理、电量价格信息管理、用户信息管理、电 表更换信息管理、电表表底信息管理、电表电量信息管理、电量结算信息管理等功能。 系统的零级数据流图如图3.4所示。
图3.4系统零级数据流图
Fig. 3.4 Data flow diagram of system at zero level
细节图标识一个复杂处理的详细流程的内部标识。它仅由处理节点和数据存储翰点 组成。那么,究竟细化到什么程度时,可以结束数据流程图的分解过程呢?下面有两个 经验规则可以遵循:
(1) 当处理的圆圈有单一的数据流输入或者单一的数据流输出时,停止分解该处 理;
(2) 当最低级的处理圆圈执行单一的、很好定义的功能时,即停止分解该处理。
电表基本信息模块主要包括新增电表基本信息、修改电表基本信息和查询电表基本
信息功能。
电表基本信息管理的细节图如图3.5所示。
Fig. 3.5 Data flow diagram of electricity meter information
如图3.5所示,如果是新增电表信息,则需要使用新增电表信息功能,把电表信息 信息保存数据库中,形成对应的电表信息记录;如果电表信息有所改变,则需要使用修 改电表信息功能。
电量信息管理是电量平衡信息管理系统的一项重要业务,主要包括电子表表底采 集、电子表表底补录、机械表表底录入、修改电表表底、删除电表表底和查询电表表底 功能。该部分涉及的信息较多,包括依据电表表底计算小时电量、班电量、日电量和月 电量信息等。
电量信息管理的细节图如图3.6所示。
图3.6电量信息管理细节图
Fig. 3.6 Data flow diagram of The management of power information
如图3.6所示,联网电表表底采集进入数据库,采用服务的形式实现的,未联网电 表表底按月进行人工采集,录入到数据库中,当服务异常停止作业时,或者人工抄数出 现错误时,都需要进行人工维护表底。
业务配置信息管理是本系统中的另一个重要部分,主要包括配置单位与电表关系、 配置工艺与电表关系、配置线路与电表关系等功能。该部分涉及的主要信息有单位与电 表关系管理的增加单位与电表关系、修改单位与电表关系和查询单位与电表关系;增加 工艺与电表关系、修改工艺与电表关系和查询工艺与电表关系;增加线路与电表关系、 修改线路与电表关系和查询线路与电表关系等。
业务配置信息管理的细节图如图3.7所示。
图3.7业务配置信息细节图
Fig. 3.7 Data flow diagram of service configuration
如图3.7所示,业务配置分单位、工艺和线路进行配置,主要是为按单位进行结算, 按工艺和线路进行平衡提供依据。
结算信息主要包括生成结算单和结算单打印功能。结算信息细节图如图3.8所示。
图3.8结算信息细节图
Fig. 3.8 Data flow diagram of settle accounts information
如图3.8所示,结算员生成结算单时,首先依据单位与电表关系,生成每个单位的 结算量,如果需要调整,则需要输入相应的调整量,否则直接生成,当全部单位的结算 量对应无误后,即可生成当月的电量结算单。结算单生成后,主管领导可以查询当月的 结算信息,包括各单位各点位的明细信息。
电量平衡信息管理是本系统中的另一个重要内容,主要包括单位平衡信息管理、工 艺平衡信息管理和线路平衡信息管理等功能。该部分涉及的主要信息有单位电量平衡分
析、单位电量平衡历史分析;工艺电量平衡分析、工艺电量平衡历史分析;一级线路平 衡信息、二级线路平衡信息和三级线路平衡信息等。
电量平衡信息管理的细节图如图3.9所示。
图3.9电量平衡信息管理细节图
Fig. 3.9 Data flow diagram of energy balance information management
如图3.9所示,进行电量信息平衡分析时,一定按照单位与电表关系、工艺与电表 关系和线路与电表关系展开。
统计査询信息管理主要包括基础数据查询管理和运行数据查询管理等需要统计查 询的信息。主要是对前期完成的业务数据进行统计查询。系统采集的各类数据,需要分 类汇总,并按照各种查询条件显示出来,同时为了方便理解,配合折线图、饼状图等图 表展示出来。统计查询信息管理细节图如图3.10所示。
图3.10统计查询信息管理细节图
Fig. 3.10 Data flow diagram of statistical query information management
3.4系统开发环境
综合了系统对功能、性能方面的需求,本系统采用.NETFramework技术实现分布式 通信,使用B/S三层架构,使用Microsoft Visual Studio 2008作为开发工具,使用SQL 2008 数据库服务器,使用C#语言开发。下面从系统架构、开发工具、数据库服务器、开发 语言方面详细介绍。
3.4.1系统架构
在系统架构上,采用了三层B/S架构,也就是浏览器/服务器模式,是WEB兴起后 的一种网络结构模式,WEB浏览器是客户端最主要的应用软件〔冈。这种模式统一了客 户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。 客户机上只要安装一个浏览器,如Netscape Navigator或Internet Explorer,服务器安装 SQL Server, Oracle、MYSQL等数据库。浏览器通过Web Server同数据库进行数据交 互。三层B/S结构是将应用功能分成表示层、功能层和数据层三部分。其解决方案是对 这三层进行明确分割,并在逻辑上使其独立。原来的数据层作为DBMS已经独立出来, 所以关键是要将表示层和功能层分离成各自独立的程序,并且还要使这两层间的接口简 洁明了。
三层B/S结构的各层功能如下:
(1)表示层是应用的用户接口部分,它担负着用户与应用间的对话功能。它用于 检查用户从键盘等输入的数据,显示应用输岀的数据。为使用户能直观地进行操作,—— 般要使用图形用户接口(GUI),操作简单、易学易用。在变更用户接口时,只需改写显 示控制和数据检查程序,而不影响其他两层。检査的内容也只限于数据的形式和值的范 围,不包括有关业务本身的处理逻辑。
(2)功能层相当于应用的本体,它是将具体的业务处理逻辑地编入程序中。衰示 层和功能层之间的数据交往要尽可能简洁。在应用设计中,一定要避免“进行一次準务 处理,在表示层和功能层间进行多几次数据交换”的笨拙设计。通常,在功能层中包含有: 确认用户对应用和数据库存取权限的功能以及记录系统处理日志的功能。
(3)数据层就是DBMS,负责管理对数据库数据的读写。DBMS必须能迅速执行 大量数据的更新和检索。现在的主流是关系数据库管理系统。因此,一般从功能层传送到 数据层的要求大都使用SQL语言。
3.4.2开发工具
Microsoft Visual Studio 2008提供了支持整个软件开发团队的工具:
(1)Visual Studio 2008包括集成、高效的工具,用于直观地构建面向服务的解决 方案,这些解决方案从部署环境的初始状态开始设计。
(2)Visual Studio2008为开发人员提供高级的静态分析、代码剖析、代码涵盖以 及单元测试工具,使团队能够在整个生命周期中尽早、频繁地规划质量。
(3) Visual Studio 2008构建于开发人员版本之上,更好地为测试人员提供了用于 管理和运行各种测试(包括单元测试、手工测试和Web测试)的工具,以及使团队能够 在应用程序部署之前检验其性能的高级负载测试工具【切。
(4) Visual Studio 2008提供一套基于软件项目管理人员已知内容的项目管理工 具:Microsoft Excel、Microsoft Project 和 Windows SharePoint Serviceso 与 Microsoft Office集成,项目管理人员不再需要手工将数据从这些应用程序映射到供工程团队使用 的数据。项目站点提供仪表盘式的项目状态视图。
(5) Visual Studio 2008还提供团队协作工具,使组织能够不费吹灰之力即可管理 并跟踪过程和软件项目的运行状况。
3.4.3数据库服务器
数据库(DataBase,简称为DB)是依照某种数据模型组织起来并存放在二级存储 器中的数据集合。这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定 组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改、查 由统一软件进行管理和控制。
SQL Server是一个关系数据库管理系统,以Transact-SQL (简称为T-SQL)作为它 的数据库查询和编程语言。T-SQL是结构化查询语言SQL的一种,支持ANSI SQL-92 标准。
SQLServer采用二级安全验证、登录验证及数据库用户账号和角色的许可验证。SQL Server支持两种身份验证模式:Windows身份验证和SQL Server身份验证。从SQL Server 7.0版本开始支持多种类型的角色,“角色”概念的引入方便了权限的管理,也使权限 的分配变得更加灵活。
T-SQL是SQL Server的核心,它强化了原有的SQL关键字以进行数据的存取、储 存及处理等功能,T-SQL扩充了流程控制指令,可以使用户方便地编写功能强大的存储 过程,它们存放在服务器端,并预先通过编译,执行的速度非常快。触发是一种特殊的 存储过程,用来确保SQL Server数据库引用的完整性,用户可以建立插入、删除和更新 触发以控制相关的表格中对数据列的插入、删除和更新,用户还可以使用规则(Rule)、 缺省(default)以及限制(Constraints),来协助将新的数值套用到表格中去
(1)SQL数据库服务器
SQLServer是一个对象一关系数据库管理系统。它提供开放的、全面的、和集成的 信息管理方法。每个Server由一个SQL DB和一个SQL Server实例组成。每个SQL数 据库对应唯一的一个实例名SID, SQL数据库服务器启动后,一般至少有以下几个用户: Internal,它不是一个真实的用户名,而是具有SYSDBA优先级的Sys用户的别名,它 由DBA用户使用来完成数据库的管理任务,包括启动和关闭数据库;Sys,它是一个 DBA用户名,具有最大的数据库操作权限;System,它也是一个DBA用户名,权限仅 次于Sys用户。
(2)客户端
客户端为数据库用户操作端,由应用、工具、SQL* NET组成,用户操作数据库时, 必须连接到一服务器,该数据库称为本地数据库。在网络环境下其它服务器上的数据库 称为远程数据库。用户要存取远程数据库上的数据时,必须建立数据库连接。
SQL由至少一个表空间和数据库模式对象组成。这里,模式是对象的集合,而模式 对象是直接引用数据库数据的逻辑结构。模式对象包括这样一些结构:表、视图、序列、 存储过程、同义词、索引、簇和数据库链等。逻辑存储结构包括表空间、段和范围,用 于描述怎样使用数据库的物理空间。而其中的模式对象和关系形成了数据库的关系设 计。
3.4.4开发语言
作为一种面向对象的语言,C#支持封装、继承和多态性概念。所有的变量和方淞, 包括Main方法(应用程序的入口点),都封装在类定义中。类可能直接从一个父类继承, 但它可以实现任意数量的接口。重写父类中的虚方法的各种方法要求override关键字作 为一种避免意外重定义的方式。在C#中,结构类似于一个轻量类;它是一种堆栈分配 的类型,可以实现接口,但不支持继承【2°】。 '
除了这些基本的面向对象的原理,C#还通过几种创新的语言结构加快了软件组傑的 开发,其中包括:
(1)封装的方法签名(称为委托),它实现了类型安全的事件通知。
(2)属性(Property),充当私有成员变量的访问器。
(3)属性(Attribute),提供关于运行时类型的声明性元数据。
(4)内联XML文档注释。
在C#中,如果需要与其他Windows软件(如COM对象或本机Win32 DLL)交互, 可以通过一个称为“Interop”的过程来实现。互操作使C#程序能够完成本机C++应用程序 可以完成的几乎任何任务。在直接内存访问必不可少的情况下,C#甚至支持指针和“不 安全”代码的概念0]。
C#的生成过程比C和C++简单,比Java更为灵活。没有单独的头文件,也不要求 按照特定顺序声明方法和类型。C#源文件可以定义任意数量的类、结构、接口和事件。
3.5本章小结
本章从功能的角度对系统进行了详细分析。首先,通过介绍报价业务流程,分析了 系统需要实现的具体功能,然后介绍了.NET开发框架和.NETRemoting技术,这些技术 是系统技术可行性分析的根本,然后从系统架构、开发工具、数据库服务器和开发语言 的选择方面介绍了系统的开发环境,系统选择B/S三层架构、使用Microsoft Visual Studio 2008作为开发工具、使用SQL2008作为数据服务器、使用C#开发语言,最后分析了系 统的数据流程,得到系统的数据流程图。其中总体图描述了系统中整体的数据走向以及 和外部实体的交互关系,零级图提供了总揽全局的视图模型,细节图详细描述了各个部 分内部的数据交互。
经过系统分析,对系统功能有了整体的了解,下一章中将详细介绍基于系统分析的 系统设计。
第4章系统设计
设计活动是软件开发过程的关键活动之一。它的主要任务是解决“如何做”的问 题,即将软件的用户需求合理地变换成目标系统的体系结构、接口特征、模块逻 辑、数据结构等。软件设计决定了系统的可扩充性、可维护性、可复用性及系统 的性能,对于软件质量有着及其重要的作用。
本系统围绕着电量平衡信息管理业务进行设计,旨在设计能够实现电量平衡 的自动化、规范化的系统。软件设计活动一般分为总体设计和详细设计两个阶段, 前者的目的是确定目标系统的构架,后者是在这个构架上进一步精化。
4.1系统总体设计
软件构架模型是对复杂的系统进行抽象,为系统设计蓝图,是关于系统构造 及系统各工作机制的相对精简、却能清晰反映核心问题的模型。首钢矿业公司电. 力平衡管理系统主要包括电表基本信息管理、业务配置信息管理、电量基本信息 管理、结算信息管理、电量平衡信息管理和统计查询信息管理模块,本系统的功 能模块图如图4.1所示。
0.0首钢矿业公司电量平衡管理系统-
图4.1系统功能模块图
Fig. 4」Function module diagram of system
首钢矿业公司电平衡系统主要是通过各厂矿电表自动取数,依据各电表表底 数,计算出各电表按小时、班、日、月的耗电值,电费在尖、峰、平、谷不同时 段的费用不同,计算出日、月电费的相关数据。电表分电子表和机械表,电子表 表底按小时进入工控服务器是厂家完成的,机械表每月人工抄录一次表底,并录 入数据库服务器。将工控服务器表底数据传输到电量平衡系统数据库服务器,采 用的是服务形式,做了一个服务程序来说实现。无表底数据的情况,选择最近的 时间,进行表底数据的手工补录,然后采用存储过程的形式对无表底期间的表底 数据进行自动计算补录。所有的表底数据均可以进行手工修改。触发器实现系统 干预和人为操作的电表表底的准确性进行校验。表底数据传输到电量平衡信息管 理系统数据库服务器后,按照规则采用作业调用存储过程分步进行小时、班、日、 月的计算,分别存入小时表、班表、日表及月表。
4.2系统功能的划分
下面,将详细介绍系统中各个功能模块的主要功能:
(1)电表基本信息管理模块:电表基本信息包括电表信息和电表更换信息, 所以该模块主要包括对电表信息的管理和电表更换信息的管理。当有电表接入系 统时,需要记录电表的各信息,包括电表ID号,电表类型、电表状态等信息;当 电表由于过保或者损坏等原因,需要更换时需要记录电表更换信息,包括新旧电 表表底信息等。
(2)业务配置信息管理模块:该模块主要包括配置单位与电表关系、工艺 与电表关系和线路与电表关系功能。通过各种关系的配置管理,计算出各单位、 各工艺和各线路的电量信息。
(3)电量基本信息管理模块:该模块主要包括记录电表表底信息、通过表 底信息计算出小时电量信息、班电量信息、日电量信息、月电量信息等功能。由 于电表分电子表和机械表,电子表表底按小时进入工控服务器是厂家完成的,机 械表每月人工抄录一次表底,并录入工控服务器。将工控服务器表底数据传输到 电量平衡系统数据库服务器,采用的是服务形式,做一个服务程序来说实现。
各电表表底进入系统后,按照存储过程,以各电表表底为基础数据,分别计 算岀各电表小时电量、班电量、日电量和月电量。
(4)结算信息管理模块:该模块主要实现矿业公司各子厂矿月电费结算功 能。各电表电量依据采集时间所在的尖峰平谷时期不同,电费不同,按月计算出 电费数据,根据前期配置的单位与电表关系,计算出矿业公司各子厂矿的月电费
数据,作为该子厂矿月底结算的依据。结算信息按月生成结算报表,并按照年度、 厂矿等进行横向和纵向比较分析,以便在今后的生产中合理安排,节约电费成本。
(5)电量平衡信息管理模块:该模块主要实现按单位、工艺和线路的平衡 分析功能。进入系统的小时电量,按照单位与电表关系、工艺与电表关系和线路 与电表关系,计算出各单位、各工艺、各线路的小时电量,与其历史电量信息对 比分析,为各单位、各工艺、各线路的经济用电提供参考。
(6)统计查询信息管理模块:该模块主要包括对系统各模块信息的查询分 析功能。系统采集的各类数据,需要分类汇总,并按照各种查询条件显示出来, 同时为了方便理解,配合折线图、饼状图等图表展示岀来。主要分为电表相关、 单位查询、工艺相关、运行数据相关等需要统计查询的信息。
4.3主要功能模块设计
4.3.1电表基本信息管理模块的设计
电表基本信息的管理主要指对电表信息的管理和电表更换信息的管理。工作 人员根据需要使用增加电表基本信息、修改电表信息基本信息、删除电表信息基 本信息和查询电表基本信息的功能管理电表信息,实现系统中数据的实时更新。 电表基本信息管理模块的功能模块图如图4.2所示。
1.1电表基本信息管理
图4.2电表基本信息管理的功能模块图
Fig. 4.2 Function module diagram of electricity meter information management
电表更换信息管理是电表信息管理的重要环节,当电表岀现损坏或者过有效 期的情况,需要进行换表操作。电表更换信息管理主要包括增加电表更换记录、 修改电表更换记录、删除电表更换记录和查询电表更换记录信息功能。电表更换 信息管理的功能模块图如图4.3所示。
1.2电表更换信息管理
图4.3电表更换信息管理的功能模块图
Fig. 4.3 Function module diagram of electricity meter information updating management
4.3.2业务配置信息管理模块的设计
业务配置信息管理模块主要实现电表按单位、按工艺或按线路划分功能,相 应分为单位与电表关系模块、工艺与电表关系模块、线路与电表关系模块和工艺 产量关系模块等。
单位与电表关系管理模块主要对电表按单位进行划分,为月底电费结算提供 依据。单位与电表关系管理主要包括增加单位与电表关系、修改单位与电表关系、 删除单位与电表关系和查询单位与电表关系功能。单位与电表关系管理模块的功 能模块图如图4.4所示。
2.1单位与电表关系
图4.4单位与电表关系管理的功能模块图
Fig. 4.4 Function module diagram of information management on the relationship between units and
electricity meter
工艺与电表关系管理模块主要对电表按工艺进行划分,为月底电量按照工艺 进行统计分析提供依据。工艺与电表关系管理主要包括增加工艺与电表关系、修
改工艺与电表关系、删除工艺与电表关系和查询工艺与电表关系功能。工艺与电 表关系管理模块的功能模块图如图4.5所示。
2.2工艺与电表关系
图4.5工艺与电表关系管理的功能模块图
Fig. 4.5 Function module diagram of information management on the relationship between process
and electricity meter
线路与电表关系模块和工艺产量关系模块的功能模块图,同单位与电表关系 管理模块的功能模块图大致相同,这里不再一一详述。
4.3.3电量基本信息管理模块的设计
电量基本信息管理模块是本系统的核心模块之一。电量基本信息管理模块主 要包括电表表底信息管理、小时电量信息管理、班电量信息管理、日电量信息管 理和月电量信息管理。本模块在设计过程中,需要用到.Net服务和存储过程等, 也是系统能否稳定运行的基础。
首钢矿业公司的电表分电子表和机械表两种,电子表表底按小时进入工控服 务器是厂家完成的,机械表数据是人工抄录,每8小时,也就是1班抄一个表底, 并通过系统录入数据库服务器。将工控服务器表底数据采集到电量平衡系统数据 库服务器,采用的是.Net服务形式,做一个服务程序来说实现。当出现工控机缺 数或者服务停止运行,造成数据库中电表表底数据缺失等情况时,需要在系统中 对表底进行补录。.Net服务最后一次采集表底的时间是整点后的第55分,如果某 块表的表底仍然没有采集上来,系统默认该块表表底缺失,针对表底缺失的情况, 系统选择该表最近一个小时的小时量,加上最近一个小时的表底,作为该小时的 表底,进行表底数据的自动补录,所有自动补录的表底数据均可以进行手工修改。 电表表底信息管理主要包括电子表表底采集、电子表表底补录、机械表表底录入、 修改电表表底、删除电表表底和查询电表表底功能。电表表底信息管理模块的功 能模块图如图4.6所示。
3.1电表表底信息管理
图4.6电表表底信息管理的功能模块图
Fig. 4.6 Function module diagram of electricity meter reading information management
小时电量信息管理、班电量信息管理、日电量信息管理和月电量信息管理均 采用存储过程的形式实现。根据采集或录入的电表表底数据,首先计算出电表的 小时量存入电表小时量数据库表,然后累计出电表班电量、日电量和月电量,分 别存入数据库表。
4.3.4结算信息管理模块的设计
结算信息管理模块主要包括结算信息管理和结算单打印管理,实现矿业公司 各子厂矿月电费结算功能。其中结算信息管理主要包括结算调整量管理和生成结 算单功能。各电表电量依据采集时间所在的尖峰平谷时期不同,电费不同,按月 计算出电费数据,根据前期配置的单位与电表关系,计算出矿业公司各子厂矿的 月电费数据,作为该子厂矿月底结算的依据。结算信息按月生成结算报表,并按 照年度、厂矿等进行横向和纵向比较分析,以便在今后的生产中合理安排,节约 电费成本。结算信息管理的功能模块图如图4.7所示。
4. 0结算信息管理
图4.7结算信息管理的功能模块图
Fig. 4.7 Function module diagram of settlement information management
4.3.5电量平衡信息管理模块的设计
电量平衡信息管理模块主要包括单位平衡信息管理、工艺平衡信息管理和线 路平衡信息管理等功能模块。该模块是首钢矿业公司电量平衡信息管理系统中较 为重要的业务模块,在该模块的设计过程中较多的用到了图表和ReportBuilder等 报表输出工具,同时该模块的设计较多的用到了归属关系的设置,归属关系的设 置为单位电量平衡分析、单位电量平衡历史分析、工艺电量平衡分析、工艺电量 平衡历史分析、一级线路平衡信息、二级线路平衡信息和三级线路平衡信息为统 计查询提供参考依据。
单位平衡信息管理包括单位电量平衡分析和单位电量平衡历史分析功能。依 据业务配置管理模块中的单位与电表关系配置,可以方便的查询出电表的归属单 位,为该单位每月的电表耗电量计算提供参考,依据计算出的月电耗与历史数据 比较,得出该月单位电耗偏差,给出分析结果,为该单位降低能耗提供参考。单 位平衡信息管理的功能模块图如图4.8所示。
5. 1单位平衡信息管理
图4.8单位平衡信息管理的功能模块图
Fig. 4.8 Function module diagram of unit balance information management
工艺平衡信息管理包括工艺电量平衡分析和工艺电量平衡历史分析功能。首 钢矿业公司的生成工艺包括采、选、球、烧等各个工艺,每个工艺分为多个系列, 为了精确把握各工艺,各系列在生成过程中的能耗情况,设计出了工艺平衡信息 管理模块。工艺平衡信息管理依据业务配置管理模块中的工艺与电表关系配置, 查询出各个电表的归属工艺,参考各工艺的工艺产量数据,为计算工艺单耗提供 依据,同时,工艺平衡信息的统计数据能很好的反映出各工艺各系列在一定时间 段内的能耗情况。工艺平衡信息管理部分功能模块图如图4.9所示。
图4.9工艺平衡信息管理的功能模块图
Fig. 4.9 Function module diagram of process balance information management
线路平衡信息管理包括一级线路平衡信息、二级线路平衡信息和三级线路平 衡信息功能。线路平衡信息管理部分功能模块图如图4.10所示。
图4.10线路平衡信息管理的功能模块图
Fig. 4.10 Function module diagram of line balance information management
4.3.6统计查询信息管理模块的设计
统计查询信息管理模块主要是对前期完成的业务数据进行统计查询。系统采 集的各类数据,需要分类汇总,并按照各种查询条件显示出来,同时为了方便理 解,配合折线图、饼状图等图表展示出来。主要分为基础数据查询管理和运行数 据查询管理等需要统计查询的信息。
基础数据查询管理模块主要包括电表、工艺、单位等查询功能。主要分为电 表相关、单位查询、工艺相关、结算相关等需要统计查询的信息。基础数据查询 管理模块的功能模块图如图4.11所示。
运行数据查询管理主要是电表表底数据、产量数据、电表电量数据等的査询 功能,内容较为简单,不再一一详述。
4.4数据库设计
数据库设计(Database Design)是指根据用户的需求,在某一具体的数据库管理 系统上,设计数据库的结构和建立数据库的过程。本系统使用SQL数据库管理系 统,采用关系数据库模式。
4.4.1数据库设计知识
良好的数据库设计对于一个高性能的应用程序非常重要,就像一个空气动力 装置对于一辆赛车的重要性一样。如果一辆汽车没有平滑的曲线,将会产生阻力 从而变慢。关系没有经过优化,数据库无法尽可能高效地运行。应该把数据库的 关系和性能看作是规范化的一部分。同时也要认识到数据管理不再仅仅是存储和 管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型, 从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都 在各个方面得到了广泛的应用。
除了性能以外的问题,就是维护的问题了,数据库应该易于维护。这包括只 存储数量有限的(如果有的话)重复性数据。如果有很多的重复性数据,并且这些数 据的一个实例发生一次改变(例如,一个名字的改变),这个改变必须对所有的其他 的数据都进行。为了避免重复,并且增强维护数据的能力,可以创建可能的值的 一个表并使用一个键来引用该值。在这种方式中,如果值改变了名字,这个改变 只在主表中发生一次,所有的其他表的引用都保持不变。
例如,假设你负责维护一个学生数据库以及他们所注册的课程。如果这些学 生中的30个在同一个课堂中,让我们将这门课叫做AdvancedMath(高等数学),课 程的名字将会在表中出现30次。现在,如果老师决定把这门课的名字改为 Mathematics IV,我们必须修改30条记录以反映出新的课程名。如果数据库设计 为课程名出现在一个表中,只有课程ID号码和学生记录一起存储,那么要更改课 程名称,我们就只需要改变一条记录而不是35条记录。
一个规划和设计良好的数据库的优点是众多的,它也证实了这样一个道理, 前期做的工作越多,后面所要做的就越少。在使用数据库的应用程序公开发布之 后,还要对数据库进行重新设计,这是最糟糕的。因此,在开始编写一个应用程 序的代码之前,需要花大量的时间来设计数据库。
一般数据库设计方法有两种,即属性主导型和实体主导型。属性主导型从归 纳数据库应用的属性出发,在归并属性集合(实体)时维持属性间的函数依赖关系。 实体主导型则先从寻找对数据库应用有意义的实体入手,然后通过定义属性来定 义实体。一般现实世界的实体数在属性数1/10以下时,宜使用实体主导型设计方 法。面向对象的数据库设计是从对象模型出发的,属于实体主导型设计。本系统 的数据库设计就属于实体主导型设计。
一般地,数据库应用系统都遵循以下相关开发步骤:
(1) 设计应用系统结构;
(2) 选择便于将应用程序与DBMS结合的DBMS体系结构,如RDBMS;
(3) 根据应用程序使用的环境平台,选择适宜的DBMS(如Oracle)和开发工 具(如PB);
(4) 设计数据库,编写定义数据库模式的SQL程序;
(5) 编写确保数据正确录入数据库的用户接口应用程序;
(6) 录入数据库数据;
(7) 运行各种与数据库相关的应用程序,以确认和修正数据库的内容。
4.4.2数据库表设计
本系统的数据库表主要包括用户信息表、电表信息表、电表表底信息表、小 时电量信息表、电表更换信息表、单位与电表关系信息表、工艺产量小时信息表、 单位结算信息表、线路与电表关系信息表、工艺与电表关系信息表、班电量信息 表、日电量信息表、月电量信息表和日报信息信息表等。下面列举了部分数据库 表结构。
(1)用户信息表
用户信息表(User_Infb)用于记录系统用户的基本信息。其中用户ID是首钢矿 业公司为每个用户分配的唯一性标识。用户登录系统后,可以修改自己的密码等 信息。用户信息表如表4.1所示。
表4.1用户信息表(Userjnfb)
Tabel 4.1 User information table (User info)
字段名 类型 大小 是否可空 约束
用户ID Int 4 N 主键
姓名 Varchar 10 N
性别 Char 2 Y
密码 Varchar 10 Y
所属部门 X^rchar 20 Y
电子签名 Image 200 Y
角色 Varhar 10 Y
(2)电表信息表
电表信息表(ElectricityMeter_Info)用于记录电表信息。其中电表ID是自动增1 的,使用SQL标识规范实现,状态字段用于表示当前电表是否在用,电表类型表 示电表是否联网(联网电表表底自动采集,每小时釆集一次表底:未联网电表人 工抄录,一月录入一条表底记录)。
电表信息表如表4.2所示。
表 4.2 电表信息表(EIectricityMeter_Infb)
Tabel 4.2Electricity Meter information table (ElectricityMeter Info)
字段名 类型 大小 是否可空 约束
电表ID Int 4 N 主键
生产编码 Varchar 10 Y
安装点位 Varchar 10 Y
倍率 Char 6 Y
生产日期 DateTime 8 Y
检定日期 DateTime 8 Y
有效日期 DateTime 8 Y
归属单位 Varchar 20 Y
状态 Char 4 Y
电表类型 Varchar 10 Y
(3)电表表底信息表
电表表底信息表(ElectricityMeterDate_Info)用于记录各个电表的表底数据信 息。其中表底ID是自动增1的,使用SQL标识规范实现,电表ID取自电表信息 表,类型字段包括自动上传、批量补抄、倒传、手工补量四种情况,默认设置为“自 动上传”。电表表底信息表如表4.3所示。
表 4.3 电表表底信息表(ElectricityMeterDate _info)
Tabel 4.3 ElectricityMeterDate information table (ElectricityMeterDate infb)
字段名 类型 大小 是否可空 约束
表底ID Int 4 N 主键
电表ID Int 4 N 外键
续表4.3电表表底信息表(ElectricityMeterDate」nfd)
Tabel 4.3 ElectricityMeterDate information table (ElectricityMeterDate infd)
字段名 类型 大小 是否可空 约束
记录时间 DateTime 8 Y
生产日期 DateTime 8 Y
尖期表底 Decimal 9 Y
峰期表底 Decimal 9 Y
平期表底 Decimal 9 Y
谷期表底 Decimal 9 Y
总表底 Decimal 9 Y
类型 Char 4 Y
(4)小时电量信息表
小时电量信息表(HoursPower_Info)用于记录各个电表的小时电量信息。其中序 号是自动增1的,使用SQL标识规范实现,电表ID取自电表信息表。班电量信 息表、日电量信息表和月电量信息表均依据小时电量信息表信息创建,数据也是 在小时电量信息表的基础上计算得出的。
小时电量信息表如表4.4所示。
表4.4小时电量信息表(HoursPower_lnfo)
Tabel 4.4 Hours Power information table (HoursPower Info)
字段名 类型 大小 是否可空 约束
序号 Int 4 N 主键
电表ID Int 4 N 外键
尖期电量 Decimal 9 Y
峰期电量 Decimal 9 Y
平期电量 Decimal 9 Y
谷期电量 Decimal 9 Y
总电量 Decimal 9 Y
记录时间 DateTime 8 Y
生产日期 DateTime 8 Y
班次 Char 6 Y
(5)电表更换信息表
电表更换信息表(ElectricityMeterChange_Infb)用于记录各个电表的更换信息。 由于电表的使用期限和损坏等原因,需要对电表进行更换,并记录更换信息。电 表更换信息中的旧表表底和新表表底在计算电表小时量的过程中具有很重要的作 用,保证小时电量计算的正确,避免电量出现大数据等情况,其中序号是自动增1 的,使用SQL标识规范实现,电表ID取自电表信息表。
电表更换信息表如4.5所示。
表 4.5 电表更换信息表(ElectricityMeterChange_Infb)
Tabel 4.5 Electricity Meter Change information table (ElectricityMeterChange lnfo)
字段名 类型 大小 是否可空 约束
序号 Int 4 N 主键
电表ID Int 4 N 外键
旧表尖期电量 Decimal 9 Y
旧表峰期电量 Decimal 9 Y
旧表平期电量 Decimal 9 Y
旧表谷期电量 Decimal 9 Y
旧表总电量 Decimal 9 Y
新表尖期电量 Decimal 9 Y
新表峰期电量 Decimal 9 Y
新表平期电量 Decimal 9 Y
新表谷期电量 Decimal 9 Y
新表总电量 Decimal 9 Y
旧表倍率 Char 6 Y
换表时间 DateTime 8 Y
(6)单位与电表关系信息表
单位与电表关系信息表(UnitAndElectricityMeter)用于记录各个电表所属单位 信息,其中序号是自动增1的,使用SQL标识规范实现,电表ID取自电表信息 表,进出口表示该电表对该单位是进口还是出口,结算标识记录该电笔是公司级 结算还是厂矿级结算,统计标识表示该电表是否统计。单位与电表关系信息表如 表4.6所示。
表4.6单位与电表关系信息表(UnitAndElectricityMeter)
Tabel 4.6 Unit And Electricity Meter information table (UnitAndElectricityMeter)
字段名 类型 大小 是否可空 约束
序号 Int 4 N 主键
单位名称 Varchar 20 N
电表ID Int 4 N 外键
进出口 Char 4 Y
结算标识 Bit 1 Y
统计标识 Bit 1 Y
(7)工艺产量小时信息表
工艺产量小时信息表(ProcessYield_Info)用于记录按照工艺划分的小时产量信 息,其中序号是自动增1的,使用SQL标识规范实现,工艺ID取自工艺信息表。 工艺产量班信息表、工艺产量日信息表和工艺产量月信息表均依据工艺产量小时 信息表信息创建,数据也是在工艺产量小时信息表的基础上计算得出的,工艺产 量小时信息表如表4.7所示。
表4.7工艺产量小时信息表(Process Yield Jnfb)
Tabel 4.7 Process Yield information table (ProcessYield」nfb)
字段名 类型 大小 是否可空 约束
序号 Int 4 N 主键
工艺名称 Viarchar 20 N
尖期电量 Decimal 9 Y
峰期电量 Decimal 9 Y
平期电量 Decimal 9 Y
谷期电量 Decimal 9 Y
总电量 Decimal 9 Y
产量 Decimal 9 Y
开始时间 DateTime 8 Y
结束时间 DateTime 8 Y
生产日期 DateTime 8 Y
班次 Char 6 Y
(8)单位结算信息表
单位结算信息表(UnitSettlement_Infb)用于记录各单位月底结算信息,其中序号 是自动增1的,使用SQL标识规范实现,单位ID取自电表信息表,单位结算信 息表如表4.8所示。
表4.8单位结算信息表(UnitSettlement _Infb)
Tabel 4.8 Unit Settlement information table (UnitSettlement」nfo)
字段名 类型 大小 是否可空 约束
序号 Int 4 N 主键
单位名称 Varchar 20 N
结算类型 Char 10 Y
调整量 Decimal 9 Y
结算量 Decimal 9 Y
结算金额 Decimal 9 Y
结算月份 DateTime 8 Y
结算时间 DateTime 8 Y
(9)日报信息表
日报信息表(Daily_Info)用于输出各种项目的报表信息。日报信息表如表4.9所
Zjs O
表4.9日报信息表(Dailyjnfo)
Tabel 4.9 Daily information table (Daily lnfb)
字段名 类型 大小 是否可空 约束
序号 Int 4 N 主键
工艺名称 Varchar 20 N
生产日期 DateTime 8 Y
日报项目名称 Varchar 50 Y
续表4.9日报信息表(Dailyjnfo) Tabel 4.9 Daily information table (Daily info)
字段名 类型 大小 是否可空 约束
夜班完成量 Decimal 9 Y
白班完成量 Decimal 9 Y
日完成量 Decimal 9 Y
在本系统中,除了上述列举的典型数据库表,还有一些业务配置表,这些表 和单位与电表关系信息表一起,构成了该系统数据库表的基础,如工艺与电表关 系信息表、线路与电表关系信息表等,另外有一些数据库表是几个子系统间共用 的,另外,有一些表是实体间的联系表,主要是为m:n类型的关系设计的,这里 不再一一列举。
4.5本章小结
软件设计是决定软件性能的关键。本章首先介绍了系统的总体设计,给出了 系统总体设计产生的功能模块图。然后,根据总体功能模块图,介绍了系统功能姦 的划分。合理地划分好功能模块后,又详细介绍了各个功能模块和子模块的设计。 数据好比软件系统的血液,所以数据库设计是应用中最重要的一部分。本章第四 节首先介绍了数据库设计的一些基本知识和经验,然后据此设计得到了本系统的 E-R图,并对此进行了详细描述。本章的最后一节给出了系统设计产生的部分数据* 字典,这些数据字典是系统实现的基础。
下一章中将详细介绍了系统各个模块以及关键技术的实现。
第5章系统实现
系统分析和系统设计工作完成之后,系统的功能、模块结构、数据组成和数 据结构已基本确定,接下来的工作就是系统实现。系统实现阶段的任务是将详细 设计的结果转化为用具体的程序设计语言所书写的程序。根据前两章对系统的分 析及设计,本章将对系统中的各模块及子系统的实现情况作了较为详细的介绍。
5.1表底数据采集服务的实现
windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器 环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被 写进windows事件日志。计算机启动时,服务会自动开始运行,他们不要用户一 定登陆才运行。把windows服务的实现分为服务的创建、Window服务程序的编写 和服务的安装方式三部分。
(1)创建window服务项目:
建一个window服务项目。在项目解决方案上右击,点增加,选择新建项目, 在项目类型上选择Windows,模板选择Windows服务。
(2)编写Window服务程序:
1)创建后会生成两个文件Program.es和Servicel.cs ,其中program.es这 个文件不用动,里面已自动生成好了。我们在Servicel.cs里增加所要的操作,里 面有两个重写方法OnStart和OnStop, OnStart和OnStop分别是服务器启动和停 止后,所发生的事件操作方法•定义了一个定时器,每隔5秒执行一次(theout方法), 因为暂停恢复功能默认是不启用的,需要设置CanPauseAndContinue属性启用此功 能,同时重写OnStop和OnContinue方法,添加自己的逻辑代码。
2)至此,我们的服务以及服务实现的功能就已经写好了,下面怎么让客户端安 装我们的服务呢?这里才是我写这篇文章的目的!先要增加一个安装程序类,切换到 视图窗口,点右击增加安装程序,便会增加一个程序安装类文件Projectlnstaller.cso
3)这里 serviceProcessInstallerl 和 servicelnstallerl 有几个重要属性要设置, servicelnstallerl 中的 StartType 要设置成 Automatic,表示随机启动,ServiceName 表示服务名称,Description表示服务的描述,DisplayName表示显示名称。 serviceProcessInstaller 1 中的 Account 要设置成 LocalSystem,表示本地系统帐号。
(3)Window服务的安装方式:
1)命令安装。通过命令窗口,执行InstallUtil.exe服务路径可安装Window 服务。执行 InstallUtil.exe 命令如下:\InstallUtil.exe E:\Sample\SKWMS_Sample\WindowServer\bin\Debug\WindowServer.ex e。
2)安装程序。安装程序制作步骤如下:第一步,在解决方案视图下,右击选 择增加,进行新建项目,选择项目类型选择安装和部署点击模板选择安装项目。第二 步,创建后,在安装项目视图下,右击视图,选择文件系统。由于我们是安装服务, 就不需要用户桌面和程序菜单了,直接应用程序文件夹,右击增加,选择项目输出。 上面有两点需要注意,一是项目选择中选择要安装的服务,二是项目选择下面要选 择主输出,选择好后确定,这一步增加了安装程序的文件夹,下一步就是给这个安装 程序增加操作,这里我们增加两个基本操作,一个是安装,一个是卸载。第三步,在 安装项目视图下,右击视图,选择自定义操作。上面可以看到有安装,提交,回滚, 卸载等操作,我们先增加安装操作,点击安装,右击增加自定义操作,会弹出一个对 话。第四步,选择应用程序文件夹,并选中之前增加的主输出项确定,这样这个安装 程序就增加了安装的操作,同样按照这样的方式增加卸载操作,卸载与安装唯一不同 的是需要设置一个命令参数,不可少。第五步,这里Arguments里输入/u表示 卸载命令相当于InstallUtil.exe /u服务路径,到这里,我们的安装程序就己经制 作好了,生成安装程序项目,将会生成setup.exe和setup.msi安装文件,拷贝 到客户端,点击setup.exe。
5.2电表基本信息管理模块的实现
电表基本信息管理模块主要实现对电表信息和电表更换信息的管理。这一部 分的实现主要包括增加电表信息、修改电表信息、删除电表信息、查询电表信息、 增加电表更换信息、修改电表更换信息、删除电表更换信息和查询电表更换信息 的实现。
5.2.1电表信息管理功能的实现
电表信息的管理主要包括增加电表信息、修改电表信息、删除电表信息、査 询电表信息功能。下面以增加电表信息为例,详细介绍电表信息管理的实现。
本模块采用三层B/S结构实现,包括表示层、功能层、数据层,其中表示层 实现显示窗体控件、接收电表录入信息和显示操作结果信息的功能,以及表示层 和数据层间的数据传递功能;功能层实现主要的业务逻辑操作,调用数据访问层 方法;数据层实现对数据库表、视图的操作及执行存储过程。
视图是由一个或多个数据表(基本表)或视图导出的虚拟表或查询表,是关系数 据库系统提供给用户以多种角度观察数据库中数据的重要机制。
存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储 在数据库服务器中,应用程序使用时只要调用即可。
增加电表信息时,首先在窗体中录入电表信息,然后获取用户输入的电表信 息并对信息进行格式检验,如果检验通过,则调用数据库访问层的方法插入记录; 如果不通过,则输出对错误信息的提示;插入记录时,可能由于数据库服务器没 打开等原因造成插入失败,所以,记录插入完毕后,需要给出插入结果提示。
增加电表信息的流程图如图5.1所示。
图5.1电表信息管理流程图
Fig. 5.1 Flow chart of electricity meter information management
删除电表信息时,首先要判断该电表是否存在更换信息记录,如果存在,必 须要先删除该电表的更换信息记录,然后才能执行删除电表信息操作。
5.2.2电表更换信息管理的实现
电表更换信息的管理主要包括增加电表更换信息、修改电表更换信息、删除 电表更换信息、查询电表更换信息功能。下面以增加电表更换信息为例,详细介 绍电表更换信息管理的实现。
增加电表更换信息时,首先在窗体中录入电表更换信息,然后获取用户输入 的电表更换信息并对信息进行格式检验,如果检验通过,则调用数据库访问层的 方法插入记录;如果不通过,则输出对错误信息的提示;插入记录时,可能由于 数据库服务器没打开等原因造成插入失败,所以,记录插入完毕后,需要给出插 入结果提示。
增加电表更换信息流程图与增加电表信息的流程图类似,这里不再重复。
执行电表更换信息操作时,必须记录新旧电表的表底,为计算小时电量提供 依据。
5.3业务配置信息管理模块的实现
业务配置信息管理模块主要实现对单位与电表关系、工艺与电表关系和线路 与电表关系的管理。这一部分的实现主要包括增加单位与电表关系、修改单位与 电表关系、删除单位与电表关系、查询单位与电表关系、增加工艺与电表关系、 修改工艺与电表关系、删除工艺与电表关系、查询工艺与电表关系、增加线路与 电表关系、修改线路与电表关系、删除线路与电表关系、查询线路与电表关系。
5.3.1单位与电表关系功能的实现
单位与电表关系的管理主要包括增加单位与电表关系、修改单位与电表关系、 删除单位与电表关系、查询单位与电表关系的功能。单位与电表关系的实现过程 中存在2个判断过程,一是判断进入系统的信息是否符合格式要求,如果不符合 格式要求,需要给出提示信息,方便修改完善后进入系统;二是判断进入系统的 信息是否己经存在,如果存在,不允许进入系统,避免重复数据出现。下面以增 加单位与电表关系为例,详细介绍单位与电表关系管理的实现。
增加单位与电表关系时,首先在窗体中录入单位与电表关系信息,然后获取 用户输入的单位与电表关系信息并对信息进行格式检验,如果不通过,则输出对 错误信息的提示;如果检验通过,判断数据库中是否存在需要录入的单位与电表 关系信息,存在则结束操作,否则调用数据库访问层的方法插入记录;插入记录 时,可能由于数据库服务器没打开等原因造成插入失败,所以,记录插入完毕后, 需要给出插入结果提示。
添加单位与电表关系的流程图如图5.2所示。.
注意,对单位与电表关系进行维护时,需要进行进出口关系维护,判断出该 电表记录的是该单位的进口电量还是出口电量。在系统的实现过程中,采用的单 选框的形式出现,同时给岀校验结果,避免错误信息进入系统,造成后期统计信 息失真的情况出现。
/获取单位与电表关系信息/
*
图5.2添加单位与电表关系流程图
Fig. 5.2 Flow chart of add unit and electricity meter
5.3.2工艺与电表关系功能的实现
工艺与电表关系的管理主要包括增加工艺与电表关系、修改工艺与电表关系、 删除工艺与电表关系、查询工艺与电表关系的功能。增加工艺与电表关系的操作 步骤和单位与电表关系的操作雷同,不再详述,下面以修改工艺与电表关系为例, 详细介绍工艺与电表关系管理的实现。
修改工艺与电表关系时,首先在窗体中输入査询条件,调用数据访问层方法, 查询出需要修改的记录,选定该记录,进行信息编辑,然后获取用户编辑的工艺 与电表关系信息并对信息进行格式检验,如果不通过,则输出对错误信息的提示; 如果检验通过,依据该记录主键,调用数据库访问层的方法修改记录;修改记录 时,可能由于数据库服务器没打开等原因造成修改失败,所以,记录修改完毕后, 需要给出修改结果提示。
修改工艺与电表关系的流程图与添加单位与电表关系的流程图类似,这里不 再重复。
5.3.3线路与电表关系功能的实现
线路与电表关系的管理主要包括增加线路与电表关系、修改线路与电表关系、 删除线路与电表关系、查询线路与电表关系的功能。增加线路与电表关系的操作 步骤和单位与电表关系的操作雷同,修改线路与电表关系的操作步骤和工艺与电 表关系的操作雷同,不再详述,下面以删除线路与电表关系为例,详细介绍线路 与电表关系管理的实现。
删除线路与电表关系时,首先在窗体中输入查询条件,调用数据问层方法, 查询出需要删除的记录,选定该记录,进行删除操作,删除记录时,可能由于数 据库服务器没打开等原因造成修改失败,所以,记录删除完毕后,需要给出删除 结果提示。
删除线路与电表关系的流程图与添加单位与电表关系的流程图类似,这里不 再重复。
5.4电量基本信息管理模块的实现
电量基本信息管理模块是本系统的核心模块之一。电量基本信息管理模块主 要包括电表表底信息管理、小时电量信息管理、班电量信息管理、日电量信息管 理和月电量信息管理等几大功能。
5.4.1电表表底信息管理功能的实现
电表分电子表和机械表,电子表是联网电表,表底按小时进入工控服务器是 厂家完成的,机械表每月人工抄录一次表底,并录入数据库服务器。将工控服务 器表底数据釆集到电量平衡系统数据库服务器,采用的是Window服务形式,做 一个服务程序来说实现。电表表底信息管理主要包括电子表表底采集、电子表表 底补录、机械表表底录入、修改电表表底、删除电表表底和查询电表表底功能。 下面以电子表表底补录为例,详细介绍电表表底信息管理的实现。
电子表表底补录时,首先在窗体中输入查询条件,调用数据访问层方法,查 询补录的表底信息是否存在,如果表底信息存在则无需补录,并给出提示信息; 如果表底信息不存在,则在录入窗体中录入电表表底数据,然后获取用户输入的 电表表底信息并对信息进行格式检验,如果不通过,则输出对错误信息的提示; 否则调用数据库访问层的方法插入记录;插入记录时,可能由于数据库服务器没 打开等原因造成插入失败,所以,记录插入完毕后,需要给出插入结果提示。
电子表表底补录流程如图5.3所示。
图5.3电子表表底补录流程图
Fig. 5.3 Flow chart of electronic table bottom makeup
在查询是否存在需要补录的电表表底数据时,查询条件设置包括电表ID和生 成表底的时间,避免把其他电表的表底做为需要补录的电表表底等错误情况的发 生。
5.4.2小时电量信息管理功能的实现
电表小时电量的计算,是整个系统实现的关键环节,在计算小时电量的时候, 首先要考虑一点,就是该块电表在需要计算的小时内是否存在换表记录,避免大
数据的出现,如果忽略了这一点,直接用旧表的上一小时表底减去新表的表底, 就会出现大数据,严重影响系统的稳定运行。
小时电量计算流程图如图5.4所示。
图5.4小时电量计算流程图
Fig. 5.4 Flow chart of energy calculation by hour
存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储 在数据库服务器中,应用程序使用时只要调用即可。小时电量信息管理就是写存 储过程实现的。首先获取服务器时间和联网电表ID号,设置游标,取出第一个联 网电表ID号,在电表表底数据库表中,查找该电表该时间点的表底是否存在,不 存在则获取新的联网电表ID号;存在则取出该联网电表该时间点和上一小时的表 底数据,然后在换表记录里面查找该联网电表是否存在换表操作,不存在则依取 出的两个表底想减计算出小时电量;存在则取出换表操作时记录的新、旧电表表 底,根据新表表底、旧表表底、上一小时表底数、该小时表底数计算出小时电量 并存入小时电量表,然后判断该联网电表是否是取出的最后一条联网电表,不是 则获取新的联网电表ID,开始循环计算;如果是最后一条联网电表ID,则结束循 环。
5.4.3班日月电量信息管理功能的实现
班、日、月电量均是以小时电量为基础累加计算出来的,计算过程也是写存 储过程实现的。其中班电量的计算较为特殊,一天分三个班次,即四点班、零点 班和八点班,四点班的生产时间是当日16到次日0点;零点班的生产时间是当日 0点到当日8点;八点班的生产时间是当日8点到当日16点。下面以班电量的计 算为例,详细介绍班日月电量信息管理功能的实现。
班电量计算流程图如图5.5所示。
图5.5班电量计算流程图
Fig. 5.5 Flow chart of energy calculation by shift
首先获取服务器时间,根据服务器时间计算出班次和该班次的起止时间,获 取联网电表ID号,在电表小时电量数据库表中,依据该班次的起止时间,査找该 电表该时间段内的小时电量是否存在,不存在则获取新的联网电表ID号;存在则 累加计算出该联网电表该班次的班电量数据,存入班电量表,然后判断该联网电 表是否是取出的最后一条联网电表,不是则获取新的联网电表ID,开始循环计算; 如果是最后一条联网电表ID,则结束循环。
5.5结算信息管理模块的实现
结算信息管理模块主要包括结算信息管理和结算单打印管理,实现矿业公司 各子厂矿月电费结算功能。其中结算信息管理主要包括结算调整量管理和生成结 算单功能。各电表电量依据采集时间所在的尖峰平谷时期不同,电费不同,按月 计算出电费数据,根据前期配置的单位与电表关系,计算出矿业公司各子厂矿的 月电费数据,作为该子厂矿月底结算的依据。结算信息按月生成结算报表,并按 照年度、厂矿等进行横向和纵向比较分析,以便在今后的生产中合理安排,节约 电费成本。
5.5.1结算信息管理功能的实现
结算信息管理主要实现矿业公司及其各子厂矿按月结算电费的功能。在结算 信息管理的实现过程中,首先选择结算月份、结算单位和结算类型等条件,然后 调用数据访问层方法,按点位查询需要结算的信息,如果各点位结算信息不需要 调整,则直接进行结算,如果个别点位需要进行结算调整,则选择这些点位,在 相应的调整量框内录入调整量进行结算操作,如果结算信息能够顺利进入数据库, 则给出“结算成功”提示,否则给出“结算失败”提示。结算信息管理流程图如 图5.6所示。
5.5.2结算单打印管理功能的实现
结算单打印管理主要实现矿业公司及其各子厂矿按月打印结算单的功能,结 算单打印管理较多的使用了 Report Builder报表功能。在结算单打印管理的实现过 程中,首先选择结算月份、结算单位和结算类型等条件,然后调用数据访问层方 法,查询需要打印的结算单信息,在Report Builder报表中显示出来,如果需要打 印,则选择打印,系统调用打印机进行打印,如果打印成功,则给出“打印成功” 提示,否则给出“打印失败”提示,结算单打印功能为结算信息提供历史査询参 考。
结算单打印功能流程图与结算信息管理流程图类似,这里不再重复。
( 开始 )
图5.6结算信息管理流程图
Fig. 5.6 Flow chart of settlement information management
5.6电量平衡信息管理模块的实现
电量平衡信息管理模块主要包括单位平衡信息管理、工艺平衡信息管理和线 路平衡信息管理等功能模块。进入系统的小时电量,按照单位与电表关系、工艺 与电表关系和线路与电表关系,计算出各单位、各工艺、各线路的小时电量,与 其历史电量信息对比分析,为各单位、各工艺、各线路的经济用电提供参考。
5.6.1单位平衡信息管理功能的实现
单位平衡信息管理包括单位电量平衡分析和单位电量平衡历史分析功能。依 据业务配置管理模块中的单位与电表关系配置,可以方便的查询出电表的归属单 位,为该单位每月的电表耗电量计算提供参考,依据计算出的月电耗与历史数据 比较,得出该月单位电耗偏差,给出分析结果,为该单位降低能耗提供参考。下
面以单位电量平衡历史分析功能为例,详细介绍单位平衡信息管理的实现。
进行单位电量平衡历史分析时,首先在窗体中输入选择条件,如单位和时间 段等,调用数据访问层方法,查询该单位在该时间段内的进厂电量、消耗电量、 损失率、控制标准及下一级单位电量数据分析,下一级单位电量数据分析内容主 要包括电量消耗情况、能耗比重等,同时给出各个时间点的电量消耗情况统计折 线图。
单位电量平衡历史分析流程图如图5.7所示。
图5.7单位电量平衡历史分析流程图
Fig. 5.7 Flow chart of analysis of energy balance historical units
5.6.2工艺平衡信息管理功能的实现
工艺平衡信息管理包括工艺电量平衡分析和工艺电量平衡历史分析功能。首 钢矿业公司的生成工艺包括采、选、球、烧等各个工艺,每个工艺分为多个系列, 为了精确把握各工艺,各系列的能耗情况,设计出了工艺平衡信息管理模块。工 艺平衡信息管理依据业务配置管理模块中的工艺与电表关系配置,查询出电表的 归属工艺,参考各工艺的工艺产量数据,为计算工艺单耗提供依据。下面以工艺 电量平衡分析功能为例,详细介绍工艺平衡信息管理功能的实现。
进行工艺电量平衡分析时,首先在窗体中输入选择条件,如工艺名称等,调 用数据访问层方法,查询该工艺的日实际电耗、日电耗标准、日比较、月累计电 耗、月电耗标准、月比较及工艺单耗明细数据,工艺单耗明细数据内容主要包括 时间、电量、精矿量、单耗、标准、单耗-标准比较等,同时给出各个时间点该工 艺的电量消耗情况统计折线图。
工艺电量平衡分析流程图与单位电量平衡历史分析流程图类似,这里不再重 复。
5.6.3线路平衡信息管理功能的实现
线路平衡信息管理包括一级线路平衡信息、二级线路平衡信息和三级线路平 衡信息功能。下面以一级线路平衡信息管理为例,详细介绍线路平衡信息管理功 能的实现。
进行一级线路平衡信息管理时,首先在窗体中输入选择条件,如时间等,调 用数据访问层方法,查询该线路的时间、总进口电量、总出口电量、线变损、损 耗比等信息,同时给出各个时间点该线路的电量消耗情况统计折线图。
一级线路平衡信息流程图与单位电量平衡历史分析流程图类似,这里不再重 复。
5.7统计查询信息管理模块的实现
统计查询信息管理模块主要包括对系统其他各模块信息的查询分析功能。系 统采集的各类数据,需要分类汇总,并按照各种查询条件显示出来,同时为了方 便理解,配合折线图、饼状图等图表展示出来。主要分为电表相关、单位查询、 工艺相关、运行数据相关等需要统计查询的信息。
5.7.1基础数据查询管理功能的实现
基础数据查询管理模块主要包括电表、工艺、单位等查询功能。主要分为电 表相关、单位査询、工艺相关、结算相关等需要统计查询的信息。下面以电表相 关中的电表信息查询为例,详细介绍基础数据査询管理功能的实现。
进行电表信息査询时,首先在窗体中输入选择条件,如归属单位,安装点位等, 如果没有查询条件,则查询出所有的电表信息,调用数据访问层方法,查询该单 位安装在该点位的电表基本信息,包括电表出厂编号、规格型号、检定日期、倍 率、归属单位、安装点位等信息。
电表信息查询流程图如图5.8所示。
图5.8电表信息查询流程图
Fig. 5.8 Flow chart of electricity information query
5.7.2运行数据查询管理功能的实现
运行数据查询管理主要是电表表底数据、产量数据、电表电量数据等的查询 功能。下面以电表电量数据中的电表小时量查询为例,详细介绍基础数据查询管 理功能的实现。
进行电表小时量查询时,首先在窗体中输入选择条件,如时间,电表名称等, 调用数据访问层方法,査询该电表该时间段内的小时电量信息,包括时间、电表 号、电表点位、尖、峰、平、谷、总电量等信息,同时给出各个时间点该电表的 电量情况统计折线图。
电表小时量查询流程图与增加电表信息的流程图类似,这里不再重复。
5.8本章小结
本章详细描述了系统中各个模块的实现,包括电表基本信息管理、业务配置 信息管理、电量基本信息管理、结算信息管理、电量平衡信息管理及统计査询信 息管理功能的实现。在介绍各个模块的详细实现的过程中,详细介绍了涉及的关 键技术的实现、包括.NET服务技术、存储过程等技术。
测试是软件开发活动中非常重要的过程,下一章将详细介绍对系统的测试方 法和测试结果。
第6章系统测试
6.1软件测试
软件测试是指使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检 验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。它是帮助识别开发完 成的计算机软件(整体或部分)的正确度(correctness)、完全度(completeness)和质量(quality) 的软件过程。
软件测试的意义在于:
(1)发现软件错误。越早的发现错误,越方便改正。
(2)有效定义和实现软件成分由低层到高层的组装过程。
(3)验证软件是否满足任务书和系统定义文档所规定的技术要求。
(4)为软件质量模型的建立提供依据。
软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了所期盧的事情 (Do the right thing),另一方面是确认软件以正确的方式来做了这个事件(Do it right)o第 二是提供信息,比如提供给开发人员或程序经理的反馈信息,为风险评估所准备的信息。 第三软件测试不仅是在测试软件产品的本身,而且还包括软件开发的过程。如果一个软 件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。因此 软件测试的第三个目的是保证整个软件开发过程是高质量的。测试的总体目标是保证软 件的质量㈤。 '
软件测试需要遵循以下几项原则;
(1)所有测试的标准都建立在用户需求之上。软件工程以质量为核心,开发出来 的软件产品应该满足用户的需求。所有,测试时需要更多的考虑用户能否正确、完整的 使用被测软件,用户使用这套软件能够给他们的工作带来多少好处,不过多考虑用户不 在意的问题。
(2)所有的需求都是可验证的。在需求分析活动中,对提出的所有需求都应该设 定明确的验收标准。测试人员根据这些验收标准判断软件是否满足要求,而不是根据自 己的感觉判断。
(3)可以提前展开测试活动。尽早测试,尽早发现问题,才能尽早解决问题。事 实上,需求分析完毕后,就可以编制测试计划和测试用例,在设计说明书产生后,可以 进一步细化和修订测试计划与测试用例。
(4)增量测试。时常有这样的情况发生,每个模块都能单独工作,但这些模块集 成在一起之后却不能正常工作。增量测试可以帮助测试人员更容易找到缺陷,容易孤立 新出现的错误朗。
(5)不能忽略非正常的输入数据。测试用例中,不仅要有合法的输入数据,而且 需要非法的输入数据。应当充分考虑各种预想不到的输入情况,例如输入了非法字符、 按错键等。
6.2测试内容
本系统在软件开发的各个阶段分别进行了单元测试、集成测试和功能测试,下面将 分别给予介绍。
6.2.1单元测试
单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中, 软件的独立单元将在与程序的其他部分相隔离的情况下进行测试⑷。
单元测试是把一个模块作为独立的程序单元进行测试,以保证它能够正确执行规定 的功能。模块是通过接口和其他模块相互联系的,只有接口正确,才能保证数据的正确 流入和流出,这是模块能正常工作的先决条件;在测试过程中,重点测试边界条件,保 证模块在边界上能正确操作。
单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以说,程序员有 责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是 为了证明这段代码的行为和期望的一致。
在本系统的开发过程中,基本上对每个功能函数都进行了单元测试,包括正确数据 和各种类型的错误数据。
下面,以上传文件功能为例,详细介绍单元测试。本系统中,在UpDownLoadClient 类里编写了 Upload(string localPath, string fileType, ref string serverPath)方法,其中参数 localPath是指要上传的文件在本地计算机中的路径,参数fileType是文件的类型,根据 它读取文件上传后存放在服务器上的位置,参数serverPath用于返回上传文件后文件在 服务器上的位置。针对该功能编写了以下测试用例:
(1) 参数localPath中是本地计算机上的文件路径,参数fileType中是正确的文件 类型;
(2) 参数localPath中是本地计算机中并不存在的文件路径,但参数fileType中是 正确的文件类型;
(3) 参数localPath中是本地计算机上的文件路径,但参数fileType中是并不存在 的文件类型;
(4) 参数localPath中是本地计算机中并不存在的文件路径,且参数fileType中是 并不存在的文件类型;
(5)参数localPath中是本地计算机上的文件路径,参数fileType中是正确的文件 类型,但是文件正在以只读状态打开;
(6)参数localPath中是本地计算机上的文件路径,参数fileType中是正确的文件 类型,但是文件正在以写状态打开。
执行这些测试用例,查看返回参数serverPath的值,以及对应于不同类型的错误, 是否给出了正确提示。
经验表明,一个尽责的单元测试方法将会在软件开发的某个阶段发现很多的Bug, 并且这时修改它们的成本也很低。在本系统的单元测试过程中,也发现了很多存在的问 题,并且及时地寻找到了解决办法,下面详细说明一下其中比较典型的几个。
(1)问题描述:查询电表信息时,查询不到没有点位的电表信息。
解决办法:使用左外连接执行查询,"left outer join,,>包含了左表中的全部彳亍,其 中左表是电表信息表。
(2)问题描述:上传文档时,如果文档存在,则能够正确上传,如果不存在,则
发生异常。 >
解决办法:在上传文档前,首先File.Exists方法对文件路径进行判断,如果确实存 在,再进行下一步操作,否则,给出“需要上传的文档并不存在”提示。
(3)问题描述:添加电子签名时,如果该用户对应的数据库记录中存储了电子签 名,则能够正常添加,但如果不存在,则发生"Null Reference5啲异常。
解决办法:从数据库里读岀电子签名字段时,需要进行是否为空的判断,却果不为 空,再生成对应的Image对象,否则,给出“该用户还没有电子签名”的提示。"
在提供了经过测试的单元的情况下,系统集成过程将会大大地简化。开发人员可以 将精力集中在单元之间的交互作用和全局的功能实现上,而不是陷入充满很多Bug的单 元之中不能自拔。
6.2.2集成测试
系统集成时,时常有这样的情况发生,每个模块都能单独工作,但这些模块集成在 一起之后却不能正常工作。主要原因是:模块相互调用时接口会引入许多新问题。例如, 数据经过接口可能丢失;一个模块对另一模块可能造成不应有的影响;几个子功能组合 起来不能实现主功能;误差不断积累达到不可接受的程度;全局数据结构出现错误,等 等。综合测试是组装软件的系统测试技术,按设计要求把通过单元测试的各个模块组装 在一起之后,进行综合测试以便发现与接口有关的各种错误。
增量式集成方法中,程序一段一段地扩展,测试的范围一步一步地增大,错误易于 定位和纠正,界面的测试亦可做到完全彻底。下面详细介绍本系统中用到的自底向上集 成方法。
自底向上测试是从“原子”模块(即软件结构最低层的模块)开始组装测试,因测试到 较高层模块时,所需的下层模块功能均己具备,所以不再需要桩模块。自底向上综合测 试的步骤分为:
(1)把低层模块组织成实现某个子功能的模块群(cluster);
(2)开发一个测试驱动模块,控制测试数据的输入和测试结果的输出;
(3)对每个模块群进行测试;
(4)删除测试使用的驱动模块,用较高层模块把模块群组织成为完成更大功能的 新模块群。
从第一步开始循环执行上述各步骤,直至整个程序构造完毕。
本系统在集成阶段,对每个功能模块都进行了集成测试,这里以电表电量信息为例, 集成了添加电表表底、计算电表小时电量、计算电表班量、计算电表日量、计算电表月 量等功能,为此编写了集成测试用例如下:
(1)服务取出电表表底时,电表表底已经进入自动化库内,由于服务停止等原因, 表底没有进入电量平衡信息管理系统中;
(2)计算电表小时电量时,由于表底信息出现中断,上一小时的表底减去下一小 时的表底无法实现;
(3)计算电表班电量时,由于小时电量出现中断,班电量累计计算时无法实现。
在集成测试过程中,发现了很多接口方面的问题,现简要介绍几个其中比较典型的 问题:
(1)问题描述:查询电表表底信息时,当选择点位作为查询条件时,本应该查询 出的电表表底信息无法正常展示。
原因:由于查询电表信息的执行语句中,使用的是using子句,无论块是如何退出 的,using子句都会确保关闭和释放数据库连接,这样,没有了数据库连接,再查询联 系人信息时必然会抛出异常。
解决方案:数据库的方法和方法之间不再共用连接,每个方法内部都新建一个连接。
(2)问题描述:开启服务器后,在执行插入电表关系维护时,时间一长就不能继 续查询了,发生了异常。
原因:插入电表关系维护时,需要调用数据访问层对象,而数据访问层对象在服务 器端,是通过Remoting获取的远程对象的引用。
解决方案:重写远程处理生存期服务所使用的生存期租约对象定义方法。
(3)问题描述:多个用户同时登陆系统进行表底信息补录时,出现补录不同电表 时最好补录的是同一块电表的表底。
原因:SQL中没有使用事务来控制不同用户对同一个数据库表操作,导致插入了同 一块电表的不同表底。
解决办法:改用事务的方法控制数据库操作,并且涉及2个以上数据库表的操作都 要用事务来控制,这样重新完善了业务流程,避免了类似问题的发生。
集成测试中发现的问题还有很多,这里不再一一赘述。在集成测试过程中,成功地 执行了测试计划中规定的所有集成测试,并修正了所发现的错误。
6.2.3功能测试
在漫长的软件发展中,界面设计工作一直没有被重视起来。其实,软件界面设计就 像工业产品中的工业造型设计一样,是产品的重要买点。友好美观的界面会给用户带来 舒适的视觉享受,拉近用户与软件的距离。界面设计不是单纯的美术绘画,需要定位使 用者、使用环境、使用方式并且为最终用户而设计。检验一个界面的标准不是某个项目 开发组领导的意见也不是项目成员投票的结果,而是最终用户的感受。所以,界面设计 要和用户研究紧密结合。
下面,以添加电表信息和电表电量信息为例,简单介绍系统页面。
添加电表信息界面上的功能主要是录入新的电表信息,页面整体简洁大方,操作方 便,从上到下、从左到右的整齐布局满足用户的视觉需求。
添加电表信息界面如图6」所示。
系统菅理,首贡"运frtJS »主救据维护联网电表主救据表维护
I药H返回选择页面
图6」添加电表信息界面图
Fig. 6.1 UI of adding electricity information
电表表底信息是本系统的重要页面,设计该页面时,考虑到电表表底分尖峰平谷不
同时段,设计了自动计算总表底功能,方便实用。
电表表底信息页面如图6.2所示。
系统管理:首员行管理"电表表底维护
请选择 联网 电表R 9鸽子湾绿化队院北{首治v 日期选择 2014-12-29 |查询
日期时间 2014-12-29 1 00 00 尖期表底 69 53 峰期表底 249 48
平期表底 311 35 谷期表底 315 86 总表底 946 22
|保 在I |取 消I
■ [ 1
选择 9 65.55 249.4S 3H35 315.84 945.20 trtl ' } •> ^0 A<».AA./»n
J — * — 7 删除
选择 9 69.53 249.48 311.35 315.86 946.22 2014-12-29 01:00:00.000 ■除
选择 9 69.53 249.4S 31135 315.8S 946.24 201-1-12-29 g 閱购.刚 删除
9 69.53 249.4S 311.35 315.90 ^6.26 2014.12-2$ 03:30:00.0-OC 删除
选择 9 69.53 249.1S 311.35 315.9] 2GU-I2-29 昶:鮒磁 删除
选择 9 65.53 24OS 3:1.35 315.95 ^46.29 -v v- .v.UV .v V 删除
9 65.53 245.1S 31155 315.95 9心1 >14-12-2? 06:00:00. &00 删除
选择 9 69.53 219.4S 311.55 315.96 曲5•卫 23U.12.29 0':C-O:00.a00 删除
选择 9 5$.53 249.18 311.5' S15.96 9^.34 2Gli-12-29 OSrOOrOO.OOO 删除
选择 9 59.53 249.49 315.se 釘 6.3, 2014-12-29 唆 00:00.000 删涂
选择 9 69.53 249.50 311.S" 315.96 946.36 2014-12-29 10:QO:OO.QQO 删除
选择 9 69.53 249.51 311.$' 315.95 946.37 20U-12-29 11:00:00.000 删除
选择 9 69.53 249.51 31138 315.96 ^6.38 2QU-12-29 12:00:00.000 删除
选择 9 W.53 2M5I 311.40 315.96 2014-12-2$ B:00:00.000 删除
选择 9 69.53 249.51 315.96 ^6.41 2014-12-211 他 g000 删除
图6.2电表表底信息管理界面图
Fig. 6.2 UI of the reading managment
电表关系维护也是本系统的重要页面,设计该页面时,考虑到电表的基本信息较多,
电表关系维护页面如图6.3所示。
系统管理:首页2业务配置>:-■电表关系维护
图63电表关系维护界面图
Fig, 6.3 UI of meter relationship maintenance
电表小时电量页面是本系统中的另一个重要页面,该页面主要包括查询存储过程计 算出的小时电量等功能。
电表小时电量页面如图6.4所示。
敦据查询:首员 >> 电表相关》电表小时童
日期的问 2014-12-23 21 v 至 2014-12-29 20 v O尖期C:薩期O平期:夸期040
电表选择 @全部O单位O工艺 电表 185新主厂1 * | 査逊 |
—尖一嵯一平 谷一总
40 T ■ - ■
14-12-28 21 00 14-12-29 02 00 14-12-29 07 00 14-12-2912:00
日期时间
2014-12-2S21:3C:00
2014-12-28 22:00:00 P5
!-5 老细破变压器
老细破变压器 iS
0 >2 0 0 4S
0 0
2014-12-2823:00:00 175 老细破变压器 0 -2 0 0 11
2011-12-29 0:00:00 老细破变压器 0 0 0 is is
2014-12-29 1:00:00 老细破变压器 0 0 0 d V
201442-2? 2:00:00 j'5 老细破变圧器 0 0 0 4S
20U-12-29 3:00:00 老细破变压器 0 Q ・2 -2
图6.4电表小时电量界面图
Fig. 6.4 UI of electricity meter by hour 在本系统的功能测试时,重点测试了以下方面:
(1)直观性。用户界面是否洁净、不唐突、不拥挤,界面不应该为用户制造障碍,
所需功能或者期待的响应应该明显,并在预期出现的地方。界面组织和布局是否合理, 是否允许用户轻松地从一个功能转到另一个功能,下一步做什么、该如何做是否明显, 是否任何时刻都可以决定放弃或者退回、退出,输入是否得到承认。 '
(2)一致性。整个软件是否使用同样的术语,例如,电表信息是否一直都叫电表 信息,而不是表?添加的快捷键是否一致,例如“Enter”代表确定,“Esc”代表取消?整 个系统中的色调、字体大小、颜色、布局是否统一等等。
(3)灵活性。灵活的软件实现同一任务有多种选择方式,例如输入查询条件后, 输入“Enter”等价于点击“确定”按钮;在DataGridView中,双击一行和单击一行后再点击 按钮等效;在录入信息界面,按下“Tab”时,活动光标自动跳到下一个控件中;数据输 入时,既支持用户直接用键盘输入也支持复制、粘贴等。
功能测试时,也发现了一些界面布局、文字表达、颜色搭配等方面的问题,下面介 绍一下其中的典型问题:
(1)问题描述:查询电表信息时,查询得到的结果都用Label控件显示,这些Label 控件和它们的对应标题字体的大小、颜色都一样,不容易区分。
解决办法:把所有的标题,例如“电表信息”的字体颜色设置为'HotTrack”,而所有 显示查询结果的Label,例如“西里铺加压一段”的字体颜色设置为“Black”。
(2)问题描述:执行完操作后,用Label输岀的提示信息不够明显,用户不能直 观的判断出操作结果。
解决办法:把Label方式的提示信息改为使用MessageBox显示,并根据不同的操 作结果设置不同的图标,如果操作失败,则设置为“Warning”,如操作成功,则设置为 "Information",如需电表信息,则设置为"Question"。
(3)问题描述:几个页面之间的风格不统一,其中包括窗体大小不一,重要控件 的颜色风格不一致,对于相似功能,有的添加了快捷键功能,有的没有添加等。
解决办法:制定UI规范,根据实际情况确定窗体大小为“900, 600”,所有相同类 型、同等地位的控件外观一致,添加相同的快捷键功能,包捋"Enter”、“Esc”和“Tab”。
6.3测试结论
经过测试,本系统基本上可以无故障稳定运行,系统无论在功能还是性能等方面均 能满足用户要求。
具有良好的人机接口,使用方便,系统的界面友好、简洁。经过功能测试,确定系 统可以被简易的安装并正常运行。
总之,通过测试,系统已实现了功能需求分析中的各个功能,系统简单实用,具有 较快的响应速度、较强的安全性和容错能力、良好的可维护性,基本满足了预期的需求。
6.4本章小结
本章阐述了系统测试的相关工作。首先,对软件测试进行了简要介绍,然后详细介 绍了系统的单元测试、集成测试、功能测试,其中包括对测试方法的介绍和一些测试用 例,并给岀了各个测试部分发现的典型问题,剖析了问题的原因,给出了相应的解决方 案。最后,根据各个测试得出了系统的测试结论。
第7章结论
7.1本文工作总结
开展矿业公司电能平衡工作,是全面系统摸清矿业公司的电力、电量消耗总量、构 成、分布、流向、用电设备的状况利电能利用率,是加强能源科学管理、制订节电规划、 确定节能措施方案和提高能源合理利用水平的重要基础工作。为此,在大力抓好电力建 设,增加供电能力的同时,必须加强用电需求的科学管理,采取技术上可行、经济上合 理的节电措施,减少电能的直接和间接损耗,提高能源使用效率,以缓解矿业公司电力 供应阶段性严重不足与合理使用问题。在确定用电体系的边界内,对界外供给的电能量 在本用电体系内的输送、转换、分布、流向进行考察、测定、分析和研究,并建立供给 和损耗电量之间平衡关系的全过程,能够完成每月各厂矿电量结算,做到单位平衡、线 路平衡和工艺平衡。根据近几个月的电量数据,能够为各设备用电起到统计分:折作用, 为矿业公司内部各单位经济用电起到指导作用,统计分析的结果以报表、图表的形式展 现出来,并提供打印功能。同时系统内的灵活设置,能方便的帮助用户在业务改变时,做 出相应的调整,如换表操作、设备转入转出等,电量的计量准确无误,查询结果方便快捷。 系统用户分权限设置,为不同的用户分配不同的角色,不同的角色分配不同的操作页面, 保证不同级别的用户操作不同的功能页面,增加数据的安全性。
本系统基于.NET开发框架,实现了电表基本信息管理、业务配置信息管理、电量 基本信息管理、结算信息管理、电量平衡信息管理及统计查询信息管理功能等功能,为 两级能源管理部门提供科学依据的同时,更是面向广大职工,为广大职工提供科学的参 考依据。在系统设计过程中,釆用了模块化设计、面向对象、E-R图设计等科学设计方 法,系统实现过程中使用.NET服务、COM组件等先进技术,经过不同阶段的单元测试、 集成测试、功能测试和压力测试,证实本系统实现的功能已经能够满足用户的基本需求, 达到了预期目标。
现将本文工作总结如下:
(1) 深入研究了首钢矿业公司电量平衡信息管理系统和ASP.NET技术的相关概 念、原理和应用方式。
(2) 详细分析了现有系统运行中存在的不足,并据此得出本系统的需求分析及数 据流图。
(3) 针对需求分析,提出了系统的总体设计方案。使用模块法进行系统设计,使 用关系数据库设计方法设计数据库。
(4) 详细讨论了电表基本信息管理、电量基本信息管理及相关功能的实现方法。
(5)在系统开发的不同阶段,进行了单元测试、集成测试、功能测试、压力测试、 安装测试。
较现行系统,本文所实现的系统增加了以下功能:
(1) 系统安全灵活的权限设置。通过角色的操作权限、权限与页面对应关系的处 理功能页面的权限验证三个方能保护电表数据安全,同时解决了用户因权限名称变化而 带来修改源代码的问题,提高了系统的适应性。
(2) 根据数据库记录自动生成Word文档和Excel文档,直接提高了用户的工作 效率。自动生成的文档格式规范,在提高系统数据资料的利用率和共享性的同时,便于 用户对文档进行二次加工和重复使用。
(3) 文件的上传和下载功能,使得各种报表可以保存在服务器上。这样,不但提 高了数据的共享性,而且方便了用户对文件的管理。
(4) 数据库错误信息处理。在数据库应用系统中,对记录的增加、修改、删除和 查询等处理,都以用户输入的信息为依据,系统对用户输入的各种指令能够及时做出回 应。当发生数据操作异常时,终止操作并将引发的错误信息以直观的语言提示给用户。
(5) 自动升级功能,不但解决了分布式系统的更新维护问题,而且降低了漏装或 者错装的概率,并且不需要专业人士进行升级,减少了人力资源的浪费。
7.2进一步工作展望
本系统已经基本满足了用户需求,但是在试运行阶段,用户针对当前系统提出了一 些需要改进的地方以及进一步的需求,主要包括以下几个方面:
(1) 及时的信息推送功能,实现与手机APP功能结合,把系统中的重要数据, 如月底结算量,能够实时推送到相关专业及主管领导的手机上去。
(2) 统计查询功能更加详细,目前虽然能够实现按单位、工艺和线路等进行统计 查询,但在各类图表的使用上还有待提高。
在系统的实现过程中,为了使系统界面更加友好和易操作,采用了 jQueryEasyUI 的插件集合,而jQueryEasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并 且美观的UI界面。jQueryEasyUI的特点就是简单但功能异常强大,开发产品时可节省 大量的时间和资源,不需要编写复杂的javascript,也不需要对css样式有深入的了解, 需要了解的只有一些简单的html标签。同时,jQueryEasyUI是服务器控件,减少了服 务器和客户端的交互,大大提高了系统的运行效率,并且能够做到页面的局部刷新,防 止页面在操作某个按钮时,出现整个页面的连续闪动的现象,增加了页面的美观度。
参考文献
1.周建平,周建雄.节电技术及相关产品性能分析张家宪卩].能源研究与信息,2013年第2 期.
2.刘华杰,赵东.浅析能源与利用,科技创新与应用[J].2O13年第32期.
3.王武礼,杨华.基于B/S与三层C/S混合模式的MIS构建[J].青岛理工大学学报,2007, 28(3): 101-104.
4.李建伟.计算机在能源管理自动化系统中的开发与应用[J].科技新能源,2000年第1期.
5.Taiming Hou,Shuheng Chen,Pin Liu. The Design and Realization of Management Information System of Substation based on .Net Framework[A]. The Fifth International Conference on Power Transmission & Distribution Technology 2005[C], 2005, 821-825.
6.艾迪明• .NET框架体系结构[J].计算机工程与应用,2003,39(2):174-176.
7.Chengyun Chu. Introduction to Microsoft .NET security [J], IEEE Security and Privacy, 2008, 6(6):73-7&
&任立军,侯立刚,魏延良.COM与.NET互操作技术的研究及实现[J].辽宁石油化工大 学学报,2008, 28(2): 63-66.
9.余剑,崔W. COM Interop技术实现.Net平台下对COM的访问[J].微计算机信息,2006,
22(6): 272-274. *
10.臧泽帅,金海波,丁运亮.基于COM/DCOM的分布式优化设计系统[J].计算机工程, 2006, 32(19): 94-96.
11.Xuelei Wu, Chen Jia,Bi Lan. Research and application on .NET and COM integrated technology [A]. 2008 International Symposium on Intelligent Information Technology Application Workshops[C], 200& 1001-1004.
12.Qureshi Shehrzad. C#, COM objects, & interop services [developing ActiveX controls and COM objects in C#][J], Dr. Dobb's Journal, 2004, 29(9): SI-4.
13.李志毅,赵政.软件复用与.NET及COM组件技术[J].微处理机,2006,27(6): 57-60.
14.Jonathan Chaffer, Karl Swedberg.jQuery 基础教程[M].第二版.李松峰,卢玉平译.北京: 人民邮电出版社2009.11.
15•闫真.富互联网应用程序交互界面的设计模式及设计方法研究[D].华东大学.2010.
16.李建伟.计算机在能源管理自动化系统中的开发与应用[J].科技新能,2000年第1期.
17.Twala B, Cartwright M, Shepperd M. Comparison of various methods for handling incomplete data in software engineering databases[A], International Symposium on
Empirical Software Engineering[C], 2005, 105-114.
18.刘凯,胡仁杰.基于XML Web Service的新型C/S、B/S混合模式应用[J].计算机与现 代化,2008(7): 117-119.
19.李念强,张焕春,经亚枝.分布式应用集成模型——.NET远程框架[J].计算机工程, 2002, 28(3): 267-269.
20.李敏波译.C#高级编程(第4版)[M],北京:清华大学出版社,2006, 308-583.
21.Cyril S Ku, Thomas J Marlowe, Tatyana Budanskaya, Philip K. Kang. Software Engineering Design Patterns for Relational Databases [A], 2007 International Conference on Software Engineering Research & Practice (SERP 2007)[C], 2007, 333-339.
22.Masayuki Hirayama, Osamu Mizuno, Tohru Kikuno. Analysis of Software Test Item Generation - Comparison Between High Skilled and Low Skilled Engineers[J], 计算机科 学技术学报(英文版),2005,20(2): 250-257.
23黄晨,段永載.基于UML模型的嵌入式软件测试用例生成方法[J].空间控制技术与应 用,2013年第1期.