异常处理技术在过程控制系统中的应用

2020-12-28 11:53王盛肖庭喜孔祥华林峰
电脑知识与技术 2020年31期

王盛 肖庭喜 孔祥华 林峰

摘要:各类异常在过程控制系统中无法完全规避,对异常的科学处理能提高程序健壮性并利于程序维护和错误诊断。概述了过程控制系统中采用C#的异常处理机制,并提出了异常处理的通用方案及自定义异常方案,最后对过程控制系统的异常管理模块进行功能说明。基于此技术的过程控制系统在现场运行良好,为工厂创造了巨大效益。

关键词:过程控制系统;异常处理;异常管理;C#

中图分类号:TP311      文献标识码:A

文章编号:1009-3044(2020)31-0251-03

Abstract: All kinds of exceptions cannot be completely avoided in the process control system. Scientific treatment of exceptions can improve the robustness of the program and facilitate program maintenance and error diagnosis. The exception handling mechanism using C# in the process control system is outlined, and the general and custom exception handling schemes for exception handling are proposed. Finally, the exception management module of process control system is explained. The process control system based on this technology works well on site, creating huge benefits for the factory.

Key words: process control system; exception handling; exception management; C#

1 概述

1.1 過程控制系统概述

过程控制系统是流程工业中不可缺少的关键系统,主要功能包括实时数据采集,原料数据管理,成品数据管理,物料跟踪,生产日志及报表,设备管理等。以钢铁行业为例,过程控制系统位于生产管理系统(三级)和基础自动化系统(一级)之间,一般简称二级,起着承上启下的作用[1]。过程控制系统强调设备的先进控制,操作优化,减少人为因素的影响,优化生产管理,提高产品质量[2]。

1.2 异常定义

异常,业内用英文Exception表示,是一种不可预知的现象,其特指软件程序开发过程及现场运行时的各类非正常意外情况,几乎是不可避免的。如果异常没有得到有效处理,程序就会意外中止运行,这样严重影响生产。另外在程序设计中利用好异常处理机制,可以提高软件的开发效率,降低开发成本,提高软件的健壮性和可靠性。

1.3 C#异常处理架构简述

C#是微软公司最新推出的一门编程语言,它结合了过去几十年相关编程语言的优势,充分考虑了编程优雅性,操作简单性,特性丰富性及组件化编程等优势[3],是实现过程控制系统编程语言的首选。其主要特征包括简单易用、安全性高、通用平台、面向对象设计等。C#运行于.NET Framework之上,基于.NET中的海量类库编程。

.NET Framewor包含一种标准的错误报告机制,就是结构化异常处理,它由 CLR(公共语言运行时)来控制异常的处理。在C#中,异常本质上就是一个对象,他继承于一个叫作System.Exception的基类。当发生错误时,系统会产生一个异常来对应用程序通知这个错误,异常至少要包括错误的相关信息。异常产生后,相关的应用程序将会对错误进行处理[4]。CLR 将会遍历调用堆栈信息,以便找到合适的处理程序。异常返回的结果并不是简单的是否有异常,而是一整套异常信息,包括异常类别,异常的相关描述,通过这些异常信息,工程师就可以定位程序问题发生的原因。总之,基于C#的异常处理架构所编写的应用程序更容易阅读与维护,大大缩短开发人员调试时间。

2 异常处理方案

2.1 通用方案

异常的处理形式主要包括如下三种,如表1所示:

(1)try-catch语句

(2)try-catch-finally语句

(3)try-finally语句

针对有可能发生异常的语句放到try语句块中,称之为尝试捕捉异常。而在catch语句块中,放置的是针对异常情况发生后进行处理的代码,称之为异常处理。结构中的finally语句块通常放置程序必须执行的代码,例如关闭连接,释放资源等,无论是否发生异常,这里的程序执行不受影响。

显然,如果程序的正常顺序执行的过程中,有异常产生了,从try语句块内产生异常的那一行程序代码开始之后的相关代码都不会去执行,而是会跳转到符合条件的catch语句块或是finally语句块内的第一行代码。

