Modbus 指令


本節內容:

一、S7-1200 作為Modbus RTU 主站

二、S7-1200 作為Modbus RTU 從站

三、S7-1200 作為Modbus RTU 主站

 

 

S7-1200 作為Modbus RTU 主站

S7-1200 支持Modbus RTU通信模式的模塊可作為Modbus RTU主站。以下以 CPU1215C DC/DC/DC和CM1241 RS485 模塊為例,介紹S7-1200 Modbus RTU 主站通信組態及編程步驟。

硬件和軟件需求及所完成的通信任務:

硬件:
① CPU1215C DC/DC/DC (訂貨號: 6ES7 215-1AG31-0XB0)
② CM1241 RS485 (訂貨號:6ES7 241-1CH30-0XB0)
③ PS 307電源(訂貨號:6ES7307-1KA02-0AA0) 
④ PC(帶以太網卡) 
⑤ TP以太網電纜

軟件:
① STEP 7 Professional V11 SP2 UPD4+HSP
② ModSim(該軟件是第三方軟件,可以從 Internet 網絡下載)

所完成的通信任務:
將Modbus RTU從站ModSim中Modbus地址從40001開始的5個字中的數據,分別讀取到Modbus RTU主站CPU1215C 中地址從DB1.DBW0開始的5 個字中。

1.組態Modbus RTU 通信模塊

在硬件目錄里找到“通信模塊”→“點到點”→“CM1241(RS485)”,雙擊或拖拽此模塊至CPU左側即可,如下圖1所示:

圖1 組態通信模塊

接下來,在“設備視圖”中用鼠標選中CM1241(RS485)模塊,在“屬性”→“端口組態”中配置此模塊硬件接口參數。如下圖2所示:

以下以傳輸率=9.6Kbps,奇偶校驗=無奇偶校驗,數據位=8位字符,停止位=1,其它保持默認設置為例。

圖2 RS485 端口設置

最后在“硬件標識符”里確認一下硬件標識符為271,如下圖3所示:

圖3 硬件標識符

2.添加啟動OB

在項目樹下選擇“CPU1215C DC/DC/DC”→“程序塊”→“添加新塊”,在彈出的窗口中選擇“OB 組織塊”→ “Startup”,添加啟動OB 100,如下圖4所示:

圖4 添加啟動OB

3.調用MB_COMM_LOAD指令

為使端口一啟動就被設置為Modbus RTU通信模式,可在OB 100中調用“MB_COMM_LOAD”指令。調用“MB_COMM_LOAD”指令時會自動彈出創建相應背景數據塊的界面,如下圖5所示:

圖5 調用MB_COMM_LOAD指令

點擊“確認”為該指令創建背景數據塊后,為各輸入/輸出引腳分配地址。尤其需注意MB_DB輸入引腳需指向“MB_MASTER”指令的背景數據塊,如下圖6所示:

注意: “MB_COMM_LOAD”指令輸入位“REQ”需使用上升沿觸發。由於OB 100只在S7-1200啟動時執行一次,因此,此例中將“REQ”設為“TRUE”。

圖6 MB_COMM_LOAD指令

MB_COMM_LOAD指令參數意義如下表1所示:

引腳

說明

EN

使能端

REQ

在上升沿執行該指令

PORT

通信端口的硬件標識符

BAUD

波特率選擇:3600,6000,12000,2400,4800,9600,19200,38400,57600,76800,115200 (注意:所有其它值均無效)

PARITY

奇偶檢驗選擇:0-無;1-奇校驗;2-偶校驗

FLOW_CTRL

流控制選擇:0-(默認值)無流控制

RTS_ON_DLY

RTS延時選擇:0-(默認值)

RTS_OFF_DLY

RTS關斷延時選擇:0-(默認值)

RESP_TO

響應超時: 默認值 = 1000 ms。MB_MASTER 允許用於從站響應的時間(以毫秒為單位)。

MB_DB

對 MB_MASTER 或 MB_SLAVE 指令所使用的背景數據塊。

DONE

完成位:指令執行完成且未出錯置1

ERROR

錯誤位:0-未檢測到錯誤;1-檢測到錯誤。在參數STATUS中輸出錯誤代碼。

STATUS

表1 MB_COMM_LOAD指令參數意義

4.創建DATA_PTR數據發送、接收緩沖區

