Modbus 指令

本節內容:

1、S7-1200 做爲Modbus RTU 主站

2、S7-1200 做爲Modbus RTU 從站

3、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 通訊模塊spa

在硬件目錄裏找到「通訊模塊」→「點到點」→「CM1241(RS485)」,雙擊或拖拽此模塊至CPU左側便可,以下圖1所示:3d

圖1 組態通訊模塊指針

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

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

圖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)。

相關文章
相關標籤/搜索