楊亮亮 竇巖杰 張暉
摘? 要:為了解決工業(yè)機械臂示教器軟件設(shè)計成本高、界面不友好等問題,采用基于ARM Cortex-M7內(nèi)核的STM32H743為主控芯片,并運用實時操作系統(tǒng)FreeRTOS和emWin圖形庫設(shè)計了一種液晶顯示的工業(yè)機械臂示教器軟件。該示教器軟件使用emWin圖形庫進行軟件界面的設(shè)計與搭建,采用FreeRTOS操作系統(tǒng)來滿足軟件多任務(wù)的運行,并且能夠?qū)崿F(xiàn)多任務(wù)之間的通信與同步,再通過LwIP中UDP協(xié)議實現(xiàn)示教器與運動控制卡之間的通信,從而實現(xiàn)示教功能。實驗結(jié)果表明,該示教器軟件顯示穩(wěn)定,性能可靠,界面人機交互功能友好,具有實用價值。
關(guān)鍵詞:FreeRTOS;emWin圖形庫;移植;LwIP;示教器軟件
中圖分類號:TP23? ? ?文獻標(biāo)識碼:A
Design of Software for Industrial Manipulator Teaching Pendant
based on FreeRTOS and emWin Graphics Library
YANG Liangliang, DOU Yanjie, ZHANG Hui
Abstract: Aiming at the high software design cost and unfriendly interface of the teaching pendant for industrial manipulator, this paper proposes to use a STM32H743 based on the ARM Cortex-M7 core as the main control chip, and design teaching pendant software of LCD display for industrial manipulator by using a real-time operating system FreeRTOS and emWin graphics library. The emWin graphics library in the teaching pendant software is used to design and build the software interface. The FreeRTOS operating system is used for the multi-task operation of the software, and multi-task communication and synchronization can be achieved. Then the UDP protocol in LwIP is used to realize communication between teaching pendant software and a motion control card, so as to implement the teaching function. Finally, experimental results show that the proposed software has stable display, reliable performance, friendly man-machine interaction and practical value.
Keywords: FreeRTOS; emWin graphics library; transplantation; LwIP; teaching pendant software
1? ?引言(Introduction)
隨著現(xiàn)代制造業(yè)的發(fā)展和“中國制造2025”戰(zhàn)略的推進,智能化制造水平不斷提升,制造業(yè)對工業(yè)機械臂的需求越來越大。工業(yè)機械臂的主要應(yīng)用場景有機械加工、碼垛、焊接、噴漆等,目前國內(nèi)工業(yè)機械臂在這些場景的運用過程中主要通過示教再現(xiàn)的方式進行控制[1-2]。
常見的工業(yè)機械臂示教器軟件一般基于嵌入式系統(tǒng)進行開發(fā)設(shè)計,目前主流的嵌入式操作系統(tǒng)有μC/OS-III、FreeRTOS、RT-Thread等,相比μC/OS-III等商用收費的操作系統(tǒng),F(xiàn)reeRTOS是一個源碼公開的免費實時操作系統(tǒng),能夠很方便地移植到各種微型處理器上,并且降低了開發(fā)成本。嵌入式中人機交互GUI圖形界面軟件有Qt、UCGUI等,由于軟件運行環(huán)境不同或者圖形用戶界面軟件功能有限,因此很難達(dá)到完美的效果[3-4]。圖形軟件庫emWin提供的接口函數(shù)使得嵌入式圖形界面開發(fā)變得更加容易,設(shè)計簡單,對開發(fā)要求低并且資源豐富[5-6]。
通過上述分析,為了降低軟件的開發(fā)成本、周期與資源需求等,采用FreeRTOS與emWin組合的方式開發(fā)嵌入式機械臂示教器軟件,既能夠保證實現(xiàn)多任務(wù)運行,又能夠提供一個友好的人機交互界面。以ARM Cortex-M7內(nèi)核芯片STM32H743作為工業(yè)機械臂示教器軟件的主控芯片,集成RGB接口的7 寸GT911電容屏進行液晶顯示,在實時操作系統(tǒng)FreeRTOS上建立多任務(wù),并通過emWin圖形庫搭建GUI界面,再選用LAN8720A作為網(wǎng)口通信PHY層芯片,實現(xiàn)上位機示教器軟件與下位機運動控制卡之間的UDP網(wǎng)絡(luò)通信,從而滿足工業(yè)機械臂示教器軟件的設(shè)計要求。
2? FreeRTOS操作系統(tǒng)和emWin圖形庫(FreeRTOS operating system and emWin graphics library)
2.1? ?FreeRTOS操作系統(tǒng)
FreeRTOS是一款可移植的、開放源代碼的微型實時內(nèi)核,它免費下載,免版稅,并可用于商業(yè)應(yīng)用。它為多種不同的處理器架構(gòu)和開發(fā)工具提供移植包,并且提供多個例程用來展示內(nèi)核特性,加快學(xué)習(xí)進程,并允許“開箱即用”式的開發(fā)。作為一款輕量級操作系統(tǒng),F(xiàn)reeRTOS提供了任務(wù)管理、時間管理、信號量、消息隊列、內(nèi)存管理、記錄等功能,可基本滿足較小系統(tǒng)的需要[7]。
FreeRTOS的內(nèi)核支持設(shè)置為可剝奪型內(nèi)核或不可剝奪型內(nèi)核。當(dāng)FreeRTOS為可剝奪型內(nèi)核時,每個任務(wù)可根據(jù)不同重要程度被賦予一定的優(yōu)先級,優(yōu)先級高的任務(wù)具有CPU優(yōu)先使用權(quán),因此總是保證處于就緒態(tài)的、優(yōu)先級最高的任務(wù)先運行,這樣可以滿足系統(tǒng)的實時性要求。而當(dāng)FreeRTOS為非可剝奪型內(nèi)核時,處于就緒態(tài)的高優(yōu)先級任務(wù)只能等當(dāng)前運行任務(wù)運行完成后主動釋放CPU的使用權(quán)才能獲得運行,CPU的運行效率被提高。因此,在本文工業(yè)機械臂示教器軟件設(shè)計的過程中,將FreeRTOS的內(nèi)核設(shè)置為可剝奪型內(nèi)核,這樣能夠滿足工業(yè)機械臂的實時性,可以在示教器上實時地顯示機械臂的姿態(tài)以及實現(xiàn)特殊情況下的急停操作(因優(yōu)先級最高,可剝奪型內(nèi)核可以保證急停任務(wù)優(yōu)先執(zhí)行)。
2.2? ?emWin圖形庫
emWin是一種復(fù)雜高效的圖形用戶界面,可工作在單任務(wù)或多任務(wù)環(huán)境中,具有模塊化的特點,并采用分層結(jié)構(gòu)。emWin的主要功能有:
(1)繪制2-D圖形,如繪制橢圓、弧線和線圖等。
(2)顯示位圖文件,提供工具將JPG圖片轉(zhuǎn)換為C語言的形式。
(3)顯示文字,支持多國文字,如中文、英文。
(4)處理用戶輸入,如外接鍵盤輸入及觸摸屏的人機交互輸入。
(5)提供各種窗口對象。這些窗口對象為圖形控件,如常見的菜單控件、窗口控件、按鍵控件等,由于這些控件的存在能夠非常容易地制作成簡潔的控制界面,降低了開發(fā)周期和開發(fā)難度[6]。
emWin的這些功能為開發(fā)者提供C語言的接口函數(shù),也解決了人機交互應(yīng)用的設(shè)計難點,并且emWin對內(nèi)存的消耗較低,能夠滿足工業(yè)機械臂示教器軟件的要求。
emWin主要分為硬件層、驅(qū)動層、圖形庫層和應(yīng)用層四個層次,如圖1所示。本文示教器軟件主要是在emWin應(yīng)用層上進行開發(fā),編寫用戶應(yīng)用程序?qū)崿F(xiàn)人機交互的功能。示教器軟件界面顯示是通過調(diào)用圖形庫層提供功能函數(shù)接口,然后各個功能函數(shù)調(diào)用驅(qū)動層的驅(qū)動函數(shù)去實現(xiàn)底層硬件的顯示功能。
3? FreeRTOS操作系統(tǒng)與emWin圖形庫的移植
(FreeRTOS operating system and the transplantation of emWin graphics library)
3.1? ?FreeRTOS操作系統(tǒng)的移植
本文是針對STM32H743IIT6芯片進行移植,使用的編譯軟件為Keil 5。首先在工程中添加FreeRTOS官方源碼中的Source文件。FreeRTOS的實現(xiàn)主要由list.c、queue.c、task.c
和corutine.c組成,其中l(wèi)ist.c是鏈表的實現(xiàn)源文件,主要給內(nèi)核調(diào)度器使用;queue.c是隊列的實現(xiàn)源文件,支持中斷和信號量的控制;task.c任務(wù)實現(xiàn)是各個任務(wù)使用各自的堆棧,支持搶占式調(diào)度;而corutine.c任務(wù)實現(xiàn)是各任務(wù)共享一個堆棧,使得RAM需求縮小[7]。在本文中主要使用前三個源文件,同時還修改FreeRTOSConfig.h頭文件對FreeRTOS進行裁減,應(yīng)用于不同的處理器平臺。在配置FreeRTOSConfig.h
時將宏configUSE_TICK_HOOK、configUSE_MALLOC_FAILED_HOOK和configCHECK_FOR_STACK_OVERFLOW定義為0。FreeRTOS中大量使用了內(nèi)存管理,比如創(chuàng)建任務(wù)、信號量、隊列等會自動從堆中申請內(nèi)存。FreeRTOS提供了內(nèi)存管理函數(shù)來申請和釋放內(nèi)存,一共提供了五種內(nèi)存分配方式。為了避免造成內(nèi)存碎片化,使用提供的heap_4.c文件,該分配方式能夠合并兩塊相鄰的內(nèi)存空間,使之變大,在使用時能夠直接調(diào)用函數(shù)pvPortMalloc()和vPortFree()來動態(tài)申請和釋放內(nèi)存。
3.2? ?emWin圖形庫的移植
emWin在特定的硬件平臺上運行,需要為emWin提供與底層硬件操作相關(guān)的函數(shù)接口,主要為內(nèi)存管理接口、液晶驅(qū)動接口和觸摸屏接口。移植過程首先添加emWin 5.44版本的源文件和配置文件[8-9]。內(nèi)存管理接口主要配置GUIConf.c
和GUIConf.h文件,修改配置從外部32 MB SDRAM分配emWin動態(tài)內(nèi)存為8 MB,并設(shè)置支持多任務(wù)和ARGB。顯示驅(qū)動接口主要配置LCDConf.c和LCDConf.h文件,配置為多幀緩沖功能,同時設(shè)置屏幕顯示區(qū)域大小為800×480。觸摸屏接口為Gt9xx.c文件,軟件通過FreeRTOS創(chuàng)建一個觸摸任務(wù),30 ms讀取一次觸摸信息,因此要配置關(guān)閉觸摸中斷的方式。
4? 示教器軟件設(shè)計(Design of teaching pendant software)
4.1? ?主要框架
機械臂示教器軟件具體實現(xiàn)示教功能的框圖如圖2所示。本文主要是針對示教器軟件進行設(shè)計,再通過網(wǎng)口方式與機械臂運動控制卡進行通信,然后運動控制卡通過驅(qū)動器來控制工業(yè)機械臂進行運動。
示教器的硬件與運行環(huán)境搭建好后,軟件功能的總體框架如圖3所示。其主要功能有菜單欄包括文件(新建、保存等)、編輯(剪切、復(fù)制、粘貼等)和幫助;模式設(shè)置包括運行模式(單步、單次、循環(huán)運行)、運行速度和啟停;指令顯示包括顯示區(qū)(顯示已經(jīng)編輯好的指令)、刪除(刪除指定指令)和清空(清空所有指令);指令編輯區(qū)包括運動指令(關(guān)節(jié)、直線、圓弧、圓等的編輯)、邏輯指令(延時、Home點設(shè)置等的編輯)、碼垛、跟蹤和通信;運動與參數(shù)設(shè)置包括關(guān)節(jié)運動(按鍵直接控制關(guān)節(jié)運動:按下關(guān)節(jié)移動,釋放停止運動)、D-H參數(shù)(針對不同機械臂需要改變D-H參數(shù)并保存)、最大運動速度(設(shè)置每個關(guān)節(jié)最大的運動速度、加速度等)和回零速度;提示信息與數(shù)字鍵盤主要顯示運行過程中的各種信息(錯誤信息、運行成功等)以及數(shù)字鍵盤用于指令編輯區(qū)的指令輸入和運動參數(shù)的設(shè)置等。
根據(jù)軟件的功能,實時操作系統(tǒng)的任務(wù)主要劃分為數(shù)據(jù)處理與傳輸任務(wù)、人機交互控制任務(wù)、文件與數(shù)據(jù)存儲任務(wù)和界面刷新與顯示任務(wù)。為了保證數(shù)據(jù)處理和傳輸?shù)膶崟r性,數(shù)據(jù)處理與傳輸任務(wù)處于最高優(yōu)先級。界面刷新與顯示任務(wù)主要包括文本、按鍵和圖片等的顯示與刷新,由于采用的emWin圖形庫占用系統(tǒng)資源較大,并且任務(wù)時間長,因此設(shè)置為最低優(yōu)先級??紤]到人機交互的響應(yīng)時間與速度問題,將人機交互控制任務(wù)的優(yōu)先級設(shè)置第二優(yōu)先級,文件與數(shù)據(jù)存儲任務(wù)設(shè)置為第三優(yōu)先級。因此,示教器軟件系統(tǒng)任務(wù)的優(yōu)先級從高到低分別為數(shù)據(jù)處理與傳輸任務(wù)、人機交互控制任務(wù)、文件與數(shù)據(jù)存儲任務(wù)和界面刷新與顯示任務(wù)。
系統(tǒng)任務(wù)之間的通信與同步是通過任務(wù)通知與消息隊列進行的,如圖4所示。
4.2? ?網(wǎng)絡(luò)通信
LwIP適用于嵌入式的開源輕型TCP/IP協(xié)議棧,可以移植在FreeRTOS操作系統(tǒng)平臺上,占用ROM與RAM資源較少,支持較為完整的TCP/IP協(xié)議且便于裁減、調(diào)試,被廣泛應(yīng)用在32 位控制器上,因此本文的示教器軟件采用LwIP進行網(wǎng)口通信[10-11]。LwIP在FreeRTOS操作系統(tǒng)上能夠使用NETCONN API與Socket API編程,相較于RAW API編程會更加簡便。由于FreeRTOS上能夠?qū)崿F(xiàn)多任務(wù),因此可以單獨創(chuàng)建一個任務(wù)處理LwIP數(shù)據(jù)的收發(fā),再通過消息隊列(郵箱)實現(xiàn)多個任務(wù)之間的通信。Socket通常被稱為套接字,在當(dāng)前網(wǎng)絡(luò)通信中主流程序設(shè)計都是使用Socket進行編程的,因為它簡單易用,是一個網(wǎng)絡(luò)編程標(biāo)準(zhǔn),能夠在不同平臺上移植。工業(yè)機械臂示教器軟件選用LwIP的Socket API編程,在Socket中,通過Socket套接字記錄網(wǎng)絡(luò)的連接情況。TCP/IP協(xié)議棧常用通信協(xié)議有TCP和UDP,TCP是一種穩(wěn)定的傳輸層協(xié)議,能夠提供面向連接、可靠的傳輸服務(wù),而UDP則提供一種不可靠的、無連接的服務(wù),但是UDP相對于TCP傳輸速度快,沒有TCP的握手、確認(rèn)、重傳等機制,因此針對示教器軟件要求實時顯示機械臂的姿態(tài),在這種實時性要求較高的場合中選用UDP協(xié)議。
工業(yè)機械臂示教器軟件套接字使用如下:
第一步,創(chuàng)建套接字:
sock=socket(AF_INET, SOCK_DGRAM, 0);
創(chuàng)建套接字,socket第一個參數(shù)為套接字協(xié)議簇,對于TCP/IP協(xié)議,該值為AF_INET;第二個參數(shù)為套接字使用的服務(wù)類型,對于UDP協(xié)議,該值為SOCK_DGRAM(若為TCP協(xié)議,該值為SOCK_STREAM);第三個參數(shù)為套接字使用的協(xié)議,對于IPv4中的TCP和UDP,該值均為0。
第二步,套接字綁定本地網(wǎng)絡(luò)信息:
/* udp_localaddr一個sockaddr_in的結(jié)構(gòu)體*/
udp_localaddr.sin_family=AF_INET;? ?//協(xié)議簇
udp_localaddr.sin_addr.s_addr=INADDR_ANY;? //IP地址信息
udp_localaddr.sin_port=htons(50000);? //本地端口
memset(&(udp_localaddr.sin_zero), 0, sizeof(udp_localaddr.sin_zero));? //8字節(jié)保留未用
bind(sock, (struct sockaddr *)&udp_localaddr, sizeof(struct sockaddr)); //綁定操作
經(jīng)過上述兩步,已經(jīng)將sock與本地綁定好,就可以使用UDP進行通信了。UDP通信時發(fā)送數(shù)據(jù)調(diào)用Socket API中sendto函數(shù):
sendto(sock, Send_data, send_data_len,0, (struct sockaddr*)&serveraddr, sizeof(struct sockaddr_in));
該函數(shù)中sock為套接字;Send_data為存放要發(fā)送數(shù)據(jù)數(shù)組的起始地址;send_data_len為發(fā)送數(shù)據(jù)長度;第四個參數(shù)為發(fā)送時的一些處理,比如外帶數(shù)據(jù)等,此處無處理設(shè)置為0;serveraddr為sockaddr結(jié)構(gòu)體,記錄了遠(yuǎn)端運動控制卡的IP地址和端口;最后一個參數(shù)為sockaddr結(jié)構(gòu)體長度。
接收時調(diào)用recvfrom函數(shù):
recv_data_len=recvfrom(sock, Recv_data, recv_data_maxlen,0, (struct sockaddr*)&serveraddr, &addrlen);
與上述sendto參數(shù)基本一致,其中recv_data_len為接收數(shù)據(jù)長度,Recv_data為存放接收數(shù)據(jù)數(shù)組的起始地址,recv_data_maxlen接收數(shù)據(jù)長度最大值。
4.3? ?軟件界面顯示
工業(yè)機械臂示教器軟件界面如圖5所示,其中數(shù)字按鍵是彈窗式的,點擊要編輯的編輯框就會彈出數(shù)字鍵盤,如圖6所示。此數(shù)字鍵盤界面是模態(tài)的,只有按鍵界面點擊Ok按鍵結(jié)束后才能對其他界面進行操作。
5? ?應(yīng)用(Application)
5.1? ?平臺搭建
工業(yè)機械臂示教器軟件應(yīng)用平臺的搭建如圖7所示,主要包括四軸SCARA機械臂本體、驅(qū)動器、運動控制卡、機械臂示教器軟件等。
5.2? ?機械臂示教器軟件的應(yīng)用
工業(yè)機械臂運動時需要根據(jù)初始位姿和終點位姿,從起點運動到終點,但是一般情況下在實際使用過程中無法事先獲取始末位姿。機械臂示教器軟件一般是示教再實現(xiàn)機械臂的運動,首先將機械臂運動到起始位置,然后通過示教器軟件獲取位姿并記錄下來,再移動到終點位置,示教器軟件獲取位姿并記錄下來。通過獲取的始末位置和姿態(tài),再選擇運動方式是直線或者圓弧,不斷重復(fù)地從起始位置運動到終點位置。
如圖5和圖6所示,在使用機械臂示教器軟件示教時,先在運動與參數(shù)設(shè)置區(qū)設(shè)置好機械臂的參數(shù),如D-H參數(shù)(在List display中設(shè)置并顯示,如表1所示)、最大運動速度(在Maximum speed中設(shè)置并顯示)等,再關(guān)節(jié)輸入,通過關(guān)節(jié)運動指令運動到起始點,此時機械臂的位置和姿態(tài)都會顯示在指令編輯區(qū)的運動指令處。機械臂的位置會顯示在Linear move指令窗口的編輯框x、y、z、rz中,此時點擊Ok按鈕即可在Code Edit處保存并記錄當(dāng)前位置,再用同樣的方法保存并記錄終點位置,如此便可實現(xiàn)示教重現(xiàn)了。在運行時,需要選擇運行模式,如單步運行Step,以及運行速度模式,如60%,再點擊Start按鈕,軟件會對每行指令進行編譯解析,如果指令出錯會在提示信息區(qū)顯示錯誤信息,如果沒錯會在提示信息區(qū)顯示編譯成功,并下發(fā)指令開始運動,如圖8所示。
6? ?結(jié)論(Conclusion)
本文利用FreeRTOS操作系統(tǒng)與emWin圖形庫在STM32H743嵌入式平臺上實現(xiàn)了工業(yè)機械臂示教器軟件的設(shè)計,描述了硬件平臺上的移植過程、軟件界面的搭建與實現(xiàn)以及上下位機之間的UDP通信。示教器軟件使用編譯器Keil 5
進行編寫、下載與調(diào)試,通過應(yīng)用于工業(yè)機械臂的實驗,證明了示教器軟件多個任務(wù)運行和同步可靠,反應(yīng)靈敏,具有高效性;同時有一個簡潔友好的人機交互界面,并且可以實現(xiàn)機械臂的關(guān)節(jié)、直線、圓弧等多種運動方式;通信速度穩(wěn)定可靠,能夠滿足工業(yè)機械臂的實時顯示狀態(tài)性能,可以很好地運用在實際制造加工過程中,能夠降低加工生產(chǎn)的成本、開發(fā)周期與資源占用。
參考文獻(References)
[1] 申淑麗,黃昕,祝潤澤,等.基于Linux系統(tǒng)的通用工業(yè)機器人示教器開發(fā)[J].機床與液壓,2021,49(03):63-68.
[2] 田國富,李曉婷.工業(yè)機器人示教器人機界面的設(shè)計[J].機械制造,2017,55(12):29-31,35.
[3] 謝鵬程.基于STM32和FreeRTOS的獨立式運動控制器設(shè)計與研究[D].廣州:華南理工大學(xué),2012.
[4] 劉建強,李建義,梁力水,等.基于μCOS-Ⅲ+EMWIN的自動駕駛系統(tǒng)設(shè)計[J].廊坊師范學(xué)院學(xué)報(自然科學(xué)版),2018,
18(04):38-42.
[5] 陳新,蒲慶文.基于emWin圖形庫的電動汽車液晶儀表設(shè)計[J].儀表技術(shù)與傳感器,2013(07):105-107,110.
[6] 肖林京,于鵬杰,于志豪,等.基于STM32和emWin圖形庫的液晶顯示系統(tǒng)設(shè)計[J].電視技術(shù),2015,39(01):39-42,50.
[7] 張龍彪,張果,王劍平,等.嵌入式操作系統(tǒng)FreeRTOS的原理與移植實現(xiàn)[J].信息技術(shù),2012,36(11):31-34.
[8] 陳繼華,湯濤林,李國棟,等.emWin在stm32和ra8875中的嵌入式設(shè)計[J].電子設(shè)計工程,2019,27(08):156-160,165.
[9] 張維通,王潤潔,康迂勇,等.基于EMWIN和ARM Cortex-M4內(nèi)核的數(shù)字示波器[J].電子世界,2018(12):13-15.
[10] 張文亮,田沛,劉暉,等.基于FreeRTOS的lwip協(xié)議棧的移植與測試[J].自動化技術(shù)與應(yīng)用,2015,34(11):25-29.
[11] MENG F R, HUO Y, ZHOU Y. Network multifunctional substation with embedded system in coal mine[J]. Journal of China University of Mining & Technology(English Edition), 2006(02):236-240.
作者簡介:
楊亮亮(1978-),男,博士,副教授.研究領(lǐng)域:高速高精運動控制.
竇巖杰(1996-),男,碩士生.研究領(lǐng)域:機械臂運動控制.
張? ? 暉(1997-),男,碩士生.研究領(lǐng)域:嵌入式系統(tǒng)設(shè)計.