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

?

基于TRDP 的CCU 模擬軟件設(shè)計與應(yīng)用

2024-11-29 00:00:00周超
電腦知識與技術(shù) 2024年27期

摘要:隨著列車控制系統(tǒng)的智能化、網(wǎng)絡(luò)化發(fā)展,列車實時以太網(wǎng)TRDP由于其傳輸速率可達到100Mb/s,已逐漸替代速率1~1.5Mb/s的WTB和MVB網(wǎng)絡(luò),成為高速動車組的控制網(wǎng)絡(luò)。在列車實時以太網(wǎng)中,列車中央控制單元CCU作為最關(guān)鍵的核心部件,負責列車的通信、過程控制及顯示控制的管理。文章介紹了一種基于TRDP網(wǎng)絡(luò)的CCU模擬軟件的設(shè)計方法,用于與車載子系統(tǒng)通信,以滿足調(diào)試需求。該軟件基于C語言編寫,具有簡單易學(xué)、可移植性高、模塊化、結(jié)構(gòu)化的優(yōu)點。

關(guān)鍵詞:C語言;列車中央控制系統(tǒng);TRDP協(xié)議;模擬軟件

中圖分類號:TP311 文獻標識碼:A

文章編號:1009-3044(2024)27-0062-04

0 引言

列車設(shè)備接入列車控制網(wǎng)絡(luò)前均需要對自身設(shè)備的功能進行調(diào)試,這就需要CCU實物以提供地面測試。對CCU的研究有基于IsaGRAF應(yīng)用程序的模擬CCU串口通信的軟件設(shè)計[1],有基于MVB的城軌車輛CCU 設(shè)計[2]。對TRDP 的調(diào)試之前有相關(guān)研究抓取TRDP報文進行數(shù)據(jù)分析的軟件[3],但著重在于數(shù)據(jù)分析而沒有進行交互控制。本文提供一種基于C語言的模擬CCU軟件對子系統(tǒng)設(shè)備進行調(diào)試,用于在車輛總裝前對子系統(tǒng)設(shè)備提供地面驗證,節(jié)約調(diào)試成本。軟件可部署于個人電腦,通過以太網(wǎng)連接子系統(tǒng),控制以太網(wǎng)發(fā)送TRDP報文與子系統(tǒng)通信,并模擬列車CCU列車設(shè)備的調(diào)度和調(diào)試,對調(diào)試列車設(shè)備有重要的意義。

本文首先對列車實時以太網(wǎng)協(xié)議TRDP進行介紹,然后詳細介紹了CCU模擬軟件設(shè)計開發(fā)過程,包括TRDP協(xié)議移植、通信參數(shù)的配置、組播的加入、過程數(shù)據(jù)通信、數(shù)據(jù)的實時顯示、用戶界面設(shè)計、子系統(tǒng)部件狀態(tài)監(jiān)視、故障記錄等。最后,通過搭載地面半實物平臺與車載受電弓控制單元通信,驗證了CCU模擬軟件開發(fā)的正確性、實用性。

1 列車實時以太網(wǎng)協(xié)議TRDP 介紹

TRDP協(xié)議棧基于傳統(tǒng)以太網(wǎng)架構(gòu),數(shù)據(jù)鏈路層采用Ethernet以太網(wǎng)協(xié)議,傳輸層使用TCP/UDP協(xié)議進行傳輸,過程數(shù)據(jù)和消息數(shù)據(jù)都可使用UDP發(fā)送[4]。過程數(shù)據(jù)是實時周期性數(shù)據(jù),用于列車關(guān)鍵控制和列車狀態(tài)信息的傳輸,是CCU模擬軟件需要的數(shù)據(jù);消息數(shù)據(jù)是實時非周期性數(shù)據(jù),不用于控制。圖1為TRDP協(xié)議棧架構(gòu)圖。

IEC61375-2-3協(xié)議定義了TRDP過程數(shù)據(jù)通信單元PDU的組成,報文頭部長度為40個字節(jié),如圖2 所示。

