SIEMENS 長(zhǎng)沙豪乾智能科技有限公司
公司帶來(lái)銷(xiāo)售的產(chǎn)品全部由西門(mén)子直接提供,所有產(chǎn)品保證絕對(duì)原裝,每個(gè)產(chǎn)品都可以到西門(mén)子長(zhǎng)沙辦事處去查驗(yàn)。
我們出售的產(chǎn)品按照西門(mén)子質(zhì)保進(jìn)行保修,(保修期為一年)《選擇長(zhǎng)沙豪乾,是您最明智的決定》。想了解更多內(nèi)容,請(qǐng)來(lái)電,我將為您一一解答。
工作( Q Q ):254598303 136 8731 7079(微信同步)
公司理念:
是專(zhuān)業(yè)從事工業(yè)自動(dòng)化產(chǎn)品銷(xiāo)售和系統(tǒng)集成的高新技術(shù)企業(yè)。在西門(mén)子工控領(lǐng)域,公司以精益求精的經(jīng)營(yíng)理念,從產(chǎn)品、方案到服務(wù),致力于塑造一個(gè)“行業(yè)專(zhuān)家”品牌,以實(shí)現(xiàn)可持續(xù)的發(fā)展。
STEP 7 V13 SP1 軟件版本中的Modbus TCP庫(kù)指令目前最新的版本已升至V4.0,該版本的使用需要具備以下兩個(gè)條件:
1. 軟件版本: STEP 7 V13 SP1及其以上
2. 固件版本: S7-1200 CPU 的固件版本V4.1
圖1. Modbus TCP V4.0 版本指令塊
下面以兩臺(tái)S7-1200之間進(jìn)行Modbus TCP 通信為例,詳細(xì)闡述客戶端與服務(wù)器側(cè)如何編程及通信的過(guò)程。表格列出了具體的實(shí)驗(yàn)環(huán)境:
操作系統(tǒng) |
WIN7 SP1 專(zhuān)業(yè)版 64位 |
編程軟件 |
STEP 7 Professional V13 SP1 Update 5 |
系統(tǒng)硬件 |
1.CPU1215C 6ES7 215-1AG40-0XB0 V4.1
2.CPU1212C 6ES7 212-1AE40-0XB0 V4.1
3.CSM 1277 6GK7 277-1aa10-0aa0
|
表1. Modbus TCP 通信的實(shí)驗(yàn)環(huán)境
CPU類(lèi)型
|
IP地址
|
端口號(hào)
|
硬件標(biāo)識(shí)符
|
|
客戶端
|
CPU 1212C
|
192.168.0.6
|
0
|
64
|
服務(wù)器
|
CPU 1215C
|
192.168.0.4
|
502
|
64
|
表2. Modbus TCP 通信雙方的基本配置
硬件標(biāo)識(shí)符是在“設(shè)備組態(tài)”中,雙擊 PROFINET 接口,然后在“屬性”中的“硬件標(biāo)識(shí)符”中查看。
圖2. S7-1200設(shè)備的PROFINET接口硬件標(biāo)識(shí)符
“MB_SERVER”指令將處理 Modbus TCP 客戶端的連接請(qǐng)求、接收并處理 Modbus 請(qǐng)求并發(fā)送響應(yīng)。
1. 在“ 程序塊-> OB 1"中調(diào)用“MB_SERVER”指令塊,然后會(huì)生成相應(yīng)的背景DB塊,點(diǎn)擊確定,如圖3所示。
圖3. 調(diào)用MB_SERVER指令塊
該功能塊的各個(gè)引腳定義如下:
DISCONNET |
為0代表被動(dòng)建立與客戶端的通信連接;為1代表終止連接。 |
MB_HOLD_REG | 指向 Modbus 保持寄存器的指針。 |
CONNECT | 指向連接描述結(jié)構(gòu)的指針。TCON_IP_v4(S7-1200) |
NDR | 為0代表無(wú)數(shù)據(jù);為1代表從 Modbus 客戶端寫(xiě)入新的數(shù)據(jù)。 |
DR | 為0代表無(wú)讀取的數(shù)據(jù);為1代表從 Modbus 客戶端讀取的數(shù)據(jù) |
ERROR | 錯(cuò)誤位:0:無(wú)錯(cuò)誤;1:出現(xiàn)錯(cuò)誤,錯(cuò)誤原因查看STATUS。 |
STATUS | 指令的詳細(xì)狀態(tài)信息。 |
表3. MB_SERVER 各個(gè)引腳定義說(shuō)明
2. CONNECT 引腳的指針類(lèi)型
第一步,先創(chuàng)建一個(gè)新的全局?jǐn)?shù)據(jù)塊 DB2,如圖4所示:
圖4. 創(chuàng)建全局?jǐn)?shù)據(jù)塊
第二步,雙擊打開(kāi)新生成的 DB2 數(shù)據(jù)塊,定義變量名稱(chēng)為“ss",數(shù)據(jù)類(lèi)型為“TCON_IP_v4”(可以將 TCON_IP_v4 拷貝到該對(duì)話框中),然后點(diǎn)擊“回車(chē)”按鍵。該數(shù)據(jù)類(lèi)型結(jié)構(gòu)創(chuàng)建完畢。如圖5所示:
圖5. 創(chuàng)建 MB_SERVER 中的 TCP 連接結(jié)構(gòu)的數(shù)據(jù)類(lèi)型
各個(gè)引腳定義說(shuō)明如下:
InterfaceId | 硬件標(biāo)識(shí)符。(設(shè)備組態(tài)中查詢) |
ID |
連接ID,取值范圍1~4095 |
Connection Type | 連接類(lèi)型。TCP連接默認(rèn)為:16#0B |
ActiveEstablished | 建立連接。主動(dòng)為1(客戶端),被動(dòng)為0(服務(wù)器)。 |
ADDR | 服務(wù)器側(cè)的IP地址 |
RemotePort | 遠(yuǎn)程端口號(hào) |
LocalPort | 本地端口號(hào) |
表4. TCON_IP_v4 數(shù)據(jù)結(jié)構(gòu)的引腳定義
客戶端側(cè)的IP地址為192.168.0.6,端口號(hào)為0,所以 MB_SERVER 服務(wù)器側(cè)該數(shù)據(jù)結(jié)構(gòu)的各項(xiàng)值如圖6所示。
圖6. MB_SERVER 服務(wù)器側(cè)的 CONNECT 數(shù)據(jù)結(jié)構(gòu)定義
3. S7-1200 服務(wù)器側(cè) MB_SERVER 編程
調(diào)用MB_SERVER指令塊,實(shí)現(xiàn)被客戶端讀取2個(gè)保持寄存器的值,如圖7所示。
圖7. MB_SERVER 服務(wù)器側(cè)編程
注意:MB_HOLD_REG 指定的數(shù)據(jù)緩沖區(qū)可以設(shè)為 DB 塊或 M 存儲(chǔ)區(qū)地址。DB 塊可以為優(yōu)化的數(shù)據(jù)塊,也可以為標(biāo)準(zhǔn)的數(shù)據(jù)塊結(jié)構(gòu)。
S7-1200 MODBUS TCP 服務(wù)器側(cè)準(zhǔn)備數(shù)據(jù),用于客戶端讀訪問(wèn),如圖8所示。
圖8. 服務(wù)器側(cè)監(jiān)控表
S7-1200 MODBUS TCP 客戶端側(cè),給 MB_CLIENT 指令塊中 REQ 引腳一個(gè)上升沿,監(jiān)控?cái)?shù)據(jù)讀取成功。如圖9所示。
圖9. 客戶端側(cè)監(jiān)控表
Modbus TCP是標(biāo)準(zhǔn)的網(wǎng)絡(luò)通信協(xié)議,通過(guò)CPU上PN接口進(jìn)行TCP/IP通信,不需要額外的通信硬件模塊,Modbus TCP使用開(kāi)放式用戶通信連接作為Modbus通信路徑,所支持的混合客戶機(jī)和服務(wù)器連接數(shù)最大為CPU所允許的最大開(kāi)放式用戶通信連接數(shù)8個(gè)。
軟件 STEP7 V11 SP1版本開(kāi)始,S7-1200CPU 從Firmware V1.0.2開(kāi)始,不再需要安裝Modbus TCP的庫(kù)文件,可以直接調(diào)用Modbus TCP的庫(kù)指令“MB_CLIENT”和“MB_SERVER”使用實(shí)現(xiàn)Modbus TCP通信功能,如圖1.所示。
圖1. Modbus TCP的庫(kù)指令
MB_CLIENT 進(jìn)行客戶機(jī)和服務(wù)器TCP連接、發(fā)送命令消息、接收響應(yīng)以及控制服務(wù)器的斷開(kāi)。
1.調(diào)用MB_CLIENT通信指令,進(jìn)入 “Program blocks” > “OB1” 主程序中,調(diào)用MODBUS TCP客戶機(jī)指令,如圖2.所示。
圖2. MB_CLIENT通信指令
功能塊參數(shù)意義如下表1.:
管腳 | 說(shuō)明 |
REQ | 使能: False-無(wú)Modbus通訊請(qǐng)求,True-請(qǐng)求與服務(wù)器通訊,Done完成位來(lái)后才可以執(zhí)行下次請(qǐng)求,建議采用上升沿觸發(fā)請(qǐng)求; |
DISCONNECT | 控制與服務(wù)器建立和終止連接:0-建立與指定IP地址和端口號(hào)的通訊連接,默認(rèn)為0;1-斷開(kāi)通訊連接,在終止連接的過(guò)程中,不執(zhí)行任何其他功能; |
CONNECT_ID | 連接的ID號(hào):每個(gè)連接只有一個(gè)唯一的ID號(hào); |
IP_OCTET_1~4 | 服務(wù)器的IP地址: 如圖2.中通訊對(duì)方的IP地址是192.168.0.210; |
IP_PORT | 服務(wù)器上使用TCP/IP協(xié)議與客戶端建立通訊的IP端口號(hào),默認(rèn)值:502; |
MB_MODE | 選擇請(qǐng)求模式(讀取、寫(xiě)入或診斷),具體對(duì)照參照表1.; |
MB_DATA_ADDR | 訪問(wèn)數(shù)據(jù)的起始地址; |
MB_DATA_LEN | 數(shù)據(jù)長(zhǎng)度:數(shù)據(jù)訪問(wèn)的位數(shù)或字?jǐn)?shù); |
MB_DATA_PRT | 指向Modbus數(shù)據(jù)寄存器的指針:用于緩存從Modbus服務(wù)器接收的數(shù)據(jù)或?qū)l(fā)送到Modbus服務(wù)器數(shù)據(jù)的緩沖區(qū),可以是DB塊或M區(qū),如果是DB塊則需要定義為“標(biāo)準(zhǔn)與S7- 300/400兼容”的類(lèi)型,見(jiàn)下圖3; |
DONE | 完成位:作業(yè)完成,無(wú)錯(cuò)誤,該位置1; |
BUSY | 作業(yè)狀態(tài)位:0-當(dāng)前沒(méi)有正在處理的“MB_CLIENT”作業(yè);1-“MB_CLIENT”作業(yè)正在處理; |
ERROR | 錯(cuò)誤位:0-無(wú)錯(cuò)誤;1-出現(xiàn)錯(cuò)誤,錯(cuò)誤原因查看STATUS; |
STATUS | 錯(cuò)誤代碼; |
表1. 功能塊參數(shù)意義
2.MB_DATA_PTR數(shù)據(jù)塊的新建
通過(guò)“Program blocks”>“Add new block”,選擇“Data block”創(chuàng)建 DB 塊,選擇“標(biāo)準(zhǔn)與S7- 300/400兼容” ,點(diǎn)擊“OK”鍵,定義數(shù)據(jù)區(qū)為100個(gè)字的數(shù)組,如圖3.所示。
圖3. 創(chuàng)建MB_DATA_PTR數(shù)據(jù)塊
3. MB_MODE、MB_DATA_ADDR和功能碼的關(guān)系
MB_CLIENT指令中,MB_MODE、MB_DATA_ADDR和MB_DATA_LEN三個(gè)參數(shù)組合定義了當(dāng)前Modbus消息中所用的功能代碼,如表2.。
Modbus 功能 | MB_MODE | MB_DATA_ADDR | 操作和數(shù)據(jù)類(lèi)型 | 數(shù)據(jù)長(zhǎng)度 |
FC01 | 0 | 00001~09999 | 讀取輸出位 每個(gè)請(qǐng)求1~2000個(gè)位 | 1~2000 |
FC02 | 0 | 10001~19999 | 讀取輸入位 每個(gè)請(qǐng)求1~2000個(gè)位 | 1~2000 |
FC03 | 0 | 40001~49999 或 400001~465535 | 讀取保持寄存器 每個(gè)請(qǐng)求1~125個(gè)字 | 1~125 |
FC04 | 0 | 30001~39999 | 讀取輸入字 每個(gè)請(qǐng)求1~125個(gè)字 | 1~125 |
FC05 | 1 | 00001~09999 | 寫(xiě)一個(gè)輸出位 每個(gè)請(qǐng)求1個(gè)位 | 1 |
FC06 | 1 | 40001~49999 或 400001~465535 | 寫(xiě)一個(gè)保持寄存器 每個(gè)請(qǐng)求1個(gè)字 | 1 |
FC15 | 1 | 00001~09999 | 寫(xiě)多個(gè)輸出位 每個(gè)請(qǐng)求2~1968個(gè)位 | 2~1968 |
FC16 | 1 | 40001~49999 或 400001~465535 | 寫(xiě)多個(gè)保持寄存器 每個(gè)請(qǐng)求2~123個(gè)字 | 2~123 |
FC15 | 2 | 00001~09999 | 寫(xiě)一個(gè)或多個(gè)輸出位 每個(gè)請(qǐng)求1~1968個(gè)位 | 1~1968 |
FC16 | 2 | 40001~49999 或 400001~465535 | 寫(xiě)一個(gè)或多個(gè)保持寄存器 每個(gè)請(qǐng)求1~123個(gè)字 | 1~123 |
FC11 | 11 | 讀取服務(wù)器通信狀態(tài)字和事件計(jì)數(shù)器:狀態(tài)字反映處理狀態(tài)(0-未處理;0XFFFF-處理中);每次成功發(fā)送一條消息后,事件計(jì)數(shù)器都將遞增。執(zhí)行功能時(shí),MB_CLIENT指令的MB_DATA_ADDR和MB_DATA_LEN參數(shù)都將被忽略。 | 0 | |
FC08 | 80 | 通過(guò)數(shù)據(jù)診斷代碼0X0000檢查服務(wù)器狀態(tài) 每次請(qǐng)求1個(gè)字 | 1 | |
FC08 | 81 | 通過(guò)數(shù)據(jù)診斷代碼0X000A重新設(shè)置服務(wù)器事件計(jì)數(shù)器 每次請(qǐng)求1個(gè)字 | 1 | |
3~10、12~79、82~255 | 保留 |
表2. MB_MODE、MB_DATA_ADDR和功能碼的關(guān)系
如上例中S7-1200作客戶機(jī),用FC03功能碼讀取服務(wù)器的兩個(gè)字,起始從Modbus地址40001開(kāi)始,接收的數(shù)據(jù)存放在緩沖區(qū)DB3.DBX0.0開(kāi)始區(qū)域,設(shè)置如上:MB_MODE=0,MB_DATA_ADDR=40001,MB_DATA_LEN=2,對(duì)應(yīng)關(guān)系為:40001->DB3.DBW0 ,40002->DB3.DBW2。
4.服務(wù)器端Modbus Slave 軟件設(shè)置
注意:服務(wù)器采用Modbus Slave軟件測(cè)試,該軟件是第三方軟件,可以從 internet 網(wǎng)絡(luò)上下載。
首先將測(cè)試電腦的IP地址設(shè)置成192.168.0.210,如圖4.所示,打開(kāi)Modbus Slave 軟件,在Modbus Slave的“Set up->Slave Definition”中設(shè)置功能碼、起始地址、長(zhǎng)度等,如圖5.所示。
圖4. 電腦的IP地址設(shè)置
圖5. 服務(wù)器端Modbus Slave軟件設(shè)置
創(chuàng)建Modbus TCP/IP連接,在“Connection->connect...”中打開(kāi)連接屬性對(duì)話框,選擇“Modbus TCP/IP” ,TCP/IP Server Port本地服務(wù)器端口為502,并可以勾選“Ignore Unit ID”選項(xiàng),如圖6.所示。
圖6. 連接屬性
注意:圖5.中的Slave ID 是服務(wù)器的站地址,和客戶機(jī)中“MB_CLIENT” 中的“CONNECT_ID” 不是一個(gè)概念,實(shí)際上與客戶機(jī)中“MB_CLIENT”的背景數(shù)據(jù)塊中的STAT變量“MB_UNIT_ID”需要一致,在1200中該地址默認(rèn)為16#00FF,如圖7 所示,可以在變量表中修改與實(shí)際服務(wù)器站地址一致。如果在圖6中勾選“Ignore Unit ID”,則不需要考慮一致情況,如果不勾選,則需要修改一致。
圖7. 客戶機(jī)中“MB_CLIENT”的背景數(shù)據(jù)塊中的STAT變量“MB_UNIT_ID”
5.通訊測(cè)試
S7-1200作客戶機(jī),用FC03功能碼讀取服務(wù)器的兩個(gè)字,設(shè)置客戶機(jī)和服務(wù)器的功能、起始地址、端口等參數(shù)相對(duì)應(yīng),具體設(shè)置如上,設(shè)置M5.0和M0.0為1,觸發(fā)請(qǐng)求,如圖8.所示。
圖8. S7-1200作客戶機(jī),用FC03功能碼讀取服務(wù)器的兩個(gè)字
通訊結(jié)果如圖9.所示,從服務(wù)器讀到數(shù)據(jù)20,30到客戶機(jī)的DB3.DBW0和DB3.DBW2區(qū)域。
圖9. 通訊結(jié)果
6.MB_CLIENT 參數(shù) STATUS 錯(cuò)誤代碼查詢參考下面兩個(gè)列表3.和表4.。
STATUS(W#16#) | 響應(yīng)Modbus客戶機(jī)的代碼(B#16#) | 錯(cuò)誤說(shuō)明 |
8381 | 01 | 不支持功能代碼 |
8382 | 03 | 數(shù)據(jù)長(zhǎng)度錯(cuò)誤 |
8383 | 02 | 數(shù)據(jù)地址錯(cuò)誤或訪問(wèn)的數(shù)據(jù)超出MB_DATA_PRT的地址區(qū) |
8384 | 03 | 數(shù)據(jù)值錯(cuò)誤 |
8385 | 03 | 不支持診斷錯(cuò)誤代碼(功能代碼08) |
表3. 協(xié)議錯(cuò)誤代碼
STATUS(W#16#) | 錯(cuò)誤說(shuō)明 |
7001 | MB_CLIENT 正在等待Modbus服務(wù)器響應(yīng)指定TCP端口處的連接或斷開(kāi)連接請(qǐng)求,僅在第一次執(zhí)行連接或斷開(kāi)操作時(shí)才報(bào)告此代碼 |
7002 | MB_CLIENT 正在等待Modbus服務(wù)器響應(yīng)指定TCP端口處的連接或斷開(kāi)連接請(qǐng)求,等待連接或斷開(kāi)操作完成時(shí),將針對(duì)任何后續(xù)執(zhí)行報(bào)告此代碼 |
7003 | 斷開(kāi)操作已成功完成(僅在一個(gè)PLC掃描周期內(nèi)有效) |
80C8 | 服務(wù)器在指定的時(shí)間內(nèi)無(wú)響應(yīng),請(qǐng)檢查與Modbus服務(wù)器設(shè)備的連接,嘗試過(guò)任何組態(tài)的重試操作后,才報(bào)告此錯(cuò)誤 |
8188 | 參數(shù)MB_MODE的值無(wú)效 |
8189 | 參數(shù)MB_DATA_ADDR的值無(wú)效 |
818A | 參數(shù)MB_DATA_LEN的長(zhǎng)度無(wú)效 |
818B | 參數(shù)MB_DATA_PTR中的指針無(wú)效 |
818C | 參數(shù)MB_DATA_PTR指向優(yōu)化的區(qū)域,必須為“標(biāo)準(zhǔn)與S7- 300/400兼容”的DB或M區(qū) |
8200 | 端口正在處理另一個(gè)Modbus請(qǐng)求 |
8380 | 接收到的Modbus楨有缺陷或接收到的字節(jié)太少 |
8387 | 指定的連接ID與用于先前請(qǐng)求的ID不同,只能有一個(gè)單個(gè)連接ID與每個(gè)MB_CLIENT背景數(shù)據(jù)塊配合使用 |
8388 | Modbus服務(wù)器返回一些和請(qǐng)求內(nèi)容不同的數(shù)據(jù),這只適合Modbus功能15或16 |
表4. 參數(shù)錯(cuò)誤代碼
除了上面列出的MB_CLIENT錯(cuò)誤外,也可以從底層傳輸通信指令(TCON、TDISCON、TSEND和T