楊小波,冉德強(qiáng),張 楊,李 偉
(中車(chē)株洲電力機(jī)車(chē)有限公司,湖南 株洲 412000)
目前軌道交通車(chē)輛列控軟件設(shè)計(jì)集成開(kāi)發(fā)環(huán)境主要有Multiprog、IsaGRAF、CodeSys等,根據(jù)開(kāi)發(fā)環(huán)境不同各開(kāi)發(fā)平臺(tái)的軟件設(shè)計(jì)方式略有差異,但平臺(tái)內(nèi)使用的編程語(yǔ)言均遵循IEC61131-3標(biāo)準(zhǔn)。本文研究對(duì)象為IsaGRAF環(huán)境下,列控軟件的設(shè)計(jì)與實(shí)現(xiàn)方法,IsaGRAF軟件由芬蘭EKE電子公司開(kāi)發(fā)。EKE電子有限公司致力于列車(chē)通信管理系統(tǒng)(TCMS)和列車(chē)通信網(wǎng)絡(luò)(TCN)設(shè)備的設(shè)計(jì)與生產(chǎn)。
ISaGRAF是行業(yè)內(nèi)領(lǐng)先,同時(shí)符合IEC61131-3標(biāo)準(zhǔn)和IEC61499標(biāo)準(zhǔn)的,用于創(chuàng)建工業(yè)自動(dòng)化產(chǎn)品的固件和工作臺(tái)[1]。
ISaGRAF是一套與硬件無(wú)關(guān),并以視窗為開(kāi)發(fā)環(huán)境的可編程控制語(yǔ)言設(shè)計(jì)開(kāi)發(fā)的軟件。在ISaGRAF3.3版中更將流程圖語(yǔ)言(Flow Chart,F(xiàn)C)納入成為第六種程序設(shè)計(jì)語(yǔ)言,使得ISaGRAF完全支持世界上自動(dòng)化行業(yè)的六大程序設(shè)計(jì)語(yǔ)言,成為最強(qiáng)大的可編程開(kāi)發(fā)工具[2]。ISaGRAF 支持IEC61131-3標(biāo)準(zhǔn)中的5種編程語(yǔ)言[3]。IEC61131-3定義了5種編程語(yǔ)言的語(yǔ)法和描述它們的表示法以及語(yǔ)言元素,如表1所示。
表1 IEC61131-3中的編程語(yǔ)言
開(kāi)發(fā)列車(chē)網(wǎng)絡(luò)控制系統(tǒng)(以下簡(jiǎn)稱(chēng):TCMS)軟件時(shí),采用的組件有操作系統(tǒng)、固件和TDB文件以及車(chē)輛控制單元(以下簡(jiǎn)稱(chēng):VCU),遠(yuǎn)程輸入輸出模塊(以下簡(jiǎn)稱(chēng):RIOM)。
TDBuild為ISaGRAF的自帶工具,用于定義I/O硬件類(lèi)型或增加新的數(shù)據(jù)結(jié)構(gòu)、函數(shù)以及功能模塊。TDBuild工具可將子系統(tǒng)的所有變量組成一個(gè)結(jié)構(gòu)體,每個(gè)信號(hào)變量的字位偏移都能根據(jù)數(shù)據(jù)類(lèi)型自動(dòng)計(jì)算,在編碼時(shí)直接調(diào)用生成的結(jié)構(gòu)體即可,無(wú)需逐一命名軟件中所用的變量,極大地提高了開(kāi)發(fā)效率。
ISaGRAF是基于多子程序(以下簡(jiǎn)稱(chēng):PRG)的開(kāi)發(fā)環(huán)境,軟件執(zhí)行嚴(yán)格按照程序循環(huán)周期執(zhí)行。并且軟件執(zhí)行的順序與PRG的先后順序完全對(duì)應(yīng),如圖1所示。VCU程序周期可由用戶按需自行配置,在實(shí)際項(xiàng)目程序執(zhí)行周期一般為50 ms。
圖1 程序執(zhí)行示意圖
在軟件開(kāi)發(fā)時(shí),子程序的前后順序按圖2所示的數(shù)據(jù)流圖進(jìn)行設(shè)置。
圖2 程序執(zhí)行數(shù)據(jù)流圖
設(shè)備間通信需要將傳輸?shù)淖止?jié)包轉(zhuǎn)化成具有實(shí)際意義的信號(hào),這類(lèi)工作在TDBuild里完成。在TDBuild建立數(shù)據(jù)結(jié)構(gòu),并為數(shù)據(jù)結(jié)構(gòu)里的每個(gè)信號(hào)都確定偏移量,當(dāng)該數(shù)據(jù)結(jié)構(gòu)獲取到相應(yīng)長(zhǎng)度的數(shù)據(jù)后,將按偏移量自動(dòng)分解成每個(gè)信號(hào)的數(shù)值。
1.3.1 TCMS與MVB子系統(tǒng)
VCU與MVB子系統(tǒng)采用MVB端口的結(jié)構(gòu),每個(gè)端口根據(jù)預(yù)先定義的數(shù)據(jù)量的不同體現(xiàn)為2字節(jié)、4字節(jié)、8字節(jié)、16字節(jié)或32字節(jié)的數(shù)據(jù)包,如圖3所示。
圖3 MVB端口的數(shù)據(jù)結(jié)構(gòu)圖
1.3.2 TCMS與其他子系統(tǒng)
其他子系統(tǒng)包含非MVB/CAN通信的子系統(tǒng),主要有SPDS、無(wú)線主機(jī)等。這些子系統(tǒng)通信所采用的數(shù)據(jù)結(jié)構(gòu)定義與MVB/CAN子系統(tǒng)類(lèi)似,區(qū)別在于MVB/CAN的數(shù)據(jù)包大小固定,即使沒(méi)有足夠的數(shù)據(jù)也仍需要以0填充,而非MVB/CAN子系統(tǒng)則根據(jù)子系統(tǒng)數(shù)據(jù)接口規(guī)范文件的需求定義數(shù)據(jù)結(jié)構(gòu)長(zhǎng)度。
完整的網(wǎng)絡(luò)控制系統(tǒng)軟件主要由參數(shù)、變量組、程序和功能塊組成。參數(shù)主要包括I/O配線和已定義的字,I/O配線是硬件設(shè)備板卡地址或各子系統(tǒng)的地址與結(jié)構(gòu)體變量綁定的體現(xiàn)。變量組程序則是按系統(tǒng)將變量分為不同的組,便于調(diào)試。程序是實(shí)現(xiàn)列車(chē)的邏輯控制功能。包括網(wǎng)絡(luò)初始化、數(shù)據(jù)輸入、數(shù)據(jù)輸出和對(duì)各子系統(tǒng)診斷與控制。列車(chē)的邏輯控制部分的程序有的需要調(diào)用功能塊來(lái)實(shí)現(xiàn)其功能。如司機(jī)室占有、加減速度測(cè)試等??筛鶕?jù)項(xiàng)目需要自定義功能塊實(shí)現(xiàn)軟件功能。
2.2.1 軟件架構(gòu)
VCU由CPU板卡、MVB板卡以及電源板卡組成。板卡之間通過(guò)背板總線VME總線連接。VCU軟件結(jié)構(gòu)主要由7個(gè)模塊組成:硬件輸入輸出模塊、輸入輸出映射模塊、邏輯控制模塊、故障診斷模塊、記錄模塊、協(xié)議/時(shí)間管理模塊以及變量字典組成,如圖4所示。
圖4 VCU軟件架構(gòu)圖
根據(jù)TCMS系統(tǒng)要求,VCU軟件須滿足主從自動(dòng)切換功能,主從設(shè)備互為熱備冗余。
TCMS中存在2個(gè)VCU,正常情況下只有一個(gè)VCU為車(chē)輛管理的主節(jié)點(diǎn),稱(chēng)之為強(qiáng)主,而另一個(gè)VCU則為備份的主節(jié)點(diǎn),為弱主。強(qiáng)主和弱主的區(qū)別僅針對(duì)子系統(tǒng)而言,通常由主設(shè)備完成對(duì)車(chē)輛的控制。以六編組地鐵車(chē)輛為例,默認(rèn)1車(chē)的VCU為強(qiáng)主。軟件啟動(dòng)時(shí),1車(chē)先給6車(chē)的VCU發(fā)送累加值,6車(chē)的VCU比1車(chē)VCU則慢1 s。所以6車(chē)的VCU先判斷出1車(chē)的VCU已在線,并且為強(qiáng)主,則6車(chē)VCU將不再給1車(chē)VCU發(fā)送累加值。主從VCU的判斷流程如圖5所示。
圖5 VCU主從判斷流程圖
ISaGRAF軟件應(yīng)用工程的組織結(jié)構(gòu)如圖6所示。在鏈路架構(gòu)中,用戶可定義程序使用的參數(shù)、變量組、程序、函數(shù)和功能塊;在硬件架構(gòu)中,用戶可配置程序的網(wǎng)絡(luò)屬性(連接到Target的總線類(lèi)型)、Target配置屬性和資源屬性;在數(shù)據(jù)字典中,用戶定義變量和參數(shù)、定義函數(shù)和功能塊的變量屬性以及引用由TDB工具生成的數(shù)據(jù)結(jié)構(gòu)體;I/O配線實(shí)現(xiàn)了本地變量與其他TCMS設(shè)備的數(shù)據(jù)交換,首先I/O配線將本地變量映射至相應(yīng)協(xié)議的數(shù)據(jù)包中,再通過(guò)UDP、MVB或CAN協(xié)議邏輯將數(shù)據(jù)包發(fā)送至總線或以太網(wǎng),UDP、MVB或CAN協(xié)議的實(shí)現(xiàn)封裝在底層庫(kù)。
圖6 ISaGRAF軟件應(yīng)用工程架構(gòu)圖
2.2.2 變量字典
軟件程序中使用到的所有變量均在變量字典中定義,包括全局變量、結(jié)構(gòu)體實(shí)例化等。VCU的變量字典依據(jù)列車(chē)各子系統(tǒng)數(shù)據(jù)接口規(guī)范(MVB通信協(xié)議)進(jìn)行設(shè)計(jì)。
2.2.3 硬件輸入輸出
硬件輸入輸出是VCU與其他子系統(tǒng)進(jìn)行通信的鏈接,VCU為每個(gè)子系統(tǒng)設(shè)定通信參數(shù)以及配置數(shù)據(jù)映射。如前述的輸入輸出變量通過(guò)綁定相應(yīng)的IO配線通道進(jìn)行數(shù)據(jù)交換。
2.2.4 輸入輸出映射
輸入輸出映射是以ISaGRAF程序的POU形式體現(xiàn)的,輸入輸出映射塊用于數(shù)據(jù)的匯總及篩選。加速度測(cè)試由P_AccTest程序進(jìn)行輸入輸出映射。
2.2.5 邏輯控制
邏輯控制是VCU軟件的核心功能,軟件的所有控制功能均在這部分完成。
2.2.6 循環(huán)記錄
循環(huán)記錄功能主要用于記錄周期性的數(shù)據(jù),數(shù)據(jù)包括數(shù)字信號(hào)和模擬信號(hào),具體的數(shù)據(jù)列表根據(jù)項(xiàng)目確定,記錄功能由TDB文件提供的底層C功能塊LogData實(shí)現(xiàn)。
2.2.7 故障檢測(cè)
故障檢測(cè)模塊是將VCU獲取的各子系統(tǒng)故障信號(hào)判定是否觸發(fā)或恢復(fù),并記錄至本地內(nèi)存,需要記錄的信號(hào)列表根據(jù)項(xiàng)目需求確定。
本文以加速度測(cè)試程序開(kāi)發(fā)為例,主要講述列控軟件設(shè)計(jì)的邏輯控制部分。加速度測(cè)試程序使用FBD語(yǔ)言實(shí)現(xiàn)。在該程序中調(diào)用AccTest功能塊來(lái)計(jì)算列車(chē)運(yùn)行時(shí)的加速度。AccTest功能塊需要計(jì)算列車(chē)運(yùn)行的加速度,利用ST語(yǔ)言來(lái)編寫(xiě)更加簡(jiǎn)潔、容易。加速度測(cè)試的程序開(kāi)發(fā)使用FBD語(yǔ)言與ST語(yǔ)言相結(jié)合的方式,很好地利用了2種編程語(yǔ)言的優(yōu)勢(shì),提高了開(kāi)發(fā)者的工作效率。加速度測(cè)試功能塊的參數(shù)定義如表2所示。
表2 加速度測(cè)試功能塊的參數(shù)定義
說(shuō)明:如圖7所示,HMI占有端設(shè)置的加速度測(cè)試起始速度和加速度測(cè)試終止速度均有乘以10的運(yùn)算,此處為單位換算(1=0.1 km/h)。輸入變量及其含義如表3所示。
圖7 加速度測(cè)試程序框圖
表3 加速度測(cè)試輸入變量及其含義
輸出變量及其含義如表4所示。
表4 加速度測(cè)試輸出變量及其含義
車(chē)輛操作人員在HMI屏上設(shè)置加速度測(cè)試的起始速度和終止速度并點(diǎn)擊開(kāi)始測(cè)試時(shí),VCU將通過(guò)如圖7所示的程序計(jì)算出列車(chē)在該測(cè)試區(qū)間內(nèi)的實(shí)時(shí)加速度、平均加速度和加速距離,再將三者的數(shù)據(jù)值發(fā)送給HMI進(jìn)行顯示。AccTest是加速度測(cè)試功能塊,其內(nèi)部流程如圖8所示。
圖8 加速度測(cè)試功能塊實(shí)現(xiàn)流程圖
加速度測(cè)試功能塊將加速度相關(guān)量計(jì)算的具體實(shí)現(xiàn)過(guò)程封裝在一起,這樣該功能塊具有更好的移植性,并且可以對(duì)其單獨(dú)加密,在必要時(shí)可以增強(qiáng)技術(shù)的安全性。
本文利用ISaGRAF實(shí)現(xiàn)了列車(chē)加減速度計(jì)算程序,該程序僅僅是列控軟件中的一個(gè)子程序,其他程序開(kāi)發(fā)遵循相同的開(kāi)發(fā)規(guī)范及設(shè)計(jì)流程,共同完成車(chē)輛的邏輯控制。此外,文中提到的FBD和ST兩種編程語(yǔ)言結(jié)合的軟件開(kāi)發(fā)方式,提高了軟件開(kāi)發(fā)效率,便于軟件調(diào)試,也為軌道交通領(lǐng)域軟件模塊化設(shè)計(jì)思想提供了參考。該設(shè)計(jì)方式已在寧波、昆明等地鐵車(chē)輛中運(yùn)用,能高效、可靠地完成車(chē)輛控制功能,具有良好的實(shí)際應(yīng)用效果。