其中在catch语句块包含若干种情况,第一,不带参数,则会捕捉所有类型的异常。第二,包含参数,则只能捕获异常参数所规定的特定异常。第三,包含多个不同的参数,也就是try语句块联合多个不同参数的catch语句块,每个catch语句块捕捉不同的异常进而处理。

实际代码中,主要运用第(1)(2)这两种形式,形式(3)比较罕见。

2.2 自定义异常

实际运行项目中,开发人员通常使用自定义的异常类型,其目的是表示特有的代码在运行过程中不受控所发生的意外事件,其作用是能为用户提供更友好的调试体验。

实例如下:

[Serializable]

public class MyRpcException : Exception

{

public string MyErrMessage { get;set; }

public MyRpcException()

{

}

public MyRpcException(string errMessage)

{

MyErrMessage = errMessage;

}

public override string ToString()

{

return $"MyRpcException:{ MyErrMessage }";

}

}

由于C#中的异常本身就是一个类,它需要继承C#中异常的基类,即System.Exception。一般来说,为了代码规范,自定义异常类的名称以 “Exception”这个词作为类名的后缀。其中有一个属性MyErrMessage,它用于表示具体的错误信息,捕获到错误后用于提示用户。本实例中MyRpcException类包括两个构造函数,第一个是空构造函数,一般较少使用;另一个是包含一个字符串类型的错误信息的构造函数,方便代码使用。它还重写了ToString方法,方便输出日志或者提示。整个类通过Serializable标识为可序列化,便于保存到数据库。

在C#中,关键字throw用于在发生错误时,引发相应的异常。其语句示例如下:

throw new MyRpcException(“未找到远程目标!”);

3 过程控制系统的异常处理模块设计

3.1 设计需求

过程控制系统和其他系统一样,不可避免地出现一些异常,采用通用方案处理即可。但是过程控制系统中往往会遇到数据库读写异常,网络异常,远程调用异常。需要通过自定义异常处理。过程控制系统的异常处理模块主要设计需求如下:

(1)完成对过程控制系统的各类异常可靠,高效,友好,规范化处理;

(2)异常信息和类别的多样化,且各种异常能灵活处理,处理方式不能局限于特定固定的方式。

(3)方便灵活易部署,支持配置修改。

(4)异常处理模块作为一个集成好的通用基础组件,能应用与过程控制系统其他模块中,与其他模块无耦合即插即用,其他模块开发人员无须重复编码。且异常处理模块内部异常不得影响其他模块正常运行。

3.2 工作流程

如前所述,通常异常处理包括异常捕捉和异常输出。过程控制系统如果仅仅采用此流程则显得处理效率低,无法追溯管理异常,用户体验差等一系列缺点。过程控制系统作为一个中大型控制系统,维护人员需要了解各种异常发生的时机和原因,以利于优化机组工艺参数,实现高效率生产,低故障率运行的目标。本文设计的流程如下[6],除了包括传统的处理方式以外(图1-a),主要对异常处理进行了进一步设计(图1-b):

(1)异常持久化:在捕获到相关代码的异常后,至少记录异常产生时间,异常类型,异常级别,类名,代码位置,异常说明等各个属性,形成一个二进制流文件,记录到数据库中。数据持久化引入PROTOBUF技术[7],序列节点的分配间隔采用蛇形间隙法,保证工作状态与休息状态始终之间的动态平衡;使用最优先级规则完成相关节点的存储数据,根据语法结构和目标数据的语义,建立对应映射关系,完成异常完整信息的序列化。此方法转化时间短、空间利用率高。

(2)异常分析:根据捕捉到的异常类型,从数据库配置中获取异常对应的编号和提示,并且根据该异常特有的分析方式进行解析异常详细内容。但是如果和数据库中所有异常类型都不匹配,则表示这是一个新的异常,此时按照通用异常处理。

(3)异常通讯:首先从数据库获取异常记录的数据,通过消息发送异常信息数据给异常管理模块,然后等待来自异常管理模块异常信息,通讯建立后,获取到异常信息的相关数据。

