基于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教程
評論