- 艾寶物聯(lián)IOBOV? ─ 工業(yè)無(wú)線(xiàn)測(cè)控專(zhuān)家
注意:一個(gè)CPU支持兩個(gè)通信端口同時(shí)做MODBUS RTU主站
一、背景知識(shí)普及概述
1、S7-200 SMART CPU上的通信口0(Port0)通過(guò)指令庫(kù)支持Modbus RTU從站模式。2、S7-200 SMART CPU 上的通訊口0和1(Port0和Port1)通過(guò)指令庫(kù)支持Modbus RTU主站模式。3、S7-200 SMART CPU 上的通訊口0和1(Port0和Port1)不能同時(shí)作為Modbus RTU主站或從站。
S7-200 SMART CPU 本體集成通信口(Port 0)、可選信號(hào)板(Port 1)可以支持Modbus RTU協(xié)議,成為Modbus RTU主站站。此功能是通過(guò) S7-200 SMART的自由口通信模式實(shí)現(xiàn),因此可以通過(guò)無(wú)線(xiàn)數(shù)據(jù)電臺(tái)等慢速通信設(shè)備傳輸。
注:SB CM01(RS485/RS232) 訂貨號(hào):6ES7 288-5CM01-0AA0
S7-200 SMART 軟件的幫助有明確說(shuō)明
打開(kāi)軟件 找到庫(kù) 選擇初始化主站 或者從站程序塊 然后按F1
從站參數(shù)“端口”(Port) 設(shè)置物理通信端口(0 = CPU 中集成的 RS-485,1 = 可選信號(hào)板上的 RS-485 或 RS-232)。主站參數(shù)“端口”(Port)設(shè)置物理通信端口(0 = CPU 中集成的 RS-485,1 = 可選 CM01 信號(hào)板上的 RS-485 或 RS-232)。清晰的寫(xiě)著他們都可以既做主又可以做從
而且兩個(gè)口是獨(dú)立的 既可以同時(shí)做主 可以同時(shí)做從 還可以向你說(shuō)的一個(gè)做主一個(gè)做從
關(guān)鍵詞 “獨(dú)立的”
Modbus RTU 主站協(xié)議
Modbus 主站指令使用以下 CPU 資源:
執(zhí)行 MBUS_CTRL 會(huì)初始化 Modbus 主站協(xié)議,并使分配的 CPU 端口(0 或 1)專(zhuān)用于 Modbus 主站通信。
CPU 端口用于 Modbus 通信時(shí),無(wú)法再將其用于任何其它用途,包括與 HMI 的通信。
Modbus 主站指令會(huì)影響所有與由 MBUS_CTRL 指令分配的端口上的自由端口通信相關(guān)聯(lián)的 SM 位置。
Modbus 主站指令使用中斷執(zhí)行某些功能。 用戶(hù)程序不得禁用這些中斷。
Modbus 主站指令程序大小
3 個(gè)子例程和 1 個(gè)中斷例程
1942 個(gè)字節(jié)的程序空間用于存儲(chǔ)兩個(gè)主站指令和支持例程
Modbus 主站指令的變量需要 286 個(gè)字節(jié)的 V 存儲(chǔ)器塊。該區(qū)域的起始地址由用戶(hù)指定,保留給 Modbus 變量。
說(shuō)明 要將 CPU 通信端口從 Modbus 改回 PPI,以便可與 HMI 設(shè)備通信,應(yīng)將 MBUS_CTRL 指令的模式參數(shù)設(shè)置為零 (0)。
Modbus RTU 從站協(xié)議
Modbus 從站協(xié)議指令使用以下 CPU 資源:
MBUS_INIT 指令會(huì)初始化 Modbus 從站協(xié)議,并使分配的 CPU 端口(0 或 1)專(zhuān)用于 Modbus 從站通信。
CPU 端口用于 Modbus 通信時(shí),無(wú)法再將其用于任何其它用途,包括與 HMI 的通信。
Modbus 從站指令會(huì)影響所有與由 MBUS_INIT 指令分配的端口上的自由端口通信相關(guān)聯(lián)的 SM 位置。
Modbus 從站指令程序大小
Modbus 從站指令使用 3 個(gè)子例程和 2 個(gè)中斷。
Modbus 從站指令需要 2113 個(gè)字節(jié)的程序空間來(lái)存儲(chǔ)兩個(gè)從站指令和支持例程。
Modbus 從站指令的變量需要 786 個(gè)字節(jié)的 V 存儲(chǔ)器塊。該區(qū)域的起始地址由用戶(hù)指定,保留給 Modbus 變量。
說(shuō)明 要將 CPU 通信端口從 Modbus 改回 PPI,以便可與 HMI 設(shè)備通信,應(yīng)將 MBUS_INIT 指令的模式參數(shù)設(shè)置為零 (0)。
二、配置辦法基本步驟
1.打開(kāi) Micro/WIN SMART軟件,在“庫(kù)”中調(diào)用“MBUS_CTRL”和“MBUS_MSG“兩個(gè)子程序;
使用 SM0.0 調(diào)用 MBUS_CTRL 完成主站的初始化,并啟動(dòng)其功能控制

