国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

RD1型電加熱道岔融雪系統(tǒng)數(shù)據(jù)工具軟件的設(shè)計(jì)與實(shí)現(xiàn)

2021-04-03 02:23李忠明
關(guān)鍵詞:融雪窗體序列化

甄 良,李忠明

(北京全路通信信號(hào)研究設(shè)計(jì)院集團(tuán)有限公司,北京 100070)

RD1 型電加熱道岔融雪系統(tǒng)是根據(jù)國(guó)內(nèi)鐵路道岔特點(diǎn)而研制開(kāi)發(fā)的,廣泛適用于客運(yùn)專線、鐵路干線、重載線路和城際軌道交通等領(lǐng)域,適用于電氣化和非電氣化牽引區(qū)段各種類型的道岔。隨著計(jì)算機(jī)軟件技術(shù)不斷發(fā)展,為系統(tǒng)定制化開(kāi)發(fā)數(shù)據(jù)工具軟件的需求應(yīng)運(yùn)而生。

1 軟件需求

根據(jù)站場(chǎng)工程設(shè)計(jì)圖紙,通過(guò)軟件將融雪系統(tǒng)的操作界面圖形、系統(tǒng)參數(shù)配置等形成數(shù)據(jù)文件,采用具有交互功能且具備統(tǒng)一標(biāo)準(zhǔn)化的語(yǔ)言格式描述并形成文件存儲(chǔ)。

道岔融雪系統(tǒng)的界面顯示主要由控制柜、變壓器、道岔、區(qū)段、命令按鈕、站名文本、狀態(tài)標(biāo)簽等圖形元素構(gòu)成。通過(guò)系統(tǒng)菜單或鼠標(biāo)快捷菜單實(shí)現(xiàn)按照設(shè)計(jì)圖紙及界面顯示需求將上述不同類型界面圖形元素生成,并對(duì)單個(gè)或多個(gè)圖形元素進(jìn)行動(dòng)態(tài)編輯。以控制柜為例,對(duì)圖元屬性說(shuō)明如表1 所示。

表1 圖元屬性樣例表Tab.1 Examples of attributes of graphic elements

2 軟件設(shè)計(jì)與實(shí)現(xiàn)

軟件開(kāi)發(fā)基于.NET FrameWork4.6 的WinForm窗體應(yīng)用,開(kāi)發(fā)語(yǔ)言使用C#,開(kāi)發(fā)工具使用Visual Studio2019,編譯目標(biāo)平臺(tái)為x86。

2.1 類設(shè)計(jì)與實(shí)現(xiàn)

1)圖元數(shù)據(jù)類

圖1 圖元類繼承關(guān)系圖Fig.1 Relationship between basic and derivative graphic elements

根據(jù)軟件需求共設(shè)計(jì)1 個(gè)抽象基類ShapeGraph 和6個(gè)派生子類CabinetGraph、SectionGraph、SwitchGraph、CmdButGraph、StaLableGraph、TransformGraph,各類之間繼承關(guān)系如圖 1 所示。

2)操作接口類

在圖元數(shù)據(jù)類和窗體類之間的StaGraph 類,作用是降低數(shù)據(jù)與顯示、操作的耦合;為數(shù)據(jù)序列化和反序列化提供數(shù)據(jù)聚合的支持。

2.2 數(shù)據(jù)和方法設(shè)計(jì)

1)類繼承方法

派生子類根據(jù)不同的圖元類型實(shí)現(xiàn)圖元的繪制(主窗體、預(yù)覽窗體)、圖元的操作(響應(yīng)菜單命令、鼠標(biāo)、鍵盤(pán)進(jìn)行移動(dòng)、刪除、關(guān)聯(lián)等)、屬性數(shù)據(jù)的編輯保存。引入抽象基類ShapeGraph,各子類通過(guò)繼承獲得父類屬性數(shù)據(jù)、操作方法接口,有效降低代碼冗余。

2)泛型方法

泛型在C#中有很重要的地位,在編寫(xiě)軟件時(shí)經(jīng)常會(huì)遇到功能非常相似的模塊,只是處理的數(shù)據(jù)不一樣,泛型的出現(xiàn)就是專門(mén)來(lái)解決這個(gè)問(wèn)題的。

各個(gè)圖元對(duì)象封裝在不同對(duì)象List 中,其移動(dòng)函數(shù)方法相近,通過(guò)構(gòu)造泛型函數(shù):

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

實(shí)現(xiàn)對(duì)不同對(duì)象使用同一個(gè)泛型函數(shù)進(jìn)行移動(dòng)操作。

方法中使用了Dynamic 對(duì)象,將泛型方法和動(dòng)態(tài)對(duì)象進(jìn)行結(jié)合使用,在泛型類型檢查約束之下,發(fā)揮動(dòng)態(tài)對(duì)象靈活性同時(shí)保障了使用安全。

2.3 數(shù)據(jù)與窗體的代碼解耦

窗體類為圖元數(shù)據(jù)類提供數(shù)據(jù)圖形化顯示、操作命令的接口;圖元數(shù)據(jù)類通過(guò)響應(yīng)窗口類提供的操作命令實(shí)現(xiàn)圖元對(duì)象生成、編輯、數(shù)據(jù)保存,并為窗體類顯示提供必要的數(shù)據(jù)和調(diào)用方法。

