倪曉霜,鄒 鯤
(東華大學 機械工程學院,上海 201620)
醫(yī)療事業(yè)的進步、對藥品的儲存提出了更高的要求?,F(xiàn)階段的醫(yī)藥存儲方式主要是冷庫存儲。同時,隨著計算機技術(shù)、虛擬儀器技術(shù)以及物聯(lián)網(wǎng)技術(shù)的快速發(fā)展,將網(wǎng)絡技術(shù)和虛擬儀器技術(shù)結(jié)合以實現(xiàn)遠程數(shù)據(jù)監(jiān)控和查詢已經(jīng)成為當今研究的熱點。傳統(tǒng)的通訊方式具有成本高,傳輸效率低,抗干擾能力差等缺陷,為了打破傳統(tǒng)通信方式的限制[1],利用LabVIEW可視化編程語言和動態(tài)網(wǎng)頁開發(fā)語言PHP設計了藥品冷庫實時監(jiān)控系統(tǒng),其優(yōu)點在于能夠準確地反映當前的倉位余量,藥品數(shù)量,批次和溫度等信息,便于及時調(diào)整,且不限于特定的軟件,用戶只需要在計算機或者其他移動設備上瀏覽指定的網(wǎng)頁或者直接登錄微信平臺就可以查詢更改當前信息,隨時隨地,方便快捷。同時,此套系統(tǒng)的通用性和可移植性強,能夠很好地適應其他工業(yè)設備,以實現(xiàn)工業(yè)數(shù)據(jù)監(jiān)控的網(wǎng)絡化。
本文介紹了基于移動互聯(lián)技術(shù)的遠程信息訪問系統(tǒng)設計,系統(tǒng)構(gòu)架如圖1所示。
圖1 系統(tǒng)網(wǎng)絡構(gòu)架
利用網(wǎng)絡端口socket將LabVIEW采集的各項信息發(fā)送給由PHP語言編寫的數(shù)據(jù)交換服務器并存入MySQL數(shù)據(jù)庫,再利用WEB服務器發(fā)布到WEB頁面進行顯示,同時SAE實現(xiàn)部分數(shù)據(jù)信息的云存儲,微信服務器實現(xiàn)與微信公眾平臺的交互。為了實現(xiàn)LabVIEW和PHP之間有效的通信,創(chuàng)建了一個PHP服務器端和兩個客戶端以及兩個LabVIEW服務器端和一個客戶端,它們一一對應,共組成三層“C/S”通信[2],每層采用不同的端口號,每一層中的服務器端都充當數(shù)據(jù)發(fā)送端,客戶端充當數(shù)據(jù)接收端,兩端應用基于TCP/IP協(xié)議的socket通訊技術(shù)通過網(wǎng)絡實現(xiàn)數(shù)據(jù)的收發(fā)。為了防止數(shù)據(jù)被惡意入侵,在本地采用Access數(shù)據(jù)庫儲存溫度傳感器檢測到的溫度信息及入庫時人工掃描或輸入的數(shù)據(jù)信息;采用LabVIEW中的Database Connectivity Toolkit工具包編寫信息提取程序,將實時信息從數(shù)據(jù)庫中讀出,以字符串的形式實現(xiàn)信息的發(fā)送,并根據(jù)服務器端和客戶端數(shù)據(jù)的收發(fā)特點,使用條件結(jié)構(gòu)實現(xiàn)VI之間的層次調(diào)用,控制各個子VI運行順序和啟停;采用PHP語言在同一個程序中集成了數(shù)據(jù)接收端和發(fā)送端,其間調(diào)用延時函數(shù)使其有序執(zhí)行,并結(jié)合Javascript、HTML5和CSS編寫了用戶注冊、登錄和操作界面;采用微信公眾開發(fā)平臺建立了用于查詢,更新,錄入,失溫報警和物流上傳的服務公眾號,并為不同用戶群體提供了不同的操作界面,其中本地Access數(shù)據(jù)庫與WEB服務器端的MySQL數(shù)據(jù)庫同步更新。從而,實現(xiàn)了PC機或者移動終端遠程監(jiān)控冷庫中各藥品的信息。
LabVIEW由National Instrument公司研制開發(fā),使用圖形化編程模塊代替?zhèn)鹘y(tǒng)的文本編程語言,流程化編程思路使程序結(jié)構(gòu)更為清晰,大幅提高了編程的效率[3]。LabVIEW有三種實現(xiàn)網(wǎng)絡通信的方法,分別是Datasocket技術(shù)、郵件傳輸、TCP/IP協(xié)議[4],本文采用的是第三種通信技術(shù),因為TCP/IP協(xié)議是如今使用最為廣泛的通信標準,其編譯的環(huán)境相對開放,對于傳輸過程中丟失的信息可以實現(xiàn)智能回訪,保證系統(tǒng)的安全性,具體傳輸過程如下:發(fā)送端發(fā)送連接請求→接收端監(jiān)聽到請求→建立連接→傳輸數(shù)據(jù)→關閉連接[5]。
在本系統(tǒng)中,利用LabVIEW中的TCP通信協(xié)議模塊建立了兩個數(shù)據(jù)發(fā)送端和一個數(shù)據(jù)接收端,分別命名為LabVIEWserver1、LabVIEWserver2和LabVIEWclient1,下面具體介紹各部分程序的作用。
該系統(tǒng)的數(shù)據(jù)庫主要包括以下9個數(shù)據(jù)表:庫存表、出庫表、入庫表、盤點表、倉庫字典表、產(chǎn)品字典表、供應商字典表、客戶字典表和用戶信息表。根據(jù)需求的不同,查詢不同的數(shù)據(jù)表或多表聯(lián)合查詢,具體地說,利用LabVIEW和數(shù)據(jù)庫的接口技術(shù),實現(xiàn)了LabVIEW和Access數(shù)據(jù)庫之間的聯(lián)通。利用 Database Connectivity Toolkit工具包和SQL基本查詢語句將數(shù)據(jù)表中某一藥品的當前信息整行讀出,然后整合成一條具有固定格式的字符串發(fā)送給后續(xù)的處理程序。
LabVIEW中的TCP函數(shù)包最大程度地簡化了網(wǎng)絡通信[6,7],對其的充分利用實現(xiàn)了信息的發(fā)送和對程序運行流程的間接控制,數(shù)據(jù)發(fā)送流程如圖2所示。
圖2 信息發(fā)送流程圖
首先,為了保證用戶能隨時查詢或更改冷庫各藥品的信息,除了關機整修外LabVIEW程序必須始終處于運行狀態(tài),便于讀取最新的信息并及時監(jiān)聽到連接請求,所以當沒有請求到達時LabVIEW server1一直處于監(jiān)聽狀態(tài)。當用戶在瀏覽器中打開連接網(wǎng)頁后,WEB端向LabVIEW端提出連接請求,一旦監(jiān)聽到連接請求,TCP監(jiān)聽函數(shù)會輸出WEB端的計算機名,從而進入條件結(jié)構(gòu)的指定分支,同時數(shù)據(jù)庫查詢子VI就會讀出數(shù)據(jù)表中的相應信息發(fā)送給啟停子VI。
當收到相應的計算機名后,開始運行啟停子VI,用于控制LabVIEW client1的啟停。具體地說,因為WEB服務器端一旦被開啟后將會一直工作直到手動關閉Apache服務器,所以要保證與之相連的LabVIEW客戶端程序在有查詢請求時自動運行,在成功接收到數(shù)據(jù)后自動停止。程序后端的局部變量是用于清空傳送過的數(shù)據(jù)信息,避免將上一次查詢到的數(shù)據(jù)重復發(fā)送給WEB端。
最后運行收發(fā)綜合子VI,通過“打開TCP連接”函數(shù)設定服務器端的IP地址和端口號,再用”讀取TCP數(shù)據(jù)”函數(shù)得到WEB端發(fā)送的“111”指令,從而構(gòu)建了LabVIEW client1并使程序進入條件結(jié)構(gòu)的“111”分支中運行,使LabVIEW server2開始監(jiān)聽并選擇要發(fā)送的信息,當接收到連接請求之后,數(shù)據(jù)信息通過“TCP寫入數(shù)據(jù)”函數(shù)發(fā)送到WEB端。若整個發(fā)送過程沒有出錯,WEB端接收到的數(shù)據(jù)會被實時的存入或更新MySQL數(shù)據(jù)庫中,并且循壞運行以上的步驟;若出現(xiàn)錯誤,則LabVIEW發(fā)送程序會停止運行,網(wǎng)頁上會提示相應的錯誤。
PHP是一種通用的開源腳本語言,主要應用于WEB開發(fā)領域,其混合了C,Java,Perl等多種語言,可以實現(xiàn)動態(tài)網(wǎng)頁的快速開發(fā)。本文選用Appserv作為PHP的運行環(huán)境,選用DreamWeaver作為網(wǎng)頁編輯器?;趕ocket通訊技術(shù),設計了一套服務器端和客戶端程序[8~10],即把三個獨立的客戶端和服務器子程序整合到一個程序當中,并用延時控制它們的執(zhí)行的順序。
為了使MySQL數(shù)據(jù)庫能及時的存入或更新LabVIEW端發(fā)送來信息,必須保證WEB端服務器始終運行,對網(wǎng)絡端口保持監(jiān)聽。在編程時,首先要建立兩個變量用于設置服務器的IP和端口號并用“create”函數(shù)對socket進行初始化。其次,使用“bind”函數(shù)綁定到指定的IP地址和端口并對端口創(chuàng)建監(jiān)聽。一旦一個客戶端的連接被收到,“accept”函數(shù)就會將客戶端發(fā)來的信息進行讀取打包,生成一個新的子socket,用于后續(xù)信息的處理,也即用“read”和“write”函數(shù)真正實現(xiàn)客戶端和服務器端的通信。最后,用“close”函數(shù)將父子socket都終止。
正常運行情況下,在客戶端運行之前,指定的端口已經(jīng)處于監(jiān)聽的狀態(tài),等待著客戶端的連接,只要客服端程序一運行即可連接上。在編程時,首先也要通過兩個變量和“create”函數(shù)初始化,然后用“connect”函數(shù)向服務器端程序中指定的IP地址和端口提出連接請求,并用“write”向服務器發(fā)送命令用于選取用戶需要的溫度信息。最后,用“read”函數(shù)接收服務器傳回的數(shù)據(jù),也即用戶需要的信息。
在每個服務器端和客戶端程序創(chuàng)建過程中,使用do while語句使程序的“讀”、“寫”可以循環(huán)進行,便于發(fā)送不同的命令和數(shù)據(jù)。同時,將三個子程序整合到了一起,使一個程序中既包含服務器端程序,也包含客戶端程序,它們分別與用LabVIEW創(chuàng)建的服務器端和客戶端相對應,其間采用“sleep”函數(shù)進行延時,使程序有序運行。
針對冷庫的遠程監(jiān)控,不同工作崗位的用戶會有不用的需求,主要分為三類用戶。第一類為冷庫管理員,對冷庫有直接操作的權(quán)利,需要了解冷庫中藥品的各項信息,所以為其設計了完整的監(jiān)控界面,即包括查詢藥品、倉位、溫度等信息,更新和錄入數(shù)據(jù)信息,實時現(xiàn)場圖片查看。這里,要特別提出的是在查詢的同時,本文還設計了溫度報警,藥品過期預警和余量不足預警[11]的功能。第二類為采購員,會較為頻繁地查詢冷庫中各類藥品的供應商,數(shù)量,失效日期等信息,所以為采購員設計了一個簡潔明了的操作界面。第三類用戶為系統(tǒng)維護員,會對使用此套系統(tǒng)的用戶信息進行定期審核和統(tǒng)計,或當用戶登錄、注冊等賬戶服務出現(xiàn)故障時及時處理,故為其設計了專門用于用戶信息操作界面。
此外,對于稀缺的或者危險性較高的藥品設計了藥品跟蹤功能,即從供應商發(fā)貨到本地收貨,再到冷庫儲存,最后到藥品使用途徑都進行了詳細的跟蹤記錄,當有相關醫(yī)療問題產(chǎn)生時,可以方便的查詢到出錯的環(huán)節(jié)并避免問題的再次發(fā)生。此部分運用到了微信的圖片上傳和位置上傳功能,
通過微信服務器打包后發(fā)送到SAE上,并進行進一步解析,把實時圖片和位置信息存入SAE的共享數(shù)據(jù)庫中。
現(xiàn)階段的遠程終端系統(tǒng)一般采用PC機,性價比低,結(jié)構(gòu)笨重,不便于攜帶與轉(zhuǎn)移,微信用戶范圍廣且微信公眾平臺具有跨平臺,開發(fā)體系完善,使用方法簡單等優(yōu)勢,故設計開發(fā)了一個微信公眾服務號,為不同手機平臺的用戶提供了方便快捷的監(jiān)控方式[12,13]。通過微信公眾平臺可以在線為注冊登錄后的用戶提供冷庫中藥品的各項實時信息,具體的建立方法是在登錄微信公眾平臺后,選擇開發(fā)者模式,通過URL和Token與SAE建立連接,并通過自定義菜單接口編寫實現(xiàn)了如圖3的主界面,分別為“信息查詢”、“產(chǎn)品跟蹤”、“賬戶服務”,其中“信息查詢”下設置了四個子菜單項,分別對應三類用戶和圖片查看,“產(chǎn)品跟蹤”對應物流信息上傳和查看兩項功能,“賬戶服務”下也設置了三個子菜單項,分別對應對賬戶信息的三中操作,子菜單項采用點擊回復文本和跳轉(zhuǎn)網(wǎng)頁兩種模式。若后續(xù)有新的用戶需求,可以直接在此公眾號上添加新的菜單項對應新的用戶需求。
圖3 主界面圖
為了使信息易讀易懂,設計了人性化的操作界面。用戶只需要輸入某藥品的兩項特征即藥品名稱和產(chǎn)品批號,就可以查看此藥品相應的數(shù)據(jù)信息。具體方法是首先建立用戶注冊界面,將用戶輸入的信息存入用戶信息表,注冊成功后用戶便可以通過登錄進入各自的操作界面。
冷庫管理員界面主要運用“select from”語句對指定產(chǎn)品進行查詢,運用“update set”語句對指定產(chǎn)品的更新,運用“insert into ”語句添加新的產(chǎn)品信息。同時,余量預警和失效預警均在查詢過程中實現(xiàn),結(jié)果采用不同的顏色警示。
物流信息上傳功能主要應用了微信公眾平臺自帶的位置上傳功能,當點擊“產(chǎn)品跟蹤”下“物流上傳”的子菜單時,會有相應的文本提示,然后上傳位置和現(xiàn)場圖片,SAE通過對數(shù)據(jù)包的解析將相應的數(shù)據(jù)存入SAE共享數(shù)據(jù)庫對應的數(shù)據(jù)表中,并把要回復的信息整合成一個新的XML返回微信服務器,從而使用戶收到返回信息。具體實現(xiàn)如圖4(a)所示。
圖4 系統(tǒng)新增功能圖
此外,報警功能的實現(xiàn)是通過微信平臺的客服接口,不同于現(xiàn)有的郵件報警、短信報警等報警方式,而直接微信內(nèi)部實現(xiàn)循環(huán)報警,這里的循環(huán)是指當溫度超過規(guī)定值后,微信平臺每5秒主動推送一次報警信息,直到溫度被恢復到規(guī)定值以下。報警信息如圖4(b)所示。
此公眾號的控制功能主要體現(xiàn)在當冷庫中發(fā)生失溫現(xiàn)象的,冷庫管理員可以向公眾號發(fā)送規(guī)定的指令從而解決失溫問題。指令信息實現(xiàn)控制的具體過程如圖4所示,移動終端發(fā)送的信息通過WEB服務器解析處理后存入MySQL數(shù)據(jù)庫中,而數(shù)據(jù)交換服務器會不斷查詢控制標志位是否置位,當置位時,在查詢具體的控制數(shù)據(jù),送給LabVIEW端,進而發(fā)送到控制硬件實現(xiàn)溫度的調(diào)節(jié)。
本文首先闡述了基于計算機網(wǎng)絡技術(shù)的遠程信息監(jiān)控系統(tǒng)設計方案,利用網(wǎng)絡接口socket實現(xiàn)以LabVIEW應用程序作為客戶端,以PHP網(wǎng)頁程序作為服務器端的數(shù)據(jù)通信。接著,介紹了LabVIEW程序具體的開發(fā)過程,基于TCP/IP協(xié)議采用TCP函數(shù)模塊實現(xiàn)與WEB端的連接,并使用條件結(jié)構(gòu)控制子程序是否運行和運行的順序。其次,介紹了服務器端程序的開發(fā)過程,基于“C/S”機制,使用PHP語言中的“create”、“l(fā)isten”、“bind”、“connect”等函數(shù)完成了服務器和客戶端的搭建。通過兩個應用程序之間的網(wǎng)絡通信實現(xiàn)了遠程數(shù)據(jù)的傳輸,遠程用戶可以通過瀏覽器訪問相應的網(wǎng)頁查詢到所需的信息。同時,建立了不受系統(tǒng)平臺限制的微信服務號,使用戶可以隨時隨地更新或查詢所需信息。此外,設置了用戶注冊和登錄界面,并利用Session防止用戶直接輸入地址而不通過登錄訪問信息頁面,提高系統(tǒng)了的安全性。物流信息上傳與查詢,現(xiàn)場圖片查看和報警預警功能的實現(xiàn)提高了此遠程監(jiān)控平臺綜合性和實用性。未來還可將多地的冷庫藥品信息發(fā)送到同一個MySQL數(shù)據(jù)庫中,形成監(jiān)控網(wǎng)絡,方便統(tǒng)一管理和狀態(tài)分析。當然,此套系統(tǒng)在網(wǎng)絡安全方面仍存在一些問題,需要進行進一步的優(yōu)化處理。
[1]藺佳哲,王茜,張沿磊.某型空空導彈遠程故障檢測系統(tǒng)的設計[A].第十屆全國信號和智能信息處理與應用學術(shù)會議, 中國湖北襄陽,F,2016[C]:381-2.
[2]鮑雪亞,趙強,顧德英.基于B/S和C/S混合架構(gòu)的遠程監(jiān)控系統(tǒng)[J].儀器儀表學報,2004,S2):591-2.
[3]李翼.基于LabVIEW的實驗管理系統(tǒng)[D].浙江大學,2005:35-44.
[4]盛世岳.室內(nèi)環(huán)境多參數(shù)無線測量系統(tǒng)的研究與設計[D].廈門大學,2014:47-56.
[5]趙軍偉,劉勛,董浩.基于TCP協(xié)議的遠程監(jiān)控系統(tǒng)的實現(xiàn)[J].中國測試,2010,01):78-81.
[6]黃晨,李茂奎,賈帥,等.一種LabVIEW與AVRDAQ間的遠程通信模式及應用[J].實驗室研究與探索,2010,(10):49-51,64.
[7]劉佳.基于LabVIEW的大麥生長遠程監(jiān)控系統(tǒng)的設計與實現(xiàn)[D].甘肅農(nóng)業(yè)大學,2016.
[8]汪娟.基于WEB的工業(yè)遠程監(jiān)控系統(tǒng)研究與實現(xiàn)[D].武漢理工大學,2008:37-46.
[9]王洪猛.基于Web的遠程監(jiān)控系統(tǒng)開發(fā)技術(shù)研究[D].武漢大學,2005:22-26,38.
[10]楊桄.基于互聯(lián)網(wǎng)服務器架構(gòu)的物聯(lián)網(wǎng)平臺研究[D].北京郵電大學,2014:33-39.
[11]王一帆,龔壘.校園網(wǎng)機房智能監(jiān)控預報警系統(tǒng)界面設計與實現(xiàn)[J].電子技術(shù)與軟件工程,2016,(16):54.
[12]蔣麗麗,姜大慶,沈美.基于微信的農(nóng)業(yè)專家在線服務系統(tǒng)的設計與開發(fā)[J].電子技術(shù)與軟件工程,2016,(21):55-56.
[13]戰(zhàn)騰.微信公眾平臺的研發(fā)與在醫(yī)療方面的應用實踐[D].山東大學,2015:21-45.