陸鑫焱,楊洪濤*
(1. 遼寧科技大學 電子與信息工程學院,遼寧 鞍山 114051;2.遼寧科技大學 創新創業學院,遼寧 鞍山 114051)
本設計是一種基于LabView 的分揀機器人控制軟件,應用虛擬儀器技術LabView 軟件中的數組操作、字符串操作、事件程序、狀態機及I/O 文件存儲等工具,采用狀態機實現串口的初始化、等待、數據操作和退出4 種狀態,并分別對應不同的事件程序實現串口通訊控制分揀機器人,應用字符串操作截取輸入命令行中的電機序號和轉角等信息傳輸給數組元素顯示,對調試好的命令行進行I/O 文件存儲等操作[1-2]。
本設計采用虛擬儀器技術,通過串口通信和I/O文件存儲等操作,快速實現分揀機器人控制軟件。串口通信是一種傳輸數據的通訊方式,該通信方式電路簡單易于部署,穩定性高且通信成本低,適合用于分揀機器人的控制[3-4]。軟件的總體設計見圖1。

圖1 總體設計圖
首先進行通信模塊的設計,通過串口傳輸和接收數據實現軟件與分揀機器人的通信[5]。創建一個VI 并切換到程序框圖界面,與串口相關的函數位于函數→儀器I/O→串口函數庫中。在虛擬儀器技術LabView軟件中,串口發送一次數據的過程為:應用Configure Port 函數打開串口,應用Write 函數發送數據和應用Close 函數關閉串口,實現過程如下:
(1) 切換到程序框圖,選擇函數→編程→結構→while 循環,完成循環結構添加,在循環條件按鈕上點擊右鍵選擇創建輸入控件,生成停止按鈕。
(2) 選擇函數→編程→結構→事件結構,在while 循環中放置事件結構。
(3) 切換到前面板,選擇控件→布爾→確定按鈕→修改標簽為serial_open,添加打開串口的按鈕。
(4) 切換到程序框圖,在事件結構中添加事件分支,在[0]超時處→右鍵→添加事件分支→事件源選擇serial_open。
(5) 將serial_open 按鈕放入事件結構[1]“serial_open”值改變分支中。
(6) 在事件結構[1]“serial_open”值改變分支中依次添加,函數→儀器I/O→串口→VISA 配置串口;在控件的資源名稱接口→右鍵→創建→輸入控件;函數→編程→簇→解除綁定;函數→編程→布爾→非;函數→編程→結構→條件結構;在其條件假中添加單按鈕對話框。
(7) 切換到前面板中添加串口狀態顯示燈,選擇控件→布爾→圓形指示燈→修改標簽為serial_state。
(8) 繼續進行細節完善,切換到前面板選擇serial_open 按鈕→右鍵→屬性→選擇多字符串顯示→設置打開(close)、關時(open);serial_open 按鈕→右鍵→機械動作→單擊時轉換。
(9) 切換到程序框圖事件結構中添加條件結構,選擇函數→編程→結構→條件結構,連接serial_open 按鈕,判決按鍵的狀態執行不同的條件結構。
(10) 在條件結構為假的框圖中添加關閉串口的程序,選擇函數→儀器I/O→串口→VISA 關閉。
(11) 返回到條件框圖真,在輸入控件VISA resourse name→右鍵→創建→局部變量,把創建的局部變量右鍵轉換為輸入,連接到VISA 關閉上。同樣把serial_state 狀態燈創建局部變量拖動到條件結構為假的框圖中。通信模塊設計見圖2。