通過“程序塊”→ “添加新塊”,選擇“數據塊(DB)”創建 DB 塊,選擇“標准與S7- 300/400兼容” ,點擊“確認”鍵。在DB中創建數據類型為5個字的數組,如下圖7所示:

注意:DATA_PTR數據發送、接收緩沖區使用的DB訪問類型必須是標准與S7- 300/400兼容。

圖7 創建DATA_PTR 數據發送、接收緩沖區

5.調用MB_MASTER指令

在OB1中調用“MB_MASTER”指令,調用該指令時會自動彈出創建相應背景數據塊的界面,如下圖8所示:

圖8 調用MB_MASTER指令

點擊“確認”為該指令創建背景數據塊后,並為各輸入/輸出引腳分配地址,如下圖9所示:

注意:“MB_MASTER”指令的輸入位“REQ”必須使用上升沿觸發。

以下以S7-1200作為Modbus RTU主站,用F03功能碼讀取Modbus RTU從站2,從Modbus地址40001開始的五個字,接收的數據存放在緩沖區DB3.DBW0開始區域為例。設置如下所示:MB_ADDR=2,MODE=0,DATA_ADDR=40001,DATA_LEN=5。

地址對應關系如下表2所示:

Modbus RTU主站CPU1215C 數據緩沖區地址 Modbus RTU從站Modbus地址
DB3.DBW0 40001
DB3.DBW2 40002
DB3.DBW4 40003
DB3.DBW6 40004
DB3.DBW8 40005

表2 Modbus地址對應關系

圖9 MB_MASTER指令

MB_MASTER指令參數意義如下表3所示:

引腳 說明

EN

使能端

REQ

在上升沿執行該指令,請求將數據發送或讀取到Modbus從站

MB_ADDR

Modbus RTU從站地址。默認地址范圍:0至247;擴展地址范圍:0至65535。值0被保留用於將消息廣播到所有Modbus從站。

MODE

模式選擇:指定請求類型

DATA_ADDR

從站中的起始地址:指定Modbus從站中將供訪問的數據的起始地址。

DATA_LEN

數據長度:指定要在該請求中訪問的位數或字數。

DATA_PTR

數據指針: 指向要寫入或讀取的數據的 M 或 DB 地址(DB訪問類型必須是標准與S7-300/400兼容)。

DONE

完成位:上一請求已完成且沒有出錯后,DONE 位將保持為 TRUE 一個掃描周期時間。

BUSY

0 – 無正在進行的 MB_MASTER 操作; 1 – MB_MASTER 操作正在進行

EEROR

錯誤位: 上一請求因錯誤而終止后,ERROR 位將保持為 TRUE 一個掃 
描周期時間。 STATUS 參數中的錯誤代碼值僅在 ERROR =TRUE 的一個掃描周期內有效。

STATUS

錯誤代碼

表3 MB_MASTER指令參數意義

關於MODE,DATA_ADDR,DATA_LEN可在下表4中查看:

MB_MASTER Modbus功能
 

Modbus地址參數

地址類型

Modbus數據長度參數

Modbus功能

模式0

讀取

00001到09999

輸出位

1到2000

01

10001到19999

輸入位

1到2000

02

30001到39999

輸入寄存器

1到125

04

40001到49999

400001到465535(擴展)

保持寄存器

1到125

03

模式1
寫入

00001到09999

輸出位

1(單個位)

05

40001到49999

400001到465535(擴展)

保持寄存器

1(單個字)

06

00001到09999

輸出位

2到1968

15

40001到49999

400001到465535(擴展)

保持寄存器

2到123

16

模式2
有些Modbus從站不支持使用Modbus功能05H或06H寫入單個位或字。在這樣的情況下,可通過模式2強制使用Modbus功能15H或16H寫入單個位或字

寫入

 

00001到09999

輸出位

2到1968

15

40001到49999

400001到465535(擴展)

保持寄存器

1到123

16

模式11

讀出從站的通信狀態字和事件計數器:狀態字指示指令的執行狀態(0:未在執行;0xFFFF:正在執行)。 每次成功傳送一條消息時,事件計數器值將遞增。使用該功能時,忽略“MB_MASTER”指令的 DATA_ADDR 和 DATA_LEN 參數。

模式80

通過讀取錯誤代碼 (0x0000) 檢查從站狀態:每個請求1個字

模式81

通過診斷代碼 0x000A 復位從站的事件計數器:每個請求1個字

表4 MB_MASTER Modbus功能表