各參數(shù)意義如下:
|
1 |
EN |
使能: |
必須保證每一掃描周期都被使能(使用 SM0.0) |
|---|---|---|---|
|
2 |
Mode |
模式: |
為 1 時(shí),使能 Modbus 協(xié)議功能;為 0 時(shí)恢復(fù)為系統(tǒng) PPI 協(xié)議 |
|
3 |
Baud |
波特率: |
支持的通訊波特率為1200,2400,4800,9600,19200,38400,57600,115200。 |
|
4 |
Parity |
校驗(yàn): |
校驗(yàn)方式選擇 |
|
0=無(wú)校驗(yàn) |
|||
|
1=奇較驗(yàn) |
|||
|
2=偶較驗(yàn) |
|||
| 5 |
Port |
端口號(hào): |
0 = CPU 集成的 RS 485 通訊口 ; 1 = 可選 CM 01 信號(hào)板 。 |
|
6 |
Timeout |
超時(shí): |
主站等待從站響應(yīng)的時(shí)間,以毫秒為單位,典型的設(shè)置值為 1000 毫秒(1 秒),允許設(shè)置的范圍為 1 – 32767。 |
|
注意: 這個(gè)值必須設(shè)置足夠大以保證從站有時(shí)間響應(yīng)。 |
|||
|
7 |
Done |
完成位: |
初始化完成,此位會(huì)自動(dòng)置1??梢杂迷撐粏?dòng) MBUS_MSG 讀寫(xiě)操作(見(jiàn)例程) |
|
8 |
Error |
初始化錯(cuò)誤代碼(只有在 Done 位為1時(shí)有效): |
|
|
0= 無(wú)錯(cuò)誤 |
|||
|
1= 校驗(yàn)選擇非法 |
|||
|
2= 波特率選擇非法 |
|||
|
3= 超時(shí)無(wú)效 |
|||
|
4= 模式選擇非法 |
|||
|
9= 端口無(wú)效 |
|||
|
10= 信號(hào)板端口 1 缺失或未組態(tài) |
2.調(diào)用 Modbus RTU 主站讀寫(xiě)子程序MBUS_MSG,發(fā)送一個(gè)Modbus 請(qǐng)求;

