<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于USB總線的機器人上下位機通信

          基于USB總線的機器人上下位機通信

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



          3 軟件結(jié)構(gòu)

          3.1 教學(xué)軟件結(jié)構(gòu)

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

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

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

          3.2 通信模塊的實現(xiàn)

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

          PL-2301客戶驅(qū)動程序是典型的WDM驅(qū)動程序。驅(qū)動程序屏蔽了底層的硬件細(xì)節(jié)和USB協(xié)議,使上層軟件僅通過驅(qū)動程序接口函數(shù)就可以訪問PL-2301。主要的幾個驅(qū)動程序接口函數(shù)是CreateFile()、WriteFile()、ReadFile()、DeviceIOControl()。

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

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

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

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

          Transfer.dll提供幾個供上層軟件(Comm.dll)調(diào)用的輸出函數(shù):

          ·USB_InitService()調(diào)用Transfer.dll里的其他輸出函數(shù)之間必須先調(diào)用這個函數(shù)。

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

          ·USB_WriteConnect()調(diào)用此函數(shù)向?qū)Ψ街鳈C發(fā)送指定的數(shù)據(jù)。

          ·USB_ReadConnect()調(diào)用此函數(shù)從接收FIFO緩沖器中讀取數(shù)據(jù)。

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

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


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();