6. Modbus 從站軟件設置

注意:Modbus RTU從站采用ModSim軟件測試,該軟件是第三方軟件,可以從 Internet 網絡下載。

在打開的ModSim軟件中建立連接,並設置RTU模式的參數:波特率Baud=9600,數據位Data=8,停止位Stop=1,校驗Parity=NONE,如下圖10所示:

圖10 建立ModSim連接

選擇“File”→“New”打開ModSim通信界面,設置Modbus RTU從站的地址Device Id=2,開始地址Address=0001,數據長度Length=5,Modbus數據類型功能碼03。分別雙擊各Modbus地址后的數據區,出現“Write Register"對話框,在此寫入數據值,如下圖11所示:

注意:Device Id設置必須與“MB_MASTER”指令中輸入引腳“MB_ADDR”設置的地址一致。

圖11 設置ModSim

7. Modbus RTU測試結果

在STEP 7 Professional V11 UPD4軟件中打開該項目CPU1215C DC/DC/DC的“監控表”,觸發“MB_MASER”指令的輸入位M10.0。Modbus RTU主站將ModSim從站地址40001中的數值11,40002中的數值12,40003中的數值13,40004中的數值14,40005中的數值15,分別讀取到了地址DB3.DBW0,DB3.DBW2,DB3.DBW4,DB3.DBW6,DB3.DBW8中,如下圖12所示:

圖12 Modbus RTU測試結果

S7-1200 Modbus RTU通信模式的多地址或多站點輪詢

多個CM 1241 RS485 通訊模塊之間可以使用 PROFIBUS 電纜相互連接。可以將 1 個主站和最多 31 個 MODBUS 從站使用 PROFIBUS 電纜連接組網。

S7-1200 Modbus RTU輪詢需要通過上一條”MB_MASTER“指令輸出位“Done“=1來觸發下一條“MB_MASTER“指令。具體說明及編程思路請參考以下鏈接:

如何使用STEP 7(TIA Portal)V11為SIMATIC S7-1200建立Modbus RTU通訊?

http://support.automation.siemens.com/CN/view/zh/47756141

MB_COMM_LOAD和MB_MASTER指令STATUS錯誤代碼

