(中國煤炭科工集團 太原研究院,太原 030006)
智能溫度記錄儀在冷鏈系統(tǒng)中起著重要的監(jiān)督作用,它用于跟蹤記錄食品、藥品在生產(chǎn)、貯藏、運輸?shù)冗^程中的溫度,以防止這些產(chǎn)品因未處于所必需的特定低溫環(huán)境下而受到污染發(fā)生變質(zhì)。
目前我國市場上的主流智能溫度記錄儀產(chǎn)品大多是通過計算機端管理軟件對其報警溫度、記錄周期、開始記錄時間等參數(shù)進行設(shè)置,并讀取和處理溫度數(shù)據(jù)。但是,智能溫度記錄儀的使用具有很強的移動性,在一些工作現(xiàn)場部署計算機對溫度記錄儀進行操作在很大程度上會影響工作效率。隨著智能手機的普及應(yīng)用,手機移動性的優(yōu)勢越來越明顯,一些手機軟件的使用頻率遠遠超過了同樣功能的計算機應(yīng)用軟件,給人們帶來了更為便捷的服務(wù)。但是目前市場上還沒有智能溫度記錄儀的手機管理軟件。
在此背景下,本文以市面上常見的一款智能溫度記錄儀作為應(yīng)用對象,設(shè)計開發(fā)了智能溫度記錄儀Android手機管理軟件,本軟件不僅完全實現(xiàn)了計算機端管理軟件的所有功能,而且功能更豐富,操作更簡單和方便。
智能溫度記錄儀內(nèi)部的微控制器芯片固化了嵌入式軟件,使其具有檢測溫度、存儲記錄數(shù)據(jù)、與計算機或手機等進行串行通信的功能。本文所設(shè)計的智能溫度記錄儀手機管理軟件需要的硬件包括:Android手機、溫度記錄儀和藍牙微型打印機[1-2],其拓撲結(jié)構(gòu)如圖1所示。手機和智能溫度記錄儀通過OTG(On The Go)連接,手機和藍牙微型打印機通過無線藍牙連接[3-5]。
圖1 系統(tǒng)拓撲結(jié)構(gòu)圖
智能溫度記錄儀手機管理軟件主要分為三大功能模塊:讀寫溫度記錄儀信息模塊、溫度數(shù)據(jù)顯示模塊、溫度數(shù)據(jù)打印模塊。
本模塊包括以下子功能:
① 手機與記錄儀的通信,實現(xiàn)此功能調(diào)用了Android系統(tǒng)下的CP2102驅(qū)動API。
② 讀取記錄儀內(nèi)的系統(tǒng)信息,用于查看記錄儀編號、記錄周期、記錄組數(shù)、已經(jīng)記錄條數(shù)、啟動方式、關(guān)門次數(shù)、開始記錄時間、最近記錄時間、斷電情況估計、報警上限、報警下限、報警開始時間、報警結(jié)束時間、當(dāng)前電池電壓、設(shè)置時電池電壓和溫度、最低電池電壓及對應(yīng)的溫度、最低溫電池電壓及溫度、記錄儀型號、提示信息等。
③ 讀取記錄儀內(nèi)的記錄數(shù)據(jù),用戶可選擇讀取全部或部分數(shù)據(jù),讀取部分數(shù)據(jù)時可指定時間范圍或記錄編號范圍。
④ 設(shè)置記錄儀的工作信息,對記錄周期、開始記錄時間、報警上限、報警下限等信息進行修改并寫入到記錄儀中。
該功能本質(zhì)上是手機與記錄儀之間命令與參數(shù)的發(fā)送、接收和解析的過程。表1列出了通信過程中用到的喚醒、握手、讀取部分信息命令。手機在讀取數(shù)據(jù)之前需要喚醒記錄儀并與記錄儀握手,喚醒的過程是通過向記錄儀發(fā)送00命令并成功接收記錄儀返回來的任意字節(jié)數(shù)據(jù);握手的過程是向記錄儀發(fā)送00命令和任意3字節(jié)參數(shù)并比較接收數(shù)據(jù)與發(fā)送參數(shù)是否一致,一致則表明握手成功,否則握手失敗。
表1 上位機讀取下位機系統(tǒng)信息命令表
表2最后兩行是手機向記錄儀發(fā)送01命令后接收到的返回參數(shù)“26 30 00 F5 FE 07 23 13 31 00 01”及其相應(yīng)的解釋??梢钥闯?,記錄儀型號為F型,記錄儀號為12 288,溫度記錄開始時間為07月23日13時31分,溫度記錄周期為1分鐘,EEPROM當(dāng)前地址為FEF5H,且其起始地址為0010H,根據(jù)式(1)計算出EEPROM內(nèi)有數(shù)據(jù)的地址有65 254個,表示記錄溫度數(shù)據(jù)65 254/2=32 627條。
FEF5H-0010H+1=FEE6H=65254D
(1)
表2 讀取下位機部分信息命令時下位機向上位機返回參數(shù)解析表
本模塊包括曲線顯示功能和表格顯示功能,實現(xiàn)這兩個功能之前先要從記錄儀內(nèi)讀取記錄的溫度數(shù)據(jù)。溫度數(shù)據(jù)存放在記錄儀的EEPROM里,通過使用EEPROM塊讀命令來讀取指定地址范圍內(nèi)的溫度數(shù)據(jù),并將讀取回的數(shù)據(jù)存放至數(shù)組Tdata[n],通過式(2)計算出各記錄點的記錄時間,記為數(shù)組Ttime[n],式中yyyy-MM-dd HH:mm表示溫度數(shù)據(jù)的起始時間(yyyy、MM、dd、HH、mm分別表示年份、月份、日期、時刻、分鐘,記為T),cycle為記錄周期。對于第i條(i從1開始)記錄來說,它的記錄編號為i,記錄時間為Ttime[i-1],溫度數(shù)據(jù)為Tdata[i-1]。表3列出了溫度數(shù)據(jù)表格。
yyyy-MM-dd HH:mm+(i-1)×cycle
(2)
MPAndroidChart組件中的LimitLine類用來繪制坐標(biāo)系內(nèi)的溫度報警線,調(diào)用構(gòu)造方法來設(shè)置溫度報警線的位置以及標(biāo)簽。
表格顯示功能將全部或部分溫度數(shù)據(jù)以表格的形式顯示,方便用戶快速觀察某一刻的溫度值。通過使用Android系統(tǒng)提供的listview控件來實現(xiàn)表格的觸摸翻頁顯示功能。該功能向用戶提供了圖2所示的交互界面,允許用戶讀取全部數(shù)據(jù)或讀取指定時間、指定記錄范圍的數(shù)據(jù)。
表3 溫度數(shù)據(jù)表
圖2 顯示溫度數(shù)據(jù)的設(shè)置界面
按時間顯示部分溫度數(shù)據(jù),獲取用戶輸入的開始時間(yyyy1-MM1-dd1HH1:mm1,計為T1)和結(jié)束時間(yyyy2-MM2-dd2HH2:mm2,記為T2)。根據(jù)式(3)、式(4)來判斷這兩個時間是否為溫度記錄儀的記錄時間點,若SETS(SETE)為整數(shù),說明yyyy1-MM1-dd1HH1:mm1、yyyy2-MM2-dd2HH2:mm2(分別記為T1、T2)是記錄時間點,將二者分別記為ETS和ETE;若SETS(SETE)不是整數(shù),則需要通過式(5)和式(6)將計算后的ETS(ETE)作為起(止)記錄時間點。
SETS = (T1-T)/cycle
(3)
SETE = (T2- T)/cycle
(4)
(5)
(6)
表4 用戶輸入的時間段內(nèi)的溫度數(shù)據(jù)表
(7)
(8)
表5 用戶輸入的記錄編號范圍內(nèi)的溫度數(shù)據(jù)表
本文實現(xiàn)了將記錄儀信息在手機上進行打印格式的編輯、預(yù)覽、輸出打印操作,充分利用微型藍牙票據(jù)打印機底層硬件的功能設(shè)計開發(fā)了一個API,在廠商提供的接口函數(shù)上進行了更加豐富的功能擴充,既兼容了原有的文本打印、字符串打印、圖片打印等功能,又增加了文本編輯和打印、快速曲線打印、快速表格打印等功能。
(1)文本編輯功能
文本編輯功能提供了可視化編輯窗口,方便用戶編輯打印小票的格式和內(nèi)容。本文設(shè)計了兩個文本編輯函數(shù),一個是文本格式函數(shù),將打印機所有文本格式底層命令集成到set_format函數(shù)中,調(diào)用函數(shù)時將打印輸出字符串及其格式放入輸入?yún)?shù)中即可,無需再查看格式命令表;另一個是文本編輯界面函數(shù)ui_edit,調(diào)用此函數(shù)會彈出可視化文本編輯窗口,編輯格式時只要點擊相應(yīng)的格式按鈕即可,無需考慮格式命令或參數(shù)的定義。
文本編輯界面函數(shù)ui_edit提供了圖3所示界面,其中包含了所有文本編輯操作按鈕、打開文件、保存文件和打印按鈕。用戶可以通過這個界面輸入文字或點擊“打開文件”按鈕將已有的.txt文件導(dǎo)入到文本框內(nèi)。界面內(nèi)文本輸入框中的字符、下劃線、加粗、字號等操作按鈕分別與set_format函數(shù)中對應(yīng)參數(shù)相關(guān)聯(lián),點擊某個按鈕,相當(dāng)于設(shè)置了set_fotmat函數(shù)的某個輸入?yún)?shù)值。
圖3 文本編輯界面
(2)快速打印溫度數(shù)據(jù)曲線
本文設(shè)計實現(xiàn)了曲線打印函數(shù)print_line(String uriString),將數(shù)據(jù)存放在excel表格文件或.txt文本文件中,調(diào)用本函數(shù)就可以將數(shù)據(jù)以曲線的形式快速打印出來,函數(shù)的輸入?yún)?shù)String uriString是由“文件路徑/文件名”組成的字符串。打印效果如圖4左側(cè)小票所示。
圖4 溫度數(shù)據(jù)曲線和表格打印小票
(3)快速打印溫度數(shù)據(jù)表格
本文設(shè)計實現(xiàn)了表格打印函數(shù)print_table(String uriString,int format),可實現(xiàn)快速打印excel表格的功能。函數(shù)print_table有2個輸入?yún)?shù),String uriString參數(shù)是由excel表格“文件路徑/文件名”組成的字符串,int format參數(shù)是對表格邊框格式的定義,取值為0、1、2、3,0表示不打印邊框,1表示打印表格四周邊框,2表示只打印橫邊框,3表示只打印豎邊框。打印效果如圖4中右側(cè)小票所示。