TRDP過程數(shù)據(jù)通信單元報文頭包括報文計數(shù)器SequenceCounter,根據(jù)協(xié)議SequenceCounter需要在發(fā)送過程保持累加,另外還包括協(xié)議版本ProtocolVer?sion、信息類型MsgType、通信標識符ComID、數(shù)據(jù)長度DatasetLength、報頭校驗和HeaderFCS等。

每個TRDP通信都使用一個通信標識符(comID) ,該comID在每個PDU報頭中傳輸。comID是數(shù)據(jù)結(jié)構(gòu)的唯一標識符,由用戶自行定義,為大于999 的整數(shù)值。

緊跟報文頭的是后續(xù)數(shù)據(jù),長度最長為1 432字節(jié)的用戶數(shù)據(jù)。

2 軟件設(shè)計與開發(fā)

2.1 開發(fā)環(huán)境

軟件開發(fā)環(huán)境選用Windows系統(tǒng)社區(qū)版VS 2022 進行編譯,采用MSVC編譯器,具有良好的兼容性、豐富的庫函數(shù)支持、高效的代碼優(yōu)化和方便調(diào)試的優(yōu)點。采用XAML窗口模式提供豐富的界面展示效果。

2.2 軟件結(jié)構(gòu)

軟件分為前臺和后臺程序。前臺程序包括用戶界面模塊、數(shù)據(jù)實時顯示模塊、故障記錄模塊。后臺程序包括網(wǎng)絡(luò)通信模塊、數(shù)據(jù)處理模塊,如圖3所示。

軟件主要執(zhí)行過程包括:TRDP協(xié)議的移植、UDP 連接建立、加入組播發(fā)送和接收進程處理、前臺數(shù)據(jù)顯示、故障數(shù)據(jù)記錄。

2.3 軟件設(shè)計架構(gòu)圖

軟件整體架構(gòu)圖如圖4所示。

1) 軟件開始執(zhí)行后,對TRDP報文結(jié)構(gòu)進行定義,通過UDP包形式采用符合TRDP報文結(jié)構(gòu)的方式對TRDP報文進行封裝。

2) 列車以太網(wǎng)大多采用組播形式進行報文收發(fā)。檢測到連接按鈕被點擊后,通過HMI界面的IP地址和組播地址建立連接并加入組播。此步驟通過調(diào)用C 語言標準庫函數(shù)進行。

3) 建立收發(fā)線程。通過創(chuàng)建線程,建立UDP數(shù)據(jù)發(fā)送線程以及UDP數(shù)據(jù)接收線程:

public MainWindow() //主窗口創(chuàng)建

{

InitializeComponent(); //初始化

udpRecvThread = new Thread(UdpRecv); //UDP接收線程建立

udpRecvThread. IsBackground = true; //UDP 接收線程設(shè)為后臺

udpRecvThread.Start(); //UDP 接收線程開啟

udpSendThread = new Thread(UdpSend); //UDP 發(fā)送線程建立

udpSendThread.IsBackground = true; //UDP 發(fā)送線程設(shè)為后臺

udpSendThread.Start(); //UDP 發(fā)送線程開啟

}

4) 顯示到看板。建立委托,將接收進程里面的數(shù)據(jù)報文進行解析,根據(jù)協(xié)議位展示在看板中:

private void ShowTrainData() //展示傳輸數(shù)據(jù)函數(shù)

{

this. Dispatcher. Invoke(new Action(() => //建立委托

{

ShowTrainRecvData(); //展示接收數(shù)據(jù)函數(shù)

}));

}

3 模塊功能設(shè)計

3.1 TRDP 協(xié)議移植

根據(jù)TRDP協(xié)議定義,定義結(jié)構(gòu)體,將報文頭和數(shù)據(jù)按順序排列:

struct TRDP_PD_MSG

{

public UInt32 sequenceCounter; //消息序號計數(shù)器

public UInt16 protocolVersion; // 協(xié)議版本

public UInt16 msgType; // 消息類型

public UInt32 comId; // 通信標識符

public UInt32 etbTopoCnt; // ETB 拓撲計數(shù)器

public UInt32 opTrnTopoCnt; //Optrn拓撲計數(shù)器

public UInt32 datasetLength; // 數(shù)據(jù)長度

public UInt32 reserved; // 預(yù)留

public UInt32 replyComId; // 已請求的通信標識符

public UInt32 replyIpAddress; // 應(yīng)答IP地址

public UInt32 frameCheckSum; // 報頭校驗和

[MarshalAs(UnmanagedType.ByValArray, SizeConst =1300)]

public Byte[] data;

}