圖2 通信模塊設計圖
軟件設計一般包括初始化、等待命令、執行事件等功能,這些功能通過狀態機來統籌設計完成。實現過程:
(1) 切換到前面板,選擇控件→下拉列表與枚舉→枚舉,新建一個枚舉后,在枚舉上右鍵→制作自定義類型,然后再右鍵→打開自定義類型并作為控件保存為狀態機.ctl,這個狀態機可以像控件一樣拖動到程序中使用。
(2) 在打開的狀態機上→右鍵→編輯項,插入Init、Wait、Get Data、Exit 四項。
(3) 將制作的狀態機拖動到程序框圖界面,連接到while 循環上,并在連接點循環隧道上→右鍵→替換為移位寄存器,while 循環內增加一個條件結構,將移位寄存器連接到條件結構的分支選擇器用來讀取while 循環傳遞過來的狀態機中的值,在條件結構的選擇器標簽上→右鍵→為每個值添加分支建立標簽。While 循環每執行一次,讀取移位寄存器的值,下次循環用上次循環讀進來的值。
設置條件結構的選擇器標簽為“Init”,將按鈕、狀態燈的初始化程序放入條件結構中,選擇編程→字符串→空字符串常量賦值給read_buffer 清空顯示控件窗口,同樣清空write_buffer 輸入控件窗口,復制狀態機設置為Wait 狀態連接到移位寄存器。
(1) 在串口打開失敗條件結構中,增加狀態機并調整 為Wait 連接到移位寄存器。
(2) 在串口打開成功(真)條件結構中增加狀態機調整為GetData 連接到移位寄存器。
(3) 在關閉窗口條件結構中,增加狀態機調整為Wait 連接到移位寄存器,在事件結構中選擇器標簽為[0]超時分支中,創建串口狀態局部變量和條件結構,檢測串口是否成功打開,如果打開成功則轉到GetDate 狀態,如果打開失敗則轉到Wait 狀態。
在條件結構接收數據GetData 程序框圖中,如果串口傳過來的數據不為0,則執行條件結構的“真”分支程序,將串口中的數據和字節總數傳輸給VISA 讀取控件,創建VISA 讀取控件的局部變量(其中存儲原有數據)與新讀取的緩沖數據通過字符串連接控件連接后,傳輸給字符串顯示控件,狀態機Wait 狀態賦值給while 循環。程序運行后實現接收數據,見圖3。

圖3 數據接收模塊設計圖
(1) 在前面板增加發送按鈕send,在程序框圖事件結構中增加[2]“send”值改變選擇器標簽,當串口狀態為真時,將在寫入控件write buffer 中輸入的字符串傳輸給VISA 寫入控件,控制電機運動的字符串命令行格式為“電機序號”+“/”+“電機轉角”,實現串口發送。
(2) 進行字符串操作,將寫入控件write buffer中輸入的字符串命令行傳輸給字符串匹配模式控件,按照字符“/”截取出字符串命令行前端的電機序號用于控制相應位置的狀態顯示燈亮滅,截取出字符串命令行前端的電機轉角數值顯示在相應的數組元素,顯示電機目前的轉角;執行操作后將狀態機GetData 狀態傳輸給while 循環。
(3) 當串口狀態為假時,執行“請打開串口”按鍵對話框,并將狀態機Wait 狀態傳輸給while 循環。
(4) 進一步完善端口打開模塊,在前面板增加波特率下拉菜單,右鍵→下拉列表→菜單下拉列表,右鍵→編輯項,去掉有序值勾選框,修改數據類型表示法為U64,在編輯項增加9600、115200 等波特率選項,見圖4。

圖4 數據發送模塊設計圖
該設計完整實現了項目任務的各項要求和目標設定,測試過程如下:
(1) 使用虛擬串口軟件虛擬出兩個tw 串口,使用串口調試助手打開com1,使用本分揀機器人控制軟件打開com2,狀態燈點亮成功。
(2) 使用串口調試助手發送字符串“hello mainmotor!”,使用本設計發送字符串“3/1500”,雙方收發成功,表明串口通信功能測試成功,程序中的狀態機和事件結構設計和運行正確。
(3) 第三個顯示電機運行狀態的指示燈點亮,第三個顯示電機轉角的數組顯示“1500”,表明程序該項功能測試成功,字符串操作和數組操作設計和運行正確。
(4) 點擊“save”按鈕存儲write_buffer 中的字符串命令行到文件中,再點擊“open_txt”按鈕打開該文件,內容在txt_show 中正確顯示,表明本程序的I/O 文件功能測試成功。
采用Arduino 開發板作為控制板通過USB 串口連接到電腦,應用2 個TBS-K20 舵機,1 個TBSNK15 舵機,3 個42 行星減速步進電機,2 個DSP 數字式步進電機驅動器DM542,搭建分揀機器人,構成測試硬件環境,見圖5。經過測試后達到同軟件測試相同的效果,測試數據見表1。

表1 硬件環境測試數據

圖5 硬件環境測試
本文采用虛擬儀器技術的LabView 軟件設計工具,快速實現了分揀機器人的控制軟件,實現了物品抓取、分揀和工作流程數據存儲等功能,經軟件和硬件雙重環境測試,本控制軟件操作簡單、運行狀態穩定,達到了項目任務書的設計要求。面對目前需求多樣化的機器人市場,通過該方法可以快速設計出符合項目要求的機器人配套操作軟件,提高控制軟件質量和項目研發效率。