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