基于USB總線的機器人上下位機通信
3 軟件結構
3.1 教學機器人軟件結構
EDUROBOT-680-II型教學機器人控制系統的控制軟件包括下位機的底層控制軟件和上位機的上層控制軟件,它們通過USB端口通信。其軟件結構如圖3所示。
上層控制軟件運行在Windows98平臺上,它為用戶提供與機器人交互的人機接口界面,完成復雜運動控制的數據處理和插補計算。它由人機界面、運算插補、主控、通信四大模塊構成。通信模塊能夠實時地發送控制命令給下位機并從下位機獲得反饋信息,同時保證數據傳輸的準確性。
為了提供對USB的支持(為了使底層控制系統有更好的實時性和更緊湊,下一步準備將底層控制系統改用支持USB的Windows CE、VxWorks或嵌入式Linux),底層控制系統目前采用Windows98平臺。底層控制軟件接口收上層控制軟件的控制命令,同時解釋并執行控制命令。這通過多線程實現。任務調度和管理模塊是底層控制軟件的主線程,它負責從指令隊列中取出指令并解釋執行。主線程執行過程會產生一個輔助線程——通信線程。通信線程調用通信模塊的輸出函數,負責監視USB端口。如果上位機傳來控制命令,則遵循教學機器人通信協議接收并存入指令隊列中。
3.2 通信模塊的實現
上位機和下位機控制軟件共用相同的PL-2301客戶驅動程序、傳輸模塊(由Prolific公司提供)和通信模塊。
PL-2301客戶驅動程序是典型的WDM驅動程序。驅動程序屏蔽了底層的硬件細節和USB協議,使上層軟件僅通過驅動程序接口函數就可以訪問PL-2301。主要的幾個驅動程序接口函數是CreateFile()、WriteFile()、ReadFile()、DeviceIOControl()。
傳輸模塊(Transfer.dll)是驅動程序的上層模塊,它通過調用驅動程序接口函數,實現了兩臺主機通過PL-2301通信的基本通信能力。Transfer.dll會產生一列三個線程:
(1)發送線程。這個線程對發送請求進行排隊并按先后順序處理請求。如果出現錯誤,則努力恢復。
(2)接收線程。這個線程等待來自狀態線程的消息,如果發現對方主機將要傳輸數據,就按照傳輸協議接收數據。接收線程把接收到的數據放在接收FIFO緩沖器中,等待上層軟件(Comm.dll)取走。如果有錯誤發生時,也會努力恢復。
(3)狀態線程。這個線程監視PL-2301的狀態信號。如果發現有任何狀態改變,它將給相關線程發消息或調用回調函數通知上層軟件。
Transfer.dll提供幾個供上層軟件(Comm.dll)調用的輸出函數:
·USB_InitService()調用Transfer.dll里的其他輸出函數之間必須先調用這個函數。
·USB_OpenConnect()調用此函數獲得PL-2301的句柄。發送和接收數據時要用到這個句柄。
·USB_WriteConnect()調用此函數向對方主機發送指定的數據。
·USB_ReadConnect()調用此函數從接收FIFO緩沖器中讀取數據。
通信模塊(Comm.dll)通過調用Transfer.dll提供的輸出函數完成教學機器人控制命令的發送和接收。為了協調命令的發送和接收,定義了套控制字,作為上位機與下位機通信時的握手信號(與PL-2301的握手信號沒有聯系)。上位機發送數據(控制命令或控制字)時,直接調用USB-WriteConnect()即可。下位機讀取數據采取輪詢方式,循環調用USB-Read Connect()掃描USB端口,如果有數據則接收下來。如果接收到的是指令,則放入指令隊列中,等待任務管理和調度線程取走。圖4是上位機發送一條命令的示意圖。有些命令需要下位機發送返回值給上位機,如讀機器人狀態命令status需要下位機發送返回值給上位機,如讀機器人狀態命令status需要下位機把機器人狀態返回給上位機。下位機發送返回值的過程與上位機發送命令的過程相似。
USB作為一種新興的計算機外設接口標準,其技術特點使不但能作為計算機與一般外設的接口,也可用于實時通信和控制。本文介紹的用USB實現教學機器為上下位機的通信,為機器人上下位機的通信提供了一種新穎、方便和可靠的解決方案。隨著USB2.0的推出,其高達480Mbps的傳輸速率可滿足高實時性要求的工業設備控制、動態圖像實時傳輸等,為USB在更廣闊領域的應用打下了堅實的基礎。
評論