西門子S7-1200 緊湊型PLC在當前的市場中有著廣泛的應用,作為經常與SENTRON PAC3200系列儀表共同使用的PLC,其Modbus通信協議的使用一直在市場上有著非常廣泛的應用。本文將主要介紹如何使用Modbus 通信協議來實現S7-1200與SENTRON PAC3200儀表的通信。
1.西門子SENTRON PAC3200 儀表介紹
西門子的SENTRON PAC3200多功能電力儀表是一種用于面板安裝的儀表,可用來計量、顯示配電系統多達50個測量變量,例如電壓、電流、功率、有功功率、頻率以及最大值、最小值和平均值。中文大屏幕圖形液晶顯示使用戶可遠距離讀表。PAC3200儀表如下圖所示。
圖1:儀表PAC3200
1.1 SENTRON PAC3200 MODBUS RTU通信擴展模塊介紹
PAC3200多功能儀表的本體沒有MODBUS RTU通信的功能,如果希望將PAC3200作為從站連接到MODBUS RTU網絡與主站進行數據交換必須選用外部擴展通信模塊――SENTRON PAC RS485模塊。(注意: PAC RS485 擴展模塊使用錯誤的固件版本時將不能工作
SENTRON PAC3200 電力監測設備的固件版本最低應為FWV2.0X。 較早的版本不支持
PAC RS485 擴展模塊。)該擴展模塊具有下列性能特點:
• 可通過設備正面設置參數
• 即插即用
• 支持 4.8/9.6/19.2 以及 38.4 KBd 通信傳輸速率
• 通過6針螺釘端子接線
• 不需要外接輔助電源
• 通過模塊上的 LED 顯示狀態
PAC3200 MODBUS RTU通信擴展模塊如下圖所示。
(1) 通信接線端子
(2) 安裝螺釘
(3) 通風口
(4) LED
圖2:PAC3200 MODBUS RTU 通信模塊
1.2 SENTRON PAC3200 MODBUS RTU通信擴展模塊的接線
SENTRON PAC3200 MODBUS RTU通信擴展模塊的接線如下圖所示
圖3:PAC3200 MODBUS RTU 通信模塊的接線圖
1. 將電纜連接到端子排上相應的螺栓端子。
2. 將電纜屏蔽層的一端連接到保護性接地PE。
3. 將信號公共端連接到保護性接地。 這樣也使得擴展模塊接地。
4. 在第一個和最后一個通信節點上,在正信號和負信號之間接入總線端接電阻器。 為
此,PAC RS485 擴展模塊中集成了一個120 Ohm 的總線端接電阻器。 如果需要其它
電阻值,請使用外部總線端接電阻器。 將它連接到第一個和最后一個通信節點。
1.3 SENTRON PAC3200 MODBUS RTU通信的方式
1.SENTRON PAC3200設備支持的功能碼如下:
FC |
功能碼 |
數據類型 |
訪問權限 |
02 |
輸入的狀態 |
位 |
輸入 |
R |
03 |
輸出寄存器 |
寄存器 |
輸出 |
R |
04 |
輸入寄存器 |
寄存器 |
輸入 |
R |
06 |
單一輸出寄存器 |
寄存器 |
輸出 |
RW |
10 |
多個輸出寄存器 |
寄存器 |
- |
RW |
2B |
設備識別 |
- |
- |
R |
表1: SENTRON PAC3200設備支持的功能碼
R—可讀
RW—可讀寫
2.SENTRON PAC3200 MODBUS RTU 與S7-1200進行通信
S7-1200 PLC可以通過功能代碼0x03 和0x04 訪問儀表PAC3200的被測量數據。
下表是一些PAC3200 被測量的數據。
表2: SENTRON PAC3200設備的一些被測量數據
2.西門子SENTRON PAC3200 儀表與S7-1200進行通信的接線圖
下圖是SENTRON PAC3200儀表與S7-1200進行MODBUS RTU 通信的接線圖。
圖4:S7-1200與PAC3200進行MODBUS RTU 進行通信的接線圖
3.硬件需求
S7-1200 PLC目前有3種類型的CPU:
1)S7-1211C CPU。
2)S7-1212C CPU。
3)S7-1214C CPU。
這三種類型的CPU都可以使用MODBUS通信協議通過通信模塊CM1241 RS485來實現S7-1200與PAC3200儀表的通信。
本例中使用的PLC硬件為:
1)PM1207電源 ( 6EP1 332-1SH71 )
2) S7-1214C ( 6ES7 214 -1BE30 -0XB0 )
3) CM1241 RS485 ( 6ES7 241 -1CH30 -0XB0 )
4) 模擬器 ( 6ES7 274 -1XH30 -0XA0 )
本例中使用的PAC3200儀表硬件為:
1) PAC3200 (7KM2112-0BA00-3AA0)
2) MODBUS RTU 模塊 (7KM9300-0AB00-0AA0)
3) MODBUS 通信電纜 ( 6XV1830-0EH10)
3.軟件需求
1) 編程軟件 Step7 Basic V10.5 ( 6ES7 822-0AA0-0YA0)
4.S7-1200 MODBUS RTU的通信方式
S7-1200作為MODBUS RTU主站的通信方式是由DATA_ADDR 和 MODE 參數來選擇 Modbus 功能類型的。
DATA_ADDR(從站中的起始 Modbus 地址): 指定要在 Modbus 從站中訪問的數據的起始地址。MB_MASTER 使用 MODE 輸入而非功能代碼輸入。 MODE 和 Modbus 地址范圍一起確定實際 Modbus 消息中使用的功能代碼。
下表列出了 MB_MASTER 參數 MODE、Modbus 功能代碼和 Modbus 地址范圍之間的對應關系。
表3: MB_MASTER的MODBUS 功能
5.S7-1200 與PAC3200 進行MODBUS RTU的通信組態
我們通過一個實例來介紹如何在Step7 Basic V10.5 中組態S7-1214C 和PAC3200的MODBUS RTU通信。
5. 1 PLC 硬件組態
首先在Step7 Basic V10.5中建立一個項目,如圖1所示。
圖5: 新建S7 1200項目
在硬件配置中,添加CPU1214C和通信模塊CM1241 RS485模塊,如圖2所示。
圖6: S7 1200硬件配置
在CPU的屬性中,設置以太網的IP地址,建立PG與PLC的連接,如下圖所示。
圖7: S7 1200 IP地址的設置
5. 2 PAC3200參數設置
在SENTRON PAC 電力監測設備的主菜單中,調用“設置”>“RS485 模塊”,出現下面的設置畫面:
圖8: PAC3200 MODBUS RTU 通信參數的設置
1. 地址的設置范圍:1-247。本例中設為8。
2. 波特率的設置范圍:4800,9600,19200,38400。本例中設為38400。
3. 設置外部通信的數據位、奇偶校驗位及停止位:
• 8E1=8 個數據位,奇偶校驗位為even, 1 個停止位
• 8O1=8 個數據位,奇偶校驗位為odd, 1 個停止位
• 8N2=8 個數據位,無奇偶校驗位, 2 個停止位
• 8N1=8 個數據位,無奇偶校驗位, 1 個停止位
本例中根據S7-1200 MODBUS MASTER 的參數設置為 8N1。
4. 協議的設置:可選項為:SEABUS,MODBUS RTU。
本例中設為MODBUS RTU。
5.響應時間的設置:注意與波特率的設置相匹配,本例中設為10mS。
6.S71200 與PAC3200的MODBUS RTU通信原理與編程的實現
6. 1 S7 1200 PLC與PAC3200 通過MODBUS RTU 通信的基本原理
S7 1200提供了專用的MODBUS庫進行MODBUS通信,如下圖所示:
圖9: S7 1200提供的專用MODBUS庫
西門子PLC S7-1200的模塊CM1241 RS232和CM1241 RS485都可以實現MODBUS RTU的通信,本例中采用CM1241 RS485模塊來實現與儀表PAC3200的MODBUS RTU 的通信。
S7-1200的MODBUS RTU通信的基本原理是:
首先S7-1200 PLC的程序調用一次MODBUS 庫中的功能塊MB_COMM_LOAD來組態CM1241 RS232和CM1241 RS485模塊上的端口,對端口的參數進行配置。
其次調用MODBUS 庫中的功能塊MB_MASTER或者MB_SLAVE作為MODBUS 主站或者從站與支持MODBUS協議的設備進行通信。
S7-1200 PLC作為MODUBUS 主站 與PAC3200 進行MODBUS RTU 通信的控制原理如下圖所示:
圖10:S7-1200 PLC作為MODUBUS 主站 與PAC3200 進行MODBUS RTU 通信原理
S7-1200 PLC還可以作為MODBUS子站與作為MODBUS主站之間的PLC進行MODBUS RTU通信,其控制原理如下圖所示:
圖11:S7-1200 PLC作為MODBUS子站與作為MODBUS主站之間的PLC進行MODBUS RTU的通信原理
每個S7-1200 CPU最多可帶3個通信模塊,而每個CM1241 RS485通信模塊理論上最多支持247個MODBUS子站。但是在實際應用時需要考慮CPU的性能以及輪循MODBUS子站的時間。
6. 2 S7 1200 PLC與PAC3200通過MODBUS RTU通信的編程
1.MODBUS RTU 通信接口參數的編程
MB_COMM_LOAD 功能塊用于組態點對點 (PtP, Point-to-Point) CM 1241RS485 或 CM 1241 RS232 模塊上的端口,以進行 Modbus RTU 協議通信。
程序開始運行時,調用一次MB_COMM_LOAD功能塊,來實現對MODBUS RTU模塊
的初始化組態。
MB_COMM_LOAD執行一次的編程方式采用如下圖所示時鐘位M10.0來完成。
圖12:MB_COMM_LOAD執行一次的編程時鐘位的設置
MB_COMM_LOAD功能塊的編程如下圖所示。
圖13:MB_COMM_LOAD功能塊的編程
PORT:指的是通過哪個通信模塊進行MODBUS RTU通信。
BAUD:指的是和MODBUS子站進行通信的速率。
通信端口的波特率。取值范圍為300,600,1200,2400,4800,9600,19200,38400,57600,
76800,115200。
注意:儀表PAC3200的波特率的設置范圍:4800,9600,19200,38400。因此上S7-1200
的波特率的設置一定要和儀表PAC3200的波特率的設置相一致。
MB_DB:對 MB_MASTER 或 MB_SLAVE 指令所使用的背景數據塊的引用。 在用戶程序中放置
MB_SLAVE 或 MB_MASTER 后,DB標識符會出現在 MB_DB 功能框連接的助手下拉列表中。
如“MB_MASTER_DB”或“MB_SLAVE_DB”。
STATUS:端口狀態代碼。具體含義如下表所示。
表4: MB_COMM_LOAD組態端口的狀態代碼
2.MODBUS_MASTER功能塊的編程
MB_MASTER 功能塊允許程序作為Modbus 主站使用點對點 (PtP, Point-to-Point) CM 1241 RS485 或 CM 1241RS232 模塊上的端口進行通信。 可訪問一個或多個 Modbus 從站設備中的數據。
MB_MASTER功能塊的編程如下圖所示。
圖14:MB_MASTER功能塊的編程
REQ:數據發送請求信號。0-無請求。1-請求將數據傳送到MODBUS從站。
MB_ADR:通信對象MODBUS從站的地址。有效地址范圍為0-247。值 0 被保留用于將消息廣播到所有 Modbus 從站。 只有Modbus 功能代碼 05、06、15 和 16 是可用于廣播的功能代碼。
注意:此處MODBUS從站的地址一定要與儀表PAC3200 的MODBUS 地址相一致。
MODE:模式選擇。選擇范圍為:讀、寫、診斷。
DATA_ADDR:從站中的起始地址: 指定要在 Modbus 從站中訪問的數據的起始地址。
特別注意的是:由于儀表PAC3200的寄存器與S7-1200 MODBUS RTU寄存器的不一致
性,讀取儀表PAC3200的DATA_ADDR的地址必須從40002開始。
注意: S7-1200的MODBUS RTU通信功能是通過使用“DATA_ADDR”和“MODE”的組合
來選擇MODBUS功能碼,如下表所示。
表5: S7-1200的MODBUS RTU通信功能碼
而儀表PAC3200 MODBUS RTU通信功能則是通過功能碼來實現的,如下表所示。
FC |
功能碼 |
數據類型 |
訪問權限 |
02 |
輸入的狀態 |
位 |
輸入 |
R |
03 |
輸出寄存器 |
寄存器 |
輸出 |
R |
04 |
輸入寄存器 |
寄存器 |
輸入 |
R |
06 |
單一輸出寄存器 |
寄存器 |
輸出 |
RW |
10 |
多個輸出寄存器 |
寄存器 |
- |
RW |
2B |
設備識別 |
- |
- |
R |
表6: 儀表PAC3200 MODBUS RTU通信功能碼
因此從上述可以得出如果需要讀取輸出寄存器的值時,需要使用模式0的03H功能,即
從寄存器40001到49999來讀取儀表的數據,但是由于儀表PAC3200的寄存器與S7-1200
MODBUS RTU寄存器的不一致性,讀取儀表PAC3200的DATA_ADDR的地址必須從40002開
始。
DATA_LEN:請求訪問數據的長度。位數或字節數。
DATA_PTR:數據指針: 指向要寫入或讀取的數據的 CPU DB 地址。 該DB 必須為
“非僅符號訪問”DB 類型。
NDR: 新數據就緒:
•0 – 事務未完成
•1 – 表示 MB_MASTER 指令已完成所請求的有關 Modbus從站的事務。
BUSY:忙:
•0 – 無正在進行的 MB_MASTER 事務
•1 – MB_MASTER 事務正在進行
ERROR:錯誤:
•0 - 未檢測到錯誤
•1 – 表示檢測到錯誤并且參數 STATUS 提供的錯誤代碼有效。
STATUS:狀態代碼,如下表所示。
表7: MB_MASTER 進行MODBUS RTU通信的狀態代碼
在成功地編譯下載到在S7-1200 PLC中后,可以從變量表中看到儀表PAC3200的三相相電壓數據,如下圖所示。
圖15:在S7-1200中通過MODBUS RTU通信得到的儀表PAC3200的三相相電壓數據
Modbus 主站通信規則:
● 必須先執行 MB_COMM_LOAD 組態端口,然后 MB_MASTER 指令才能與該端口通
信。
● 如果要將某個端口用于初始化 Modbus 主站的請求,則 MB_SLAVE 將不能使用該端
口。MB_MASTER 執行的一個或多個實例可使用該端口。
● Modbus 指令不使用通信中斷事件來控制通信過程。 用戶程序必須輪詢
MB_MASTER 指令以了解傳送和接收的完成情況。
● 如果用戶程序操作 Modbus 主站并使用 MB_MASTER 向從站發送請求,則用戶必須
繼續輪詢(執行 MB_MASTER)直到返回從站的響應。
● 請從同一個 OB(或 OB 優先等級)調用指定端口的所有 MB_MASTER 執行。
3.MODBUS_SLAVE功能塊的編程
由于S7-1200與PAC3200進行MODBUS RTU通信,沒有使用MODBUS_SLAVE功能塊,因此在此只作簡單介紹。
MB_SLAVE 指令允許程序作為 Modbus 從站使用點對點 (PtP, Point-to-Point) CM 1241RS485 或 CM 1241 RS232 模塊上的端口進行通信。 Modbus RTU 主站可以發出請求,然后程序通過執行 MB_SLAVE 來響應。
在程序中放置 MB_SLAVE 指令時,必須分配唯一的背景數據塊。 指定MB_COMM_LOAD 指令中的 MB_DB 參數時會用到該 MB_SLAVE 背景數據塊名稱。
Modbus 通信功能代碼(1、2、4、5 和 15)可以在 PLC 輸入過程映像及輸出過程映像中直接讀寫位和字。
圖16:MB_SLAVE 功能塊
MB_ADDR:Modbus RTU 地址(1 到 247):Modbus 從站的站地址。
MB_HOLD_REG:指向 Modbus 保持寄存器 DB 的指針。 保持寄存器 DB 必須為典型的全局 DB。
注意:在創建此數據塊時,請不要選擇“Symbolic address only僅通過符號地址訪問”。使用“MB_SLAVE”指令時,
NDR:新數據就緒:
•0 – 無新數據
•1 – 表示 Modbus 主站已寫入新數據
DR:數據讀?。?br />
•0 – 無數據讀取
•1 – 表示 Modbus 主站已讀取數據
ERROR:錯誤:
•0 - 未檢測到錯誤
•1 – 表示檢測到錯誤并且參數 STATUS 提供的錯誤代碼有效。
STATUS:錯誤代碼。如下表所示。
表8: MB_SLAVE 進行MODBUS RTU通信的狀態代碼
|