何琪文 林葉錦 張均東 信佳智



摘要:鑒于在當前輪機模擬器中油水分離器控制模塊缺少含油質量分數的仿真、報警記錄和參數的存儲以及人機交互界面的設計等功能,通過分析RWO油水分離器的工作原理和運行邏輯,提出一種新型嵌入式油水分離器仿真模塊。根據模塊的功能需求,選取STM32F103xx為主芯片,W5100為網絡芯片,通過Altium Designer設計16DI8DO4AI 印制電路板(printed circuit board,PCB)。進行嵌入式操作系統μC/OS-II的裁剪和移植,根據所使用的模塊對板載外設庫進行初始化,基于運行邏輯進行多任務程序設計。試驗表明,嵌入式油水分離器控制模塊能夠實現含油質量分數的采集,適時觸發含油量超限報警并同步更新報警信息和閥位,用TFT液晶屏能夠實現對參數值和運行狀態的實時顯示。該模塊具有很高的應用價值和良好的可擴展性。
關鍵詞:油水分離器; 嵌入式系統; 輪機模擬器; 分布式系統; 船舶
中圖分類號: ?U664.91;TP273.5
文獻標志碼: ?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 引 言
輪機模擬器是采用半實物模型搭建的、與母型船高度相似的模擬操作平臺,廣泛應用于教學[1]、操作培訓[2-3]、工程論證等。油水分離器控制模塊是模塊化設計的輪機模擬器的重要組成部分,主要用于模擬機艙含油污水的處理過程。朱芳[4]和王守城等[5]基于可編程邏輯控制器(programmable logic controller,PLC)設計出船用油水分離器監控系統,但成本高、網絡兼容性低,不適用于輪機模擬器。盧飛[6]設計出基于ARM內核的油水分離器監測系統,實現分布式數據采集和上位機通信,再通過輪機模擬器上位機進行集中仿真[7-8],實現了本地控制模塊實時顯示含油質量分數仿真值(常用106做分母)的功能,但囿于控制模塊與服務器之間的高耦合性,且本地控制模塊不能夠獨立運行,具有一定局限性。唐元元等[9]提出了分離型輪機模擬器仿真平臺,要求模擬器各模塊之間具有低耦合性,同時能獨立運行和信息交互。本文基于分離型輪機模擬器仿真平臺,采用分布式仿真模式[7],分析RWO油水分離器的工作原理,依托RWO油水分離器數學仿真模型和運行邏輯制定在本地控制模塊中運行的嵌入式多任務軟件程序,最終通過控制模塊實現RWO油水分離器運行邏輯和工作流程的仿真,同時實現與上位機信息的實時交互。相對于現有的輪機模擬器油水分離器控制模塊,本模塊能實現對油水分離器更加全面的分布式仿真,具有很高的實用價值。
1 工作原理
油水分離器的分離效果取決于油滴直徑、停留時間、溫度、聚集器材質等。RWO油水分離器采用三級分離方式:第一級為重力分離,采用多層擋板和小流量泵延長停留時間,同時通過蒸汽盤管控制溫度,促使油滴碰撞、聚集、上浮形成穩定油層,實現大直徑油滴分離[10-11];第二、三級為聚集器分離,利用聚集器材質的親油性,小直徑油滴在聚集器構件處被截留、聚集、脫離和上浮[10],最終實現小直徑油滴分離。系統提供兩路獨立的含油質量分數值報警ALARM1和ALARM2,均可以進行報警參數設置和測試。ALARM1用于實現第二、三級分離處理后的水的含油量“高”報警,ALARM2用于實現第二、三級分離處理后的水的含油量“高高”報警。通過油水分離器日用泵把艙底水注入分離筒進行處理,通過日用水管線向含油量檢測單元、管線、分離筒等提供反沖水。在系統啟動前需檢查相關管線閥位、艙底水液位,選擇手動或自動模式后方可啟動系統,運行結束時需對系統分離筒和管線進行反沖洗,如圖1所示。
2 硬件設計
控制模塊的硬件系統包括主芯片模塊、通信模塊、電源模塊、存儲模塊、液晶顯示模塊、數字量輸入模塊、數字量輸出模塊和模擬量輸入模塊。主芯片STM32F103負責嵌入式操作系統μC/OS-II的運行和處理上位機發送過來的信息;通信模塊采用網絡芯片W5100實現本系統與上位機間數據流通信;存儲模塊負責實時存儲含油污水含油質量分數值以及相關報警記錄;在系統運行時,液晶顯示屏實時顯示含油質量分數值、系統模式、報警等參數;數字量輸入模塊用于采集人機交互按鍵信息和獲取相關繼電器狀態;數字量輸出模塊負責控制相關繼電器動作和LED燈的亮滅;模擬量輸入模塊負責實時采集壓力值、含油質量分數值、溫度值和流量值。
2.1 電路原理圖設計
總體結構圖見圖2。充分考慮主芯片的引腳數量、模塊種類、封裝類型等因素后選取STM32F103ZET6為主芯片,封裝類型為LQFP144?;趯χ餍酒谋Wo,在數字量輸入和輸出電路中采用TIP281-4光耦隔離模塊將內、外部電路隔開。同時,為保證數字量輸入的實時性和主芯片的安全,在光耦副邊采用10 kΩ電阻拉高限制引腳灌入電流。在模擬量輸入電路中,通過調理電路調整待放大電壓,再通過OPA2277U的正相放大電路將其轉換為0~3.3 V,該電路采用1%的精密電阻來實現精確放大。在考慮到代碼實現難度、通信速率、引腳實現等因素后,網絡芯片W5100與主芯片之間采用SPI(串行外設接口)通信,再通過RJ45網絡變壓器實現以太網通信。
2.2 印制電路板和按鍵貼膜設計
考慮到控制箱空間及內部布局等,將印制電路板(printed circuit board,PCB)整體尺寸確定為18.6 cm×24 cm,見圖3。在繪制PCB圖時,通過計算各電路電流確定線寬,線間距不小于10 mil(1 mil=0.025 4 mm),不得出現線直角和銳角,兩線之間盡量避免90°夾角,頂層采用VSS鋪銅,底層采用3.3 V鋪銅,在PCB的四角預留直徑4 mm的安裝孔。
在PCB繪制完成后,利用電氣規則檢查錯誤并修改,然后生成Gerber文件并交付廠家生產。
采用Auto CAD設計按鍵貼膜整體布局,利用CorelDRAWX6繪制生產效果圖。在設計過程中,還考慮了可靠性、視覺效果、安裝便捷程度等因素。如圖4所示,貼膜整體為藍底白框,藍色部分采用磨砂設計,透明的LCD或LED窗采用光面設計。采用直徑1 cm的金屬膜片按鍵,出線口位于貼膜下方,通過排線與電路板接口相連。
3 軟件設計
以集成開發環境MDK 5為程序開發平臺,充分利用ST官方的標準外設庫和嵌入式操作系統μC/OS-II來快速實現程序設計。
3.1 外設驅動
利用STM32F103的ADC模塊可實現規則組和注入組兩種采樣方式。本系統選擇通道設置更加靈活的注入組采樣方式。模擬量輸入驅動程序在充分考慮采樣精度、采樣時間、采樣數據存儲等因素后,采用連續5次充分采樣和適當的采樣周期實現采樣時間與采樣精度間的平衡,同時使能DMA(直接存儲器訪問)通道實現采樣數據直接高速地存儲于SD卡。
在設計SDIO驅動程序時,參照SDIO模塊的一般初始化流程,結合SDIO支持的SD卡系統規范協議版本、總線模式、存取速度以及不同讀寫模式對應的讀寫時序等因素后,選擇4位總線模式,在卡識別階段設為低速模式,在數據存儲階段設為高速模式。
SPI模塊驅動程序用于實現主芯片STM32F103與網絡芯片W5100之間的數據通信?;赟PI總線接口的讀寫函數和網絡芯片W5100相關寄存器地址對基本的以太網通信參數(網關地址、MAC地址、子網掩碼、IP地址)進行配置。為保證模塊的網絡可靠性,同時還將這些參數保存在片內flash中以便上電/重啟時確保網絡配置不變。在充分考慮網絡的通信速率、冗余性、容錯率和可靠性后,設置端口0的模式為UDP,溢出時間為50 ms,重發次數為5,接收、發送緩存區各為2 kB。建立緩存數組用于保存UDP發送、接收數據包,按照協議格式對數據包進行異或校驗,校驗一致的數據包通過功能碼字節和數據字節解析,執行相關操作。
3.2 嵌入式操作系統μC/OS-II移植
嵌入式操作系統μC/OS-II具有可裁剪、多任務、搶占式和實時性等優勢[12-13]。該系統通過了FAA(federal aviation administration)認證,在實時性要求很高的工業領域得到廣泛的應用,具有很好的可靠性。該系統移植時有大量的實例[14-15]可借鑒。關鍵注意事項如下:
(1)針對主芯片的存儲密度不同,需要在startup文件中選擇合適的 .s啟動文件。同時利用USE_STDPERIPH_DRIVER宏定義調用ST官方標準外設庫,在外設驅動層和應用層中使用與標準外設庫相同的變量類型名,這樣可以極大地增加程序的可讀性和可移植性。
(2)系統嘀嗒SysTick作為操作系統的脈搏計時器,每秒嘀嗒數對操作系統的實時性和主芯片的運行負荷有重要影響[16]。在綜合考慮上述因素后,每秒嘀嗒數在函數OS_CPU_SysTickInit()中被設置為1 000。
(3)在操作系統運行多任務時,不同任務之間的切換需要各自的私有棧。在建立私有棧時,充分參考主芯片STM32F103本身的堆棧類型,將任務棧設置為滿減棧。在OS_CPU_SysTickHandler()中進行任務切換時,將需要切換的任務的狀態保存在對應的任務棧中,同時將下一需要執行的任務的狀態出棧并載入到主芯片相關寄存器,下一任務就開始運行,這就是嵌入式操作系統μC/OS-II的任務切換機制。在圖5中,任務切換會導致相應的任務狀態變化,但任務始終處于睡眠態、就緒態、運行態、掛起態和中斷服務程序這5種狀態之一。
3.3 主程序
軟件流程采用多任務分時執行,每次系統嘀嗒中斷就會檢查就緒表中最高優先級任務進行任務調度。采用嵌入式操作系統μC/OS-II可以很好地將程序分為3層[17-18]:外設驅動層、模塊功能層和應用層。如表1所示,根據每個任務的實時性要求和數據量創建任務,確定其優先級和任務棧大小。利用多任務操作系統的優勢,在外設初始化使能后,可以根據任務功能調用相關模塊函數建立任務,在需要時將其加入到任務隊列中,通過操作系統實現任務切換。
如圖6所示,系統上電或復位后通過復位中斷進入main函數。在main函數中實現系統初始化、外設初始化和主任務App_TaskStart建立等。在創建主任務App_TaskStart后,調用函數OSTimeSet()設置當前系統時間為0,調用OSStart()開啟系統的多任務調度。在主任務中使能統計任務和空閑任務,建立其他任務,最后進行延時空循環。
4 功能試驗
在試驗時,硬件PCB安裝在金屬盒子內,盒子前部覆蓋按鍵貼膜。通過以太網與輪機模擬器上位機相連,在利用TCP/UDP調試工具發送協議確保程序通信功能正常后,針對含油質量分數值超限報警功能,通過電位計調整模擬量輸入通道來逐漸增大輸入電流,觀測含油質量分數值和報警。試驗結果顯示(見圖7a),TFT液晶顯示屏上含油質量分數值逐漸增大,當含油質量分數值超過14×10-6時觸發ALARM1報警,當含油質量分數值超過15×10-6時觸發ALARM2報警。同時模擬器上位機界面的相關閥發生動作,含油質量分數值報警信息更新,見圖7b。長時間運行可靠性試驗、按鍵頻繁按壓試驗、功能驗證試驗等表明,本模塊具有完善的功能和良好的可靠性,實現了設計目標。
5 結束語
在嵌入式油水分離器控制模塊中,主芯片STM32F103具有多樣化的外設接口,以嵌入式操作系統μC/OS-II為平臺的軟件程序具有良好的通用性和可移植性,同時TFT液晶顯示屏提供了友好的人機界面。本文的設計基于分布式輪機模擬器,不僅實現了對控制模塊的物理仿真,還實現了油水分離器的運行流程仿真、運行模式仿真、報警和參數修改等功能。印制電路板(PCB)具有較強的通用性,軟件程序擁有很好的可移植性,可用于其他類型油水分離器控制模塊,也可以用于新型油水分離器的設計論證,具有很高的實用價值。
參考文獻:
[1]曾鴻, 甘輝兵. 輪機模擬器課程實施翻轉課堂的教學設計[J]. 航海教育研究, 2016, 33(1): 62-64.
[2]賈寶柱. 基于輪機模擬器的機艙資源管理培訓及評估方案[J]. 航海教育研究, 2016, 33(1): 10-14.
[3]李燕彪, 張均東, 曹輝, 等. 輪機協同訓練平臺中的角色問題及協同策略[J]. 大連海事大學學報, 2016, 42(2): 63-67, 82. ?DOI: 10.16411/j.cnki.issn1006-7736.2016.02.011.
[4]朱芳. 基于PLC的船用油水分離監控系統設計[J]. 艦船科學技術, 2015, 37(6): 210-213.
[5]王守城, 田樂帥, 段俊勇, 等. 基于PLC的油水分離器遠程控制系統的設計[J]. 制造業自動化, 2016, 38(1): 124-127.
[6]盧飛. 基于ARM內核μC/OS-II操作系統的艙底水監測系統的設計與實現[D]. 大連: 大連海事大學, 2012.
[7]賈寶柱, 曹輝, 張均東, 等. 輪機模擬器及其關鍵技術[J]. 中國航海, 2012, 35(1): 35-40.
[8]鄭恒持, 蔣丁宇, 任光, 等. 全任務輪機模擬器的應用與發展[J]. 世界海運, 2016, 39(11): 25-29. DOI: 10.16176/j.cnki21-1284.2016.00.006.
[9]唐元元, 張均東, 曹輝. 大型商船分離型輪機仿真實驗平臺的設計[J]. 大連海事大學學報, 2016, 42(2): 58-62. DOI: 10.16411/j.cnki.issn1006-7736.2016.02.010.
[10]侯先瑞. 重力式油水分離器性能的數值模擬[D]. 大連: 大連海事大學, 2011.
[11]許永信. 船用立式油水分離器分離性能的數值模擬與分析[D]. 大連: 大連海事大學, 2012.
[12]金亮, 張學杰. 3種嵌入式操作系統內核的關鍵技術分析[J]. 云南大學學報(自然科學版), 2006(S2): 1-4.
[13]宋延昭. 嵌入式操作系統介紹及選型原則[J]. 工業控制計算機, 2005(7): 41-42, 24.
[14]張繼珂. 嵌入式操作系統μC/OS-II的移植及文件系統設計[D]. 南京: 南京航空航天大學, 2011.
[15]王小妮. 嵌入式操作系統μC/OS-II剖析與移植[J]. 現代電子技術, 2015, 38(4): 84-86.
[16]趙霞, 郭耀, 雷志勇, 等. 基于模擬器的嵌入式操作系統能耗估算與分析[J]. 電子學報, 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系統的電氣火災遠程監控系統[J]. 測控技術, 2015, 34(12): 70-73, 77.
(編輯 趙勉)