應亦豐
(上海世卓科技有限公司,上海201323)
近年來,“互聯(lián)網(wǎng)+”“物聯(lián)網(wǎng)”“智能控制”“工業(yè)互聯(lián)網(wǎng)”等概念層出不窮。同時,黨的十九大報告指出:“加快建設制造強國,加快發(fā)展先進制造業(yè),推動互聯(lián)網(wǎng)、大數(shù)據(jù)、人工智能和實體經(jīng)濟深度融合”。一時間,各大企業(yè)紛紛加強了自身在信息化、智能化建設方面的投入。為滿足制藥企業(yè)信息化、智能化改造的需求,筆者經(jīng)過潛心鉆研,以較低的成本初步完成了舒博拉尼凍干機的信息化、數(shù)據(jù)云端化改造。
本文以舒博拉尼凍干機的信息化、數(shù)據(jù)云端化改造為例,具體闡述其詳細的開發(fā)過程,為制藥裝備數(shù)據(jù)云端化改造提供參考。
凍干機的數(shù)據(jù)云端化改造系統(tǒng)架構如圖1所示。由于篇幅原因,本文只舉例最簡單、最必要的體系架構,從下至上只需要4個環(huán)節(jié),即可實現(xiàn)制藥裝備數(shù)據(jù)在移動端的顯示和查詢功能。
在該項目中,使用了ARM開發(fā)板取代傳統(tǒng)的PC機,與傳統(tǒng)的PC系統(tǒng)架構相比,ARM開發(fā)板具有如下優(yōu)勢:
圖1 凍干機的數(shù)據(jù)云端化改造系統(tǒng)架構圖
(1)體積小。ARM開發(fā)板只有一本小號筆記本的大小,某些型號的開發(fā)板甚至只有一張名片的大小。
(2)功耗低,發(fā)熱量小。ARM開發(fā)板的供電一般都是DC5V、2A,發(fā)熱量極小,主芯片上往往都不用加裝散熱片,很少發(fā)生因為發(fā)熱造成系統(tǒng)死機的情況。
(3)操作系統(tǒng)穩(wěn)定。ARM開發(fā)板的操作系統(tǒng)基本是經(jīng)過調(diào)整的Linux系統(tǒng),而Linux操作系統(tǒng)往往被國際軟件開發(fā)商定制開發(fā)成服務器操作系統(tǒng),如美國的RedHatLinuxServer系列產(chǎn)品甚至可與微軟的WindowsSERVER在服務器領域分庭抗禮。因此,ARM開發(fā)板的操作系統(tǒng)具備長時間不間斷運行的特性。
(4)安裝方便。由于ARM開發(fā)板體積小,可將其安裝在設備控制柜內(nèi)部,通信線直接連接到附近的PLC上,程序調(diào)試穩(wěn)定后,不用連接顯示器、鍵盤和鼠標,開機程序自動運行。
市場上ARM開發(fā)板的品牌、型號琳瑯滿目,本文推薦使用通用型的、可安裝Linux操作系統(tǒng)且自帶RS232/485串口的ARM開發(fā)板。
系統(tǒng)開發(fā)所需硬件如表1所示。
各硬件連接方式如圖2所示。
連接PLC上RS232串口線和USB轉接線的串口線需要自己動手制作,購買RS232接頭公、母頭各一個,按圖3方式連接就可以。
首先,要確定開發(fā)語言,ARM開發(fā)板的官方推薦開發(fā)語言是Python,基于特殊原因,最終決定采用Java來完成這個開發(fā)工作。
表1 開發(fā)所需硬件列表
圖2 ARM開發(fā)板硬件連接
圖3 PLC串口線制作接線圖
Java是一門歷史比較悠久、成熟、跨平臺、面向?qū)ο蟮拈_發(fā)語言,其第三方插件和開源庫不計其數(shù),幾乎可以滿足任何開發(fā)要求(該項目要使用到RXTXcomm開源庫,以達到和PLC串口通信的目的)。其跨平臺的特性,可以實現(xiàn)先在Windows系統(tǒng)上開發(fā),完成后再部署到Linux系統(tǒng)上運行。
運行環(huán)境的搭建具體流程:
(1)登陸開發(fā)板官方網(wǎng)站下載頁,下載Linux鏡像文件,本文使用較新的版本:2017-07-05-jessie.img。
(2)下載win32_disk_imager燒錄軟件,將鏡像文件燒錄到TF卡。
(3)將所有硬件連接到位,包括顯示器、USB鍵盤和鼠標,最后將TF卡插入開發(fā)板,打開電源,可以在屏幕上看到系統(tǒng)啟動畫面和啟動信息。
(4)進入桌面環(huán)境,點擊“打開終端”按鈕,打開系統(tǒng)終端。這是個類似于微軟DOS界面的終端,以后的所有工作基本上都是在這個終端界面里面完成。
(5)一般情況下,Linux發(fā)行版里面都會自帶Java,可通過以下方式進行確認:在終端里面輸入命令“java-version”并回車,可以看到如圖4所示的提示信息,表明系統(tǒng)已經(jīng)自帶了1.8版本的Java運行庫。
(6)接下來,安裝第三方RXTXcomm開源庫,沒有它的支持,開發(fā)板無法訪問串口。但是,RXTXcomm開源庫最后的更新時間大致是在2006年左右,因為除了工業(yè)領域,商業(yè)市場上幾乎99%的硬件都已經(jīng)拋棄了串口這種連接方式,所以RXTX主頁上壓縮包里面的文件只支持Linux IA32/IA64的架構,并不支持ARM架構,需要通過編譯源代碼來完成RXTXcomm在開發(fā)板上的安裝。
Linux系統(tǒng)雖然強大,但比較適合做服務器方面的應用。對于開發(fā)環(huán)境而言,還是在Windows系統(tǒng)上搭建比較便利。
下載適合操作系統(tǒng)的JDK開發(fā)包并安裝(32位或64位),開發(fā)版本可以使用1.6、1.7或1.8。隨后,根據(jù)提示安裝,基本上是一路點擊“下一步”和“確定”按鈕。
圖4 系統(tǒng)自帶Java運行庫
(1)添加Java的系統(tǒng)變量Path屬性,如圖5所示。打開Windows的“系統(tǒng)屬性”對話框,點擊“高級”標簽頁,再點擊“環(huán)境變量”按鈕。在“系統(tǒng)變量”中找到名為“Path”的系統(tǒng)變量,雙擊進入編輯模式。在“變量值”一欄的最后輸入“;%JAVA_HOME%in;%JAVA_HOME%jrein”。
圖5 設置Java的“Path”變量對話框
(2)新增Java的JAVA_HOME系統(tǒng)變量屬性,如圖6所示。點擊“環(huán)境變量”對話框的“新建”按鈕,變量名一欄輸入“JAVA_HOME”,變量值一欄輸入Java程序的安裝路徑“C:ProgramFilesJavajdk 1.8.0_40”。
圖6 新建“JAVA_HOME”變量對話框
(3)新增Java的CLASSPATH系統(tǒng)變量屬性,如圖7所示。再次點擊“環(huán)境變量”對話框的“新建”按鈕,變量名一欄輸入“CLASSPATH”,變量值一欄輸入Java程序的安裝路徑“.;%JAVA_HOME%lib;%JAVA_HOME%lib ools.jar”。
圖7 新建“CLASSPATH”變量對話框
(4)下載EclipseIDE開發(fā)軟件,將其解壓至一個文件夾,雙擊目錄下“eclipse.exe”,打開IDE開發(fā)界面即可進行編程工作,至此開發(fā)環(huán)境搭建完成。
在動手寫代碼前,要先搞清楚凍干機的PLC通信協(xié)議。簡單來說,就是開發(fā)板和PLC“交流”的一種規(guī)范,通常采用“一問一答”形式。開發(fā)板會首先發(fā)起一個請求代碼,傳送到PLC;PLC再根據(jù)請求碼的內(nèi)容,提取出合適的數(shù)據(jù),再以相同的規(guī)范發(fā)回給開發(fā)板,這樣就可以采集到PLC內(nèi)存區(qū)中的實時數(shù)據(jù)并加以分析利用了。
舒博拉尼凍干機采用的是歐姆龍CJ2M-CPU13-V2.0的CPU單元,這種PLC遵循歐姆龍公司的HostLink協(xié)議,現(xiàn)在就具體分析一下這種協(xié)議的編碼方式。
HostLink請求碼規(guī)范如圖8所示。
圖8 HostLink請求碼規(guī)范
(1)請求碼開頭始終用@開始,回復碼也是一樣。
(2)單元號,指的是PLC編程時設定的序號,默認為0,可以在電腦上用歐姆龍CX-Programmer程序打開查看,如圖9所示。
圖9 單元號設置對話框
(3)頭部代碼:始終為FA,回復碼也一樣。
(4)響應時間:設置范圍為0~F,單位為10ms。例如,設置為1,則響應等待時間為10ms。
(5)ICF、DA2、SA2、SID:通常固定設置為00。
(6)讀/寫命令:讀命令(0101)、寫命令(0102)。
(7)操作內(nèi)容:包含3個請求內(nèi)容,即請求PLC哪個區(qū)域的數(shù)據(jù)?從哪個地址開始操作?連續(xù)操作幾個數(shù)據(jù)?區(qū)域代碼查詢?nèi)绫?所示。
(8)校驗碼:算法比較復雜,這里不具體展開,可下載一個名為“HostLink校驗碼計算器”的軟件進行計算,如圖10所示,計算時需要輸入請求碼的前面所有字符,包括“@”。
(9)終止符:請求碼和回復碼都一樣,始終是“*回車”。
HostLink回復碼規(guī)范如圖11所示。
回復碼的前半部分定義和請求碼相同,這里就不再重復解釋。PLC返回的數(shù)據(jù)基本是包含在回復碼的后半段。如圖11所示:從校驗碼前面開始推算,最靠近校驗碼的是請求的最后一個數(shù)據(jù),再往前推算是N-1個、N-2個,以此類推。
舒博拉尼凍干機的過程數(shù)據(jù)都存放在PLC的DM區(qū)中,各參數(shù)對應地址如表3所示。
表2 區(qū)域代碼
圖10 HostLink校驗碼計算器
圖11 HostLink回復碼規(guī)范
表3 舒博拉尼凍干機PLC地址列表
通過觀察可以發(fā)現(xiàn),參數(shù)地址基本上都在一個比較集中的區(qū)域,可以采取一種連續(xù)讀取的方法,將D100~D152的數(shù)據(jù)一下子讀取出來,再進行內(nèi)部分析,對應到每個參數(shù)上。
代碼編寫工程分為四個類,采用盡可能簡單的架構。因為本文主要是為了闡述一個數(shù)據(jù)采集的過程,所以不引入Java的各種設計模式,力求讓代碼的邏輯過程簡單易讀。
串口一般在Windows系統(tǒng)上表達為“COM1、COM2”之類的。但是,在Linux系統(tǒng)下就完全不一樣了。先要運行一個自己編寫的小程序,列出開發(fā)板上可用的串口列表和在Linux系統(tǒng)下串口的表達字符串。這個字符串在接下來的數(shù)據(jù)采集代碼中是要用到的。
小程序會收集所有串口列表并顯示出來,將程序編譯后的.class文件復制到開發(fā)板上,運行結果如圖12所示。
從圖12可以看到,串口的字符串是“/dev/ttyUSB0”,和Windows系統(tǒng)下的完全不一樣,開發(fā)者一定要注意,不然串口通信是連接不上的。
該套數(shù)據(jù)采集程序很簡單,只有四個類,其調(diào)用關系如圖13所示。
圖12 Linux系統(tǒng)下的可用串口
圖13 四個Java類之間的調(diào)用關系
以上程序使用到了Java的線程機制,由于后期還將把這個程序功能擴展為將采集數(shù)據(jù)上傳到SQL數(shù)據(jù)庫、移動端手機顯示數(shù)據(jù)等,加上網(wǎng)絡原因等,一次讀寫操作耗時3~4s是很常見的事情。有移動開發(fā)經(jīng)驗的工程師知道,在Andoird開發(fā)中,如果有涉及網(wǎng)絡的操作都必須在子線程中完成,不得寫入UI線程。因此,如果將數(shù)據(jù)采集和數(shù)據(jù)庫讀寫操作都放在一個線程中,難免會導致線程阻塞。此處程序通過采用每隔30s就從后臺開辟一個新線程去讀取PLC數(shù)據(jù)的方法,避免線程阻塞。
將所有程序編譯后,所有.class文件復制到開發(fā)板中,運行程序最終結果如圖14所示。
至此,凍干機的數(shù)據(jù)都被采集顯示出來了,由于圖14所顯示的設備正處于二次干燥階段,所以,干箱壓力和冷凝器壓力這兩個壓力傳感器獲取的是PLC默認值,并不反映現(xiàn)場實際的生產(chǎn)情況。
圖14 程序運行最終結果
隨后即可將采集的數(shù)據(jù)上傳至位于云端的MySQL數(shù)據(jù)庫中,再結合手機前端的編程即可在任意時間、任意地點遠程監(jiān)控車間中運行的凍干機實時參數(shù)了,如圖15所示。
通過本次對舒博拉尼凍干機的信息化、數(shù)據(jù)云端化改造,為其他各種類型的制藥裝備信息化改造提供了參考,更為重要的是,數(shù)據(jù)采集的過程已經(jīng)將所有的制藥裝備運行數(shù)據(jù)存放于位于云端的SQL數(shù)據(jù)庫中,對將來各種大數(shù)據(jù)的統(tǒng)計以及藥品質(zhì)量的追溯來說,具有重大的意義。
圖15 手機端顯示凍干機實時運行參數(shù)
[參考文獻]
[1]OMRON.CJ2m_CJ2H_編程手冊[Z].
[2]OMRON.PLC_HostLink通信手冊[Z].
[3]李興華.JAVA開發(fā)實戰(zhàn)經(jīng)典[M].北京:清華大學出版社,2009.