基于USB总线通信数据采集器的设计与实现
AT89C52的控制程序分为初始化、主循环和中断服务3部分。初始化部分完成单片机和所有外围电路(包括PDIUSBD12)的初始化;主循环部分等待来自上位机的命令或来自终端设备的数据;中断服务程序完成相应的中断处理功能。下面列出了中断服务程序的处理过程:
usb_isr( )interrupt( )
{DISABLE
fn_usb_isr( );
ENABLE
}
void fn_usb_isr( )
{unsigned int i_st
bEPPflags.bits.in_isr=1;
i_st=D12_ReadInterruptRegister( );//读中断寄存器
if(i_st !=0)
{ if(i_stD12_INT_BUSRESET)
{ bus_reset( );//总线复位处理
bEPPflags.bits.bus_reset=1;
}
if(i_stD12_INT_EOT)
dma_eot( );//DMA结束处理
if(i_st Dl2_INT_SUSPENDCHANGE)
bEPPflags.bits.suspend=1;
if(i_st Dl2_INT_ENDPOIN)
ep0-txdone( );//控制端点0输入
if(i_stD12_INT_ENDPOOUT)
ep0-rxdone( );//控制端点0输出
if(i_stD12_INT_ENDPlIN)
epl_txdone( );//端点1输入
if(i_stD12_INT_ENDPlOUT)
epl_rxdone( );//端点1输出
if(i_stDl2_INT_ENDP2IN)
main_txdone( );//主端点2输入
if(i_stD12_INT_ENDP20UT)
main-rxdone( );//主端点2输出
}
bEPPflags.bits.in_isr=0;
}
设备安装完后准备运行前,操作人员可利用上位机管理软件提供的用户界面初始化一些系统参数,如总线类型、终端类型等。在执行对终端单元的智能识别时,MCU首先接收一个上位机客户服务软件下传的指令帧,经过确认是协议识别指令后,上传一个表示就绪的状态帧。然后,接收识别用的数据帧,经过检验,如果数据帧有错就返回相应的状态帧并等待上位机重新发出数据,如果数据正确则先返回状态帧,然后开始对终端单元的识别与数据采集。
对一个固定的终端而言,MCU发出握手信号,远方终端返回相应的信息,数据经RS232/RS485接收,经过MCU的协议解析后得到所需的纯数据,将其暂存入RAM62256中的指定地址;当上位机发出读取数据的命令后MCU将数据经PDIUSBD12传给上位机。
4.2 上位机的程序设计
从上位机来看,通信数据采集器为它的一个USB外设,因此上位机必须提供USB外设的驱动程序。上位机的管理软件包括客户服务程序和USB驱动程序。USB驱动程序(USBD)是驻留在上位机的为客户提供通用服务的软件实体,它管理主控制器上的一个或多个功能。它通过调用适当的主控制器驱动程序(HCD)将用户I/O请求包(IRP)中的数据转化为设备端点的数据,或通过回调适当的HCD将设备端点的数据转化为客户IRP中的数据。
客户服务程序是用VC++6.0编写的,主要完成数据的分析显示功能。MCU上传的数据信息经过相应的校验,如有误,则通知终端重传;如无误,则将校验后的信息转存人计算机指定的内存,并备份到相应的文档,供其他的客户服务程序使用。
USB驱动程序的编写往往是USB设备开发过程中最困难的,通常采用Windows DDK来实现。目前有许多软件厂商提供各种各样的驱动程序生成工具,如Computer ware的Driver Studio,Blue Waters的Driver Wizard等。本设计是采用Driver Studio软件生成的程序框架,添加了适当的用户代码,完成了适合于通信数据采集器的驱动程序的编写。
5 通信数据采集器与传统数据采集方式通信效率的比较
以采集欧姆龙公司的可编程逻辑控制器(PLC)为例,一次采集30个通道,每个通道16个开关量(即4个十六进制数),则有120个十六进制数需要采集和传输,加上通信协议中的其它位,一帧共有131个字符,每一个字符又按串行通信中的一帧11位来发送,则共有1441位ASCII码有待传输。若波特率设为9600b/s,则每采集一次需要用时150ms,在此期间每一帧的接收、效验工作都需CPU的介入。若以传统的方式进行数据的采集和通信,那么主机CPU在这段时间就被串行通信的事务占用而不能处理其它工作,这很耽误时间。而采用通信数据采集器代替主机来完成这一费时的工作后,数据的采集、传输以及协议的解析都不需占用主机的时间,解析后的纯数据经过PDIUS-BDl2上传也仅需很短时间即可完成(大约为0.12ms,PDIUSBD12在同步模式下的数据传输率为1Mb/s),通信效率比传统方式提高了很多倍,这样就把主机从通信瓶颈中解放出来,为主机节省了大量的时间去完成其它工作。
6 结论
本文提出的基于USB总线的智能通信数据采集器具有数据采集和通信的效率高,结构简单,运行可靠,使用方便等优点,在实际应用中取得了良好的效果。它适用于实时监控、数据采集等场合,也可以增强协议识别和协议解析功能,因而在有标准通信协议和规范化的数据格式而缺少详细技术资料的终端设备的通信中具有广泛的使用价值。
光电开关相关文章:光电开关原理
评论