甄 良,李忠明
(北京全路通信信號研究設計院集團有限公司,北京 100070)
RD1 型電加熱道岔融雪系統是根據國內鐵路道岔特點而研制開發的,廣泛適用于客運專線、鐵路干線、重載線路和城際軌道交通等領域,適用于電氣化和非電氣化牽引區段各種類型的道岔。隨著計算機軟件技術不斷發展,為系統定制化開發數據工具軟件的需求應運而生。
根據站場工程設計圖紙,通過軟件將融雪系統的操作界面圖形、系統參數配置等形成數據文件,采用具有交互功能且具備統一標準化的語言格式描述并形成文件存儲。
道岔融雪系統的界面顯示主要由控制柜、變壓器、道岔、區段、命令按鈕、站名文本、狀態標簽等圖形元素構成。通過系統菜單或鼠標快捷菜單實現按照設計圖紙及界面顯示需求將上述不同類型界面圖形元素生成,并對單個或多個圖形元素進行動態編輯。以控制柜為例,對圖元屬性說明如表1 所示。

表1 圖元屬性樣例表Tab.1 Examples of attributes of graphic elements
軟件開發基于.NET FrameWork4.6 的WinForm窗體應用,開發語言使用C#,開發工具使用Visual Studio2019,編譯目標平臺為x86。
1)圖元數據類

圖1 圖元類繼承關系圖Fig.1 Relationship between basic and derivative graphic elements
根據軟件需求共設計1 個抽象基類ShapeGraph 和6個派生子類CabinetGraph、SectionGraph、SwitchGraph、CmdButGraph、StaLableGraph、TransformGraph,各類之間繼承關系如圖 1 所示。
2)操作接口類
在圖元數據類和窗體類之間的StaGraph 類,作用是降低數據與顯示、操作的耦合;為數據序列化和反序列化提供數據聚合的支持。
1)類繼承方法
派生子類根據不同的圖元類型實現圖元的繪制(主窗體、預覽窗體)、圖元的操作(響應菜單命令、鼠標、鍵盤進行移動、刪除、關聯等)、屬性數據的編輯保存。引入抽象基類ShapeGraph,各子類通過繼承獲得父類屬性數據、操作方法接口,有效降低代碼冗余。
2)泛型方法
泛型在C#中有很重要的地位,在編寫軟件時經常會遇到功能非常相似的模塊,只是處理的數據不一樣,泛型的出現就是專門來解決這個問題的。
各個圖元對象封裝在不同對象List 中,其移動函數方法相近,通過構造泛型函數:
public void MoveDevByOffsetValue
實現對不同對象使用同一個泛型函數進行移動操作。
方法中使用了Dynamic 對象,將泛型方法和動態對象進行結合使用,在泛型類型檢查約束之下,發揮動態對象靈活性同時保障了使用安全。
窗體類為圖元數據類提供數據圖形化顯示、操作命令的接口;圖元數據類通過響應窗口類提供的操作命令實現圖元對象生成、編輯、數據保存,并為窗體類顯示提供必要的數據和調用方法。
Stagraph 類作為數據類和窗體類之間的解耦接口類,在圖元對象和窗體類之間使用固定的接口函數,數據和窗體的代碼解耦如圖 2 所示。

圖2 各類之間的數據及方法接口關系圖Fig.2 Relationship between data and interface method of each type of objects
.NET 下的System.Text.RegularExpressions正則表達式引擎為在軟件開發中使用正則表達式提供了強大支持。以軟件中使用正則表達式實現用戶在文本框中輸入的數據同時進行輸入數據檢查為例:正則表達式定義:private const string pattern=@”^[0-9]*$”,限制輸入字符為數字0~9,在控件的鍵盤事件函數內調用該規則檢查實現。
GDI+相比于GDI 提供了更為強大的繪圖功能,通過簡單地創建一個圖形對象(Graphics),使用面向對象的編程方式調用它的方法即可。在窗體繪圖中應注意資源釋放、繪圖坐標系轉換調整和顯示刷新機制方面的內容。
1)為什么使用序列化
使用序列化可以實現持久化內存中的對象,將對象以數據的形式便捷的進行存儲、網絡交互,并在需要的時候使用反序列化根據數據重構對象。
2)序列化的方法比較和選擇
序列化的方法有多種,C#常見的有二進制(流)、XML、Soap 等。各種方法均有其適用性。本文采用的是Json 序列化方法。
3)Json.NET 序列化
.NET 支持Json 序列化的方法和庫很多,本文選用了Newtonsoft 的Json.NET 實現。
技術要點在于如何將不同對象的List 正確序列化,并在反序列化時按照不同的類型進行對象準確重構。本文采取了將Newtonsoft.Json.Linq 中JObject對象與其他對象互轉的泛型方法與鍵值讀取的方法結合的方法實現。
本文以某4 股道的中間站施工圖紙為輸入,使用數據工具進行了數據設計,共計4 組道岔、2 臺融雪控制柜、48 臺變壓器。通過軟件,可以對上述的設備及其名稱、參數按照設計需要使用鼠標進行位置調整、數據輸入,形成數據文件,供現場控制軟件使用,保持顯示一致。最終數據完成界面如圖 3 軟件界面所示。

圖3 軟件界面Fig.3 Software interface
以道岔融雪數據設計工具的設計和開發實現過程為基礎,以使用C#開發語言和.NET 框架開發交互式Windows 桌面軟件的思路和需要關注和掌握的技術要點為側重,結合代碼實例對技術實現細節進行展現。通過數據工具軟件的開發對系統界面和數據進行定制、標準化的數據格式封裝,在降低數據制作的工作強度、統一數據標準、降低數據錯誤等方面具有實用價值。