







摘要:隨著列車控制系統的智能化、網絡化發展,列車實時以太網TRDP由于其傳輸速率可達到100Mb/s,已逐漸替代速率1~1.5Mb/s的WTB和MVB網絡,成為高速動車組的控制網絡。在列車實時以太網中,列車中央控制單元CCU作為最關鍵的核心部件,負責列車的通信、過程控制及顯示控制的管理。文章介紹了一種基于TRDP網絡的CCU模擬軟件的設計方法,用于與車載子系統通信,以滿足調試需求。該軟件基于C語言編寫,具有簡單易學、可移植性高、模塊化、結構化的優點。
關鍵詞:C語言;列車中央控制系統;TRDP協議;模擬軟件
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2024)27-0062-04
0 引言
列車設備接入列車控制網絡前均需要對自身設備的功能進行調試,這就需要CCU實物以提供地面測試。對CCU的研究有基于IsaGRAF應用程序的模擬CCU串口通信的軟件設計[1],有基于MVB的城軌車輛CCU 設計[2]。對TRDP 的調試之前有相關研究抓取TRDP報文進行數據分析的軟件[3],但著重在于數據分析而沒有進行交互控制。本文提供一種基于C語言的模擬CCU軟件對子系統設備進行調試,用于在車輛總裝前對子系統設備提供地面驗證,節約調試成本。軟件可部署于個人電腦,通過以太網連接子系統,控制以太網發送TRDP報文與子系統通信,并模擬列車CCU列車設備的調度和調試,對調試列車設備有重要的意義。
本文首先對列車實時以太網協議TRDP進行介紹,然后詳細介紹了CCU模擬軟件設計開發過程,包括TRDP協議移植、通信參數的配置、組播的加入、過程數據通信、數據的實時顯示、用戶界面設計、子系統部件狀態監視、故障記錄等。最后,通過搭載地面半實物平臺與車載受電弓控制單元通信,驗證了CCU模擬軟件開發的正確性、實用性。
1 列車實時以太網協議TRDP 介紹
TRDP協議棧基于傳統以太網架構,數據鏈路層采用Ethernet以太網協議,傳輸層使用TCP/UDP協議進行傳輸,過程數據和消息數據都可使用UDP發送[4]。過程數據是實時周期性數據,用于列車關鍵控制和列車狀態信息的傳輸,是CCU模擬軟件需要的數據;消息數據是實時非周期性數據,不用于控制。圖1為TRDP協議棧架構圖。
IEC61375-2-3協議定義了TRDP過程數據通信單元PDU的組成,報文頭部長度為40個字節,如圖2 所示。
TRDP過程數據通信單元報文頭包括報文計數器SequenceCounter,根據協議SequenceCounter需要在發送過程保持累加,另外還包括協議版本ProtocolVer?sion、信息類型MsgType、通信標識符ComID、數據長度DatasetLength、報頭校驗和HeaderFCS等。
每個TRDP通信都使用一個通信標識符(comID) ,該comID在每個PDU報頭中傳輸。comID是數據結構的唯一標識符,由用戶自行定義,為大于999 的整數值。
緊跟報文頭的是后續數據,長度最長為1 432字節的用戶數據。
2 軟件設計與開發
2.1 開發環境
軟件開發環境選用Windows系統社區版VS 2022 進行編譯,采用MSVC編譯器,具有良好的兼容性、豐富的庫函數支持、高效的代碼優化和方便調試的優點。采用XAML窗口模式提供豐富的界面展示效果。
2.2 軟件結構
軟件分為前臺和后臺程序。前臺程序包括用戶界面模塊、數據實時顯示模塊、故障記錄模塊。后臺程序包括網絡通信模塊、數據處理模塊,如圖3所示。
軟件主要執行過程包括:TRDP協議的移植、UDP 連接建立、加入組播發送和接收進程處理、前臺數據顯示、故障數據記錄。
2.3 軟件設計架構圖
軟件整體架構圖如圖4所示。
1) 軟件開始執行后,對TRDP報文結構進行定義,通過UDP包形式采用符合TRDP報文結構的方式對TRDP報文進行封裝。
2) 列車以太網大多采用組播形式進行報文收發。檢測到連接按鈕被點擊后,通過HMI界面的IP地址和組播地址建立連接并加入組播。此步驟通過調用C 語言標準庫函數進行。
3) 建立收發線程。通過創建線程,建立UDP數據發送線程以及UDP數據接收線程:
public MainWindow() //主窗口創建
{
InitializeComponent(); //初始化
udpRecvThread = new Thread(UdpRecv); //UDP接收線程建立
udpRecvThread. IsBackground = true; //UDP 接收線程設為后臺
udpRecvThread.Start(); //UDP 接收線程開啟
udpSendThread = new Thread(UdpSend); //UDP 發送線程建立
udpSendThread.IsBackground = true; //UDP 發送線程設為后臺
udpSendThread.Start(); //UDP 發送線程開啟
}
4) 顯示到看板。建立委托,將接收進程里面的數據報文進行解析,根據協議位展示在看板中:
private void ShowTrainData() //展示傳輸數據函數
{
this. Dispatcher. Invoke(new Action(() => //建立委托
{
ShowTrainRecvData(); //展示接收數據函數
}));
}
3 模塊功能設計
3.1 TRDP 協議移植
根據TRDP協議定義,定義結構體,將報文頭和數據按順序排列:
struct TRDP_PD_MSG
{
public UInt32 sequenceCounter; //消息序號計數器
public UInt16 protocolVersion; // 協議版本
public UInt16 msgType; // 消息類型
public UInt32 comId; // 通信標識符
public UInt32 etbTopoCnt; // ETB 拓撲計數器
public UInt32 opTrnTopoCnt; //Optrn拓撲計數器
public UInt32 datasetLength; // 數據長度
public UInt32 reserved; // 預留
public UInt32 replyComId; // 已請求的通信標識符
public UInt32 replyIpAddress; // 應答IP地址
public UInt32 frameCheckSum; // 報頭校驗和
[MarshalAs(UnmanagedType.ByValArray, SizeConst =1300)]
public Byte[] data;
}
而子系統與車輛間交互的數據均存放在data字節數組中。
3.2 組播的介紹以及加入和退出組播
列車以太網不是一對一的單點傳輸,CCU的公共信號(例如車速、時間等內容)需要同時發送給車輛所有子部件,所以大多動車組均采用組播形式進行發送。組播允許某個IP站點將一個報文一次發送給網絡上指定的一組節點,只有該組內的節點可以接收到組播報文,其他節點則不能收到[5]。子系統的發送組播和接收組播地址由列車制造廠商規定。因此,子系統須加入發送組播和接收組播組來與CCU進行通信。
軟件通過引用標準庫中的兩個庫函數進行加入組播和退出組播操作。
using System.Net;
using System.Net.Sockets; 加入組播庫函數
public void JoinMulticastGroup(IPAddress multi?castAddr) 退出組播庫函數
public void DropMulticastGroup(IPAddress multi?castAddr)
3.3 連接建立
在軟件建立連接過程中,通過綁定IP地址、端口號、目標組播地址,初始化ComID,初始化TRDP報文頭,加入組播等操作建立模擬CCU軟件和子系統設備的連接。本文示例發送的ComID設置為21304,IP地址為看板中輸入的IP地址。
.private void connectBtn_Click(object sender, Rout?edEventArgs e) //按鍵響應函數
{……
IPAddress localIpAddr = IPAddress. Parse(localIP.Text); //目的IP地址綁定
localPoint = new IPEndPoint(localIpAddr, int.Parse(localPort.Text)); //端口綁定
udpClient = new UdpClient(localPoint); //本地端口設置
IPAddress recvMultIpAddr = IPAddress.Parse(recv?MultIP.Text);//接收組播地址
jSs6SGAcbZckayEC5TIELQ==recvMultiPoint = new IPEndPoint(IPAddress.Any, 0);// 接收組播端口
udpRecvClient.JoinMulticastGroup(recvMultIpAddr);//加入接收組播
sendPdMsg. protocolVersion= PP_HTONS(0x0100);//TRDP報文頭的協議版本
sendPdMsg. msgType=PP_HTONS(0x5064); //TRDP 報文頭的消息類型
sendPdMsg.comId=PP_HTONL(21304); //TRDP 報文頭的COMID
sendPdMsg.datasetLength=PP_HTONL(1300); //TRDP 報文頭的數據長度
……
}
3.4 根據通信協議進行通信
連接建立完成后,通過子系統與車輛的協議內容,在看板中展示各類收發數據,包括數值信號、開關量信號、故障信號等內容。通過int、Byte、Word型變量展示數值信號,通過bool型變量展示開關量信號和故障信號,如圖5所示。
3.5 HMI 看板展示
軟件的看板規劃如下:分為左側控制區和右側展示區,展示區分為車輛發送與車輛接收。發送和接收的內容均能根據具體協議自主定義。本示例為列車受電弓控制器與列車CCU通信模擬,如圖6所示。
3.6 故障記錄功能
軟件具有與列車司機室顯示屏相同的故障記錄功能,通過定義兩個故障清單,展示當前故障(cur?rentlist) 和歷史故障(historylist) 。通過接收報文的故障位從0跳變為1展示在當前記錄中,從1變為0則將當前記錄轉移到歷史記錄中。故障產生與消除時均加入時間戳,以準確記錄故障持續時間。
以接觸網超范圍故障為例,如果是從0變為1,則判斷當前故障清單currentlist中是否已有此故障,如有則無須操作,如沒有則增加到當前故障清單。如果是從1變為0,則將當前故障清單中故障移除,添加到歷史故障清單。如圖7所示。
4 軟件效果驗證
4.1 測試環境搭建
選用車載受電弓控制器作為被測設備,以太網連接測試電腦和被測設備。測試電腦運行CCU模擬軟件,發送控制報文,接收被測設備報文。
4.2 測試工具
采用Wireshark軟件對TRDP數據進行抓包,以檢測軟件執行情況。打開電腦Wireshark軟件,對TRDP 報文進行過濾接收,可監測到模擬CCU和子系統設備雙方報文正確發送,ComID設置正確,如圖8所示。
4.3 測試結果分析
現場對設備進行調試,記錄調試軟件交互報文和展示界面正確。通過分析報文進一步驗證了軟件通信功能的正確性,CCU軟件發送升降弓指令后,受電弓正確進行動作。這表明軟件具備模擬CCU的TRDP 報文收發功能,滿足設計預期。
5 結束語
本文針對目前列車子部件接入列車實時以太網調試的問題,通過TRDP報文收發、組播的加入、協議位的展示、人機交互界面的設計等方面,模擬了CCU 與子系統設備的通信,為子系統地面測試提供了條件,并對軟件功能進行了測試,滿足子系統調試要求。目前通過此軟件測試的受電弓控制器已安裝在CR400AF以及CR400BF動車組,大大節約了車輛聯合調試的時間,也減少了上車后的設備故障。此軟件能夠推及其他子系統部件,為列車調試節約時間及成本。
參考文獻:
[1] 黃瑜,朱紅崗.TCMS系統中CCU通信設計開發及驗證[J].電子制作,2019,27(13):42-44.
[2] 任寶兵.城軌車輛中央控制單元設計[D].大連:大連理工大學,2014.
[3] 郭文韜,李常賢,劉洋,等.基于TRDP的動車組單車網絡調試軟件設計[J].工業控制計算機,2021,34(2):21-23.
[4] 宮湛彭.列車網絡TRDP消息數據通信監控軟件設計與實現[D].大連:大連交通大學,2022.
[5] 唐嵐,張學智.IP組播通信機制及相關問題的研究[J].西安工業學院學報,2000,20(3):209-214.
【通聯編輯:謝媛媛】