而子系統(tǒng)與車輛間交互的數(shù)據(jù)均存放在data字節(jié)數(shù)組中。

3.2 組播的介紹以及加入和退出組播

列車以太網(wǎng)不是一對一的單點傳輸,CCU的公共信號(例如車速、時間等內(nèi)容)需要同時發(fā)送給車輛所有子部件,所以大多動車組均采用組播形式進行發(fā)送。組播允許某個IP站點將一個報文一次發(fā)送給網(wǎng)絡(luò)上指定的一組節(jié)點,只有該組內(nèi)的節(jié)點可以接收到組播報文,其他節(jié)點則不能收到[5]。子系統(tǒng)的發(fā)送組播和接收組播地址由列車制造廠商規(guī)定。因此,子系統(tǒng)須加入發(fā)送組播和接收組播組來與CCU進行通信。

軟件通過引用標準庫中的兩個庫函數(shù)進行加入組播和退出組播操作。

using System.Net;

using System.Net.Sockets; 加入組播庫函數(shù)

public void JoinMulticastGroup(IPAddress multi?castAddr) 退出組播庫函數(shù)

public void DropMulticastGroup(IPAddress multi?castAddr)

3.3 連接建立

在軟件建立連接過程中,通過綁定IP地址、端口號、目標組播地址,初始化ComID,初始化TRDP報文頭,加入組播等操作建立模擬CCU軟件和子系統(tǒng)設(shè)備的連接。本文示例發(fā)送的ComID設(shè)置為21304,IP地址為看板中輸入的IP地址。

.private void connectBtn_Click(object sender, Rout?edEventArgs e) //按鍵響應(yīng)函數(shù)

{……

IPAddress localIpAddr = IPAddress. Parse(localIP.Text); //目的IP地址綁定

localPoint = new IPEndPoint(localIpAddr, int.Parse(localPort.Text)); //端口綁定

udpClient = new UdpClient(localPoint); //本地端口設(shè)置

IPAddress recvMultIpAddr = IPAddress.Parse(recv?MultIP.Text);//接收組播地址

jSs6SGAcbZckayEC5TIELQ==recvMultiPoint = new IPEndPoint(IPAddress.Any, 0);// 接收組播端口

udpRecvClient.JoinMulticastGroup(recvMultIpAddr);//加入接收組播

sendPdMsg. protocolVersion= PP_HTONS(0x0100);//TRDP報文頭的協(xié)議版本

sendPdMsg. msgType=PP_HTONS(0x5064); //TRDP 報文頭的消息類型

sendPdMsg.comId=PP_HTONL(21304); //TRDP 報文頭的COMID

sendPdMsg.datasetLength=PP_HTONL(1300); //TRDP 報文頭的數(shù)據(jù)長度

……

}

3.4 根據(jù)通信協(xié)議進行通信

連接建立完成后,通過子系統(tǒng)與車輛的協(xié)議內(nèi)容,在看板中展示各類收發(fā)數(shù)據(jù),包括數(shù)值信號、開關(guān)量信號、故障信號等內(nèi)容。通過int、Byte、Word型變量展示數(shù)值信號,通過bool型變量展示開關(guān)量信號和故障信號,如圖5所示。

3.5 HMI 看板展示

軟件的看板規(guī)劃如下:分為左側(cè)控制區(qū)和右側(cè)展示區(qū),展示區(qū)分為車輛發(fā)送與車輛接收。發(fā)送和接收的內(nèi)容均能根據(jù)具體協(xié)議自主定義。本示例為列車受電弓控制器與列車CCU通信模擬,如圖6所示。

3.6 故障記錄功能

