基于Linux 以太网的远程数据采集系统
这句话调用了usb register 这个函数,将struct sample_driver{}注册到USB 核心。
USB 核心如何识别一个驱动适合该设备呢,就要靠usb_device id 结构体完成。struct usbse_device id 结构体提供了一列不同类型的该驱动程序支持的USB 设备。USB 核心使用该列表来判断对于一个设备该使用哪一个驱动程序,热插拔脚本使用它来确定当一个特定的 设备插入到系统时该自动装载哪一个驱动程序。本例中实现了这样一个结构:
static struct usb_device_id sample_id_table[]={
{USB_DEVICE(USB_Sample_VENDOR_ID,
USB_Sample_PRODUCT_ID) },{} };
MODULE_DEVICE_TABLE (usb, sample_id_table);
USB_DEVICE ( vendor,product)这个宏仅和指定的制造商和产品ID 值相匹配,该宏常用于需要一个特定驱动程序的uss 设备。
int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
void *data, int len, int *actual_length,int timeout);
该函数传递bulk 数据到驱动中的缓冲区*data,如果传递完成之后再复制到用户区供用户使用。
int usbes_control_msg(struct usb device *dev, unsigned int pipe,_u8 request,_u8 requesttype,
_u16 value,_u16 index,void *data,_u16 size, int timeout);
该函数允许驱动程序发送和接收USB 控制消息。例如本例中实现的采样频率的变换就是通过该命令在用户和数据采集卡硬件之间传递的。
下面以读设备数据 sample read 为例介绍驱动对硬件的操作过程,流程如图6 所示。

图 6 sample read 函数流程
内核空间和用户空间有所不同,驱动程序属于内核空间,普通的应用程序属于用户空间, 两个空间的数据不能直接互访,必须要借助copy_fromes users()、copy_to_user()两个函数在 两个空间中传递数据。
3.2 PC 机客户端的设计
PC 机客户端使用Delphi 开发。主要完成以下功能:作为Client 和服务器连接、请求并接 收Serve:发来的采集到的数据并在本地客户端上以波形形式显示出来。本设计中使用了两个 定时器完成这些功能,定时器1 负责向Serve:发送“请求数据”的请求,并将返回的数据放 入缓存。定时器2 负责将定时器1 接收来的数据以波形的形式显示出来,其中,用到了ActiveX 控件VtChart,客户端收到采集正弦波形如图7 所示。

图7 网络采上来的正弦波
4.结论
本文创新点:本文研究、设计了基于以太网技术、USB 技术、嵌入式技术的数据采集 系统,将先进的技术融合到工厂自动化的最前端,提高了采样的精度、速度和可靠性。该数 据采集卡完成的不仅仅是一个数据采集的功能,而在于为以后的设计提供详细的设计基础和 平台,这些功能都可以方便的移植到以后的仪表设计中,可以作为二次开发的平台。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
linux操作系统文章专题:linux操作系统详解(linux不再难懂)pid控制相关文章:pid控制原理
linux相关文章:linux教程
评论