何琪文 林葉錦 張均東 信佳智
摘要:鑒于在當(dāng)前輪機(jī)模擬器中油水分離器控制模塊缺少含油質(zhì)量分?jǐn)?shù)的仿真、報(bào)警記錄和參數(shù)的存儲(chǔ)以及人機(jī)交互界面的設(shè)計(jì)等功能,通過分析RWO油水分離器的工作原理和運(yùn)行邏輯,提出一種新型嵌入式油水分離器仿真模塊。根據(jù)模塊的功能需求,選取STM32F103xx為主芯片,W5100為網(wǎng)絡(luò)芯片,通過Altium Designer設(shè)計(jì)16DI8DO4AI 印制電路板(printed circuit board,PCB)。進(jìn)行嵌入式操作系統(tǒng)μC/OS-II的裁剪和移植,根據(jù)所使用的模塊對(duì)板載外設(shè)庫進(jìn)行初始化,基于運(yùn)行邏輯進(jìn)行多任務(wù)程序設(shè)計(jì)。試驗(yàn)表明,嵌入式油水分離器控制模塊能夠?qū)崿F(xiàn)含油質(zhì)量分?jǐn)?shù)的采集,適時(shí)觸發(fā)含油量超限報(bào)警并同步更新報(bào)警信息和閥位,用TFT液晶屏能夠?qū)崿F(xiàn)對(duì)參數(shù)值和運(yùn)行狀態(tài)的實(shí)時(shí)顯示。該模塊具有很高的應(yīng)用價(jià)值和良好的可擴(kuò)展性。
關(guān)鍵詞:油水分離器; 嵌入式系統(tǒng); 輪機(jī)模擬器; 分布式系統(tǒng); 船舶
中圖分類號(hào): ?U664.91;TP273.5
文獻(xiàn)標(biāo)志碼: ?A
Abstract:For current marine engine room simulators, the oily water separator control module lacks the functions of the simulation of oil mass fraction, storage of alarm records and parameters, and design of human-machine interaction interface. In view of this, by analyzing the working principle and running logic of RWO oily water separator, a new embedded oily water separator simulation module is designed. According to functional requirements of the module, STM32F103xx is selected as the main chip, W5100 is selected as the network chip, and 16DI8DO4AI PCB (printed circuit board) is designed by Altium Designer. Tailoring and transplanting embedded operating system μC/OS-II, the board support package is initialized based on the module used. Based on the running logic, the multi-tasking program is designed. Experiments show that, the embedded oily water separator control module can realize the collection of oil mass fraction, timely trigger the oil content high alarm, and synchronously update the alarm information and valve position, and implement the real-time display of parameter values and running status by TFT LCD screen. The module is of high application value and good scalability.
Key words:oily water separator; embedded system; marine engine room simulator; distributed system; ship
0 引 言
輪機(jī)模擬器是采用半實(shí)物模型搭建的、與母型船高度相似的模擬操作平臺(tái),廣泛應(yīng)用于教學(xué)[1]、操作培訓(xùn)[2-3]、工程論證等。油水分離器控制模塊是模塊化設(shè)計(jì)的輪機(jī)模擬器的重要組成部分,主要用于模擬機(jī)艙含油污水的處理過程。朱芳[4]和王守城等[5]基于可編程邏輯控制器(programmable logic controller,PLC)設(shè)計(jì)出船用油水分離器監(jiān)控系統(tǒng),但成本高、網(wǎng)絡(luò)兼容性低,不適用于輪機(jī)模擬器。盧飛[6]設(shè)計(jì)出基于ARM內(nèi)核的油水分離器監(jiān)測(cè)系統(tǒng),實(shí)現(xiàn)分布式數(shù)據(jù)采集和上位機(jī)通信,再通過輪機(jī)模擬器上位機(jī)進(jìn)行集中仿真[7-8],實(shí)現(xiàn)了本地控制模塊實(shí)時(shí)顯示含油質(zhì)量分?jǐn)?shù)仿真值(常用106做分母)的功能,但囿于控制模塊與服務(wù)器之間的高耦合性,且本地控制模塊不能夠獨(dú)立運(yùn)行,具有一定局限性。唐元元等[9]提出了分離型輪機(jī)模擬器仿真平臺(tái),要求模擬器各模塊之間具有低耦合性,同時(shí)能獨(dú)立運(yùn)行和信息交互。本文基于分離型輪機(jī)模擬器仿真平臺(tái),采用分布式仿真模式[7],分析RWO油水分離器的工作原理,依托RWO油水分離器數(shù)學(xué)仿真模型和運(yùn)行邏輯制定在本地控制模塊中運(yùn)行的嵌入式多任務(wù)軟件程序,最終通過控制模塊實(shí)現(xiàn)RWO油水分離器運(yùn)行邏輯和工作流程的仿真,同時(shí)實(shí)現(xiàn)與上位機(jī)信息的實(shí)時(shí)交互。相對(duì)于現(xiàn)有的輪機(jī)模擬器油水分離器控制模塊,本模塊能實(shí)現(xiàn)對(duì)油水分離器更加全面的分布式仿真,具有很高的實(shí)用價(jià)值。
1 工作原理
油水分離器的分離效果取決于油滴直徑、停留時(shí)間、溫度、聚集器材質(zhì)等。RWO油水分離器采用三級(jí)分離方式:第一級(jí)為重力分離,采用多層擋板和小流量泵延長停留時(shí)間,同時(shí)通過蒸汽盤管控制溫度,促使油滴碰撞、聚集、上浮形成穩(wěn)定油層,實(shí)現(xiàn)大直徑油滴分離[10-11];第二、三級(jí)為聚集器分離,利用聚集器材質(zhì)的親油性,小直徑油滴在聚集器構(gòu)件處被截留、聚集、脫離和上浮[10],最終實(shí)現(xiàn)小直徑油滴分離。系統(tǒng)提供兩路獨(dú)立的含油質(zhì)量分?jǐn)?shù)值報(bào)警ALARM1和ALARM2,均可以進(jìn)行報(bào)警參數(shù)設(shè)置和測(cè)試。ALARM1用于實(shí)現(xiàn)第二、三級(jí)分離處理后的水的含油量“高”報(bào)警,ALARM2用于實(shí)現(xiàn)第二、三級(jí)分離處理后的水的含油量“高高”報(bào)警。通過油水分離器日用泵把艙底水注入分離筒進(jìn)行處理,通過日用水管線向含油量檢測(cè)單元、管線、分離筒等提供反沖水。在系統(tǒng)啟動(dòng)前需檢查相關(guān)管線閥位、艙底水液位,選擇手動(dòng)或自動(dòng)模式后方可啟動(dòng)系統(tǒng),運(yùn)行結(jié)束時(shí)需對(duì)系統(tǒng)分離筒和管線進(jìn)行反沖洗,如圖1所示。
2 硬件設(shè)計(jì)
控制模塊的硬件系統(tǒng)包括主芯片模塊、通信模塊、電源模塊、存儲(chǔ)模塊、液晶顯示模塊、數(shù)字量輸入模塊、數(shù)字量輸出模塊和模擬量輸入模塊。主芯片STM32F103負(fù)責(zé)嵌入式操作系統(tǒng)μC/OS-II的運(yùn)行和處理上位機(jī)發(fā)送過來的信息;通信模塊采用網(wǎng)絡(luò)芯片W5100實(shí)現(xiàn)本系統(tǒng)與上位機(jī)間數(shù)據(jù)流通信;存儲(chǔ)模塊負(fù)責(zé)實(shí)時(shí)存儲(chǔ)含油污水含油質(zhì)量分?jǐn)?shù)值以及相關(guān)報(bào)警記錄;在系統(tǒng)運(yùn)行時(shí),液晶顯示屏實(shí)時(shí)顯示含油質(zhì)量分?jǐn)?shù)值、系統(tǒng)模式、報(bào)警等參數(shù);數(shù)字量輸入模塊用于采集人機(jī)交互按鍵信息和獲取相關(guān)繼電器狀態(tài);數(shù)字量輸出模塊負(fù)責(zé)控制相關(guān)繼電器動(dòng)作和LED燈的亮滅;模擬量輸入模塊負(fù)責(zé)實(shí)時(shí)采集壓力值、含油質(zhì)量分?jǐn)?shù)值、溫度值和流量值。
2.1 電路原理圖設(shè)計(jì)
總體結(jié)構(gòu)圖見圖2。充分考慮主芯片的引腳數(shù)量、模塊種類、封裝類型等因素后選取STM32F103ZET6為主芯片,封裝類型為LQFP144。基于對(duì)主芯片的保護(hù),在數(shù)字量輸入和輸出電路中采用TIP281-4光耦隔離模塊將內(nèi)、外部電路隔開。同時(shí),為保證數(shù)字量輸入的實(shí)時(shí)性和主芯片的安全,在光耦副邊采用10 kΩ電阻拉高限制引腳灌入電流。在模擬量輸入電路中,通過調(diào)理電路調(diào)整待放大電壓,再通過OPA2277U的正相放大電路將其轉(zhuǎn)換為0~3.3 V,該電路采用1%的精密電阻來實(shí)現(xiàn)精確放大。在考慮到代碼實(shí)現(xiàn)難度、通信速率、引腳實(shí)現(xiàn)等因素后,網(wǎng)絡(luò)芯片W5100與主芯片之間采用SPI(串行外設(shè)接口)通信,再通過RJ45網(wǎng)絡(luò)變壓器實(shí)現(xiàn)以太網(wǎng)通信。
2.2 印制電路板和按鍵貼膜設(shè)計(jì)
考慮到控制箱空間及內(nèi)部布局等,將印制電路板(printed circuit board,PCB)整體尺寸確定為18.6 cm×24 cm,見圖3。在繪制PCB圖時(shí),通過計(jì)算各電路電流確定線寬,線間距不小于10 mil(1 mil=0.025 4 mm),不得出現(xiàn)線直角和銳角,兩線之間盡量避免90°夾角,頂層采用VSS鋪銅,底層采用3.3 V鋪銅,在PCB的四角預(yù)留直徑4 mm的安裝孔。
在PCB繪制完成后,利用電氣規(guī)則檢查錯(cuò)誤并修改,然后生成Gerber文件并交付廠家生產(chǎn)。
采用Auto CAD設(shè)計(jì)按鍵貼膜整體布局,利用CorelDRAWX6繪制生產(chǎn)效果圖。在設(shè)計(jì)過程中,還考慮了可靠性、視覺效果、安裝便捷程度等因素。如圖4所示,貼膜整體為藍(lán)底白框,藍(lán)色部分采用磨砂設(shè)計(jì),透明的LCD或LED窗采用光面設(shè)計(jì)。采用直徑1 cm的金屬膜片按鍵,出線口位于貼膜下方,通過排線與電路板接口相連。
3 軟件設(shè)計(jì)
以集成開發(fā)環(huán)境MDK 5為程序開發(fā)平臺(tái),充分利用ST官方的標(biāo)準(zhǔn)外設(shè)庫和嵌入式操作系統(tǒng)μC/OS-II來快速實(shí)現(xiàn)程序設(shè)計(jì)。
3.1 外設(shè)驅(qū)動(dòng)
利用STM32F103的ADC模塊可實(shí)現(xiàn)規(guī)則組和注入組兩種采樣方式。本系統(tǒng)選擇通道設(shè)置更加靈活的注入組采樣方式。模擬量輸入驅(qū)動(dòng)程序在充分考慮采樣精度、采樣時(shí)間、采樣數(shù)據(jù)存儲(chǔ)等因素后,采用連續(xù)5次充分采樣和適當(dāng)?shù)牟蓸又芷趯?shí)現(xiàn)采樣時(shí)間與采樣精度間的平衡,同時(shí)使能DMA(直接存儲(chǔ)器訪問)通道實(shí)現(xiàn)采樣數(shù)據(jù)直接高速地存儲(chǔ)于SD卡。
在設(shè)計(jì)SDIO驅(qū)動(dòng)程序時(shí),參照SDIO模塊的一般初始化流程,結(jié)合SDIO支持的SD卡系統(tǒng)規(guī)范協(xié)議版本、總線模式、存取速度以及不同讀寫模式對(duì)應(yīng)的讀寫時(shí)序等因素后,選擇4位總線模式,在卡識(shí)別階段設(shè)為低速模式,在數(shù)據(jù)存儲(chǔ)階段設(shè)為高速模式。
SPI模塊驅(qū)動(dòng)程序用于實(shí)現(xiàn)主芯片STM32F103與網(wǎng)絡(luò)芯片W5100之間的數(shù)據(jù)通信?;赟PI總線接口的讀寫函數(shù)和網(wǎng)絡(luò)芯片W5100相關(guān)寄存器地址對(duì)基本的以太網(wǎng)通信參數(shù)(網(wǎng)關(guān)地址、MAC地址、子網(wǎng)掩碼、IP地址)進(jìn)行配置。為保證模塊的網(wǎng)絡(luò)可靠性,同時(shí)還將這些參數(shù)保存在片內(nèi)flash中以便上電/重啟時(shí)確保網(wǎng)絡(luò)配置不變。在充分考慮網(wǎng)絡(luò)的通信速率、冗余性、容錯(cuò)率和可靠性后,設(shè)置端口0的模式為UDP,溢出時(shí)間為50 ms,重發(fā)次數(shù)為5,接收、發(fā)送緩存區(qū)各為2 kB。建立緩存數(shù)組用于保存UDP發(fā)送、接收數(shù)據(jù)包,按照協(xié)議格式對(duì)數(shù)據(jù)包進(jìn)行異或校驗(yàn),校驗(yàn)一致的數(shù)據(jù)包通過功能碼字節(jié)和數(shù)據(jù)字節(jié)解析,執(zhí)行相關(guān)操作。
3.2 嵌入式操作系統(tǒng)μC/OS-II移植
嵌入式操作系統(tǒng)μC/OS-II具有可裁剪、多任務(wù)、搶占式和實(shí)時(shí)性等優(yōu)勢(shì)[12-13]。該系統(tǒng)通過了FAA(federal aviation administration)認(rèn)證,在實(shí)時(shí)性要求很高的工業(yè)領(lǐng)域得到廣泛的應(yīng)用,具有很好的可靠性。該系統(tǒng)移植時(shí)有大量的實(shí)例[14-15]可借鑒。關(guān)鍵注意事項(xiàng)如下:
(1)針對(duì)主芯片的存儲(chǔ)密度不同,需要在startup文件中選擇合適的 .s啟動(dòng)文件。同時(shí)利用USE_STDPERIPH_DRIVER宏定義調(diào)用ST官方標(biāo)準(zhǔn)外設(shè)庫,在外設(shè)驅(qū)動(dòng)層和應(yīng)用層中使用與標(biāo)準(zhǔn)外設(shè)庫相同的變量類型名,這樣可以極大地增加程序的可讀性和可移植性。
(2)系統(tǒng)嘀嗒SysTick作為操作系統(tǒng)的脈搏計(jì)時(shí)器,每秒嘀嗒數(shù)對(duì)操作系統(tǒng)的實(shí)時(shí)性和主芯片的運(yùn)行負(fù)荷有重要影響[16]。在綜合考慮上述因素后,每秒嘀嗒數(shù)在函數(shù)OS_CPU_SysTickInit()中被設(shè)置為1 000。
(3)在操作系統(tǒng)運(yùn)行多任務(wù)時(shí),不同任務(wù)之間的切換需要各自的私有棧。在建立私有棧時(shí),充分參考主芯片STM32F103本身的堆棧類型,將任務(wù)棧設(shè)置為滿減棧。在OS_CPU_SysTickHandler()中進(jìn)行任務(wù)切換時(shí),將需要切換的任務(wù)的狀態(tài)保存在對(duì)應(yīng)的任務(wù)棧中,同時(shí)將下一需要執(zhí)行的任務(wù)的狀態(tài)出棧并載入到主芯片相關(guān)寄存器,下一任務(wù)就開始運(yùn)行,這就是嵌入式操作系統(tǒng)μC/OS-II的任務(wù)切換機(jī)制。在圖5中,任務(wù)切換會(huì)導(dǎo)致相應(yīng)的任務(wù)狀態(tài)變化,但任務(wù)始終處于睡眠態(tài)、就緒態(tài)、運(yùn)行態(tài)、掛起態(tài)和中斷服務(wù)程序這5種狀態(tài)之一。
3.3 主程序
軟件流程采用多任務(wù)分時(shí)執(zhí)行,每次系統(tǒng)嘀嗒中斷就會(huì)檢查就緒表中最高優(yōu)先級(jí)任務(wù)進(jìn)行任務(wù)調(diào)度。采用嵌入式操作系統(tǒng)μC/OS-II可以很好地將程序分為3層[17-18]:外設(shè)驅(qū)動(dòng)層、模塊功能層和應(yīng)用層。如表1所示,根據(jù)每個(gè)任務(wù)的實(shí)時(shí)性要求和數(shù)據(jù)量創(chuàng)建任務(wù),確定其優(yōu)先級(jí)和任務(wù)棧大小。利用多任務(wù)操作系統(tǒng)的優(yōu)勢(shì),在外設(shè)初始化使能后,可以根據(jù)任務(wù)功能調(diào)用相關(guān)模塊函數(shù)建立任務(wù),在需要時(shí)將其加入到任務(wù)隊(duì)列中,通過操作系統(tǒng)實(shí)現(xiàn)任務(wù)切換。
如圖6所示,系統(tǒng)上電或復(fù)位后通過復(fù)位中斷進(jìn)入main函數(shù)。在main函數(shù)中實(shí)現(xiàn)系統(tǒng)初始化、外設(shè)初始化和主任務(wù)App_TaskStart建立等。在創(chuàng)建主任務(wù)App_TaskStart后,調(diào)用函數(shù)OSTimeSet()設(shè)置當(dāng)前系統(tǒng)時(shí)間為0,調(diào)用OSStart()開啟系統(tǒng)的多任務(wù)調(diào)度。在主任務(wù)中使能統(tǒng)計(jì)任務(wù)和空閑任務(wù),建立其他任務(wù),最后進(jìn)行延時(shí)空循環(huán)。
4 功能試驗(yàn)
在試驗(yàn)時(shí),硬件PCB安裝在金屬盒子內(nèi),盒子前部覆蓋按鍵貼膜。通過以太網(wǎng)與輪機(jī)模擬器上位機(jī)相連,在利用TCP/UDP調(diào)試工具發(fā)送協(xié)議確保程序通信功能正常后,針對(duì)含油質(zhì)量分?jǐn)?shù)值超限報(bào)警功能,通過電位計(jì)調(diào)整模擬量輸入通道來逐漸增大輸入電流,觀測(cè)含油質(zhì)量分?jǐn)?shù)值和報(bào)警。試驗(yàn)結(jié)果顯示(見圖7a),TFT液晶顯示屏上含油質(zhì)量分?jǐn)?shù)值逐漸增大,當(dāng)含油質(zhì)量分?jǐn)?shù)值超過14×10-6時(shí)觸發(fā)ALARM1報(bào)警,當(dāng)含油質(zhì)量分?jǐn)?shù)值超過15×10-6時(shí)觸發(fā)ALARM2報(bào)警。同時(shí)模擬器上位機(jī)界面的相關(guān)閥發(fā)生動(dòng)作,含油質(zhì)量分?jǐn)?shù)值報(bào)警信息更新,見圖7b。長時(shí)間運(yùn)行可靠性試驗(yàn)、按鍵頻繁按壓試驗(yàn)、功能驗(yàn)證試驗(yàn)等表明,本模塊具有完善的功能和良好的可靠性,實(shí)現(xiàn)了設(shè)計(jì)目標(biāo)。
5 結(jié)束語
在嵌入式油水分離器控制模塊中,主芯片STM32F103具有多樣化的外設(shè)接口,以嵌入式操作系統(tǒng)μC/OS-II為平臺(tái)的軟件程序具有良好的通用性和可移植性,同時(shí)TFT液晶顯示屏提供了友好的人機(jī)界面。本文的設(shè)計(jì)基于分布式輪機(jī)模擬器,不僅實(shí)現(xiàn)了對(duì)控制模塊的物理仿真,還實(shí)現(xiàn)了油水分離器的運(yùn)行流程仿真、運(yùn)行模式仿真、報(bào)警和參數(shù)修改等功能。印制電路板(PCB)具有較強(qiáng)的通用性,軟件程序擁有很好的可移植性,可用于其他類型油水分離器控制模塊,也可以用于新型油水分離器的設(shè)計(jì)論證,具有很高的實(shí)用價(jià)值。
參考文獻(xiàn):
[1]曾鴻, 甘輝兵. 輪機(jī)模擬器課程實(shí)施翻轉(zhuǎn)課堂的教學(xué)設(shè)計(jì)[J]. 航海教育研究, 2016, 33(1): 62-64.
[2]賈寶柱. 基于輪機(jī)模擬器的機(jī)艙資源管理培訓(xùn)及評(píng)估方案[J]. 航海教育研究, 2016, 33(1): 10-14.
[3]李燕彪, 張均東, 曹輝, 等. 輪機(jī)協(xié)同訓(xùn)練平臺(tái)中的角色問題及協(xié)同策略[J]. 大連海事大學(xué)學(xué)報(bào), 2016, 42(2): 63-67, 82. ?DOI: 10.16411/j.cnki.issn1006-7736.2016.02.011.
[4]朱芳. 基于PLC的船用油水分離監(jiān)控系統(tǒng)設(shè)計(jì)[J]. 艦船科學(xué)技術(shù), 2015, 37(6): 210-213.
[5]王守城, 田樂帥, 段俊勇, 等. 基于PLC的油水分離器遠(yuǎn)程控制系統(tǒng)的設(shè)計(jì)[J]. 制造業(yè)自動(dòng)化, 2016, 38(1): 124-127.
[6]盧飛. 基于ARM內(nèi)核μC/OS-II操作系統(tǒng)的艙底水監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 大連: 大連海事大學(xué), 2012.
[7]賈寶柱, 曹輝, 張均東, 等. 輪機(jī)模擬器及其關(guān)鍵技術(shù)[J]. 中國航海, 2012, 35(1): 35-40.
[8]鄭恒持, 蔣丁宇, 任光, 等. 全任務(wù)輪機(jī)模擬器的應(yīng)用與發(fā)展[J]. 世界海運(yùn), 2016, 39(11): 25-29. DOI: 10.16176/j.cnki21-1284.2016.00.006.
[9]唐元元, 張均東, 曹輝. 大型商船分離型輪機(jī)仿真實(shí)驗(yàn)平臺(tái)的設(shè)計(jì)[J]. 大連海事大學(xué)學(xué)報(bào), 2016, 42(2): 58-62. DOI: 10.16411/j.cnki.issn1006-7736.2016.02.010.
[10]侯先瑞. 重力式油水分離器性能的數(shù)值模擬[D]. 大連: 大連海事大學(xué), 2011.
[11]許永信. 船用立式油水分離器分離性能的數(shù)值模擬與分析[D]. 大連: 大連海事大學(xué), 2012.
[12]金亮, 張學(xué)杰. 3種嵌入式操作系統(tǒng)內(nèi)核的關(guān)鍵技術(shù)分析[J]. 云南大學(xué)學(xué)報(bào)(自然科學(xué)版), 2006(S2): 1-4.
[13]宋延昭. 嵌入式操作系統(tǒng)介紹及選型原則[J]. 工業(yè)控制計(jì)算機(jī), 2005(7): 41-42, 24.
[14]張繼珂. 嵌入式操作系統(tǒng)μC/OS-II的移植及文件系統(tǒng)設(shè)計(jì)[D]. 南京: 南京航空航天大學(xué), 2011.
[15]王小妮. 嵌入式操作系統(tǒng)μC/OS-II剖析與移植[J]. 現(xiàn)代電子技術(shù), 2015, 38(4): 84-86.
[16]趙霞, 郭耀, 雷志勇, 等. 基于模擬器的嵌入式操作系統(tǒng)能耗估算與分析[J]. 電子學(xué)報(bào), 2007, 36(2): 209-215.
[17]SHI Jian, GUO Mian. Embedded digital oscilloscope based on STM32 and μC/OS-II[J]. Applied Mechanics and Materials, 2012, 190-191: 1129-1135.
[18]廉小親, 張陽偉, 郝寶智, 等. 基于UcosII系統(tǒng)的電氣火災(zāi)遠(yuǎn)程監(jiān)控系統(tǒng)[J]. 測(cè)控技術(shù), 2015, 34(12): 70-73, 77.
(編輯 趙勉)