Stagraph 類作為數(shù)據(jù)類和窗體類之間的解耦接口類,在圖元對(duì)象和窗體類之間使用固定的接口函數(shù),數(shù)據(jù)和窗體的代碼解耦如圖 2 所示。

圖2 各類之間的數(shù)據(jù)及方法接口關(guān)系圖Fig.2 Relationship between data and interface method of each type of objects

2.4 正則表達(dá)式使用

.NET 下的System.Text.RegularExpressions正則表達(dá)式引擎為在軟件開(kāi)發(fā)中使用正則表達(dá)式提供了強(qiáng)大支持。以軟件中使用正則表達(dá)式實(shí)現(xiàn)用戶在文本框中輸入的數(shù)據(jù)同時(shí)進(jìn)行輸入數(shù)據(jù)檢查為例:正則表達(dá)式定義:private const string pattern=@”^[0-9]*$”,限制輸入字符為數(shù)字0~9,在控件的鍵盤(pán)事件函數(shù)內(nèi)調(diào)用該規(guī)則檢查實(shí)現(xiàn)。

2.5 GDI+繪圖

GDI+相比于GDI 提供了更為強(qiáng)大的繪圖功能,通過(guò)簡(jiǎn)單地創(chuàng)建一個(gè)圖形對(duì)象(Graphics),使用面向?qū)ο蟮木幊谭绞秸{(diào)用它的方法即可。在窗體繪圖中應(yīng)注意資源釋放、繪圖坐標(biāo)系轉(zhuǎn)換調(diào)整和顯示刷新機(jī)制方面的內(nèi)容。

2.6 數(shù)據(jù)序列化

1)為什么使用序列化

使用序列化可以實(shí)現(xiàn)持久化內(nèi)存中的對(duì)象,將對(duì)象以數(shù)據(jù)的形式便捷的進(jìn)行存儲(chǔ)、網(wǎng)絡(luò)交互,并在需要的時(shí)候使用反序列化根據(jù)數(shù)據(jù)重構(gòu)對(duì)象。

2)序列化的方法比較和選擇

序列化的方法有多種,C#常見(jiàn)的有二進(jìn)制(流)、XML、Soap 等。各種方法均有其適用性。本文采用的是Json 序列化方法。

3)Json.NET 序列化

.NET 支持Json 序列化的方法和庫(kù)很多,本文選用了Newtonsoft 的Json.NET 實(shí)現(xiàn)。

技術(shù)要點(diǎn)在于如何將不同對(duì)象的List 正確序列化,并在反序列化時(shí)按照不同的類型進(jìn)行對(duì)象準(zhǔn)確重構(gòu)。本文采取了將Newtonsoft.Json.Linq 中JObject對(duì)象與其他對(duì)象互轉(zhuǎn)的泛型方法與鍵值讀取的方法結(jié)合的方法實(shí)現(xiàn)。

2.7 軟件界面

本文以某4 股道的中間站施工圖紙為輸入,使用數(shù)據(jù)工具進(jìn)行了數(shù)據(jù)設(shè)計(jì),共計(jì)4 組道岔、2 臺(tái)融雪控制柜、48 臺(tái)變壓器。通過(guò)軟件,可以對(duì)上述的設(shè)備及其名稱、參數(shù)按照設(shè)計(jì)需要使用鼠標(biāo)進(jìn)行位置調(diào)整、數(shù)據(jù)輸入,形成數(shù)據(jù)文件,供現(xiàn)場(chǎng)控制軟件使用,保持顯示一致。最終數(shù)據(jù)完成界面如圖 3 軟件界面所示。

圖3 軟件界面Fig.3 Software interface

3 結(jié)論

以道岔融雪數(shù)據(jù)設(shè)計(jì)工具的設(shè)計(jì)和開(kāi)發(fā)實(shí)現(xiàn)過(guò)程為基礎(chǔ),以使用C#開(kāi)發(fā)語(yǔ)言和.NET 框架開(kāi)發(fā)交互式Windows 桌面軟件的思路和需要關(guān)注和掌握的技術(shù)要點(diǎn)為側(cè)重,結(jié)合代碼實(shí)例對(duì)技術(shù)實(shí)現(xiàn)細(xì)節(jié)進(jìn)行展現(xiàn)。通過(guò)數(shù)據(jù)工具軟件的開(kāi)發(fā)對(duì)系統(tǒng)界面和數(shù)據(jù)進(jìn)行定制、標(biāo)準(zhǔn)化的數(shù)據(jù)格式封裝,在降低數(shù)據(jù)制作的工作強(qiáng)度、統(tǒng)一數(shù)據(jù)標(biāo)準(zhǔn)、降低數(shù)據(jù)錯(cuò)誤等方面具有實(shí)用價(jià)值。

猜你喜歡
融雪窗體序列化
Java Web反序列化網(wǎng)絡(luò)安全漏洞分析
自融雪瀝青路面抗凝冰劑的設(shè)計(jì)與施工探討
如何建構(gòu)序列化閱讀教學(xué)
某物資管理調(diào)度系統(tǒng)的數(shù)據(jù)序列化技術(shù)
一元復(fù)始萬(wàn)象更新
試談Access 2007數(shù)據(jù)庫(kù)在林業(yè)檔案管理中的應(yīng)用
基于Qt的多窗體快速并行圖形繪制方法研究
初春
Java 反序列化漏洞研究
融雪毯