葛穎奇 徐勁松 游云漢 韓增濤



摘 要:針對風電場數據傳輸的可靠性、實時性需求,設計了基于Modbus/TCP協議的SCADA系統數據通信平臺。深入研究了Modbus標準規約,介紹了該協議在風電場數據通信中的實現方法,并闡述了客戶端和服務端軟件的核心設計思想;分析了Modbus/TCP協議實現的一些關鍵技術問題,并對該協議使用中的通信問題提出解決辦法,在實際工程應用中具有重要的參考價值。應用結果表明,所設計的Modbus數據通信平臺運行穩定,具備較好的實時性,高效地支撐了風電場的數據傳輸業務。
關鍵詞:Modbus/TCP協議;風電場;SCADA系統;數據通信
中圖分類號:TP274? ? 文獻標志碼:A? ? 文章編號:1671-0797(2023)13-0030-05
DOI:10.19514/j.cnki.cn32-1628/tm.2023.13.008
0? ? 引言
在工業控制領域,Modbus是一種非常重要的通信協議,它具有使用靈活方便、傳輸可靠的特點[1]。通過Modbus協議,不同廠商生產的異構系統設備可以簡單可靠地連成工業網絡,從而進行集中監控。Modbus良好的開放性、可擴展性和標準化使之成為一個通用的工業標準通信協議。目前在新能源電力行業,Modbus協議也得到了廣泛應用[2-4]。
Modbus在工業自動化網絡通信應用中,包括串行鏈路和TCP/IP兩種實現方式。Modbus/TCP是運行在TCP/IP協議上的Modbus報文傳輸協議,它將Modbus協議幀嵌入TCP/IP數據幀中,利用網絡傳輸Modbus協議報文。與串行鏈路通信相比,這種建立在以太網基礎上的通信協議可擴展性更優,更易于構建工業以太網,數據傳輸效率更高[5]。
在風電行業,數據通信的可靠性和實時性是非常重要的,性能不穩定會導致信號傳輸異常,嚴重時會造成風電機組事故停機,對機組和電網安全都會造成重大影響。本文對Modbus/TCP協議的通信機制進行深入研究,開發了基于該協議的風電場SCADA系統數據通信平臺,該平臺替換了之前使用的商業組態軟件通信平臺。
由于之前的組態軟件過于追求豐富的功能,缺少對風電領域應用場景的深入理解,因此存在適應性及軟件健壯性差的問題。本文基于風電場數據通信的可靠性和實時性需求,設計了可以更好地支撐風電場數據傳輸業務的通信平臺。
1? ? Modbus/TCP通信協議介紹
1.1? ? Modbus協議簡介
Modbus是OSI模型第7層上的應用層報文傳輸協議,采用客戶機/服務器模式通信,工程應用中主要進行實時數據的傳輸[6-9]。Modbus是一個請求/應答協議,它定義了應用數據單元(ADU)和協議數據單元(PDU),對請求和響應進行封裝。此外,Modbus協議規定了其事務處理框架內使用的功能碼和相應服務。首先Modbus ADU由啟動Modbus事務處理的客戶機創建,通過功能碼向服務器請求執行某種服務,然后服務器對客戶機發送的請求進行處理和應答。Modbus協議提供了4種基本數據模型,用于不同類型的數據傳輸,分別是線圈、離散量輸入、保持寄存器、輸入寄存器。
1.2? ? 功能碼定義
Modbus協議定義了一些公共功能碼和供用戶自定義的特殊功能碼,用于操作4種基本數據類型,它們能夠表示客戶端對服務器端的命令請求意圖。工業實時數據通信中常用的功能碼有:0x01用于讀線圈,0x02用于讀離散量輸入,0x03用于讀保持寄存器,0x04用于讀輸入寄存器,0x05用于寫單個線圈,0x06用于寫單個寄存器,0x0F用于寫多個線圈,0x10用于寫多個寄存器。
1.3? ? Modbus/TCP報文封裝
在TCP/IP網絡上,Modbus請求或響應的報文封裝格式如圖1所示。Modbus/TCP ADU由MBAP報文頭(Modbus應用協議報文頭)和PDU組成,PDU由功能碼和數據域構成[10]。Modbus/TCP的ADU最大長度為260字節,其中MBAP長度為7字節,PDU長度為253字節。
MBAP報文頭是在TCP/IP網絡上被用來識別Modbus ADU的專用報文頭,與串行鏈路上使用的Modbus RTU ADU相比,這種MBAP報文頭有所區別。MBAP報文頭包括下列字段,如表1所示。
2? ? 基于Modbus的風電場SCADA系統數據通信
風電場是由風電機組(包括機組單元變壓器)、匯集線路、主升壓變壓器及其他設備組成的風力發電站,包括場控層、間隔層和過程層。場控層的風電場SCADA系統和間隔層的風機主控系統進行通信,從而對風機運行過程進行實時監視和控制。風電場SCADA系統應滿足風電場運行控制的可靠性、實時性要求,其數據通信具有數據傳輸量大、實時性要求高的特點,并且需要具備較好的穩定性和抗干擾能力。
2.1? ? 通信結構
本文設計了基于Modbus/TCP協議的風電場SCADA系統數據傳輸平臺,實現對風電機組的高效監視和可靠控制,并具備遙測、遙信、遙調、遙控等遠動功能,可以和調度控制中心、風功率預測系統進行協同互動。本文設計的風電場SCADA系統數據通信平臺涵蓋了Modbus客戶端和Modbus服務端,客戶端采集風電機組PLC和機組單元變壓器的實時數據,服務端將數據轉發給集控、風功率預測等系統。平臺的數據通信結構如圖2所示。
風電場的信息類型包括源信息(模擬量和狀態信息)和派生信息(統計和歷史信息)。風電機組包含風輪、發電機、變流器、機艙、偏航系統等主要部件信息,這些部件的數字量數據的傳輸使用Modbus功能碼0x01操作的線圈類型和功能碼0x02操作的離散量輸入類型,模擬量數據的傳輸使用功能碼0x03操作的保持寄存器類型和功能碼0x04操作的輸入寄存器類型;風機的啟停控制使用功能碼0x05,參數設置使用功能碼0x10。平臺的數據訪問模型如圖3所示。
2.2? ? Modbus客戶端軟件設計
SCADA系統的Modbus客戶端需要與風電機組PLC、箱變測控裝置進行通信,實時采集設備狀態監測的模擬量和數字量數據。客戶端軟件啟動運行后,先根據業務配置封裝Modbus請求報文,然后連接服務端并發送數據請求報文,最后接收服務端的響應進行解析。本文設計的Modbus客戶端運行流程如圖4所示。
客戶端軟件設計需注重規范性,仔細研究規約定義背后的用意,嚴格遵守Modbus協議的各個細節規定,對訪問行為進行約束,比如生成報文時注意最大請求長度,以防止風機主控系統的Modbus服務端無法處理,導致請求失敗的情況。客戶端軟件需具備斷線重連功能,防止和風機主控的連接意外丟失。另外,客戶端軟件必須考慮不同Modbus服務端的差異性,以應對多種運行場景,所以需要具備靈活的配置功能,以適配不同的服務端。
2.3? ? Modbus服務端軟件設計
SCADA系統的Modbus服務端負責將采集到的機組運行數據轉發給調度控制中心、風功率預測等系統。服務端軟件啟動后,先根據業務配置進行TCP端口監聽并等待客戶端建立連接,然后接收客戶端的Modbus請求并進行處理,最后發送響應報文。本文設計的Modbus服務端運行流程如圖5所示。
服務端軟件在實現Modbus協議規定的功能后,還需要更多地考慮在應用場景中軟件的健壯性和服務可用性。例如,針對Modbus客戶端的非法請求,服務端可以發送異常碼作為響應,但是必須要保證服務可用,絕不能因此崩潰而不能處理合法請求。由于調度控制中心、風功率預測系統等客戶端連接可能會中斷后重連,因此服務端需要能識別、關閉失效連接。
3? ? 關鍵技術分析
開發一個好的Modbus協議產品,不僅需要深入研究Modbus協議本身,還需要對其底層基礎協議的運行機理進行深入理解。本文從規范性、可靠性、實時性三個方面對Modbus/TCP協議在風電場數據通信中的關鍵技術進行分析。
3.1? ? 規范性
(1)事務處理標識符設計。MBAP報文頭的事務處理標識符字段,用于將請求與未來響應之間建立聯系。因此,對一個TCP連接來說,在同一時刻這個標識符必須是唯一的。本文設計的客戶端,將事務處理標識符作為一個請求計數器,針對每個請求將計數器增加1,從而將請求和應答進行匹配。實際運行時,網絡鏈路的通信質量會受干擾而產生波動,使得幾個Modbus事務處理可能在一個連接上被同時激活,如果請求和應答沒有匹配,就會導致采集數據跳變。某些廠家的Modbus/TCP服務端強制要求客戶端請求報文的事務處理標識符為0,這顯然不符合規范。
(2)功能碼使用。在工程應用中,因為現場人員配置或者溝通錯誤等原因,通常存在功能碼誤用的情況,比如把讀寄存器功能碼0x03當成寫寄存器功能碼0x10來使用。功能碼的混用,會導致后期技術改造和升級維護困難。選擇正確的功能碼是實現標準Modbus協議的一個重要方面。
3.2? ? 可靠性
(1)TCP連接管理。實際運行中,網絡鏈路中斷或對端異常退出,會導致正常的Modbus通信連接被迫斷開。此時,需要Modbus客戶端和服務端有能力識別失效連接,并進行資源釋放,否則不斷增長的連接會導致客戶端或服務端內存溢出。有些故障系統中發現很多TCP連接處于CLOSE_WAIT狀態,就是因為應用層沒有對該連接進行關閉。一般情況下,Modbus客戶機比較容易識別連接的異常斷開,服務端則需要根據應用場景設計一種判斷機制來識別丟失通信的連接。本文Modbus服務端的TCP連接管理模塊設定了請求超時機制,在“保持連接”計時器結束后,對超時的客戶端連接進行清理。工業運行環境需要產品具備較好的健壯性和可靠性,能夠長期穩定運行,因此該設計在工程應用中非常重要。
(2)異常數據處理。在生產環境下,對通道中的數據準確性進行校核,可有效防止異常數據對系統內部的穩定運行產生干擾。本文設計的Modbus客戶端會對采集的測量值和狀態量進行數據合理性檢測和不良數據檢測,對采集到的異常數據進行丟棄。本文設計的Modbus服務端會對接收的遙調和遙控命令進行檢查,對異常命令不予執行。
3.3? ? 實時性
(1)Modbus請求設計。本質上,Modbus協議通信的功能是一幀請求一段連續地址長度的數據,對于地址不連續或者超過最大請求長度的數據,需要采用分包的方式請求。本文SCADA系統和風機主控通信時,Modbus采集點表用連續編碼的方式對地址進行規劃,同時兼顧靈活性和實時性,從而使得SCADA系統對風機進行數據請求時,一幀可以返回最大長度的數據。Modbus數據傳輸中減少分包,既可以提高數據傳輸的實時性,也可以減輕網絡負擔。
(2)Nagle算法關閉。TCP/IP協議的擁塞控制使用了Nagle算法,并默認開啟。該算法要求一個TCP連接上只能有一個未被確認的小分組,在該分組的確認到達之前,不能發送其他小分組。Nagle算法明顯提高了網絡利用率,但是增加了數據傳輸延時。對于像Modbus這種小包交互,且實時性需求較強的應用場景,應該啟用TCP_NODELAY參數來關閉Nagle算法,使得報文可以盡快發送。本文設計的Modbus服務端和客戶端通信程序都啟用了TCP_NODELAY參數,以提高數據交互的實時性。
(3)TCP首部PSH標志位設置。在TCP報文頭部中有URG、ACK、PSH、RST、SYN、FIN這6個標志比特,其中PSH這個標志位指示接收方應該盡快將這個報文段交給應用層。實際工程應用中包括很多異構系統設備,所有Modbus網絡中的設備都應設置PSH標志位,使得對端接收報文后可以盡快處理。
4? ? 測試結果
目前,本文設計的Modbus/TCP通信平臺已經部署于多個風電場,功能上實現了對風電機組運行實時數據的采集和轉發。該平臺有效承載了SCADA系統的數據通信業務,可靠性較之前有了很大的提升,從而大幅減少了人工運維成本。
為了驗證該平臺的實時性,進行了通信性能測試。采用本文的Modbus/TCP客戶端訪問本文的Modbus/
TCP服務端,請求方式為連續讀取保持寄存器,通信過程中使用Wireshark軟件進行抓包分析,每秒的Modbus通信報文數量如圖6所示。
測試結果顯示,本文的Modbus/TCP通信平臺一個連接每秒可以處理800個報文,即每秒處理400個Modbus請求,平均單個請求的處理時間為2.5 ms。在多連接場景下,本文設計的Modbus/TCP通信平臺具備每秒處理20萬個模擬點的能力,優于能源行業標準NB/T 31071—2015《風力發電場遠程監控系統技術規程》要求的實時數據處理性能。
5? ? 結束語
風電場的實時數據通信作為場站監控系統的核心部分,其性能直接決定了場站監控系統的運行水平,因此設計可靠的數據通信平臺意義重大。本文對Modbus/TCP通信機理進行了深入研究,設計了基于Modbus/TCP協議的風電場SCADA系統數據通信平臺,并分析了Modbus/TCP規約應用的核心技術。
本文提出的設計方法和關鍵技術可以顯著提高風電場SCADA系統數據通信的可靠性和實時性,同時對其他Modbus工程應用的進一步優化也具有重要的參考價值。風電場實際應用表明,本文設計的Modbus/
TCP數據通信平臺運行穩定,更好地滿足了風電場數據傳輸需求,為風電自動化領域的實時數據監控提供了一種有效的解決方案。
[參考文獻]
[1] 孫中豪,周興社,張凱龍.基于μC/OS-Ⅱ的Modbus/TCP消息的類令牌環實時響應算法[J].計算機工程與科學,2014,36(9):1662-1667.
[2] 李偉.基于Modbus協議的工控節點設計與實現[J].計算機工程,2010,36(16):226-228.
[3] 張海源,任春梅,張冉.Modbus協議在電力系統中的應用[J].繼電器,2007,35(17):31-34.
[4] 劉冉,莊紅山,汪凱威,等.基于Modbus/TCP的EPON配網自動化通信系統[J].制造業自動化,2020,42(9):110-113.
[5] 張子實,趙靜一,周楓.基于LabVIEW和Modbus/TCP的風電數據采集系統設計[J].自動化儀表,2018,39(7):47-50.
[6] 王佩,陳金鷹,童焦龍.面向物聯網應用的嵌入式ModBus協議分析與實現[J].儀表技術與傳感器,2018(7):102-106.
[7] 黃劍,張紅梅,張向利,等.基于Modbus協議的數據采集與并行加密通信系統[J].計算機應用與軟件,2017,34(3):260-266.
[8] 張仁斌,李思嫻,劉飛,等.基于Modbus功能碼細粒度過濾算法的研究[J].計算機應用研究,2018,35(1):277-281.
[9] 方崇全,陳瑋,趙勇.WinCE下科維可編程控制器Modbus/
TCP IO驅動設計[J].計算機應用與軟件,2014,31(4):327-329.
[10] 翁自覺,謝斌紅.基于MODBUS協議的OPC UA服務器的設計[J].計算機應用與軟件,2014,31(2):89-92.
收稿日期:2023-03-01
作者簡介:葛穎奇(1987—),男,浙江寧波人,工程師,研究方向:工業以太網數據通信。