进入中断后,首先读取(GET_STATUS)中断状态,同时清除当前中断请求。然后对读入状态进行分析判断,若状态为EP2_OUT,表示CH375A成功接收到下传数据,再锁定数据缓冲区,防止数据缓冲区数据遭到破坏;若状态为EP2_IN,表示数据上传已成功,此时CH375A的数据缓冲区仍处于锁定状态,需软件解锁。CH375A成功接收到数据后,从机通过API函数RD_USB_DATA读取数据,读入后缓冲区自动解锁。然后判断是否有数据上传,有则通过API函数WR_USB_DATA7进行上传,完成后退出;否则自动退出。当CH375A将数据成功上传后,主机判断是否还有数据要上传,有则利用WR_USB_DATA7进行数据上传,完成后利用API函数USB_UNLOCK对CH375的数据缓冲区进行解锁,然后退出;否则利用USB_UNLOCK对数据缓冲区进行解锁,然后退出。
若CH375A工作在主机模式下,此时可启用报表输出程序。由STC89C52RD+来检测微型打印机状态和选通微型打印机,条件满足后,从机将检测信息及检定辅助信息经CH375A并行接口输出到微型打印机,完成报表的自动生成。使系统摆脱对主机的依赖,实现系统对报表快速输出的功能。报表输出模块程序流程如图5所示。
3.2 系统通信接口主机关键部分程序设计
绝缘电阻表自动检定系统主机应用程序主要包括Windows平台下的USB驱动程序、主机应用程序及报表输出程序。
本文采用组件库丰富且支持强大网络和数据库功能的C++ Builder 2010作为前台软件开发平台。首先,利用C++ Builder新建一个DLL类的(动态链接库)工程;再以DllEntryPoint为入口函数、dllimport为出口函数创建CH373A的动态链接库;然后将创建的CH375DLL.H、CH375DLL.LIB、CH375DLL.DEF文件导入工程中,即可完成动态库的链接。通过调用CH375OpenDevICe(0)来开启CH375A从机设备[7],将CH375DLL.H文件中定义的变量INVALID_HANDLE_VALUE与返回值比较,若相等,则表示CH375A设备打开成功,否则表示设备打开失败,主机界面中可显示相应提示信息;依据协议,做好等待从机信息准备;完成后退出。主机与CH375A进行信息交互的流程,如图6所示。
若将C++ Builder 2010的Timer控件触发时间设为100 μs,1 s内可完成10 000次批量数据传输。完全可以满足用户对绝缘电阻表自动检测系统的快速检定要求。目前,该系统已投入使用,其绝缘电阻表自动检定系统与上位机间进行USB通信的测试界面如图7所示。
本设计基于USB从机技术的通信接口,可自动识别主机和微型打印机,实现设备的快速连接。在绝缘电阻表自动检定系统中应用,使得原有检测装置与主机融为一体,可完成数据的自动检测、快速上传及自动生成编辑功能强大的Word报表,系统数据库方便了用户对检定数据的管理,提高了工作效率,实现了自动化、智能化检定。本文采用C语言模块化编程方式,可快速移植和二次开发,有利于USB从机技术在智能检测设备和高速数据采集系统中的广泛应用。
参考文献
[1] 杨世海,陈彦华.电测仪表及其应用[M].北京:中国电力出版社,2009.
[2] 中国经济报告课题组.2010年仪表检定仪行业发展研究报告[R].北京:北京君略产业研究院,2010.
[3] 周洪建.基于DriverStudio的USB设备驱动程序的设计[J].福建电脑,2007(10):141-142.
[4] USB总线接口芯片CH375中文手册.http://www.winChiphead.com/download/CH375/CH375DS1.PDF.2011-02-11.
[5] 李云胜,李晓虹.基于STC单片机的商品电子防盗系统设计[J].自动化与仪表,2009(7):38-41.
[6] 张林昌.发展我国的电磁兼容事业[J].电工技术学报, 2005,20(2):23-28.
[7] 周兴,戴胜华.基于单片机的USB数据采集系统设计[J].仪器仪表标准化与计量,2006(1):25-27.