(中国煤炭科工集团 太原研究院,太原 030006)
智能温度记录仪在冷链系统中起着重要的监督作用,它用于跟踪记录食品、药品在生产、贮藏、运输等过程中的温度,以防止这些产品因未处于所必需的特定低温环境下而受到污染发生变质。
目前我国市场上的主流智能温度记录仪产品大多是通过计算机端管理软件对其报警温度、记录周期、开始记录时间等参数进行设置,并读取和处理温度数据。但是,智能温度记录仪的使用具有很强的移动性,在一些工作现场部署计算机对温度记录仪进行操作在很大程度上会影响工作效率。随着智能手机的普及应用,手机移动性的优势越来越明显,一些手机软件的使用频率远远超过了同样功能的计算机应用软件,给人们带来了更为便捷的服务。但是目前市场上还没有智能温度记录仪的手机管理软件。
在此背景下,本文以市面上常见的一款智能温度记录仪作为应用对象,设计开发了智能温度记录仪Android手机管理软件,本软件不仅完全实现了计算机端管理软件的所有功能,而且功能更丰富,操作更简单和方便。
智能温度记录仪内部的微控制器芯片固化了嵌入式软件,使其具有检测温度、存储记录数据、与计算机或手机等进行串行通信的功能。本文所设计的智能温度记录仪手机管理软件需要的硬件包括:Android手机、温度记录仪和蓝牙微型打印机[1-2],其拓扑结构如图1所示。手机和智能温度记录仪通过OTG(On The Go)连接,手机和蓝牙微型打印机通过无线蓝牙连接[3-5]。
图1 系统拓扑结构图
智能温度记录仪手机管理软件主要分为三大功能模块:读写温度记录仪信息模块、温度数据显示模块、温度数据打印模块。
本模块包括以下子功能:
① 手机与记录仪的通信,实现此功能调用了Android系统下的CP2102驱动API。
② 读取记录仪内的系统信息,用于查看记录仪编号、记录周期、记录组数、已经记录条数、启动方式、关门次数、开始记录时间、最近记录时间、断电情况估计、报警上限、报警下限、报警开始时间、报警结束时间、当前电池电压、设置时电池电压和温度、最低电池电压及对应的温度、最低温电池电压及温度、记录仪型号、提示信息等。
③ 读取记录仪内的记录数据,用户可选择读取全部或部分数据,读取部分数据时可指定时间范围或记录编号范围。
④ 设置记录仪的工作信息,对记录周期、开始记录时间、报警上限、报警下限等信息进行修改并写入到记录仪中。
该功能本质上是手机与记录仪之间命令与参数的发送、接收和解析的过程。表1列出了通信过程中用到的唤醒、握手、读取部分信息命令。手机在读取数据之前需要唤醒记录仪并与记录仪握手,唤醒的过程是通过向记录仪发送00命令并成功接收记录仪返回来的任意字节数据;握手的过程是向记录仪发送00命令和任意3字节参数并比较接收数据与发送参数是否一致,一致则表明握手成功,否则握手失败。
表1 上位机读取下位机系统信息命令表
表2最后两行是手机向记录仪发送01命令后接收到的返回参数“26 30 00 F5 FE 07 23 13 31 00 01”及其相应的解释。可以看出,记录仪型号为F型,记录仪号为12 288,温度记录开始时间为07月23日13时31分,温度记录周期为1分钟,EEPROM当前地址为FEF5H,且其起始地址为0010H,根据式(1)计算出EEPROM内有数据的地址有65 254个,表示记录温度数据65 254/2=32 627条。
FEF5H-0010H+1=FEE6H=65254D
(1)
表2 读取下位机部分信息命令时下位机向上位机返回参数解析表
本模块包括曲线显示功能和表格显示功能,实现这两个功能之前先要从记录仪内读取记录的温度数据。温度数据存放在记录仪的EEPROM里,通过使用EEPROM块读命令来读取指定地址范围内的温度数据,并将读取回的数据存放至数组Tdata[n],通过式(2)计算出各记录点的记录时间,记为数组Ttime[n],式中yyyy-MM-dd HH:mm表示温度数据的起始时间(yyyy、MM、dd、HH、mm分别表示年份、月份、日期、时刻、分钟,记为T),cycle为记录周期。对于第i条(i从1开始)记录来说,它的记录编号为i,记录时间为Ttime[i-1],温度数据为Tdata[i-1]。表3列出了温度数据表格。
yyyy-MM-dd HH:mm+(i-1)×cycle
(2)
MPAndroidChart组件中的LimitLine类用来绘制坐标系内的温度报警线,调用构造方法来设置温度报警线的位置以及标签。
表格显示功能将全部或部分温度数据以表格的形式显示,方便用户快速观察某一刻的温度值。通过使用Android系统提供的listview控件来实现表格的触摸翻页显示功能。该功能向用户提供了图2所示的交互界面,允许用户读取全部数据或读取指定时间、指定记录范围的数据。
表3 温度数据表
图2 显示温度数据的设置界面
按时间显示部分温度数据,获取用户输入的开始时间(yyyy1-MM1-dd1HH1:mm1,计为T1)和结束时间(yyyy2-MM2-dd2HH2:mm2,记为T2)。根据式(3)、式(4)来判断这两个时间是否为温度记录仪的记录时间点,若SETS(SETE)为整数,说明yyyy1-MM1-dd1HH1:mm1、yyyy2-MM2-dd2HH2:mm2(分别记为T1、T2)是记录时间点,将二者分别记为ETS和ETE;若SETS(SETE)不是整数,则需要通过式(5)和式(6)将计算后的ETS(ETE)作为起(止)记录时间点。
SETS = (T1-T)/cycle
(3)
SETE = (T2- T)/cycle
(4)
(5)
(6)
表4 用户输入的时间段内的温度数据表
(7)
(8)
表5 用户输入的记录编号范围内的温度数据表
本文实现了将记录仪信息在手机上进行打印格式的编辑、预览、输出打印操作,充分利用微型蓝牙票据打印机底层硬件的功能设计开发了一个API,在厂商提供的接口函数上进行了更加丰富的功能扩充,既兼容了原有的文本打印、字符串打印、图片打印等功能,又增加了文本编辑和打印、快速曲线打印、快速表格打印等功能。
(1)文本编辑功能
文本编辑功能提供了可视化编辑窗口,方便用户编辑打印小票的格式和内容。本文设计了两个文本编辑函数,一个是文本格式函数,将打印机所有文本格式底层命令集成到set_format函数中,调用函数时将打印输出字符串及其格式放入输入参数中即可,无需再查看格式命令表;另一个是文本编辑界面函数ui_edit,调用此函数会弹出可视化文本编辑窗口,编辑格式时只要点击相应的格式按钮即可,无需考虑格式命令或参数的定义。
文本编辑界面函数ui_edit提供了图3所示界面,其中包含了所有文本编辑操作按钮、打开文件、保存文件和打印按钮。用户可以通过这个界面输入文字或点击“打开文件”按钮将已有的.txt文件导入到文本框内。界面内文本输入框中的字符、下划线、加粗、字号等操作按钮分别与set_format函数中对应参数相关联,点击某个按钮,相当于设置了set_fotmat函数的某个输入参数值。
图3 文本编辑界面
(2)快速打印温度数据曲线
本文设计实现了曲线打印函数print_line(String uriString),将数据存放在excel表格文件或.txt文本文件中,调用本函数就可以将数据以曲线的形式快速打印出来,函数的输入参数String uriString是由“文件路径/文件名”组成的字符串。打印效果如图4左侧小票所示。
图4 温度数据曲线和表格打印小票
(3)快速打印温度数据表格
本文设计实现了表格打印函数print_table(String uriString,int format),可实现快速打印excel表格的功能。函数print_table有2个输入参数,String uriString参数是由excel表格“文件路径/文件名”组成的字符串,int format参数是对表格边框格式的定义,取值为0、1、2、3,0表示不打印边框,1表示打印表格四周边框,2表示只打印横边框,3表示只打印竖边框。打印效果如图4中右侧小票所示。