各參數(shù)意義如下:
|
1 |
EN |
使能: |
同一時(shí)刻只能有一個(gè)讀寫(xiě)功能(即 MBUS_MSG)使能 |
|---|---|---|---|
|
注意:建議每一個(gè)讀寫(xiě)功能(即 MBUS_MSG)都用上一個(gè) MBUS_MSG 指令的 Done 完成位來(lái)激活,以保證所有讀寫(xiě)指令循環(huán)進(jìn)行(見(jiàn)例程)。 |
|||
|
2 |
First |
讀寫(xiě)請(qǐng)求位: |
每一個(gè)新的讀寫(xiě)請(qǐng)求必須使用脈沖觸發(fā) |
|
3 |
Slave |
從站地址: |
可選擇的范圍 1 – 247 |
|
4 |
RW |
讀寫(xiě)請(qǐng)求: |
0 = 讀, 1 = 寫(xiě) |
|
注意: |
|||
|
1. 開(kāi)關(guān)量輸出和保持寄存器支持讀和寫(xiě)功能 |
|||
|
2. 開(kāi)關(guān)量輸入和模擬量輸入只支持讀功能 |
|||
|
5 |
Addr |
讀寫(xiě)從站的 |
選擇讀寫(xiě)的數(shù)據(jù)類(lèi)型 |
|
數(shù)據(jù)地址: |
00001 至 0xxxx – 開(kāi)關(guān)量輸出 |
||
|
10001 至 1xxxx – 開(kāi)關(guān)量輸入 |
|||
|
30001 至 3xxxx – 模擬量輸入 |
|||
|
40001 至 4xxxx – 保持寄存器 |
|||
|
6 |
Count |
數(shù)據(jù)個(gè)數(shù) |
通訊的數(shù)據(jù)個(gè)數(shù)(位或字的個(gè)數(shù)) |
|
注意: Modbus主站可讀/寫(xiě)的最大數(shù)據(jù)量為120個(gè)字(是指每一個(gè) MBUS_MSG 指令) |
|||
|
7 |
DataPtr |
數(shù)據(jù)指針: |
1. 如果是讀指令,讀回的數(shù)據(jù)放到這個(gè)數(shù)據(jù)區(qū)中 |
|
2. 如果是寫(xiě)指令,要寫(xiě)出的數(shù)據(jù)放到這個(gè)數(shù)據(jù)區(qū)中 |
|||
|
8 |
Done |
完成位 |
讀寫(xiě)功能完成位 |
|
9 |
Error |
錯(cuò)誤代碼: |
只有在 Done 位為1時(shí),錯(cuò)誤代碼才有效 |
|
0 = 無(wú)錯(cuò)誤 |
|||
|
1 = 響應(yīng)校驗(yàn)錯(cuò)誤 |
|||
|
2 = 未用 |
|||
|
3 = 接收超時(shí)(從站無(wú)響應(yīng)) |
|||
|
4 = 請(qǐng)求參數(shù)錯(cuò)誤(slave address, Modbus address, count, RW) |
|||
|
5 = Modbus/自由口未使能 |
|||
|
6 = Modbus正在忙于其它請(qǐng)求 |
|||
|
7 = 響應(yīng)錯(cuò)誤(響應(yīng)不是請(qǐng)求的操作) |
|||
|
8 = 響應(yīng)CRC校驗(yàn)和錯(cuò)誤 |
|||
|
– |
|||
|
101 = 從站不支持請(qǐng)求的功能 |
|||
|
102 = 從站不支持?jǐn)?shù)據(jù)地址 |
|||
|
103 = 從站不支持此種數(shù)據(jù)類(lèi)型 |
|||
|
104 = 從站設(shè)備故障 |
|||
|
105 = 從站接受了信息,但是響應(yīng)被延遲 |
|||
|
106 = 從站忙,拒絕了該信息 |
|||
|
107 = 從站拒絕了信息 |
|||
|
108 = 從站存儲(chǔ)器奇偶錯(cuò)誤 |
常見(jiàn)的錯(cuò)誤:
如果多個(gè) MBUS_MSG 指令同時(shí)使能會(huì)造成 6 號(hào)錯(cuò)誤
從站 delay 參數(shù)設(shè)的時(shí)間過(guò)長(zhǎng)會(huì)造成主站 3 號(hào)錯(cuò)誤
從站掉電或不運(yùn)行,網(wǎng)絡(luò)故障都會(huì)造成主站 3 號(hào)錯(cuò)誤