STATUS(W#16#) 說明
0000 端口無錯誤
8180 端口ID值無效
8181 波特率值無效
8182 奇偶校驗值無效
8183 流控制值無效
8184 響應超時值無效
8185 MB_DB參數不是MB_MASTER或MB_SLAVE的背景數據塊

表5 MB_COMM_LOAD指令STATUS錯誤代碼

 

STATUS(W#16#)
說明
0000
無錯誤
80C8
從站超時。檢查波特率,奇偶校驗和從站的接線
80D1
接收方發出了暫停主動傳輸的流控制請求並在指定的等待時間內未重新激活該傳輸。

如果接收方在等待時間內未檢測到 CTS,則在硬件流控制期間也會生成該錯誤。

80D2
由於沒有從 DCE 接收到 DSR 信號,傳送請求終止
80E0
接收緩沖區已滿,消息被終止
80E1
奇偶校驗錯誤,消息被終止
80E2
組幀錯誤,消息被終止
80E3
超時錯誤,消息被終止
80E4
指定長度超出總緩沖區大小,消息被終止
8180
無效端口ID值
8186
Modbus站地址無效
8188

對於廣播調用,參數 MODE 的值無效。

8189
數據地址值無效
818A
數據長度值無效
818B
指向本地數據源/目標的指針無效
818C
DATA_PTR的指針無效:使用指向位存儲區或訪問類型為“標准 - 與 S7-300/400 兼容”的數據塊的指針。
8200
端口正忙於處理傳送請求

表6 MB_MASTER指令STATUS錯誤代碼(指令的通信和組態錯誤消息)

 

STATUS(W#16#) 從站的響應代碼
說明
8380 -
CRC錯誤
8381 01
不支持此功能碼
8382 03
數據長度錯誤
8383 02

數據地址錯誤或地址超出 DATA_PTR 的有效范圍

8384 >03
數據值錯誤
8385 03
不支持此數據診斷代碼
8386 -
響應中的功能代碼與傳送中的功能代碼不匹配
8387 -
響應的從站錯誤
8388 -
從站對寫請求的響應不正確

表7 MB_MASTER指令STATUS錯誤代碼(Modbus 協議的錯誤消息)

常問問題:

如何檢查S7-1200 通信模塊CM1241是否已被成功設置為Modbus RTU通信模式?

可在程序或監控表中查看“MB_COMM_LOAD”指令的輸出位“DONE”,“ERROR”以及“STATUS”狀態來判斷S7-1200 通信模塊CM1241是否已被成功設置為Modbus RTU通信模式。

  • 如果該模塊被成功設置為Modbus RTU通信模式:“MB_COMM_LOAD”指令輸出位“DONE”=1,“ERROR”=0,輸出狀態字“STATUS”=0;
  • 如果該模塊未被成功設置為Modbus RTU通信模式:“MB_COMM_LOAD”指令輸出位“DONE”=0,“ERROR”=1,輸出狀態字“STATUS”輸出錯誤代碼。具體錯誤原因可查看“MB_COMM_LOAD指令STATUS錯誤代碼”表。

執行“MB_MASTER”指令,總是顯示輸出位“Busy”=1,為什么?

因為端口正忙於處理傳送請求。出現該錯誤時請檢查“MB_MASTER“指令輸入位”REQ“是否為上升沿觸發,或是否有其它的多個“MB_MASTER”指令在執行。

通過執行“MB_MASTER”指令無法寫入或讀取Modbus RTU叢站地址的數據,但程序中監視“MB_MASTER”指令錯誤位“Error”=0,錯誤代碼“STATUS”=16#0,為什么?

“MB_MASTER”指令上一請求因錯誤而終止后,ERROR 位將保持為 TRUE 一個掃描周期時間,並且 STATUS 參數中的錯誤代碼值僅在 ERROR =TRUE 的一個掃描周期內有效,因此無法通過程序或監控表查看到。可采用如下所示的編程方式將ERROR 和 STATUS 參數讀出。

S7-1200 作為Modbus RTU 主站,如何對Modbus RTU從站進行0-65535擴展尋址?

通常,“MB_MASTER”指令的背景數據塊“MB_MASTER_DB”中的“EXTENDED_ADDRESSING”默認為0,可以對Modbus RTU從站地址0-247進行訪問。

將“MB_MASTER”指令的背景數據塊“MB_MASTER_DB”中的“EXTENDED_ADDRESSING”設置為1,才能對Modbus RTU從站進行0-65535擴展尋址。可按照如下步驟設置“EXTENDED_ADDRESSING”:

首先找到“系統塊”→“程序資源”,雙擊“MB_MASTER_DB”,在“MB_MASTER”指令的背景數據塊“MB_MASTER_DB”中查看“EXTENDED_ADDRESSING”。

在“監控表”內輸入“MB_MASTER_DB.EXTENDED_ADDRESSING”,將該位置1。

 

 

 

 

 

S7-1200 作為Modbus RTU 從站

S7-1200 支持Modbus RTU通信模式的模塊可作為Modbus RTU從站。以下以 CPU1215C DC/DC/DC和CM1241 RS485為例,介紹S7-1200 Modbus RTU 從站通信組態及編程步驟。

硬件和軟件需求及所完成的通信任務:

硬件:
① CPU1215C DC/DC/DC (訂貨號: 6ES7 215-1AG31-0XB0)
② CM1241 RS485 (訂貨號:6ES7 241-1CH30-0XB0)
③ PS 307電源(訂貨號:6ES7307-1KA02-0AA0) 
④ PC(帶以太網卡) 
⑤ TP以太網電纜

軟件:
① STEP 7 V11 Professional SP2 UPD4 +HSP
② ModScan(該軟件是第三方軟件,可以從 Internet 網絡下載)

所完成的通信任務:
將Modbus RTU從站CPU1215C中地址從DB1.DBW0開始的5 個字中的數據,分別讀取到Modbus RTU主站ModScan中Modbus地址從40001開始的5個字中。

1.組態Modbus RTU 通信模塊

在硬件目錄里找到“通信模塊”→“點到點”“CM1241(RS485)”,雙擊或拖拽此模塊至CPU左側即可,如下圖1所示:

圖1 組態通信模塊

接下來,在“設備視圖”中用鼠標選中CM1241(RS485)模塊,在“屬性”→“端口組態”中配置此模塊硬件接口參數。如下圖2所示:

以下以傳輸率=9.6Kbps,奇偶校驗=無奇偶校驗,數據位=8位字符,停止位=1,其它保持默認設置為例。

圖2 RS485 端口設置

最后在“硬件標識符”里確認一下硬件標識符為271,如下圖3所示:

圖3 硬件標識符

2.添加啟動OB

在項目樹下選擇“CPU1215C DC/DC/DC”→“程序塊”→“添加新塊”,在彈出的窗口中選擇“OB 組織塊”→ “Startup”,添加啟動OB 100,如下圖4所示:

圖4 添加啟動OB

3.調用MB_COMM_LOAD指令

為使端口一啟動就被設置為Modbus RTU通信模式,可在OB 100中調用“MB_COMM_LOAD”指令。調用“MB_COMM_LOAD”指令時會自動彈出創建相應背景數據塊的界面,如下圖5所示:

圖5 調用MB_COMM_LOAD指令

點擊“確認”為該指令創建背景數據塊后,為各輸入/輸出引腳分配地址。尤其需注意MB_DB輸入引腳需指向“MB_SLAVE”指令的背景數據塊,如下圖6所示:

注意:“MB_COMM_LOAD”指令輸入位“REQ”需使用上升沿觸發。由於OB 100只在S7-1200啟動時執行一次,因此,此例中將“REQ”設為“TRUE”。

圖6 MB_COMM_LOAD指令

MB_COMM_LOAD指令參數意義如下表1所示:

引腳

說明

EN

使能端

REQ

在上升沿執行該指令

PORT

通信端口的硬件標識符

BAUD

波特率選擇:3600,6000,12000,2400,4800,9600,19200,38400,57600,76800,115200 (注意:所有其它值均無效)

PARITY

奇偶檢驗選擇:0-無;1-奇校驗;2-偶校驗

FLOW_CTRL

流控制選擇:0-(默認值)無流控制

RTS_ON_DLY

RTS延時選擇:0-(默認值)

RTS_OFF_DLY

RTS關斷延時選擇:0-(默認值)

RESP_TO

響應超時: 默認值 = 1000 ms。MB_MASTER 允許用於從站響應的時間(以毫秒為單位)。

MB_DB

對 MB_MASTER 或 MB_SLAVE 指令所使用的背景數據塊。

DONE

完成位:指令執行完成且未出錯置1

ERROR

錯誤位:0-未檢測到錯誤;1-檢測到錯誤。在參數STATUS中輸出錯誤代碼。

STATUS

表1 MB_COMM_LOAD指令參數意義

4.創建MB_HOLD_REG數據塊

通過“程序塊”→ “添加新塊”,選擇“數據塊(DB)”創建 DB 塊,選擇“標准與S7- 300/400兼容” ,點擊“確認”鍵,定義數據區為5個字的數組,如下圖7所示:

注意:MB_HOLD_REG使用的DB訪問類型必須是標准與S7- 300/400兼容。

圖7 創建MB_HOLD_REG數據塊

5.調用MB_SLAVE指令

在OB1中調用MB_SLAVE指令, 調用該指令時會自動彈出創建相應背景數據塊的界面,如下圖8所示:

圖8 調用MB_SLAVE指令

點擊“確認”為該指令創建背景數據塊后,並為各輸入/輸出引腳分配地址,如下圖9所示:

S7-1200作為Modbus RTU從站,MB_HOLD_REG指向Modbus保持寄存器數據塊的指針。設置如下所示:MB_HOLD_REG=P#DB3.DBX0.0 WORD 5。

對應關系如下表2所示:

Modbus RTU主站Modbus地址 Modbus RTU從站CPU1215C 數據緩沖區地址
40001 DB3.DBW0
40002 DB3.DBW2
40003 DB3.DBW4
40004 DB3.DBW6
40005 DB3.DBW8

表2 Modbus地址對應關系

圖9 MB_SLAVE指令

引腳 說明

EN

使能端

MB_ADDR

Modbus 從站的站地址 。默認地址范圍: 0 至 247;擴展地址范圍: 0 至 65535

MB_HOLD_REG

指向 Modbus 保持寄存器數據塊的指針。 必須使用“標准 - 與 S7-300/400 兼容”訪問類型創建該數據塊。

NDR

新數據就緒:0-無新數據;1-表示Modbus主站已寫入新的數據

DR

數據讀取:0-無數據讀取;1-表示Modbus主站已讀取新的數據

ERROR

錯誤位

STATUS

錯誤代碼

表3 MB_SLAVE指令參數意義

MB_SLAVE Modbus功能 S7-1200
代碼 功能 數據區 地址范圍 數據區 CPU地址
01 讀位 輸出 1到8192 輸出過程映像區 Q0.0到Q1023.7
02 讀位 輸入 10001到18192 輸入映像區 I0.0到I1023.7
04 讀字 輸入 30001到30512 輸入映像區 IW0到IW1022
05 寫位 輸出 1到8192 輸出過程映像區 Q0.0到Q1023.7
15 寫位 輸出 1到8192 輸出過程映像區 Q0.0到Q1023.7

表4 Modbus地址到過程映象區的映射

MB_SLAVE Modbus功能 S7-1200
代碼 功能 數據區 地址范圍 CPU DB數據區 CPU地址
03 讀字 保持寄存器 40001到49999 MB_HOLD_REG 字1到字9999
400001到465535 字1到字65535
06 寫字 保持寄存器 40001到49999 MB_HOLD_REG 字1到字9999
400001到465535 字1到字65535
16 寫字 保持寄存器 40001到49999 MB_HOLD_REG 字1到字9999
400001到465535 字1到字65535

表5 Modbus地址到CPU存儲區的映射

6. Modbus 主站軟件設置

注意:客戶機采用ModScan軟件測試,該軟件是第三方軟件,可以從 Internet 網絡上下載。

首先在打開的ModScan軟件中建立連接,並設置RTU模式的參數:波特率Baud=9600,數據位Data=8,停止位Stop=1,校驗Parity=NONE,如下圖10所示:

圖10 建立ModScan連接

選擇“File”“New” 打開ModScan通信界面,設置Modbus RTU從站的地址Device Id=1,數據開始地址Address=0001,數據長度Length=5,Modbus數據類型功能碼03,如下圖11所示:

注意:Device Id設置必須與“MB_SLAVE”指令中輸入引腳“MB_ADDR”設置的地址一致。

圖11 設置ModScan

7.Modbus RTU測試結果

在STEP 7 V11 Professional SP2 UPD4軟件中打開該項目CPU1215 DC/DC/DC的“監控表”,對DB3.DBW0寫入數值21,DB3.DBW2寫入數值22,DB3.DBW4寫入數值23,DB3.DBW6寫入數值24,DB3.DBW8寫入數值25。ModScan主站將S7-1200 Modbus RTU從站地址DB3.DBW0的數值21,DB3.DBW2的數值22,DB3.DBW4的數值23,DB3.DBW6的數值24,DB3.DBW8的數值25,分別讀取到了地址40001,40002,40003,40004,40005中。如下圖12所示:

圖12 Modbus RTU測試結果

MB_COMM_LOAD和MB_SLAVE指令STATUS錯誤代碼

STATUS(W#16#) 說明
0000 端口無錯誤
8180 端口ID值無效
8181 波特率值無效
8182 奇偶校驗值無效
8183 流控制值無效
8184 響應超時值無效
8185 MB_DB參數不是MB_MASTER或MB_SLAVE的背景數據塊

表6 MB_COMM_LOAD指令STATUS錯誤代碼

 

STATUS(W#16#) 說明
0000 無錯誤
80D1 接收方發出了暫停主動傳輸的流控制請求並且在指定的等待時間內未重新激活該傳輸
80D2 傳送請求終止
80E0 因接收緩沖區滿,消息被終止
80E1 因出現奇偶校驗錯誤,消息被終止
80E2 因組幀錯誤,消息被終止
80E3 因出現超限錯誤,消息被終止
80E4 因指定長度超出總緩沖區大小,消息被終止
8180 無效端口ID值或MB_COMM_LOAD指令出錯
8186 Modbus站地址無效
8187 指向MB_HOLD_REG指針無效
818C 指向M存儲器或DB(DB區域允許符號地址和直接地址)的MB_HOLD_REG指針無效

表7 MB_SLAVE指令STATUS參數意義(通信和組態錯誤)

 

STATUS(W#16#)

從站的響應代碼

說明

8380 無響應 CRC錯誤
8381 01

不支持功能代碼或者在廣播中不支持功能代碼

8382 03 數據長度錯誤
8383 02 數據地址錯誤或地址超出DATA_PTR取的有效范圍
8384 03 數據值錯誤
8385 03 不支持此數據診斷代碼值

表8 MB_SLAVE指令STATUS參數意義(Modbus協議錯誤)

常問問題:

為什么觸發“MB_SLAVE”指令出錯,輸出位“ERROR”=1,輸出狀態字“STATUS”=16#8187?

輸出狀態字”STATUS“=16#8187表示指向MB_HOLD_REG指針無效。以下兩種情況會造成如上錯誤:

  • 程序中不存在“MB_SLAVE”指令的輸入引腳“MB_HOLD_REG”對應的DB塊。
  • 在創建“MB_SLAVE”指令的輸入引腳“MB_HOLD_REG”對應的DB塊時選擇了“僅符號尋址”。

解決方法分別如下:

  • 新建“MB_SLAVE”指令的輸入引腳“MB_HOLD_REG”對應的DB塊。
  • 創建“MB_SLAVE”指令的輸入引腳“MB_HOLD_REG”對應的DB塊時只能選擇了“標准與S7-300/400兼容”。

 

 

 

 

連接超時參數

S7-1200 Mobus RTU通信網絡中包含多個從站站點時,由於輪詢的網絡特性,只能同時讀或寫一個站點數據。因此有如下因素,會影響到最終整體的輪詢時間:

1. 通信速率(波特率)設置時間

2. 每個站點的通信數據量

3. 站點數量

4. 通信距離

5. 各站點連接時間

無論是由於信號干擾,硬件質量引起的從站掉站或是由於工程需要暫時關閉站點,此時都會由於“各站點連接時間”的增加而使通信系統的輪詢時間大大延長。在S7-1200的Modbus RTU通信中,主要有三個參數與“各站點連接時間”的設置相關。

1. 從站響應時間 RESP_TO

如圖1所示,V2.x版本的MB_COMM_LOAD初始化塊可設置從站響應時間RESP_TO參數:

設置單次連接從站的可響應時間,范圍為5ms到65535ms(默認值為1000ms);即如從站在此時間段內未作出響應,則MB_MASTER將在發送指定次數的重試請求后終止請求並提示錯誤信息80C8。

圖1. RESP_TO參數設置

注意:如圖2所示,Modbus從站的執行頻率須至少小於RESP_TO設置的響應時間(需要考慮響應延遲時間),才可以正常通訊。

圖2. 從站響應時間

2.重試次數 RETRIES

在初始化功能塊MB_COMM_LOAD的背景數據塊中,可設置重試次數RETRIES參數:

主站在返回無響應錯誤代碼 0x80C8 之前的重試次數。(默認值為2次) 
注意:此參數表示初次連接無響應后,再次連接的次數;即以默認2次為例,實際嘗試連接次數為3次。

圖3 RETRIES參數設置

注意:在更改RETRIES參數后,需要重新使能MB_COMM_LOAD功能塊的REQ管腳,否則更改參數不生效。

3. 主站定時參數 Blocked_Proc_Timeout

當由於某些原因(如已發出主站請求,但在徹底完成該請求前停止調用主站功能塊時),造成Done及Error均沒有置1時,需要提供一個定時時間,在時間到達后置位,以便執行下一個功能塊或輪詢下一個站點。

MB_Master的背景數據塊中提供了主站定時參數Blocked_Proc_Timeout(范圍0S到5.5S,默認3S)

此前的RESP_TO 是針對從站響應時間的,而Blocked_Proc_Timeout則是針對主站的定時時間,此功能參數用於防止單個 MB_Master 指令獨占或鎖定對端口的訪問。

圖4. Blocked_Proc_Timeout參數設置

常問問題:

由於某一個從站掉站引起的輪詢周期時間延長,如何減小此影響

通常,S7-1200可同時調整兩個參數:從站響應時間 RESP_TO和重試次數 RETRIES,用於減小Modbus從站掉站或暫時關閉而增大的輪詢周期時間。
例:系統默認的嘗試連接次數為3次,每次1S,總計3S;
可根據項目實際工況適當減小從站響應時間RESP_TO。這一時間無法估算,建議多次測試,確認每個從站都能夠正常穩定連接情況下,將此時間設置的盡量小。
以設置500ms為例。再將RETRIES設置為0。即對於每個從站,主站只嘗試連接一次,總計耗時500ms。

MB_MASTER報錯8200(端口正忙於處理傳送請求),如何處理?

此情況是由於MB_MASTER的DONE或ERROR均未置位從而與后續MB_MASTER沖突導致。確保接通下一個MB_MASTER的時間大於Blocked_Proc_Timeout的設定時間(默認3S)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM