曾敏, 袁松, 石永華, 胡子鑫, 王卓然
(華南理工大學,廣州 510641)
在智能爬行式焊接機器人應用中,現場環境復雜,焊接集控器往往需要同時協調控制多臺從機設備,包括爬行式焊接機器人運動控制裝置、工業相機、焊接電源、送絲機等從機[1-3],因此焊接集控器往往采用多控制器組合來處理這些任務,提升了系統的硬件復雜性,且多控制器間的通信速率慢,通信管理復雜[4-6]。其中需要人機交互終端對焊接過程的參數設定、電源控制、焊接啟停、故障監控進行控制[7],加重了集控器處理器的運算負擔,影響焊接過程的實時性。
基于以上原因,該焊接集控器使用異構多核的STM32MP157處理器作為集控器核心,包含了雙核A7以及單核M4內核,可以在A7內核和M4內核運行Linux操作系統[8]和FreeRTOS實時系統,觸摸屏選用威綸通MT6071iE模塊。人機交互模塊通信任務運行在集控器的M4內核中,主體焊接控制任務運行在Linux系統,實現軟件分層設計,實現對主體焊接控制任務的解耦,利用核間通信任務的高速率特性[9-10],提高了整體焊接系統的實時性,且只需要單控制器芯片即可滿足集控器對各從機及人機交互模塊通信的需求,降低了硬件的復雜性,并利用組態軟件EasyBuilder Pro對人機界面進行設計,提升了人機界面軟件設計和界面設計的效率。
焊接集控器以異構多核控制器STM32MP157為核心,該芯片由ST公司于2019年推出,內部具有雙核Coretex-A7內核及Cortex-M4內核,通過OpenAMP開源框架進行核間數據高速通信。焊接集控器電路集成了雙路RS485接口,分別與送絲機、焊接電源通信,通過USB2.0接口與工業相機連接。此外,利用STM32MP157的MII接口與PHY芯片RTL8211F實現千兆RJ45網口通信,與爬行機器人運動驅動器通信,而人機交互模塊則通過RS232接口與焊接集控器實現點對點通信,確保了焊接集控器的抗擾性與實時性。焊接集控器的硬件框圖如圖1所示。

圖1 焊接集控器硬件框圖
焊接集控器需要控制爬行式焊接機器人運動控制裝置、工業相機、焊接電源、送絲機設備的運行及與人機交互模塊的通信,將這些任務都運行在單一內核中很難保證焊接過程的實時性,也不利于程序編寫,因此需要將人機交互任務與主焊接任務解耦,這里使用靜態劃分的方法,將人機交互通信任務在Cortex-M4內核中運行,而主焊接任務在雙核Cortex-A7中運行,降低對焊接任務的影響,進而提高整體焊接控制的實時性,如圖2所示,為焊接集控器軟件框圖。

圖2 焊接集控器軟件框圖
一般嵌入式系統的啟動流程為鏈式啟動,每個環節中前者為后者提供了運行環境及加載下一環節啟動代碼。焊接集控器的處理器啟動流程如圖3所示。TF-A為首先加載的可信賴固件,與傳統無安全校驗的嵌入式Linux啟動不同,其保證了啟動過程中各個鏡像的完整性,最后負責加載bootloader,即U-Boot,該程序會初始化片上外設,最后加載Linux內核到內存中運行,從而完成對Cortex-A7內核的初始化。Remoteproc是基于Linux下的遠程處理器控制框架,可以通過本地處理器Cortex-A7,加載固件到遠程處理器Cortex-M4以及啟動或停止遠程處理器,因此Cortex-M4內核最終由Linux系統通過Remoteproc框架啟動。最后達到Linux系統與FreeRTOS系統同時運行在不同的內核中,實現焊接集控器內部任務的并行處理。

圖3 焊接集控器處理器啟動流程
在焊接集控器中,由圖2所示,核間通信由OpenAMP開源框架實現,OpenAMP框架包括了IPCC核間通信控制器和RPMsg遠程處理器信息處理協議。其中IPCC是提供門鈴信號給不同內核,用于通知新消息可用,僅起到通知喚起中斷作用;RPMsg是基于共享內存的消息總線協議,規定了消息幀報文格式以及管理共享緩沖區。
在Cortex-M4內核側,利用FreeRTOS的多任務機制,劃分核間通信任務。在核間通信任務中,首先完成IPCC初始化及OpenAMP初始化,注冊RPMsg通道,搭建內核間通信M4與A7雙向通道;其次,注冊核間通信接收中斷函數;然后該任務查詢工作狀態位,0代表無新消息接收或新消息等待發送,則該任務進入阻塞態,等待有新消息接收產生中斷時,中斷回調函數會喚醒核間通信任務,同時設置工作標志位和方向標志位為1,表示有新消息,方向為接收;然后獲取共享資源鎖,避免對共享資源并發訪問;若為接收方向,則從環形共享內存的隊列消息結構中出列,獲取數據幀,然后執行數據幀處理函數;最后復位標志位并釋放共享資源鎖,任務返回至查詢工作狀態位,開始新的工作周期,同理發送方向類似。核間通信任務流程如圖4所示。與基于分立元件的多控制器方案不同,異構多核是將多個不同架構的內核集成在一塊芯片上,不同的內核通過系統內部高速總線連接通信,因此核間通信具有高帶寬及低延遲特性,且基于操作系統管理核間通信,保證了通信的有序性。

