曾敏, 袁松, 石永華, 胡子鑫, 王卓然
(華南理工大學(xué),廣州 510641)
在智能爬行式焊接機(jī)器人應(yīng)用中,現(xiàn)場環(huán)境復(fù)雜,焊接集控器往往需要同時協(xié)調(diào)控制多臺從機(jī)設(shè)備,包括爬行式焊接機(jī)器人運(yùn)動控制裝置、工業(yè)相機(jī)、焊接電源、送絲機(jī)等從機(jī)[1-3],因此焊接集控器往往采用多控制器組合來處理這些任務(wù),提升了系統(tǒng)的硬件復(fù)雜性,且多控制器間的通信速率慢,通信管理復(fù)雜[4-6]。其中需要人機(jī)交互終端對焊接過程的參數(shù)設(shè)定、電源控制、焊接啟停、故障監(jiān)控進(jìn)行控制[7],加重了集控器處理器的運(yùn)算負(fù)擔(dān),影響焊接過程的實(shí)時性。
基于以上原因,該焊接集控器使用異構(gòu)多核的STM32MP157處理器作為集控器核心,包含了雙核A7以及單核M4內(nèi)核,可以在A7內(nèi)核和M4內(nèi)核運(yùn)行Linux操作系統(tǒng)[8]和FreeRTOS實(shí)時系統(tǒng),觸摸屏選用威綸通MT6071iE模塊。人機(jī)交互模塊通信任務(wù)運(yùn)行在集控器的M4內(nèi)核中,主體焊接控制任務(wù)運(yùn)行在Linux系統(tǒng),實(shí)現(xiàn)軟件分層設(shè)計,實(shí)現(xiàn)對主體焊接控制任務(wù)的解耦,利用核間通信任務(wù)的高速率特性[9-10],提高了整體焊接系統(tǒng)的實(shí)時性,且只需要單控制器芯片即可滿足集控器對各從機(jī)及人機(jī)交互模塊通信的需求,降低了硬件的復(fù)雜性,并利用組態(tài)軟件EasyBuilder Pro對人機(jī)界面進(jìn)行設(shè)計,提升了人機(jī)界面軟件設(shè)計和界面設(shè)計的效率。
焊接集控器以異構(gòu)多核控制器STM32MP157為核心,該芯片由ST公司于2019年推出,內(nèi)部具有雙核Coretex-A7內(nèi)核及Cortex-M4內(nèi)核,通過OpenAMP開源框架進(jìn)行核間數(shù)據(jù)高速通信。焊接集控器電路集成了雙路RS485接口,分別與送絲機(jī)、焊接電源通信,通過USB2.0接口與工業(yè)相機(jī)連接。此外,利用STM32MP157的MII接口與PHY芯片RTL8211F實(shí)現(xiàn)千兆RJ45網(wǎng)口通信,與爬行機(jī)器人運(yùn)動驅(qū)動器通信,而人機(jī)交互模塊則通過RS232接口與焊接集控器實(shí)現(xiàn)點(diǎn)對點(diǎn)通信,確保了焊接集控器的抗擾性與實(shí)時性。焊接集控器的硬件框圖如圖1所示。
圖1 焊接集控器硬件框圖
焊接集控器需要控制爬行式焊接機(jī)器人運(yùn)動控制裝置、工業(yè)相機(jī)、焊接電源、送絲機(jī)設(shè)備的運(yùn)行及與人機(jī)交互模塊的通信,將這些任務(wù)都運(yùn)行在單一內(nèi)核中很難保證焊接過程的實(shí)時性,也不利于程序編寫,因此需要將人機(jī)交互任務(wù)與主焊接任務(wù)解耦,這里使用靜態(tài)劃分的方法,將人機(jī)交互通信任務(wù)在Cortex-M4內(nèi)核中運(yùn)行,而主焊接任務(wù)在雙核Cortex-A7中運(yùn)行,降低對焊接任務(wù)的影響,進(jìn)而提高整體焊接控制的實(shí)時性,如圖2所示,為焊接集控器軟件框圖。
圖2 焊接集控器軟件框圖
一般嵌入式系統(tǒng)的啟動流程為鏈?zhǔn)絾?,每個環(huán)節(jié)中前者為后者提供了運(yùn)行環(huán)境及加載下一環(huán)節(jié)啟動代碼。焊接集控器的處理器啟動流程如圖3所示。TF-A為首先加載的可信賴固件,與傳統(tǒng)無安全校驗(yàn)的嵌入式Linux啟動不同,其保證了啟動過程中各個鏡像的完整性,最后負(fù)責(zé)加載bootloader,即U-Boot,該程序會初始化片上外設(shè),最后加載Linux內(nèi)核到內(nèi)存中運(yùn)行,從而完成對Cortex-A7內(nèi)核的初始化。Remoteproc是基于Linux下的遠(yuǎn)程處理器控制框架,可以通過本地處理器Cortex-A7,加載固件到遠(yuǎn)程處理器Cortex-M4以及啟動或停止遠(yuǎn)程處理器,因此Cortex-M4內(nèi)核最終由Linux系統(tǒng)通過Remoteproc框架啟動。最后達(dá)到Linux系統(tǒng)與FreeRTOS系統(tǒng)同時運(yùn)行在不同的內(nèi)核中,實(shí)現(xiàn)焊接集控器內(nèi)部任務(wù)的并行處理。
圖3 焊接集控器處理器啟動流程
在焊接集控器中,由圖2所示,核間通信由OpenAMP開源框架實(shí)現(xiàn),OpenAMP框架包括了IPCC核間通信控制器和RPMsg遠(yuǎn)程處理器信息處理協(xié)議。其中IPCC是提供門鈴信號給不同內(nèi)核,用于通知新消息可用,僅起到通知喚起中斷作用;RPMsg是基于共享內(nèi)存的消息總線協(xié)議,規(guī)定了消息幀報文格式以及管理共享緩沖區(qū)。
在Cortex-M4內(nèi)核側(cè),利用FreeRTOS的多任務(wù)機(jī)制,劃分核間通信任務(wù)。在核間通信任務(wù)中,首先完成IPCC初始化及OpenAMP初始化,注冊RPMsg通道,搭建內(nèi)核間通信M4與A7雙向通道;其次,注冊核間通信接收中斷函數(shù);然后該任務(wù)查詢工作狀態(tài)位,0代表無新消息接收或新消息等待發(fā)送,則該任務(wù)進(jìn)入阻塞態(tài),等待有新消息接收產(chǎn)生中斷時,中斷回調(diào)函數(shù)會喚醒核間通信任務(wù),同時設(shè)置工作標(biāo)志位和方向標(biāo)志位為1,表示有新消息,方向?yàn)榻邮?;然后獲取共享資源鎖,避免對共享資源并發(fā)訪問;若為接收方向,則從環(huán)形共享內(nèi)存的隊列消息結(jié)構(gòu)中出列,獲取數(shù)據(jù)幀,然后執(zhí)行數(shù)據(jù)幀處理函數(shù);最后復(fù)位標(biāo)志位并釋放共享資源鎖,任務(wù)返回至查詢工作狀態(tài)位,開始新的工作周期,同理發(fā)送方向類似。核間通信任務(wù)流程如圖4所示。與基于分立元件的多控制器方案不同,異構(gòu)多核是將多個不同架構(gòu)的內(nèi)核集成在一塊芯片上,不同的內(nèi)核通過系統(tǒng)內(nèi)部高速總線連接通信,因此核間通信具有高帶寬及低延遲特性,且基于操作系統(tǒng)管理核間通信,保證了通信的有序性。
圖4 核間通信任務(wù)流程圖
焊接集控器在焊接過程中采集到各種狀態(tài)數(shù)據(jù)可由主焊接任務(wù)獲取,其中焊接狀態(tài)信息如電弧電壓、焊接電流、各從機(jī)狀態(tài)等信息需要顯示在人機(jī)交互界面上,因此需由核間通信任務(wù)將顯示信息從Cortex-A7內(nèi)核傳遞至Cortex-M4內(nèi)核中,再由人機(jī)交互任務(wù)完成顯示任務(wù)。此過程的通信地址圖如圖5所示,圖中地址從0開始,在整個可尋址地址空間中,包含了Cortex-M4的程序代碼和數(shù)據(jù)區(qū)、用于核間通信的共享內(nèi)存區(qū)及Cortex-A7的DDR內(nèi)存區(qū),實(shí)現(xiàn)了相同地址總線可訪問不同內(nèi)核區(qū)域。
圖5 人機(jī)交互核間通信地址圖
圖5中a是Cortex-A7與共享內(nèi)存區(qū)的通信任務(wù),該任務(wù)由Linux系統(tǒng)完成,對外提供文件訪問接口,只需調(diào)用該接口即可完成在Linux系統(tǒng)中的核間通信過程。人機(jī)交互任務(wù)需要在Cortex-M4數(shù)據(jù)區(qū)分配若干寄存器,用于與人機(jī)交互模塊進(jìn)行Modbus-RTU通信,部分寄存器分配見表1。
表1 人機(jī)交互寄存器分配表
表中寄存器地址分為2類,0x對應(yīng)位狀態(tài),存儲開關(guān)量,而4x對應(yīng)雙字?jǐn)?shù)據(jù)寄存器,存儲有效數(shù)據(jù)。人機(jī)交互任務(wù)根據(jù)已分配寄存器與人機(jī)交互模塊通信,任務(wù)流程圖如圖6所示,不同任務(wù)之間的調(diào)度由FreeRTOS負(fù)責(zé),在人機(jī)交互任務(wù)中,檢測到接收到的數(shù)據(jù)報文時,中斷程序會將數(shù)據(jù)報文拷貝至接收緩沖數(shù)組,執(zhí)行Modbus接收處理函數(shù),驗(yàn)證設(shè)備站號、CRC校驗(yàn),然后根據(jù)功能碼類型賦值給任務(wù)變量,根據(jù)功能碼的不同讀取或?qū)懭肴藱C(jī)交互寄存器,當(dāng)功能碼為寫入時,不僅需要將對應(yīng)人機(jī)交互寄存器賦新值,還需要將更新后的寄存器值通過核間通信任務(wù)實(shí)時反饋到Cortex-A7內(nèi)核中,如手動按下啟動按鈕、急停按鈕、設(shè)置焊接參數(shù)時,每個內(nèi)核都需要實(shí)時獲得該參數(shù)并進(jìn)行處理?;贔reeRTOS的任務(wù)管理機(jī)制,人機(jī)交互任務(wù)在更新寄存器后通過喚醒處于阻塞態(tài)的核間通信任務(wù)通知Cortex-A7內(nèi)核,使得在Linux系統(tǒng)下的主焊接任務(wù)可根據(jù)改變寄存器值控制焊接過程,電源啟停、焊接工藝參數(shù)實(shí)時調(diào)整等操作。
圖6 人機(jī)交互任務(wù)流程圖
為滿足焊接集控器協(xié)同控制爬行式焊接機(jī)器人運(yùn)動控制裝置、焊接電源、送絲機(jī)等從機(jī)及顯示狀態(tài)信息需求,設(shè)計了狀態(tài)信息顯示界面、運(yùn)動控制界面、焊接參數(shù)設(shè)置界面、故障信息顯示界面,其結(jié)構(gòu)層次如圖7所示。
圖7 人機(jī)交互樹狀關(guān)聯(lián)
在組態(tài)軟件EasyBuilder Pro中,設(shè)置初始界面為開機(jī)自檢階段界面,由于焊接集控器需要與多從機(jī)通信,而多從機(jī)的系統(tǒng)啟動需要等待全部啟動完畢后方可開始焊接,因此設(shè)置初始界面等待所有從機(jī)在線后方可點(diǎn)擊進(jìn)入二級界面進(jìn)行操作。在二級界面中顯示各個從機(jī)的在線狀態(tài),焊接參數(shù)設(shè)置,故障信息顯示,因此利用組態(tài)軟件EasyBuilder Pro提供的GUI界面,如圖8所示,將需要的按鈕元件、設(shè)置窗口、切換界面元件等拖拽至指定位置,設(shè)置各個元件的對應(yīng)寄存器地址,即可對應(yīng)Cortex-M4數(shù)據(jù)區(qū)中的人機(jī)交互寄存器地址,使不同界面的開發(fā)工作量降低。
圖8 人機(jī)交互界面設(shè)計軟件
基于多核異構(gòu)的焊接集控器平臺中,測試多核系統(tǒng)鏈?zhǔn)絾?,對核間通信任務(wù)進(jìn)行測試,最后驗(yàn)證焊接集控器人機(jī)交互界面設(shè)計。
當(dāng)焊接集控器平臺引導(dǎo)進(jìn)入Linux系統(tǒng)后,由Remoteproc框架加載Cortex-M4內(nèi)核程序,進(jìn)而啟動該內(nèi)核,包括了加載Cortex-M4內(nèi)核固件、啟動該固件、分配共享內(nèi)存節(jié)點(diǎn)、RPMsg通信建立及通信通道建立,Linux系統(tǒng)建立文件訪問接口/dev/ttyRPMSG0,以供核間通信訪問。
在測試核間通信任務(wù)中,按照50字節(jié)為單位進(jìn)行數(shù)據(jù)量遞增,在基準(zhǔn)時間50 ms內(nèi),得到有效的發(fā)送次數(shù)見表2,可得隨著單次傳輸數(shù)據(jù)量的增加,核間通信傳輸速率呈線性增加趨勢,在200字節(jié)單次傳輸時,傳輸速率能夠達(dá)到6 675.78 kB/s,而一般分立控制器通信速率只有十幾kB/s,驗(yàn)證了核間通信具有較強(qiáng)的數(shù)據(jù)傳輸能力,滿足焊接集控器的人機(jī)顯示任務(wù)和主焊接任務(wù)的通信速率要求。
表2 核間通信任務(wù)測試
將焊接集控器與各從機(jī)設(shè)備通過總線連接,焊接集控器的人機(jī)交互畫面如圖9所示,該人機(jī)交互畫面實(shí)時顯示了當(dāng)前設(shè)置的焊接電流、電弧電壓等參數(shù)及各從機(jī)設(shè)備的在線情況,在人機(jī)交互畫面的操作通過核間通信任務(wù)實(shí)時反饋到主焊接任務(wù)中,完成多核間的焊接任務(wù)控制。
圖9 焊接集控器人機(jī)交互畫面
基于多核異構(gòu)的焊接集控器人機(jī)交互設(shè)計中,通過將主焊接任務(wù)與人機(jī)交互任務(wù)靜態(tài)劃分到不同的內(nèi)核運(yùn)行,各個內(nèi)核中運(yùn)行不同的系統(tǒng),完成了任務(wù)解耦,簡化了硬件設(shè)計,同時降低了焊接過程中的主處理器占用。基于核間通信的高速特性,使得主焊接任務(wù)與人機(jī)交互任務(wù)的實(shí)時性得以保證。