基于USB通信的科氏粉料流量测控系统设计
扫描二维码
随时随地手机看文章
引言
目前,由北京航空航天大学与冀东发展集团有限责任公司合作研发的科氏粉料流量测控系统(以下简称“测控系统”)已经成功应用到工业现场,运行状况良好,测量精度优于±0.5%。测控系统底层和PC端上层控制软件通过RS-232串行接口通信。这样,操作者就能够方便地对测控系统的各个参数进行修改,同时研发人员在进行现场调试时进行流量数据采集,然而,基于RS-232通信的测控系统还存在一定的应用限制。
虽然测控系统的流量测量精度高,但是其控制精度并不能满足现场要求,针对于此,作者所在课题组正在开展粉料流量控制技术的相关研究工作,这就要求尽可能完整地采集流量数据,为粉料流量控制技术研究提供精确的数据支持。目前,测控系统的RS-232通信速率为9 600bps,并不能满足需求,必须通过提高通信速率实现,然而,这样会增加CPU处理数据的负担,导致通信数据不正确的情况发生,降低底层程序性能。同时RS-232串口通信为端到端传输模式,在实际运行时,上层应用程序无法对当前通信状态进行实时监测,不利于测控系统对各个设备运行状态的准确实时监测和控制。
综上所述,开发更为快速、方便、可靠的人机通信接口变得尤为重要。结合USB通信速率高、通信可靠、即插即用、成本低廉等优点,本文设计了基于USB通信的测控系统。
1 USB设备简介
USB(Universal Serial Bus,通用串行总线)设备是USB通信系统中不可或缺的部分,随着USB技术的不断发展,USB设备类型也逐渐增加,主要包括Audio设备、Communicat ion device设备、HID设备、Image设备、Printer设备、Mass storage设备、Hub设备等等。其中,HID类是比较大的一个类,属人机交互操作的设备,用于控制计算机操作的一些应用中,如USB鼠标、USB触摸板、遥控等设备。Windows操作系统自带了HID类设备的驱动程序,用户直接调用相应的API函数即可完成通信,不用开发特定的Windows驱动程序,这样能够有效缩短应用程序的开发周期。本文在测控系统中,采用HID设备进行USB通信设计。
2 测控系统USB通信设计
根据系统功能需求,测控系统可分为系统上层、系统底层、中控室和系统外设4个部分。图1为测控系统原理框图。
系统上层为基于C#语言的Windows应用程序,主要完成测控系统的数据交互功能。
测控系统底层为测控系统核心,主要由STM32F103VET6处理器(简称STM32)和μC/OS—II实时操作系统构成。主要通过对应的命令方式完成对外设进行控制、传感器测量信号采集、粉料流量计算与控制。
中控室为测控系统的远程监控终端,通过4~20 mA电流实现测控系统的流量监测与控制。
系统外设主要包括变频器、继电器、电动机以及各类信号终端。系统底层通过对应的命令方式对外设进行控制,或对传感器测量信号进行采集。
2.1 测控系统底层USB通信设计
STM32为ST公司推出的基于ARM Cortex-M3内核的微控制器,自带USB全速设备接口,支持USB2.0通信协议,可配置1~8个USB端点,包含512字节的SRAM数据缓冲区。因此,基于STMS2的USB通信设计可以有效简化系统硬件电路。
图2为测控系统USB接口硬件电路图。其中,JP-USBENABLE接口用于实现对测控系统USB通信功能控制,USBENABLE用于底层应用程序控制USB设备的连接状态。
2.1.1 HID设备内核定义
在进行USB通信设计之前,必须完成USB设备的底层驱动设计。将ST公司提供的针对于STMS2的USB固件库移植到现有工程目录中,这样只需修改库文件中关于USB设备的相关定义即可。在该库中,提供了完整的HID设备定义所需描述符,包括设备描述符、配置描述符、报告描述符、厂商字符串、产品字符串等。只需根据需要进行相关描述符的修改即可满足要求,在此,只针对设备描述符、配置描述符、报告描述符做简要介绍。
(1)设备描述符
设备描述符主要完成USB设备的基本定义,主要包括设备类、最大数据包大小、配置个数等。在这里进行如下定义:
设备类:HID设备。
最大包大小:64字节。
配置个数:1。
(2)配置描述符
配置描述符主要完成USB设备的配置定义,包括当前配置下的接口个数、接口定义、每个接口下的端点定义。在本测控系统的USB设备配置描述符中有如下定义:
接口个数:1。
接口端点个数:2(一个IN端点和一个OUT端点)。
端点最大包大小:64字节。
(3)报告描述符
HID设备要和主机进行正常通信,必须在主机对设备枚举时提供完整的通信报文描述符,主机将根据设备提供的报告描述符进行USB通信控制。在报告描述符中可以定义多个报告(输入报告、输出报告),在这里,只定义一个输入报告和一个输出报告,其中报告大小均为64字节。
2.1.2 基于μC/OS—II的USB通信设计
μC/OS—II为多任务实时操作系统,通过多任务的编程方式易于实现具有较高性能的嵌入式系统。目前测控系统包含5个任务:
CACULATE_TASK:计算任务,完成粉料流量的计算。
CTRL_TASK:控制任务,完成测控系统流量的控制。
GETWEIGHT_TASK:称重任务,读取称重仓的数据。
UART_TFASK:串口通信任务,完成串口的数据交换。
DETECT_TASK:检测任务。实时监测测控系统的工作状态。
基于此,测控系统底层应用程序新增USB通信数据接收任务USBCOMRX_TASK和数据发送任务USBCOMTX_TASK。其中,USBCOMRX_TASK任务实时接收上层应用程序下发的命令,并将命令进行解析处理;USBCOMTX_TASK任务实时将相关数据通过USB接口发送到上层应用程序。
为提高通信数据的可靠性,设计了专用的环形数据缓冲区。图3为数据缓冲区结构示意图,其最小单位为数据包。
在程序设计时有如下定义:
typedef struct{
//数据缓冲区
U8 DataBuffer[BUFLEN][CMDLEN];
//数据起始位置
U8 DataStart;
//数据结束位置
U8 DataStop;
//通信信号量
OS_EVENT*USB_sem;
}UsbBuffer;
缓冲区由二维数组构成,每一行代表一帧数据,由BUFLEN帧数据组成,每帧数据长度为CMDLEN。其中,DataStart指示缓冲区有效数据包的起始位置,Datastop指示缓冲区有效数据包的结束位置。USB_sem为通信所需信号量,对于接收数据缓冲区,USB接收中断服务子程序中将接收到的数据包复制到该缓冲区中,并更新DataStop值,然后通过该信号量通知USBCOMRX_TASK进行数据处理;对于发送数据缓冲区,需要通过USB接口发送数据的任务,将待发送数据填充到相应的缓冲区中,并更新DataStop值,然后利用该信号量通知USBCOMTX_TASK进行数据发送。
图4为USBCOMRX_TASK任务流程图。当任务收到接收信号量时,循环处理缓冲区中DataStart至DataStop之间的有效数据包。
图5为USBCOMTX_TASK任务流程图。当任务收到发送信号量时,循环发送缓冲区中Datastart至DataStop之间的有效数据包。
2.2 测控系统上层USB通信设计
系统上层为基于C#语言的Windows应用程序,基于此进行测控系统上层USB通信设计。测控系统上层USB通信设计主要有两个方面:USB连接状态监测和USB数据通信。
2.2.1 USB连接状态监测
USB连接状态监测主要对测控系统的连接状态进行监测,完成USB正常通信之前的准备工作。为实现USB连接状态的实时监测,采用线程的方式进行设计。
图6为USB连接状态监测线程UsbDeviceStatus流程图。USBConnected用于指示HID设备的连接状态,若目标USB设备已经连接主机,则堵塞当前线程,一旦监测到USB设备连接断开,则继续轮询主机上的HID设备。
2.2.2 USB数据通信
在Windows操作系统中,应用程序通过文件操作的方式使用USB设备。在USB连接状态监测线程中,如果查找到目标HID设备,会创建相应的文件操作句柄供应用程序使用。
文件的操作有4种方式:异步读、同步写、异步读和异步写。读、写文件操作即申请一次接收、发送数据操作。
在异步模式下,应用程序向USB控制器发送一次请求之后,无论请求是否成功,相应的请求函数即刻返回,将剩余的工作交由USB驱动程序完成;在同步模式下,则必须等到请求成功之后才返回。采用同步读的方式可以有效提高应用程序处理通信数据的实时性。在此采用同步读和异步写的方式进行USB通信。
采用同步读方式通信时,若底层没有数据包发送,则当前线程会处于堵塞状态,直到读取到数据线程恢复运行。在此采用线程的方式完成USB数据的同步读操作。
图7为USB接收数据线程流程图。通过ReadFile()函数的返回值即可判断USB的连接状态。表1为ReadFile()函数返回状态值对应的USB设备连接状态。
当应用程序需要通过USB总线发送数据时,首先会检测当前USB设备的连接状态,若状态为“连接正常”,则调用WriteFile()函数进行相应数据发送。
结语
根据系统功能需,完成了测控系统的USB通信功能设计,解决了如下几个问题:
①采用USB全速通信方式,通信速率高达12Mbps,较大程度提高了测控系统流量数据的采集速率,为流量控制算法研究提供了更加完整的数据支持,解决了RS-232串口通信速率低的局限性。
②增加USB通信方式,应用程序可以更加方便地监测测控系统的通信状态,有效提高通信连接和数据传输的可靠性。
③有效解决了RS-232串口通信不支持热插拔的问题,使得通信更加方便灵活。
针对于RS-232串口通信的应用局限性,进行了测控系统的USB通信设计,提高了科氏粉料流量测控系统的灵活性和应用可扩展性,在今后的市场中将具有更广阔的应用前景,同时,该测控系统的USB通信设计方法对嵌入式高速数据采集系统有_定的参考价值。