楊亮亮 黃坤 張莉敏 史偉民



摘? 要:針對現代工業生產中運動控制卡高速化、高精化的技術要求,設計了一種基于小型嵌入式網絡協議棧LwIP的多軸運動控制卡網絡通信系統。系統以STM32H7微控制器為主控芯片,以低功耗芯片LAN8720A作為外部以太網PHY層芯片,采用TCP/IP網絡協議棧中的UDP協議作為上下位機間通信協議。通信系統的下位機程序采用基于LwIP協議棧的RAW API方式編寫,上位機程序基于SOCKET套接字接口編寫。測試結果表明:系統能達到既定要求的通信響應速度,可實現單臺工控上位機與多塊運動控制卡之間“一對多”的主從式高速通信,具有較高的工業實用價值。
關鍵詞:嵌入式;LwIP;UDP;網絡通信;多軸運動控制卡
中圖分類號:TP23? ? ?文獻標識碼:A
Design of Communication System for Multi-axis Motion Control
Card based on Embedded Network Protocol Stack
YANG Liangliang1,2, HUANG Kun1, ZHANG Limin3, SHI Weimin1
(1.Faculty of Mechanical Engineering & Automation, Zhejiang Sci-Tech University, Hangzhou 310018, China;
2.Mstar Technologies, Inc., Hangzhou 311121, China;
3.Zhongnan University of Economics and Law, Wuhan 430073, China)
yangliangliang@zstu.edu.cn; 2522823811@qq.com; zhanglimin1979@163.com; swm@zstu.edu.cn
Abstract: This paper proposes to design a multi-axis motion control card network communication system based on the small-scale embedded network protocol stack LwIP (Light Weight Internet Protocol), in order to meet the high-speed and high-precision technical requirements of motion control cards in modern industrial production. The system uses STM32H7 microcontroller as main control chip, low-power chip LAN8720A as external Ethernet PHY (Physical Layer) chip, and UDP (User Datagram Protocol) in TCP (Transmission Control Protocol)/IP (Internet Protocol) network protocol stack as communication protocol between upper and lower computers. Lower computer program of the communication system is written in RAW API method based on the LwIP protocol stack, and upper computer program is written based on the SOCKET interface. Test results show that the proposed system can reach the required communication response speed. It also realizes the one-to-many master-slave high-speed communication between a single industrial control host computer and multiple motion control cards. The proposed system has high industrial practical value.
Keywords: embedded; LwIP; UDP; network communication; multi-axis motion control card
1? ?引言(Introduction)
隨著現代工業信息技術的發展,國內中低端運動控制領域對控制的響應速度及精度的要求也越來越高。傳統的運動控制卡采用的是DSP+FPGA的硬件架構,如國內的固高科技GT系列、研華集中式運動控制卡系列等。隨著工況多樣化與外設豐富性要求的不斷提高,DSP雖運算能力強大,但在外設控制、事務處理、信息管理等方面不如高性能ARM靈活便捷、性價比高。另外,傳統的工控上位機與運動控制卡之間通常采用RS-232/485串口或PCI并行總線通信,其中串口方式通信速率較低,傳輸距離短,受干擾影響大[1];PCI總線方式不夠靈活便捷,成本較高,只能嵌入在工控機上使用。針對上述問題,我們設計了一種基于ARM與LwIP協議棧的多軸運動控制卡以太網通信系統。在STM32主控芯片上應用輕量型LwIP協議棧,采用LwIP RAW API編程接口搭建運動控制卡的網絡通信框架,SOCKET套接字方式編寫上位機UDP服務端程序,并針對UDP協議不可靠傳輸的特性,設計了自定義協議頭及對應的數據收發處理狀態機對數據幀進行封裝與解封處理,實現一臺工控上位機控制多塊運動控制卡的“一對多”網絡通信系統。
2? ?系統架構(System architecture)
本設計的系統總體框架如圖1所示,將工控上位機與多塊運動控制卡通過網線連入同一路由器或交換機下的局域網內實現“一對多”通信的運動控制系統。
3? 通信系統硬件設計(Hardware design of communication system)
運動控制卡上的主控芯片采用基于ARM Cortex M7內核的32位高級MCU—STM32H743IIT6,該芯片集成了大量的外設接口及通信接口,且其穩定運行主頻高達400 MHz,能滿足嵌入式運動控制系統的各項性能要求。芯片上的介質訪問控制器MAC通過符合IEEE 802.3標準的精簡介質接口RMII與外部PHY芯片LAN8720A相連接[2]。LAN8720A再與帶有網絡隔離變壓器的RJ45網絡接口模塊相連接,利用網絡線纜實現板卡與工控上位機的網絡連接。
本設計采用的LAN8720A芯片是一款體積小(24pin QFN封裝,4 mm×4 mm×0.85 mm)、功耗低的全能型10/100 Mbps以太網物理層收發器,符合IEEE 802.3/802.3u(快速以太網)標準,支持精簡介質RMII接口,能大幅減少所需引腳數。
本設計采用的RJ45網絡接頭型號為HR911105A,該接頭帶有網絡屏蔽功能,能有效地減少外部干擾造成的影響,同時內部帶有變壓器[3]。網絡通信模塊的接線示意圖如圖2所示。
4? 通信系統軟件設計(Software design of communication system)
4.1? ?系統軟件框架
系統軟件框架如圖3所示,工控上位機端通過創建SOCKET套接字編寫UDP服務端程序接入路由器,運動控制卡端通過應用輕量型LwIP協議棧編寫相對應的UDP程序來與外部PHY芯片LAN8720A進行數據交互。LwIP協議棧是瑞典計算機科學院(SICS)的Adam Dunkels等開發的一個小型開源的TCP/IP協議棧,其在保持TCP/IP協議棧主要功能的基礎上減少了對RAM的占用,適用于小型嵌入式系統[4]。本設計中下位機程序采用基于無操作系統的LwIP RAW API編程接口方式設計UDP客戶端程序。
4.2? ?工控上位機通信程序
上位機程序采用VS2012作為開發環境,結合C與C++編程搭建基本框架并實現MFC人機交互界面,通信部分采用SOCKET套接字接口編寫UDP服務端。上位機程序在網絡通信方面需要實現的功能為:
(1)掃描工控上位機所連入的局域網,實現對該網內運動控制卡的檢測、連接、通信
檢測板卡設備IP的方式采用TCP/IP協議中的Ping命令。Ping服務命令位于TCP/IP網絡體系結構中的應用層,其主要作用是向特定的目的主機發送ICMP(Internet Control Message Protocol,因特網報文控制協議)回顯請求報文,并得到目的主機的回顯應答報文。通過Ping命令可以確定兩臺主機之間是否成功交換數據包,再根據返回的信息就可以確定目的主機與本地主機間網絡通信鏈路是否通暢等信息。
網絡通信中第一部分功能實現的工作原理為上位機程序檢測主機所聯入局域網內的所有設備(同一局域網內每個設備的IP地址與MAC物理地址要求是唯一的),并將所有檢測到的設備IP號組成列表列舉在MFC交互界面中,通過點選MFC界面IP列表框進行端對端連接通信。另外,上位機程序采用多線程并發執行機制實現同時控制多塊運動控制卡的功能,即“一對多”通信。獲取設備IP列表的過程如圖4所示。
(2)工控上位機下發設定的IP、MAC等參數,實現在線修改運動控制卡網絡參數的功能
網絡通信中第二部分功能的實現方式是通過在上位機中使用MFC微軟基礎類庫編寫人機界面,使用者按照規定設置所需的IP、MAC等網絡參數,上位機程序將該網絡參數打包成網絡數據幀發到指定IP地址的運動控制卡內。運動控制卡在接收到該網絡數據幀后進行相應的命令處理,并通過I2C總線將其寫入與板卡外部連接的掉電數據不丟失的EEPROM芯片(AT24C02)內,運動控制卡每次上電時都會通過I2C接口讀取AT24C02內最新一次寫入的IP、MAC等網絡參數并初始化網絡配置。此功能可以將給定的運動控制卡設置為指定的網絡參數,方便管理局域網內所連入的多塊多軸運動控制卡。該部分功能所對應的上位機軟件界面如圖5所示。
4.3? ?運動控制卡LwIP通信框架
在LwIP網絡編程中主要有三種接口編程方式:NETCONN API接口編程、SOCKET API接口編程、RAW API接口編程。本設計采用第三種方式RAW API接口編程,該方式的核心是對TCP/UDP控制塊的處理,優點是數據處理效率高,可以基于無操作系統編程[5]。
LwIP RAW API編程方式是基于回調機制的,即為協議棧內核中不同事件注冊相應的回調函數后,當事件發生的時候相應的回調函數就會被調用。基于LwIP RAW API編程接口實現的下位機程序框架如圖6所示。其分為三部分:LwIP協議棧的初始化配置、網絡數據接收檢測及命令處理、數據重組打包發送。
下位機程序的網絡通信整體是基于LwIP協議棧的,下面為對程序通信框架的總體概述。
(1)基于LwIP協議棧框架對網絡進行初始化配置
Udp_echoserver_init函數用于初始化,該函數調用下面五個函數建立UDP連接并且注冊回調函數:
Udp_new函數用于創建UDP控制塊;Udp_bind函數用于綁定本機IP地址與端口號;Udp_conect函數用于設置控制塊中的遠端IP地址與端口號,并將UDP控制塊插入控制塊鏈表udp_pcbs中;Udp_recv函數用于設置UDP控制塊中的recv與recv_arg字段,recv是一個函數指針,指向一個udp_recv_fn類型的回調函數,它是內核與應用程序交互的橋梁,當內核接收到數據時,就會調用這個回調函數,進而將數據遞交到應用層處理;Udp_recv_callback函數是數據接收回調函數,用于將以太網接收到的數據拷貝到設定的全局數據緩沖區內便于后續處理。
(2)網絡數據接收檢測及命令處理階段
程序主體部分采用非阻塞輪詢的方式將數據包存放到DMA描述符中,然后拷貝其中的數據到pbuf[6]結構體中用于后續處理,即在無網絡數據接收時會一直處于一個初始輪詢狀態。在該段程序體內,Ethernetif_input作為數據處理的入口,它在接收到以太網幀時被調用,用于從以太網數據存儲區讀取已接收到的一個以太網數據幀,并將其送入指定的網卡結構體netif中。
本程序網絡通信部分采用LwIP協議棧中的UDP協議。UDP協議是TCP/IP協議棧中的傳輸層協議,是一個簡單的面向數據報的協議,不提供對數據包的分片、組裝功能,當報文發送出去后無法知道是否安全、完整到達,所以UDP協議也可稱作“無連接的連接協議”。UDP除了這些缺點外也有它自身的優勢,由于UDP不屬于連接型協議,因而消耗資源少,實時性高,處理速度快[7]。針對UDP的非連接型協議屬性,在程序內制定了一種數據收發處理協議,數據發送前在數據頭部封裝自定義的一段協議頭數據,在數據接收過程中則對其進行逐步解封提取。通過該處理協議來實現對錯誤幀、非正常幀的處理,以提高UDP協議的數據傳輸可靠性。數據收發協議頭格式如圖7所示。
根據上述處理要求,數據收發部分編寫了一個數據收發狀態機用于封裝與解封網絡數據包,并判斷接收到的網絡數據包是否正確。若數據正確則會按照狀態機躍遷順序重組數據,最后進入switch-case命令分支解析并做出相應的處理;若數據有誤或數據包掉幀導致數據不完整,則會在躍遷到相應的狀態機后判斷處理是否超時進而跳出狀態機并在丟棄該部分數據后回復上位機數據接收異常,同時其回到初始輪詢狀態繼續等待接收網絡數據包。此處的超時管理機制作用原理為:當數據被接收到并開始進入狀態機提取處理時,啟動一個計時器機制,在每一個狀態機處都會進行計時,計算數據處理時長,若超過設定時間則認為出錯,跳出狀態機,向上位機報告錯誤;若未超過設定時間,則認為無錯誤,處理完成后狀態機正常跳轉。數據接收處理的狀態機躍遷圖如圖8所示。
(3)數據重組打包發送階段
在數據發送處理中,對于TCP連接,內核會根據用戶提供的待發送數據的起始數據和長度,自動將數據封裝在合適的數據包中,然后放入發送隊列;對于UDP,用戶需要手動將數據封裝在網絡發送buffer中,通過調用發送函數,內核直接發送數據包的數據段[8]。UDP數據包的最大理論長度為65,535 字節,但是UDP不存在數據分片和組裝機制,只會將數據包直接向下交付給IP層處理,所以它的長度大小受到下層IP層和數據鏈路層協議的制約。而以太網規定的數據鏈路層最大傳輸單元MTU為1,500 字節,去除UDP包頭8 字節、IP包頭20 字節,所以數據報文單幀最大長度可采用1,472 字節。
運動控制卡在接收到正確的數據包并通過數據接收狀態機提取處理后,通過判斷命令ID號進入相應的命令ID處理函數,將對應的回復數據通過數據發送狀態機重組,若數據長度大于1,472 字節,則將數據包分組,每組大小1,472 字節,依次將分組數據發出;若小于1,472 字節則直接單組發出。
5? ?實驗驗證(Experimental verification)
完成控制系統的通信部分程序編寫后,在上位機軟件端調用一個通信回環測試函數來測試系統性能。通信測試原理是通信回環測試函數在上位機中生成一個指定長度的隨機浮點數(0—9)數組,并在該數組前添加自定義的協議頭部,然后通過UDP協議下發到指定IP板卡。運動控制卡接收到網絡數據包后進行校驗處理,再將處理過的數據包返回給上位機,最后上位機對收發的數據進行對比,確定通信是否正確,且通信響應時間要求小于2 ms。
本設計中采用的測試方式:將上位機與三塊獨立的四軸運動控制卡通過網線連入同一個路由器或交換機下,上位機掃描該局域網內的所有運動控制卡并進行連接,然后分別設置三塊運動控制卡網絡參數。其中,路由器的IP地址為192.168.1.1,PC上位機的IP地址設置為192.168.31.100,三塊運動控制卡的IP地址分別設置為192.168.31.10、192.168.31.20、192.168.31.30。在設置好板卡網絡參數后重啟運動控制卡,然后同時開啟三塊板卡通信測試,測試結果如表1所示。
通過表1的測試結果可以看出,在“一對多”的通信環境下,工控上位機與連接的每塊運動控制卡之間保持了穩定的通信速度——11.7 Mbit/s,通信的平均響應時間為1.09 ms,而且各運動控制卡能相互獨立地與工控上位機完成數據傳輸并確保數據正確性。相較于串口RS232通信傳輸速度100—200 kbit/s,DSP+專用芯片(W5100S)的以太網傳輸速度為1.2 Mbit/s[9],通信測試結果表明,所設計的通信系統能達到要求的精度與響應速度,且在通信速度上有大幅提高。
6? ?結論(Conclusion)
本文設計并實現了一種基于ARM和LwIP的嵌入式多軸運動控制卡網絡通信方案,描述了網絡通信系統的硬件設計、軟件設計兩部分。系統中工控上位機端采用VS2012編寫MFC界面方便人機交互,多軸運動控制卡端采用無操作系統的LwIP RAW API編程接口編寫適合嵌入式系統的程序。針對UDP連接不安全、不可靠的問題,采用數據收發狀態機及處理超時管理機制有效確保數據的正確收發和系統的實時響應性。最后通過實驗測試了網絡通信性能,實驗測試效果良好,可滿足實際工業場景的應用要求。本設計方案對嵌入式運動控制系統的以太網通信系統設計具有一定的實際參考意義。
參考文獻(References)
[1] 盛宇波,張成,周瀾.一種基于STM32與LWIP的數據采集系統:中國,CN201911218936.0[P]. 2020-02-21.
[2] 馬亞輝,吳凡,李林,等.基于LwIP的熱插拔網絡嵌入式設計方法[J].單片機與嵌入式系統應用,2020,20(04):10-13,17.
[3] 王全全,馮博,朱輝.基于STM32和LWIP的井場傳感器遠程監控系統[J].工業控制計算機,2019,32(04):13-14.
[4] 武磊,張正炳,胡蓉華.基于Web的家居設備遠程控制系統設計與實現[J].微型機與應用,2017,36(19):66-69.
[5] 張超,王志超,林巖.基于LwIP協議棧的嵌入式網絡控制系統設計[J].單片機與嵌入式系統應用,2019,19(02):34-36,40.
[6] DUNKELS A. Design and implementation of the LwIP TCP/IP stack[D]. Stockholm, Sweden: Swedish Institute of Computer Science, 2001:3-5.
[7] 朱升林.嵌入式網絡那些事:LwIP協議深度剖析與實戰演練[M].北京:中國水利水電出版社,2012:320.
[8] 趙成青,李宥謀,劉永斌,等.LWIP中零拷貝技術的研究與應用[J].計算機技術與發展,2018,28(07):182-186.
[9] 楊亮亮,李翔,史偉民,等.基于以太網的運動控制卡通信模塊設計[J].工業儀表與自動化裝置,2020(03):24-28,59.
作者簡介:
楊亮亮(1978-),男,博士,副教授.研究領域:高速高精運動控制.
黃? ?坤(1993-),男,碩士生.研究領域:嵌入式方向.
張莉敏(1979-),女,博士,副教授.研究領域:邏輯與人工智能.
史偉民(1965-),男,博士,教授.研究領域:紡織機械自動控制技術.