軟件具有與列車司機室顯示屏相同的故障記錄功能,通過定義兩個故障清單,展示當前故障(cur?rentlist) 和歷史故障(historylist) 。通過接收報文的故障位從0跳變?yōu)?展示在當前記錄中,從1變?yōu)?則將當前記錄轉(zhuǎn)移到歷史記錄中。故障產(chǎn)生與消除時均加入時間戳,以準確記錄故障持續(xù)時間。

以接觸網(wǎng)超范圍故障為例,如果是從0變?yōu)?,則判斷當前故障清單currentlist中是否已有此故障,如有則無須操作,如沒有則增加到當前故障清單。如果是從1變?yōu)?,則將當前故障清單中故障移除,添加到歷史故障清單。如圖7所示。

4 軟件效果驗證

4.1 測試環(huán)境搭建

選用車載受電弓控制器作為被測設(shè)備,以太網(wǎng)連接測試電腦和被測設(shè)備。測試電腦運行CCU模擬軟件,發(fā)送控制報文,接收被測設(shè)備報文。

4.2 測試工具

采用Wireshark軟件對TRDP數(shù)據(jù)進行抓包,以檢測軟件執(zhí)行情況。打開電腦Wireshark軟件,對TRDP 報文進行過濾接收,可監(jiān)測到模擬CCU和子系統(tǒng)設(shè)備雙方報文正確發(fā)送,ComID設(shè)置正確,如圖8所示。

4.3 測試結(jié)果分析

現(xiàn)場對設(shè)備進行調(diào)試,記錄調(diào)試軟件交互報文和展示界面正確。通過分析報文進一步驗證了軟件通信功能的正確性,CCU軟件發(fā)送升降弓指令后,受電弓正確進行動作。這表明軟件具備模擬CCU的TRDP 報文收發(fā)功能,滿足設(shè)計預(yù)期。

5 結(jié)束語

本文針對目前列車子部件接入列車實時以太網(wǎng)調(diào)試的問題,通過TRDP報文收發(fā)、組播的加入、協(xié)議位的展示、人機交互界面的設(shè)計等方面,模擬了CCU 與子系統(tǒng)設(shè)備的通信,為子系統(tǒng)地面測試提供了條件,并對軟件功能進行了測試,滿足子系統(tǒng)調(diào)試要求。目前通過此軟件測試的受電弓控制器已安裝在CR400AF以及CR400BF動車組,大大節(jié)約了車輛聯(lián)合調(diào)試的時間,也減少了上車后的設(shè)備故障。此軟件能夠推及其他子系統(tǒng)部件,為列車調(diào)試節(jié)約時間及成本。

參考文獻:

[1] 黃瑜,朱紅崗.TCMS系統(tǒng)中CCU通信設(shè)計開發(fā)及驗證[J].電子制作,2019,27(13):42-44.

[2] 任寶兵.城軌車輛中央控制單元設(shè)計[D].大連:大連理工大學(xué),2014.

[3] 郭文韜,李常賢,劉洋,等.基于TRDP的動車組單車網(wǎng)絡(luò)調(diào)試軟件設(shè)計[J].工業(yè)控制計算機,2021,34(2):21-23.

[4] 宮湛彭.列車網(wǎng)絡(luò)TRDP消息數(shù)據(jù)通信監(jiān)控軟件設(shè)計與實現(xiàn)[D].大連:大連交通大學(xué),2022.

[5] 唐嵐,張學(xué)智.IP組播通信機制及相關(guān)問題的研究[J].西安工業(yè)學(xué)院學(xué)報,2000,20(3):209-214.

【通聯(lián)編輯:謝媛媛】

汉中市| 房产| 牡丹江市| 灌云县| 苍南县| 江北区| 金华市| 昂仁县| 涡阳县| 宜宾县| 论坛| 靖州| 东莞市| 皮山县| 通辽市| 丰镇市| 克什克腾旗| 南阳市| 晋江市| 汶上县| 隆回县| 松滋市| 驻马店市| 曲阜市| 晋江市| 宁强县| 厦门市| 得荣县| 广德县| 仁布县| 晋州市| 龙游县| 毕节市| 普洱| 沙河市| 霍邱县| 芜湖县| 土默特左旗| 东安县| 文登市| 阿拉善盟|