圖4 核間通信任務流程圖
焊接集控器在焊接過程中采集到各種狀態數據可由主焊接任務獲取,其中焊接狀態信息如電弧電壓、焊接電流、各從機狀態等信息需要顯示在人機交互界面上,因此需由核間通信任務將顯示信息從Cortex-A7內核傳遞至Cortex-M4內核中,再由人機交互任務完成顯示任務。此過程的通信地址圖如圖5所示,圖中地址從0開始,在整個可尋址地址空間中,包含了Cortex-M4的程序代碼和數據區、用于核間通信的共享內存區及Cortex-A7的DDR內存區,實現了相同地址總線可訪問不同內核區域。

圖5 人機交互核間通信地址圖
圖5中a是Cortex-A7與共享內存區的通信任務,該任務由Linux系統完成,對外提供文件訪問接口,只需調用該接口即可完成在Linux系統中的核間通信過程。人機交互任務需要在Cortex-M4數據區分配若干寄存器,用于與人機交互模塊進行Modbus-RTU通信,部分寄存器分配見表1。

表1 人機交互寄存器分配表
表中寄存器地址分為2類,0x對應位狀態,存儲開關量,而4x對應雙字數據寄存器,存儲有效數據。人機交互任務根據已分配寄存器與人機交互模塊通信,任務流程圖如圖6所示,不同任務之間的調度由FreeRTOS負責,在人機交互任務中,檢測到接收到的數據報文時,中斷程序會將數據報文拷貝至接收緩沖數組,執行Modbus接收處理函數,驗證設備站號、CRC校驗,然后根據功能碼類型賦值給任務變量,根據功能碼的不同讀取或寫入人機交互寄存器,當功能碼為寫入時,不僅需要將對應人機交互寄存器賦新值,還需要將更新后的寄存器值通過核間通信任務實時反饋到Cortex-A7內核中,如手動按下啟動按鈕、急停按鈕、設置焊接參數時,每個內核都需要實時獲得該參數并進行處理。基于FreeRTOS的任務管理機制,人機交互任務在更新寄存器后通過喚醒處于阻塞態的核間通信任務通知Cortex-A7內核,使得在Linux系統下的主焊接任務可根據改變寄存器值控制焊接過程,電源啟停、焊接工藝參數實時調整等操作。

圖6 人機交互任務流程圖
為滿足焊接集控器協同控制爬行式焊接機器人運動控制裝置、焊接電源、送絲機等從機及顯示狀態信息需求,設計了狀態信息顯示界面、運動控制界面、焊接參數設置界面、故障信息顯示界面,其結構層次如圖7所示。

圖7 人機交互樹狀關聯
在組態軟件EasyBuilder Pro中,設置初始界面為開機自檢階段界面,由于焊接集控器需要與多從機通信,而多從機的系統啟動需要等待全部啟動完畢后方可開始焊接,因此設置初始界面等待所有從機在線后方可點擊進入二級界面進行操作。在二級界面中顯示各個從機的在線狀態,焊接參數設置,故障信息顯示,因此利用組態軟件EasyBuilder Pro提供的GUI界面,如圖8所示,將需要的按鈕元件、設置窗口、切換界面元件等拖拽至指定位置,設置各個元件的對應寄存器地址,即可對應Cortex-M4數據區中的人機交互寄存器地址,使不同界面的開發工作量降低。

圖8 人機交互界面設計軟件
基于多核異構的焊接集控器平臺中,測試多核系統鏈式啟動,對核間通信任務進行測試,最后驗證焊接集控器人機交互界面設計。
當焊接集控器平臺引導進入Linux系統后,由Remoteproc框架加載Cortex-M4內核程序,進而啟動該內核,包括了加載Cortex-M4內核固件、啟動該固件、分配共享內存節點、RPMsg通信建立及通信通道建立,Linux系統建立文件訪問接口/dev/ttyRPMSG0,以供核間通信訪問。
在測試核間通信任務中,按照50字節為單位進行數據量遞增,在基準時間50 ms內,得到有效的發送次數見表2,可得隨著單次傳輸數據量的增加,核間通信傳輸速率呈線性增加趨勢,在200字節單次傳輸時,傳輸速率能夠達到6 675.78 kB/s,而一般分立控制器通信速率只有十幾kB/s,驗證了核間通信具有較強的數據傳輸能力,滿足焊接集控器的人機顯示任務和主焊接任務的通信速率要求。

表2 核間通信任務測試
將焊接集控器與各從機設備通過總線連接,焊接集控器的人機交互畫面如圖9所示,該人機交互畫面實時顯示了當前設置的焊接電流、電弧電壓等參數及各從機設備的在線情況,在人機交互畫面的操作通過核間通信任務實時反饋到主焊接任務中,完成多核間的焊接任務控制。

圖9 焊接集控器人機交互畫面
基于多核異構的焊接集控器人機交互設計中,通過將主焊接任務與人機交互任務靜態劃分到不同的內核運行,各個內核中運行不同的系統,完成了任務解耦,簡化了硬件設計,同時降低了焊接過程中的主處理器占用。基于核間通信的高速特性,使得主焊接任務與人機交互任務的實時性得以保證。