RD1型电加热道岔融雪系统数据工具软件的设计与实现

2021-04-03 02:23李忠明
铁路通信信号工程技术 2021年3期
关键词:融雪窗体序列化

甄 良,李忠明

(北京全路通信信号研究设计院集团有限公司,北京 100070)

RD1 型电加热道岔融雪系统是根据国内铁路道岔特点而研制开发的,广泛适用于客运专线、铁路干线、重载线路和城际轨道交通等领域,适用于电气化和非电气化牵引区段各种类型的道岔。随着计算机软件技术不断发展,为系统定制化开发数据工具软件的需求应运而生。

1 软件需求

根据站场工程设计图纸,通过软件将融雪系统的操作界面图形、系统参数配置等形成数据文件,采用具有交互功能且具备统一标准化的语言格式描述并形成文件存储。

道岔融雪系统的界面显示主要由控制柜、变压器、道岔、区段、命令按钮、站名文本、状态标签等图形元素构成。通过系统菜单或鼠标快捷菜单实现按照设计图纸及界面显示需求将上述不同类型界面图形元素生成,并对单个或多个图形元素进行动态编辑。以控制柜为例,对图元属性说明如表1 所示。

表1 图元属性样例表Tab.1 Examples of attributes of graphic elements

2 软件设计与实现

软件开发基于.NET FrameWork4.6 的WinForm窗体应用,开发语言使用C#,开发工具使用Visual Studio2019,编译目标平台为x86。

2.1 类设计与实现

1)图元数据类

图1 图元类继承关系图Fig.1 Relationship between basic and derivative graphic elements

根据软件需求共设计1 个抽象基类ShapeGraph 和6个派生子类CabinetGraph、SectionGraph、SwitchGraph、CmdButGraph、StaLableGraph、TransformGraph,各类之间继承关系如图 1 所示。

2)操作接口类

在图元数据类和窗体类之间的StaGraph 类,作用是降低数据与显示、操作的耦合;为数据序列化和反序列化提供数据聚合的支持。

2.2 数据和方法设计

1)类继承方法

派生子类根据不同的图元类型实现图元的绘制(主窗体、预览窗体)、图元的操作(响应菜单命令、鼠标、键盘进行移动、删除、关联等)、属性数据的编辑保存。引入抽象基类ShapeGraph,各子类通过继承获得父类属性数据、操作方法接口,有效降低代码冗余。

2)泛型方法

泛型在C#中有很重要的地位,在编写软件时经常会遇到功能非常相似的模块,只是处理的数据不一样,泛型的出现就是专门来解决这个问题的。

各个图元对象封装在不同对象List 中,其移动函数方法相近,通过构造泛型函数:

public void MoveDevByOffsetValue(Listobjlist,int OffsetX,int OffsetY,int HScrollNum,int VScrollNum)

实现对不同对象使用同一个泛型函数进行移动操作。

方法中使用了Dynamic 对象,将泛型方法和动态对象进行结合使用,在泛型类型检查约束之下,发挥动态对象灵活性同时保障了使用安全。

2.3 数据与窗体的代码解耦

窗体类为图元数据类提供数据图形化显示、操作命令的接口;图元数据类通过响应窗口类提供的操作命令实现图元对象生成、编辑、数据保存,并为窗体类显示提供必要的数据和调用方法。

Stagraph 类作为数据类和窗体类之间的解耦接口类,在图元对象和窗体类之间使用固定的接口函数,数据和窗体的代码解耦如图 2 所示。

图2 各类之间的数据及方法接口关系图Fig.2 Relationship between data and interface method of each type of objects

2.4 正则表达式使用

.NET 下的System.Text.RegularExpressions正则表达式引擎为在软件开发中使用正则表达式提供了强大支持。以软件中使用正则表达式实现用户在文本框中输入的数据同时进行输入数据检查为例:正则表达式定义:private const string pattern=@”^[0-9]*$”,限制输入字符为数字0~9,在控件的键盘事件函数内调用该规则检查实现。

2.5 GDI+绘图

GDI+相比于GDI 提供了更为强大的绘图功能,通过简单地创建一个图形对象(Graphics),使用面向对象的编程方式调用它的方法即可。在窗体绘图中应注意资源释放、绘图坐标系转换调整和显示刷新机制方面的内容。

2.6 数据序列化

1)为什么使用序列化

使用序列化可以实现持久化内存中的对象,将对象以数据的形式便捷的进行存储、网络交互,并在需要的时候使用反序列化根据数据重构对象。

2)序列化的方法比较和选择

序列化的方法有多种,C#常见的有二进制(流)、XML、Soap 等。各种方法均有其适用性。本文采用的是Json 序列化方法。

3)Json.NET 序列化

.NET 支持Json 序列化的方法和库很多,本文选用了Newtonsoft 的Json.NET 实现。

技术要点在于如何将不同对象的List 正确序列化,并在反序列化时按照不同的类型进行对象准确重构。本文采取了将Newtonsoft.Json.Linq 中JObject对象与其他对象互转的泛型方法与键值读取的方法结合的方法实现。

2.7 软件界面

本文以某4 股道的中间站施工图纸为输入,使用数据工具进行了数据设计,共计4 组道岔、2 台融雪控制柜、48 台变压器。通过软件,可以对上述的设备及其名称、参数按照设计需要使用鼠标进行位置调整、数据输入,形成数据文件,供现场控制软件使用,保持显示一致。最终数据完成界面如图 3 软件界面所示。

图3 软件界面Fig.3 Software interface

3 结论

以道岔融雪数据设计工具的设计和开发实现过程为基础,以使用C#开发语言和.NET 框架开发交互式Windows 桌面软件的思路和需要关注和掌握的技术要点为侧重,结合代码实例对技术实现细节进行展现。通过数据工具软件的开发对系统界面和数据进行定制、标准化的数据格式封装,在降低数据制作的工作强度、统一数据标准、降低数据错误等方面具有实用价值。

猜你喜欢
融雪窗体序列化
Java Web反序列化网络安全漏洞分析
自融雪沥青路面抗凝冰剂的设计与施工探讨
如何建构序列化阅读教学
某物资管理调度系统的数据序列化技术
一元复始万象更新
试谈Access 2007数据库在林业档案管理中的应用
基于Qt的多窗体快速并行图形绘制方法研究
初春
Java 反序列化漏洞研究
融雪毯