涂 雷 (長江大學電子與信息學院,湖北荊州434023)
周秀紅 (中國石油吐哈油田分公司技術監測中心,新疆鄯善838202)
隨著網絡時代的到來,工業控制器聯網已成為趨勢,工業控制從點對點的單機控制走向分布式多點網絡控制。開放的Modbus協議作為工業通信網絡協議之一,使得符合該協議的西門子、Honeywell和ABB等廠商生產的控制設備和驅動產品可以快速聯接形成網絡,以便進行分布式控制和集中管理[1]。為此,筆者針對S7-200PLC與ACS550變頻器的Modbus通訊進行探討。
Modbus協議[2]由Modicon公司開發,現已成為工業領域全球最流行的串口通信協議。該協議支持傳統的RS-232、RS-422、RS-485和以太網設備,許多工業設備包括PLC、DCS和智能儀表等都使用Modbus協議作為其通訊標準。
Modbus通信使用主-從協議、半雙工傳輸模式,即主設備能進行初始化傳輸和查詢,從設備根據主設備查詢提供的數據作出相應反應。Modbus網絡定義了2種傳輸模式,即ASCII和RTU(遠程終端單元),ABB公司生產的ACS550變頻器僅支持RTU模式。在RTU通信模式下主站發送消息幀的內容和順序依次為從站地址、功能碼、數據域 (數據起始地址、數據量、數據內容)及CRC校驗碼。每個RT U的消息幀必須連續傳輸,不能有間斷。RT U模式中每個字節由1個起始位、8個數據位 (最小的有效位先發送)、1個奇偶校驗位 (無校驗則無)、1個停止位 (有校驗時)或2個停止位 (無校驗時)等10個位組成。RTU模式的錯誤檢驗域使用CRC(循環冗余校驗),CRC校驗域附加在消息幀中構成消息幀的最后一個域,CRC校驗位低字節先傳輸,之后傳輸高字節,CRC校驗的高字節是Modbus消息幀的最后一個字節。
Modbus系統間的數據交換類型由功能號 (FCS)控制,如表1所示。

表1 Modbus規約下的功能指定
ABS550支持的功能號是03和16。
西門子SIMATIC S7-200PLC是模塊化中小型PLC系統,其中CPU224XPCN上有Port0和Port1通信口,且都支持Modbus RTU協議,即既可以通過自由口通信模式編寫Modbus通信程序完成通信,也可以直接調用STEP7-Micro/WIN指令庫中的程序塊完成通信[2]。在自由端口通訊模式下通過發送XM T(transmit)與接收指令 RCV(receive)來完成數據幀的傳輸,完成上述過程需要編寫復雜冗長的初始化程序、CRC校驗程序、發送/接收程序等。STEP 7-MicroWin指令庫包含有專門為Modbus通信設計的預先定義的子程序和中斷服務程序,使得S7-200PLC與其他Modbus設備的通信簡單易行。使用Modbus主站協議指令,可以將S7-200PLC組態作為Modbus RT U主站與Modbus從站 (變頻器)通信。主站指令分如下2組 (見圖1):①MBUS_CTRL、MBUS_MSG(Port0)用于端口0的初始化和通信。②MBUS_CTRL_P1、MBUS_MSG_P1(Port1),用于端口1。

圖1 指令庫
MBUS_CTRL指令用于初始化、監控或禁用Modbus通訊 (見圖2),每次掃描都必須調用MBUS_CTRL指令,否則主站協議將不能正常工作,讀寫指令MBUS_MSG也將無效。
Mode輸入值選擇通訊協議,即輸入值1將CPU端口分配給Modbus協議并啟用協議,輸入值0將CPU端口分配給PPI系統協議并禁用Modbus協議。
Parity參數的奇偶性設置必須與Modbus從站設備的相匹配,所有設置均使用一個起始位和一個停止位。允許值為0(無校驗)、1(奇校驗)和2(偶校驗)。
讀寫指令MBUS_MSG用于啟動PLC到Modbus從站的請求,并處理響應 (見圖3)。當EN輸入和First輸入均為接通時,MBUS_MSG指令啟動到Modbus從站的請求。發送請求、等待響應和處理響應通常要求多個掃描。EN輸入必須接通才能啟用發送請求,并應在Done位置位之前保持接通。一次只能有一個MBUS_MSG指令處于活動狀態。如果啟用了一個以上MBUS_MSG指令,則將處理第一個MBUS_MSG指令,所有后續MBUS_MSG指令將被中止,并輸出錯誤代碼6。這樣一條讀寫指令可對應Modbus規約下的功能03和16,即RW為0時對應功能碼03,RW為1時對應功能碼16,據此可以完成電機的啟停、調速和運行參數訪問。

圖2 調用主站初始化與端口控制子程序

圖3 調用主站初始化與端口控制子程序
Slave是Modbus從站設備的站地址。Addr是從站設備上的要讀寫的寄存器起始地址。DataPtr指主站上用于接收或發送的數據域的首地址。Count指明離散輸入、輸出的點數,或需要讀、寫的寄存器數目。
對于Addr,Modbus有相關要約 (見表2)。
調用庫指令時必須為其分配存儲區,且該存儲區不能和其他數據重疊,否則在運行時會產生錯誤,導致不能正常通訊。

表2 從站寄存器地址映射關系
首先進行變頻器通訊參數的設置,默認設置如表3所示,其中參數5304規定了奇偶校驗的類型和停止位的個數,必須選擇1個停止位[3]。

表3 ACS550變頻器用于Modbus通訊的參數設置
根據文獻 [4]進行命令源的選擇,Modbus通訊模式下要求總線設置給定值1,即參數1102賦值為0,選擇外部1;參數1103賦值為8,給定值來自串行通訊。
編寫PLC程序改寫變頻器控制字 (保持寄存器40001)、給定值1(寄存器40002)和給定值2(寄存器40003),這樣連接S7-200PLC的RS485通訊口PorTo到ACS550變頻器DB9的通信端口,運行PLC,就可以控制電機的啟停和速度大小。此外,可將變頻器上的狀態字和運行參數讀上來,用于故障的檢測和診斷。
相比于端子控制啟停、模擬量調速的傳統方式,通過Modbus通訊方式控制變頻器,其數值化給定提高了系統控制精度,大大簡化了外部接線,提高了系統穩定性,也為人機交互界面的引入和復雜算法的實現提供了條件。
[1]劉新華,王伸東,黃劍.基于MODBUS協議PLC通信的模塊化實現 [J].電氣自動化,2001(1):44-47.
[2]西門子 (中國)有限公司自動化與驅動集團.深入淺出西門子S7-200PLC[M].北京:北京航空航天大學出版社,2003.
[3]龔俊,黃銳,戴濤.ACS550與S7-226P LC自由口通訊 [J/OL].http://www.paper.edu.cn/index.php/default/releasepaper/content/201004-619,2010-04-17.
[4]ABB(中國)有限公司.ACS550變頻器手冊 [M/OL].http://www.abb.com/,2006-01-19.