余超,謝鵬,曹昌懷,王虎
( 中車戚墅堰機車有限公司,江蘇 常州 213011 )
伴隨芯片技術、互聯(lián)網(wǎng)技術的快速發(fā)展,自動化產(chǎn)業(yè)在智能控制及信息技術方面形成多個分支,如:工業(yè)機器人技術、工業(yè)互聯(lián)網(wǎng)技術、人工智能技術、無人駕駛技術、碳監(jiān)測等。與此同時,控制總線技術也取得了相應的發(fā)展,由傳統(tǒng)的RS232、RS485、CAN、PROFIBUSDP等總線向工業(yè)以太網(wǎng)發(fā)展,結合移動網(wǎng)絡、IT技術、OPC技術,形成功能復雜、自動化程度高的物聯(lián)網(wǎng)。
工業(yè)自動化中的傳感器、執(zhí)行器、控制器大量應用了Modbus ASCII/RTU總線。Modbus設備的物理層主要為EIA-485,該物理層允許多個網(wǎng)絡設備并聯(lián)通信,單個網(wǎng)絡最多允許大約240個節(jié)點。本文擬對工作在串行總線上的Modbus RTU/ASCII協(xié)議及以太網(wǎng)上的Modbus TCP進行分析,以國產(chǎn)物聯(lián)網(wǎng)芯片ESP32為基礎,開發(fā)一款Modbus無線網(wǎng)關設備,實現(xiàn)ESP32通過Modbus RTU讀寫多個支持該協(xié)議的傳感器數(shù)據(jù),并能使S7-1200通過Modbus TCP讀寫ESP32中存儲的數(shù)據(jù),達到向單個IP地址讀寫Modbus協(xié)議數(shù)據(jù)的目的。
Modbus是Modicon公司開發(fā)的一種串行通信協(xié)議,目前已經(jīng)成為工業(yè)領域通訊協(xié)議的業(yè)界標準,是現(xiàn)代工業(yè)各類自動化設備中不同控制部件、檢測部件之間的通訊方式。Modbus協(xié)議規(guī)定其通訊采用主從(Master/Slave)技術:主機發(fā)起通訊請求,向特定地址的從機發(fā)起數(shù)據(jù)傳輸;從機應及時返回對查詢做出的響應(數(shù)據(jù)),或處理所要求的動作[1]。
Modbus協(xié)議目前存在分別用于串口、以太網(wǎng)及其他支持互聯(lián)網(wǎng)協(xié)議的網(wǎng)絡版本。大量Modbus裝置僅支持9 600、115 200 bps通訊速率,即最多收發(fā)14.4 KBps數(shù)據(jù),數(shù)據(jù)吞吐量較少。
ESP32是上海樂鑫信息科技公司為移動設備、可穿戴電子產(chǎn)品和物聯(lián)網(wǎng)(IOT)應用而設計的一款SOC芯片,集成了2個哈佛結構Xtensa LX6 CPU構成雙核系統(tǒng)、單時鐘周期可訪問的448 KB內(nèi)部ROM及520 KB內(nèi)部RAM、2.4 GHz Wi-Fi和藍牙雙模,高級外設接口非常豐富,最大支持16 MB片外SPI Flash及8 MB片外SPI SRAM,是用于設計Modbus無線網(wǎng)關的高性價選擇[2]。
Modbus是OSI模型第7層報文傳輸協(xié)議,見表1,可在RS232、RS485、光纖、無線、以太網(wǎng)等介質(zhì)中實現(xiàn)不同器件之間的通信。Modbus協(xié)議可對多種設備(PLC、觸摸屏、MPI、變頻器、伺服驅(qū)動器、I/O設備、測量儀表等)進行遠程操作。網(wǎng)關,也可稱作協(xié)議轉(zhuǎn)換器,是不同協(xié)議或不同網(wǎng)絡之間通信的橋梁。因此,Modbus網(wǎng)關能完成Modbus RTU/ASCII、Modbus TCP之間的通信。
表1 Modbus通信棧
Modbus協(xié)議運行在串行網(wǎng)絡、以太網(wǎng)網(wǎng)絡等物理層,其協(xié)議數(shù)據(jù)單元(PDU)是相同的,均由目標通信設備地址Addr、功能代碼Code、數(shù)據(jù)Data、循環(huán)冗余校驗CRC/LRC組成。在以太網(wǎng)或某些特殊的物理層,Modbus協(xié)議在頭部添加幾個字段,如傳輸標志符TID、協(xié)議標志符PID、長度Length等,見表2。由于PDU中規(guī)定了Modbus規(guī)定單次傳輸信息長度的數(shù)據(jù)為單個字節(jié),即最大值為256,因此串行鏈路上PDU的最大長度為256字節(jié),從而數(shù)據(jù)Data長度為256-3=252字節(jié)。
表2 Modbus報文幀
Modbus串口通訊通過串口EIA-485物理層進行,可允許大量Modbus設備在同一個網(wǎng)絡中通信。由于Modbus總線僅可由主機發(fā)起通訊,因此RS485工作于半雙工模式下,故選用半雙工高速收發(fā)器XD3485擴展ESP32 UART端口。XD3485、MODBUS設備以菊花鏈拓撲形式進行連接,總線兩端需設置終端電阻,阻值為120 Ω,信號反射效應得到削減。ESP32-WROOM自帶2.4 G印刷天線,連接至無線路由器后可與其他工業(yè)設備進行通信。MODBUS網(wǎng)關電路設計圖如1所示。
圖1 MODBUS網(wǎng)關電路設計
ESP32的官方開發(fā)框架為ESP-IDF。核心庫為G0、G1兩部分。
G0包 括hal、xtensa、riscv、esp_rom、esp_common、soc,包含關于硬件存取的低級指令及信息;esp_common包含硬件接口代碼及工具。G0庫可能相互依賴,但不會依賴其他庫。
G1庫包括esp_hw_support、esp_system、newlib、spi_flash、freertos、log、heap,以G0庫為基礎,并可能相互依賴。在G0、G1之上,該框架引入了其他庫支持快速開發(fā),如:asio、ESP-Modbus、freertos、mdns等。用于開發(fā)modbus的庫為ESP-Modbus,對硬件的需求極少,耗用的ROM、RAM分別約為7 KB、0.4KB,支 持MODBUS-RTU、MODBUSASCII、MODBUS-TCP,遵循BSD許可證,用戶可將其應用于商業(yè)環(huán)境中[3]。
編寫測試程序發(fā)現(xiàn),F(xiàn)ree-Modbus庫中的MODBUS-TCP默認UID為0,因此只能訪問IP網(wǎng)絡中目標IP對象的一個串行設備。這對于串行總線為RS232協(xié)議而言較為合適,但對串行總線為RS485稍顯不足,RS485(兩線制)一般可支持32個串行設備。分析FreeModbus庫,修改相應代碼,使MODBUS-TCP正確傳輸UID字段,便于其他設備通過MODBUSRTU/ASCII協(xié)議完成訪問。FreeModbus庫修改示例如圖2所示。
圖2 FreeModbus庫修改
ESP32 Modbus網(wǎng)關程序設計主要分為三部分:數(shù)據(jù)緩存池、通過串行總線存取數(shù)據(jù)、通過以太網(wǎng)絡連接客戶端并傳輸數(shù)據(jù)。數(shù)據(jù)緩存池用于存儲分時讀取的串行總線設備中的數(shù)據(jù),以備以太網(wǎng)客戶端訪問,提高ESP32的響應速度;串行通訊、以太網(wǎng)通訊均需按照ESPIDF手冊中的API指南,按順序初始化對應的硬件建立相應通訊。網(wǎng)關程序結構如圖3所示。
圖3 ESP32 Modbus網(wǎng)關程序結構
MODBUS-TCP部分代碼如圖4所示。按照BluFi配網(wǎng)流程,依次執(zhí)行:Wi-Fi初始化、啟動/連接Wi-Fi、事件處理、MODBUSTCP接口初始化、MODBUS-TCP參數(shù)設置和MODBUS-TCP數(shù)據(jù)存取。ESP32 Modbus網(wǎng)關程序設計如圖4所示。
圖4 ESP32 Modbus網(wǎng)關程序設計
SIMATIC S7-1200是西門子開發(fā)的新型模塊化微型PLC,集成Profinet接口,支持Profinet IO、S7通信以及TCP、UDP、Modubs TCP、OPC UA通信、安全TCP等,網(wǎng)絡功能強大。該PLC在TIA Portal中進行硬件組態(tài)、編程、程序傳輸、故障診斷、項目升級、更新程序。TIA Portal V17中的Modbus TCP庫指令版本更新至6.0,包括MB_CLIENT、MB_SERVER兩條指令:MB_CLIENT指令通過PROFINET在客戶端和服務器之間建立連接,發(fā)送Modbus請求,接收響應并控制Modbus TCP客戶端的連接終端;MB_SERVER指令處理Modbus TCP客戶端的連接請求,接收并處理請求,發(fā)送響應。
MB_CLIENT指令背景數(shù)據(jù)塊可編輯靜態(tài)變量MB_Unit_ID對應于Modbus RTU協(xié)議從站地址域。Modbus TCP服務器用作Modbus RTU協(xié)議網(wǎng)關時,可使用MB_UNIT_ID標識串行網(wǎng)絡的從站設備。 S7-1200訪問ESP32網(wǎng)關如圖5所示。
圖5 S7-1200訪問ESP32網(wǎng)關
數(shù)控機床、專用設備、裝配設備等零部件大量采用了MODBUS RTU/ASCII協(xié)議。了解MODBUS RTU/ASCII、MODBUS TCP協(xié)議內(nèi)容,分析MODBUS報文幀的數(shù)據(jù)結構,研究MODBUS串行數(shù)據(jù)傳輸至以太網(wǎng)服務器/客戶端,可為老舊設備進行可靠性升級、性能提升改造提供強有力的技術支持。在ESP32上修改移植的FreeModbus庫,并以S7-1200通過以太網(wǎng)訪問ESP32的無線節(jié)點,實現(xiàn)ESP32 MODBUS-TCP無線網(wǎng)關所需功能,具有訪問速度快的特點。