發(fā)布時(shí)間:2019-08-24 來源:眾智博遠(yuǎn)
S7-200做Modbus主站的設(shè)置
S7-200 CPU上的通信口在電氣上是標(biāo)準(zhǔn)的RS-485半雙工串行通信口,此串行字符通信的格式:1個(gè)起始位;7/8位數(shù)據(jù)位;1位奇/偶/無校驗(yàn);1停止位。通信波特率可以設(shè)置為1200、2400、4800、9600、19200、38400、57600或112500,符合這些格式的串行通訊設(shè)備可以和S7-200進(jìn)行自由口通訊,Modbus RTU指令庫就是使用自由口編程實(shí)現(xiàn)的。
4.1.1 Modbus RTU主站庫
使用Modbus 主站指令庫時(shí)需要注意的幾點(diǎn):
需要S7-200的編程軟件是 Micro/WIN V4.0 SP5及以上版本;
Modbus RTU 主站庫對(duì)CPU的版本有要求,CPU 的版本須為 2.00 或者 2.01(即訂貨號(hào)為 6ES721*-***23-0BA*);
Modbus主站可讀/寫的大數(shù)據(jù)量為120個(gè)字(指每一個(gè) MBUS_MSG 指令);
Modbus 主站庫支持Port0和Port1(從站庫只支持Port0口),本例中用Port0;
使用Modbus 庫時(shí)須對(duì)庫存儲(chǔ)區(qū)進(jìn)行分配,見下圖設(shè)置,而且分配的空間不能和程序中其它空間沖突,否則編譯調(diào)用會(huì)報(bào)錯(cuò)。
圖4 庫存儲(chǔ)區(qū)設(shè)置
Modbus主站庫支持的功能碼和地址對(duì)應(yīng)關(guān)系:
Modbus 地址 | 讀 / 寫 | Modbus 從站須支持的功能 |
00001~09999 | 讀 | 功能1:讀輸出點(diǎn) |
數(shù)字量輸出 | 寫 | 功能5:寫單個(gè)輸出點(diǎn) |
功能15:寫多個(gè)輸出點(diǎn) | ||
10001~19999 | 讀 | 功能2:讀輸入點(diǎn) |
數(shù)字量輸入 | ||
30001~39999 | 讀 | 功能4:讀輸入寄存器 |
輸入寄存器 | ||
40001~49999 | 讀 | 功能3:讀保持寄存器 |
保持寄存器 | 寫 | 功能6:寫單個(gè)寄存器 |
功能16:寫多個(gè)寄存器 |
表2需要從站支持的功能
4.1.2 S7-200 Modbus主站編程
編程時(shí),使用SM0.0調(diào)用MBUS_CTRL完成主站的參數(shù)初始化,詳細(xì)見下表,參數(shù)的說明也可以從子程序的局部變量表中找到。
圖5 Modbus RTU 主站初始化
圖中各參數(shù)含義如下
編號(hào) | 符號(hào)/含義 | 說 明 |
a | EN / 使能 | 須保證每一掃描周期都被使能(使用SM0.0)。 |
b | Mode / 模式 | 為1時(shí)使能為Modbus協(xié)議;為0時(shí)恢復(fù)為PPI協(xié)議。 |
c | Baud / 波特率 | 支持的通訊波特率為1200,2400,4800,9600,19200,38400,57600,115200。 |
d | Parity / 校驗(yàn) | 校驗(yàn)方式選擇:0=無校驗(yàn);1=奇校驗(yàn),2=偶校驗(yàn)。 |
e | Timeout / 超時(shí) | 主站等待從站響應(yīng)的時(shí)間,以毫秒為單位,典型的設(shè)置值為 1000毫秒,允許設(shè)置的范圍為1-32767。這個(gè)值須設(shè)置足夠大以保證從站有時(shí)間響應(yīng)。 |
f | Done / 完成位 | 初始化完成,此位會(huì)自動(dòng)置1。 |
g | Error / 錯(cuò)誤位 | 初始化錯(cuò)誤代碼。 |
表3
調(diào)用 Modbus RTU 主站讀寫子程序MBUS_MSG,發(fā)送一個(gè)Modbus 請(qǐng)求。
圖6 調(diào)用Modbus RTU 主站讀寫子程序
圖中各參數(shù)含義如下
編號(hào) | 符號(hào)/含義 | 說 明 |
a | EN / 使能 | 同一時(shí)刻只能有一個(gè)讀寫功能使能。 |
b | First / 讀寫請(qǐng)求位 | 每一個(gè)新的讀寫請(qǐng)求須使用脈沖觸發(fā)。 |
c | Slave / 從站地址 | 可選擇的范圍1–247。 |
d | RW / 讀寫操作位 | 0=讀, 1=寫。 |
e | Addr / 讀寫從站的數(shù)據(jù)地址 | 選擇讀寫的數(shù)據(jù)類型: |
00001 至 0xxxx - 開關(guān)量輸出 | ||
10001 至 1xxxx - 開關(guān)量輸入 | ||
30001 至 3xxxx - 模擬量輸入 | ||
40001 至 4xxxx - 保持寄存器。 | ||
f | Count / 數(shù)據(jù)的個(gè)數(shù) | 通訊的數(shù)據(jù)個(gè)數(shù)(位或字的個(gè)數(shù))。 |
g | DaptPtr / 數(shù)據(jù)指針 | 如果是讀指令,讀回的數(shù)據(jù)放到這個(gè)數(shù)據(jù)區(qū)中; |
如果是寫指令,要寫出的數(shù)據(jù)放到這個(gè)數(shù)據(jù)區(qū)中。 | ||
h | Done / 完成位 | 讀寫功能完成位。 |
i | Error / 錯(cuò)誤代碼 | 只有在Done位為1時(shí),錯(cuò)誤代碼才有效。 |
表4
從上圖中可見,S7-200作為Modbus RTU主站,波特率9.6Kb/s,偶校驗(yàn),連接從站的站地址是3,數(shù)據(jù)存儲(chǔ)區(qū)為VB2000開始的區(qū)域。