(4)异常显示:首先通过分析异常得到异常的提示内容,在显示端给用户一个友好且的异常提示界面,最后结合上述异常通讯所获取到的数据,在人机接口画面进行显示。

3.3 異常管理功能

过程控制系统的基础任务之一是对异常报告信息进行有效的管理,方便现场运行维护人员轻松了解异常,并提高处理异常的效率。异常管理功能主要是管理程序的异常错误报告、异常日志及异常说明等信息,那么开发维护人员更加轻松了解过程控制系统所特有的各类异常工况,并便于运维人员和软件开发人员能够快速查询和管理异常信息;其主要功能包括如下:异常通信、异常说明、异常日志、异常帮助、异常分析及系统管理等功能[6]。

(1)异常通信功能:它是异常管理中的基本功能,为整个异常处理提供数据的来源。其主要负责接收由异常信息通信服务器发送来的异常信息,同时面向用户进行信息提示。所有这些异常的相关信息将会存储或者导出到专用的异常专用数据库中,为异常管理模块提供数据基础。

(2)异常说明功能:它的主要用途是对异常说明信息的管理,利于用户获取异常信息。例如用户首先定义具体过程控制系统的应用需求,并配置异常的提示内容,根据这些配置将异常提示以文件导出;具体信息在数据库的配置表中,用户可以进行修改。

(3)异常日志:它包含两方面的管理,一是异常日志管理,另一方面是异常处理状态管理。用户可以自定查询条件进行查询相关异常日志,并可以根据异常实时处理的进度,了解异常最新状态;异常日志的显示列表采用DataGridView控件完成,通过绑定后台日志数据,实现日志自动刷新,提高显示效率。

(4)异常帮助:为用户提供解决异常的帮助信息。某一用户完成异常处理后,可以对异常发生的情况和解决方法进行描述,便于维护人员进行下一步操作;这些帮助存储在知识库中,人工亦可进行增加自定义帮助。

(5)异常分析:对相关异常数据呈现给用户,提供直观形象的各类图表显示,方便进行统计和分析及优化;分析对象包括发生异常子系统名称、异常时间、异常级别、异常类型和异常操作人员五个选项。 通过饼图进行异常分布分析、通过折线图进行异常趋势分析、通过柱状图和条形图进行对比分析。

(6)系统管理:其核心是对系统(System)、用户(User)和角色(Role)这三个基础数据进行数据管理,至少包括新增、删除、修改、查询等功能。管理功能包括用户信息管理,系统信息管理,角色信息管理等。由于用户和系统、角色和用户之间都可能存在多对多的关系,例如一个用户信息可能包括一项或者多项角色信息,因为需要同时对多个数据库中多个关联表进行维护。

4 结论

采用异常处理技术,应用于中冶新材多个冷轧机组过程控制中,现场异常提示友好,未发现宕机现象,为维护人员故障诊断提供了便利。现场运行经验表明,系统资源占用资源可控,响应迅速,为钢厂创造了巨大的经济效益。

参考文献:

[1] 王国栋,刘相华,王军生.冷连轧计算机过程控制系统[J].轧钢,2003,20(2):41-44.

[2] 白瑞星.钢铁企业过程控制系统(PCS)的研究与实现[D].上海:复旦大学,2007.

[3] 张越男.试析C#编程语言的特点及功能[J].软件,2013,34(3):145-146.

[4] 王海燕.C#和.NET中的异常处理机制浅析[J].电脑知识与技术,2015,11(15):202-203.

[5] 唐珺.浅谈C#程序中的异常处理机制[J].计算机安全,2010(12):63-65.

[6] 刘媛媛.面向C#程序的异常处理系统的设计与应用[D].成都:西南交通大学,2016.

[7] 黃斌,谢艳新,唐友,等.数据存储信息序列化完整性及效率评估仿真[J].计算机仿真,2020,37(4):159-163.

【通联编辑:梁书】