雷 亮(天津水利電力機電研究所,天津 301900)
低壓機組控制模塊軟件開發環境研究
雷亮
(天津水利電力機電研究所,天津 301900)
摘要:本文介紹水輪機低壓機組控制裝置結構,且在Linux環境下搭建一個為低壓機組控制裝置搭載的軟模塊的開發環境,并測試串口數據傳輸實際情況。
關鍵詞:串口;Linux;Java;控制裝置
智能技術已經開始影響世界經濟,工業領域的智能化業已突顯,水電站的自動化控制集成程度越來越高,發電機組的集中控制越來越趨于專有化、智能化,能夠集成信息采集、控制、同期、保護功能于一體的發電機控制模塊將會在未來發電機控制領域發揮主導作用。智能模塊作為控制主體需要完成各種復雜的功能,對信息交換的要求也就比較高,各功能模塊所需數據的獲取及共享需要一個可靠的平臺,選擇一個可靠的信息平臺并建立一套完善的信息機制是非常必要的。
建立整個數據集成系統需要選擇一個良好的載體平臺才能夠保證程序良好地運行,選擇好數據載體和通訊端口可使模塊適應大多數應用場合。
2.1系統平臺—Linux
低壓機組控制模塊的系統平臺選擇Linux,Linux在家用電腦系統中并沒有占有較大份額,但在工業領域中卻有著很高的地位,它在可靠性、可伸縮性、運行速度等方面很突出。
首先,Linux是開源的,任何人都可以看它的源代碼,這就使得它特別安全,這種安全的特性對于工業領域的安全要求來說是至關重要的,而Windows卻不能做到這一點,因為Windows不可能開源,只能不斷地打補丁來修補新發現地漏洞,致使系統越來越臃腫。
其次,Linux有著一個很高效地內核,Linux平臺對硬件要求較低,而且,可以免費獲得許多程序和驅動。Linux對系統內存有著絕對的支配權,并不像Windows那樣依賴虛擬內存,可以在相對低配置地平臺上完成相對于Windows更多地工作。Windows使用“頁面文件”,它的作用是擴展內存,就是說用硬盤虛擬內存的方式來為應用程序提供比內存大的多的運行空間。但這個方式有一個缺點,就是硬盤比內存響應速度慢。所以,如果一臺計算機有較少內存時,虛擬內存(就是某一些硬盤空間)就會被頻繁使用,結果就使得計算機的運行速度非常慢。盡管用戶也可以將“頁面文件”調小以希望能降低虛擬內存的份額,但Windows本身卻不會響應用戶要求,虛擬內存(即頁面文件)還是在被使用著。這就是使用Windows的困境之一:用戶無法真正掌控系統。而對于Linux,用戶可以設置完全不用虛擬內存,也可以設置成先使用內存,不夠時再使用虛擬內存。當然也可以設置成盡量使用虛擬內存,留出系統的內存作為它用,用戶有決定的權力。
綜上所述,低壓機組控制模塊軟件系統選用Linux作為系統平臺,可以降低低壓機組控制模塊運行要求、提高可靠性。
2.2數據載體
低壓機組控制模塊信息交換平臺必須可靠高效,它應該將各種不同類型的數據存儲起來,并建立一個系統各功能模塊都能識別的統一數據接口,讓有權限的模塊索取所需數據。數據載體的目的是把信息讀取出來,并共享到每個需要數據的模塊,我們選擇拓展標記語言xml來實現低壓機組控制模塊數據的共享,此標記語言不僅可以實現數據共享,其用處還有很多:如HTML、留言板、J2EE的WEB配置信息、word和excel、hibernate的*.cfg.xml映射關系存儲等。智能模塊能讀懂這種標記,模塊或者模塊之間的信息傳遞可以依靠這種標記來實現,這種不需要體系數據庫的數據存儲、更新和讀取能夠更快更有效地將場數據共享。
2.3通訊方式
低壓機組控制裝置的信息交換支持現階段流行的方式:RJ45、DB9、USB、can-open接口,其中,USB接口主要設計功能為系統升級或者補充程序編寫端口,RJ45用于支持以太網,DB9用于支持采用RS232及RS485兩種通訊方式的硬件;can-open用于支持can總線。本文將介紹為模塊編寫RS485 RTU規約過程中的平臺及環境設置。
開發系統選擇在SUSELinuxEnterpriseserver 11環境下。測試硬件的串口采用MOXA的UPORT 1150USB轉串口產品,串口在現在的工業通訊領域還被經常應用。開發選用的java版本為1.7.0_51,需要下載的支持串口開發的開發包為:RXTX-2.1-7-bins-R2。
為在Linux平臺上開發串口驅動,選擇支持Linux平臺的開發環境——WildFly,即Jboss,它是一個免費的、開放源碼J2EE的實現,安裝方便,需要內存和硬盤空間較小。
3.1安裝/更新所需java到Linux
安裝新版本的java(本次為1.7.0_51,安裝在/usr/java下),安裝完成后根據安裝路徑設置環境變量,以下設置建議寫在bash_profile里以保證每次登錄都可以更新內存環境變量,PATH變量用于標識安裝java開發工具包(JavaDevelopmentKit,JDK)的位置,而CLASSPATH變量設置為存儲.class文件的目錄:
(1)設置java_home:exportJAVA_HOME=/usr/java/jdk1.7.0_51
(2)設置java路徑:exportPATH=$JAVA_HOME/bin: $PATH
(3)設置java庫路徑:exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
值得注意的是:必須在PATH變量插入分號和句號,分號是PATH目錄中入口之間的分隔符,而插入句號說明是當前目錄(符號應是英文狀態下輸入)。
安裝完成后系統默認的java依然是系統最初安裝的java1.6,未重啟計算機前(或未重新登錄前)想要最新安裝的java1.7發揮作用,需要在系統配置內設定一些參數。
在登錄系統后,鍵入:java-version來查看現行java的版本,可以用whichjava來確定現行java的安裝路徑。鍵入whichjava后得知現行的java安裝目錄為:/usr/bin/java,而現在需要運行的java安裝在/usr/java下,且文件夾名字為jdk1.7.0_51,想要立即使用新版java而不重新登錄的話,可以在這里做個鏈接,系統能找到新安裝的java。
要建立鏈接,首先要進入現行安裝目錄,鍵入cd/usr/bin來到安裝目錄,鍵入mvjavajava.bakforstore將現在的java隱藏起來,做一個軟鏈接:ln-s /usr/java/jdk1.7.0_51/bin/javajava。此時再次輸入whichjava,系統回復:/usr/java/jdk1.7.0_51/bin/java,java,鏈接已經成功,符合開發要求。
此時,只要指定運行庫就能夠直接支持java的運行了,因此,要添加CLASSPATH目錄的內容。可以在上述的CLASSPATH后面添加,也可以在/etc/profile里添加以下段落來實現系統對java的調用::$JAVA_HOME/jre/lib。系統就可以找到必須的. so文件來支持java運行了。
做完以上工作,必須使配置生效:在/etc/下執行sourceprofile命令(或者在/目錄下執行source bash_profile),執行之后鍵入java-version,系統回復:javaversion1.7.0_51,此時配置java完成。
3.2測試配置串口參數
將MOXAUPORT1150接入系統,即將其USB口插入服務器的USB口,然后在MOXA官網下載此硬件對Linux的驅動,下載驅動版本為:Linux3.x,下載并解壓縮,解壓縮后可以看到多個文件,其中包含有makefile和mxinstall兩個文件,在此目錄下執行. /mxinstall來安裝UPORT驅動到系統,安裝過程中需要確認安全性,按照提示說明更改設置即可。
安裝完成后,可以看到UPORT的ACTIVE燈亮,說明安裝成功。這時,可以用:dmesg|greptty來查看可用接口,系統回復為:
[0.000000]console[tty0]enabled
[0.475003]serial8250:ttyS0atI/O0x3f8(irq=4) isa16550A
[0.525630]serial8250:ttyS1atI/O0x2f8(irq=3) isa16550A
[0.626041]00:07:ttyS0atI/O0x3f8(irq=4)isa 16550A
[0.626203]00:08:ttyS1atI/O0x2f8(irq=3)isa 16550A
[2083684.682727]usb1-1.1:MOXAUPort1150 converternowattachedtottyUSB0
由于UPORT1150支持RS232和RS485兩種硬件平臺,所以,系統完成對USB端口的添加后,必須要設置串口屬性,設置串口有setserial-gdev/ttys [0|1|2|3],4種方式分別為:

