<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于USB總線(xiàn)的機器人上下位機通信

基于USB總線(xiàn)的機器人上下位機通信

作者: 時(shí)間:2012-06-06 來(lái)源:網(wǎng)絡(luò ) 收藏



3 軟件結構

3.1 教學(xué)軟件結構

EDUROBOT-680-II型教學(xué)控制系統的控制軟件包括下位機的底層控制軟件和上位機的上層控制軟件,它們通過(guò)USB端口通信。其軟件結構如圖3所示。

上層控制軟件運行在Windows98平臺上,它為用戶(hù)提供與交互的人機接口界面,完成復雜運動(dòng)控制的數據處理和插補計算。它由人機界面、運算插補、主控、通信四大模塊構成。通信模塊能夠實(shí)時(shí)地發(fā)送控制命令給下位機并從下位機獲得反饋信息,同時(shí)保證數據傳輸的準確性。

為了提供對USB的支持(為了使底層控制系統有更好的實(shí)時(shí)性和更緊湊,下一步準備將底層控制系統改用支持USB的Windows CE、VxWorks或嵌入式Linux),底層控制系統目前采用Windows98平臺。底層控制軟件接口收上層控制軟件的控制命令,同時(shí)解釋并執行控制命令。這通過(guò)多線(xiàn)程實(shí)現。任務(wù)調度和管理模塊是底層控制軟件的主線(xiàn)程,它負責從指令隊列中取出指令并解釋執行。主線(xiàn)程執行過(guò)程會(huì )產(chǎn)生一個(gè)輔助線(xiàn)程——通信線(xiàn)程。通信線(xiàn)程調用通信模塊的輸出函數,負責監視USB端口。如果上位機傳來(lái)控制命令,則遵循教學(xué)機器人通信協(xié)議接收并存入指令隊列中。

3.2 通信模塊的實(shí)現

上位機和下位機控制軟件共用相同的PL-2301客戶(hù)驅動(dòng)程序、傳輸模塊(由Prolific公司提供)和通信模塊。

PL-2301客戶(hù)驅動(dòng)程序是典型的WDM驅動(dòng)程序。驅動(dòng)程序屏蔽了底層的硬件細節和USB協(xié)議,使上層軟件僅通過(guò)驅動(dòng)程序接口函數就可以訪(fǎng)問(wèn)PL-2301。主要的幾個(gè)驅動(dòng)程序接口函數是CreateFile()、WriteFile()、ReadFile()、DeviceIOControl()。

傳輸模塊(Transfer.dll)是驅動(dòng)程序的上層模塊,它通過(guò)調用驅動(dòng)程序接口函數,實(shí)現了兩臺主機通過(guò)PL-2301通信的基本通信能力。Transfer.dll會(huì )產(chǎn)生一列三個(gè)線(xiàn)程:

(1)發(fā)送線(xiàn)程。這個(gè)線(xiàn)程對發(fā)送請求進(jìn)行排隊并按先后順序處理請求。如果出現錯誤,則努力恢復。

(2)接收線(xiàn)程。這個(gè)線(xiàn)程等待來(lái)自狀態(tài)線(xiàn)程的消息,如果發(fā)現對方主機將要傳輸數據,就按照傳輸協(xié)議接收數據。接收線(xiàn)程把接收到的數據放在接收FIFO緩沖器中,等待上層軟件(Comm.dll)取走。如果有錯誤發(fā)生時(shí),也會(huì )努力恢復。

(3)狀態(tài)線(xiàn)程。這個(gè)線(xiàn)程監視PL-2301的狀態(tài)信號。如果發(fā)現有任何狀態(tài)改變,它將給相關(guān)線(xiàn)程發(fā)消息或調用回調函數通知上層軟件。

Transfer.dll提供幾個(gè)供上層軟件(Comm.dll)調用的輸出函數:

·USB_InitService()調用Transfer.dll里的其他輸出函數之間必須先調用這個(gè)函數。

·USB_OpenConnect()調用此函數獲得PL-2301的句柄。發(fā)送和接收數據時(shí)要用到這個(gè)句柄。

·USB_WriteConnect()調用此函數向對方主機發(fā)送指定的數據。

·USB_ReadConnect()調用此函數從接收FIFO緩沖器中讀取數據。

通信模塊(Comm.dll)通過(guò)調用Transfer.dll提供的輸出函數完成教學(xué)機器人控制命令的發(fā)送和接收。為了協(xié)調命令的發(fā)送和接收,定義了套控制字,作為上位機與下位機通信時(shí)的握手信號(與PL-2301的握手信號沒(méi)有聯(lián)系)。上位機發(fā)送數據(控制命令或控制字)時(shí),直接調用USB-WriteConnect()即可。下位機讀取數據采取輪詢(xún)方式,循環(huán)調用USB-Read Connect()掃描USB端口,如果有數據則接收下來(lái)。如果接收到的是指令,則放入指令隊列中,等待任務(wù)管理和調度線(xiàn)程取走。圖4是上位機發(fā)送一條命令的示意圖。有些命令需要下位機發(fā)送返回值給上位機,如讀機器人狀態(tài)命令status需要下位機發(fā)送返回值給上位機,如讀機器人狀態(tài)命令status需要下位機把機器人狀態(tài)返回給上位機。下位機發(fā)送返回值的過(guò)程與上位機發(fā)送命令的過(guò)程相似。

USB作為一種新興的計算機外設接口標準,其技術(shù)特點(diǎn)使不但能作為計算機與一般外設的接口,也可用于實(shí)時(shí)通信和控制。本文介紹的用USB實(shí)現教學(xué)機器為上下位機的通信,為機器人上下位機的通信提供了一種新穎、方便和可靠的解決方案。隨著(zhù)USB2.0的推出,其高達480Mbps的傳輸速率可滿(mǎn)足高實(shí)時(shí)性要求的工業(yè)設備控制、動(dòng)態(tài)圖像實(shí)時(shí)傳輸等,為USB在更廣闊領(lǐng)域的應用打下了堅實(shí)的基礎。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>