這里測試用兩線制RS485,所以設置串口為1模式工作,鍵入命令:setserial/dev/ttyUSB0port1,執行完畢后,即可實現在串口發送和接收數據了。
3.3安裝RXTX
RXTX是系統對串口的驅動必要的開源庫,安裝后,就可以直接利用事先定義好的串口函數來進行通訊。此庫文件包包含有多個文件,其中x86_64-unknown-linux-gun里面存放的就是為SUSE系統準備的庫文件,將放在其中的librxtxSrial. so文件拷貝到/usr/java/jdk1.7.0_51/jre/lib/i386下,將RXTXcomm.jar復制到/usr/java/jdk/jre/lib/ext下,就完成了RXTX開源庫的安裝。
接下來對串口進行協議開發,本次用的是ModbusRTU協議。
(1)定義Modbus的主體功能;
(2)建立數據的發送格式,根據協議要求需要將格式轉換成要求的標準格式;
(3)建立RTU的傳輸函數;
(4)設置端口并建立連所需連接。
部分代碼及注釋
packageModbusInstance;
publicclassModbus{
/**
*定義功能碼和接口函數
*/
publicstaticfinalintdebug=0;
/**
*讀保持寄存器功能碼。
*/
publicstaticfinalbyteREAD_MULTIPLE_REGISTERS=(byte)0x03;
/**
*讀輸入寄存器功能碼。*/
publicstaticfinalbyteREAD_INPUT_REGISTERS=(byte)0x04;
/**
*寫保持寄存器功能碼。
*/
publicstaticfinalbyteWRITE_MULTIPLE_REGISTERS=(byte)0x10;
/**
*寫線圈狀態功能碼。
*/
……
建立好讀取機制后編譯運行,設備運行結果為:
Sent:01030010000445CC
Received:010308000000000000000095
數據1:0;數據2:0;數據3:0;數據4:0;
實際觀測UPORT數據發送燈閃爍正常,且監視到數據發送和數據接收,協議符合ModbusRTU,數據可通過串口傳輸,接下來就是編譯和在實際環境下運行。將程序測試用端口在程序中換成實際設備使用端口,將設備(主站)通過RS485連接到測試從站,重新編譯且生成可在實際設備上運行的可執行文件。必須保證實際環境Java版本和測試版本一致。
建立java可執行文件,在工程上右鍵點擊export,在彈出的對話框中選擇java->RunableJAR file->下一步->Launch configuration選擇已測試好的程序且在exportdestination中選擇要保存,并勾選libraryhandling中的 Copyrequiredlibraryintoa sub-foldernexttothegeneratedJAR。點擊Finish完成,將生成的文件和library文件夾拷貝到實際運行低壓機組控制模塊上,在終端登錄低壓機組控制模塊的Linux平臺用戶,采用ssh連接,連接到同一網絡后用sshroot@X.X.X.X來實現登錄。
登錄后在登錄環境下輸入:java-jar/etc/MBInquire.jar,測試返回為:
Sent:01030010000445CC
Received:010308000000000000000095
數據1:0;數據2:0;數據3:0;數據4:0;。
實際運行與測試時數據相同,設備實際數據可以被正確地讀取到一體化設備,且連續測試72h以上數據均可正常讀取存儲。
在Linux環境下搭建一個為水輪機低壓機組控制裝置搭載的軟模塊的軟件開發環境是可行的,其串口數據傳輸穩定可靠。
參考文獻:
[1]【美】杰里米.里夫金.第三次工業革命[M].北京:中信出版社,2012:277.
[2]【美】AlapatiSamR.數據庫管理藝術[M].北京:人民郵電出版社,2010:7.
[3]王定一,等.水電站計算機監視與控制[M].北京:中國電力出版社,2001:233.
[4]【美】PallaviJain,ShadabSIddiqui.J2EE專業項目實例開發(修訂版)[M].北京:中國水利水電出版社,2007:3.
[5]【美】EviNemeth,GarthSnyder,TrentRHein,etal.UNIXand Linux System Administration Handbook[M].4thed.NewJersey:PrenticeHall.
中圖分類號:TV736
文獻標識碼:A
文章編號:1672-5387(2015)03-0038-04
DOI:10.13599/j.cnki.11-5130.2015.03.011
收稿日期:2014-11-17
基金項目:中國水利水電科學研究院科研專項(TJ0145B262014)。
作者簡介:雷亮(1985-),男,助理工程師,從事水電廠自動化系統方案設計、設備開發、技術服務及質量管理工作。