Modbus通訊協(xié)議簡介
Modbus是由Modicon(現(xiàn)為施耐德電氣公司的一個品牌)在1979年發(fā)明的,是全球第一個真正用于工業(yè)現(xiàn)場的總線協(xié)議。
ModBus網(wǎng)絡是一個工業(yè)通信系統(tǒng),由帶智能終端的可編程序控制器和計算機通過公用線路或局部專用線路連接而成。其系統(tǒng)結構既包括硬件、亦包括軟件。它可應用于各種數(shù)據(jù)采集和過程監(jiān)控。
ModBus網(wǎng)絡只有一個主機,所有通信都由他發(fā)出。網(wǎng)絡可支持247個之多的遠程從屬控制器,但實際所支持的從機數(shù)要由所用通信設備決定。采用這個系統(tǒng),各PC可以和中心主機交換信息而不影響各PC執(zhí)行本身的控制任務。
1 MODBUS RTU協(xié)議在S7-200中的應用原理
1.1 MODBUSRTU協(xié)議與S7-200相互關系簡介
S7-200 CPU上的通訊口Port0可以支持MODBUS RTU協(xié)議,成為MODBUS RTU從站。此功能是通過S7-200的自由口通訊模式實現(xiàn),因此可以通過無線數(shù)據(jù)電臺等慢速通訊設備傳輸。
想在S7-200 CPU與其他支持MODBUS RTU的設備使用MODBUS RTU協(xié)議通訊,需要由有S7-200 CPU做MODBUS主站。S7-200 CPU做主站必須由用戶自己用自由口模式,按相關協(xié)議編程。
2 從站指令的用法:
S7-200控制系統(tǒng)應用中,MODBUS RTU從站指令庫只支持CPU上的通訊0口(Port0)。要實現(xiàn)MODBUS RTU通訊,需要Step7-Micro/WIN32V3.2以上版本的編程軟件,而且須安裝Step7-Micro/WIN32V3.2 Instruction Library(指令庫)。MODBUS RTU功能是通過指令庫中預先編好的程序功能塊實現(xiàn)的。
MODBUSRTU協(xié)議在S7-200中應用的基本過程
(1) 首先檢查S7-200控制系統(tǒng)中所用Micro/WIN軟件版本,應當是Step7-Micro/WIN V3.2以上版本。
(2) 檢查Micro/WIN的指令樹中是否存在MODBUSRTU從站指令庫(圖1),庫中應當包括MBUS_INIT和MBUS_SLAVE兩個子程序。如果沒有,須安裝Micro/WIN32V3.2 Instruction Library(指令庫)軟件包
編程時使用SM0.1—調(diào)用子程序MBUS_INIT進行初始化,使用SM0.0—調(diào)用研究MBUS_SLAVE,并指定相應參數(shù)。關于參數(shù)的詳細說明,可在子程序的局部變量表中找到。
調(diào)用MODBUS通訊指令庫
參數(shù)意義如下:
●模式選擇:啟動/停止MODBUS,1=啟動;0=停止;
● 從站地址:MODBUS從站址,取值1~247;
● 波特率:可選1200,2400,4800,9600,19200,38400,57600;
● 奇偶校驗:0=無校驗;1=奇校驗;2=偶校驗;
● 延時:附加字符間延時,缺省值為0;
● 最大I/Q位:參與通訊的最大I/O點數(shù),S7-200I/O映像區(qū)為128/128,缺省值為128;
● 最大AI字數(shù):參與通訊的最大AI通道數(shù),可為16或32;
● 最大保持寄存器區(qū):參與通訊的V存儲區(qū)字(VW);
● 保持寄存器區(qū)起始址:以&VBx指定(間接尋址方式);
● 初始化完成標志:成功初始化后置1;
● 錯誤代碼:0=無錯誤。
1.3 注意的問題
調(diào)用Step7-Mciro/WIN32 V3.2 Instruction Library(指令庫)需要分配庫指令數(shù)據(jù)區(qū)(LibraryMemory)。庫指令數(shù)據(jù)區(qū)是相應庫子程序和中斷程序所要用到變量存儲空間。編程時不分配庫指令數(shù)據(jù)區(qū),編譯時會產(chǎn)生許多相同的錯誤。
由子程序參數(shù)HoldStart和MaxHold指定保持寄存器區(qū),是S7-200 CPUV數(shù)據(jù)存儲區(qū)中分配,此數(shù)據(jù)區(qū)不能和庫指令數(shù)據(jù)區(qū)有任何重疊,否則運行時會產(chǎn)生錯誤,不能正常通訊。注意MODBUS 中保持寄存器區(qū)按“字”尋址,即MaxHold規(guī)定是VW而VB個數(shù)。
3 主站指令的用法:
1. MODBUS RTU 主站指令庫的功能是通過在用戶程序中調(diào)用預先編好的程序功能塊實現(xiàn)的,該庫對 Port 0 和 Port 1 有效。該指令庫將設置通信口工作在自由口模式下。
2. MODBUS RTU 主站指令庫使用了一些用戶中斷功能,編其他程序時不能在用戶程序中禁止中斷。
3. MODBUS RTU 主站庫對CPU的版本有要求。CPU 的版本必須為 2.00 或者 2.01(即訂貨號為 6ES721*-***23-0BA*),1.22版本之前(包括1.22版本)的 S7-200 CPU 不支持。
使用 MODBUS RTU 主站指令庫,可以讀寫 MODBUS RTU 從站的數(shù)字量、模擬量 I/O 以及保持寄存器。
要使用 MODBUS RTU 主站指令庫,須遵循下列步驟:
安裝西門子標準指令庫
按照要求編寫用戶程序調(diào)用 MODBUS RTU 主站指令庫
MODBUSRTU 主站功能編程
1. 調(diào)用 MODBUS RTU 主站初始化和控制子程序
使用 SM0.0 調(diào)用 MBUS_CTRL 完成主站的初始化,并啟動其功能控制:
用 SM0.0 調(diào)用 MODBUS RTU 主站初始化與控制子程序
各參數(shù)意義如下:
a. EN 使能:必須保證每一掃描周期都被使能(使用 SM0.0)
b. Mode 模式: 為 1 時,使能 MODBUS 協(xié)議功能;為 0 時恢復為系統(tǒng) PPI 協(xié)議
c. Baud 波特率: 支持的通訊波特率為1200,2400,4800,9600,19200,38400,57600,115200。
d. Parity 校驗: 校驗方式選擇
0=無校驗
1=奇較驗
2=偶較驗
e. Timeout 超時: 主站等待從站響應的時間,以毫秒為單位,典型的設置值為 1000 毫秒(1 秒),允許設置的范圍為 1 - 32767。
注意: 這個值必須設置足夠大以保證從站有時間響應。
f. Done 完成位: 初始化完成,此位會自動置1??梢杂迷撐粏?MBUS_MSG 讀寫操作(見例程)
g. Error 初始化錯誤代碼(只有在 Done 位為1時有效):
0= 無錯誤
1= 校驗選擇非法
2= 波特率選擇非法
3= 模式選擇非法
2. 調(diào)用 MODBUS RTU 主站讀寫子程序MBUS_MSG,發(fā)送一個MODBUS請求;
調(diào)用MODBUS RTU 主站讀寫子程序
各參數(shù)意義如下:
a. EN 使能:同一時刻只能有一個讀寫功能(即 MBUS_MSG)使能
注意:建議每一個讀寫功能(即 MBUS_MSG)都用上一個 MBUS_MSG 指令的 Done 完成位來激活,以保證所有讀寫指令循環(huán)進行(見例程)。
b. First 讀寫請求位: 每一個新的讀寫請求必須使用脈沖觸發(fā)
c. Slave 從站地址: 可選擇的范圍 1 - 247
d. RW 從站地址: 0 = 讀, 1 =寫
注意:
1. 開關量輸出和保持寄存器支持讀和寫功能
2. 開關量輸入和模擬量輸入只支持讀功能
e. Addr 讀寫從站的 選擇讀寫的數(shù)據(jù)類型
數(shù)據(jù)地址: 00001 至 0xxxx - 開關量輸出
10001 至 1xxxx - 開關量輸入
30001 至 3xxxx - 模擬量輸入
40001 至 4xxxx - 保持寄存器
f. Count 數(shù)據(jù)個數(shù) 通訊的數(shù)據(jù)個數(shù)(位或字的個數(shù))
注意: MODBUS主站可讀/寫的最大數(shù)據(jù)量為120個字(是指每一個 MBUS_MSG 指令)
g. DataPtr 數(shù)據(jù)指針:
1. 如果是讀指令,讀回的數(shù)據(jù)放到這個數(shù)據(jù)區(qū)中
2. 如果是寫指令,要寫出的數(shù)據(jù)放到這個數(shù)據(jù)區(qū)中
h. Done 完成位 讀寫功能完成位
i. Error 錯誤代碼: 只有在 Done 位為1時,錯誤代碼才有效
0 = 無錯誤
1 = 響應校驗錯誤
2 = 未用
3 = 接收超時(從站無響應)
4 = 請求參數(shù)錯誤(slave address, MODBUS address, count, RW)
5 = MODBUS/自由口未使能
6 = MODBUS正在忙于其它請求
7 = 響應錯誤(響應不是請求的操作)
8 = 響應CRC校驗和錯誤
-
101 = 從站不支持請求的功能
102 = 從站不支持數(shù)據(jù)地址
103 = 從站不支持此種數(shù)據(jù)類型
104 = 從站設備故障
105 = 從站接受了信息,但是響應被延遲
106 = 從站忙,拒絕了該信息
107 = 從站拒絕了信息
108 = 從站存儲器奇偶錯誤
常見的錯誤:
如果多個 MBUS_MSG 指令同時使能會造成 6 號錯誤
從站 delay 參數(shù)設的時間過長會造成主站 3 號錯誤
從站掉電或不運行,網(wǎng)絡故障都會造成主站 3 號錯誤
3. 在 CPU 的 V 數(shù)據(jù)區(qū)中為庫指令分配存儲區(qū)(LibraryMemory)
MODBUSMaster 指令庫需要一個284個字節(jié)的全局 V 存儲區(qū)。
西門子 S7200 PLC MODBUS支持的功能碼
功能碼
描述
1
讀取單個/多個線圈的實際輸出狀態(tài)。功能1返回任意數(shù)量輸出點的接通/斷開狀態(tài)(Q)。
2
讀取單個/多個線圈的實際輸入狀態(tài)。功能2返回任意數(shù)量的輸入點的接通/斷開狀態(tài)(I)
3
多個保持寄存器。功能3返回V存儲器的內(nèi)容。保持寄存器在MODBUS下是字類型,在一個請求中最多可讀120個字。
4
讀單個/多個輸入寄存器,返回模擬輸入值。
5
寫單個線圈(實際輸出)。功能5將實際輸出點設置為指定值。該輸出點不是被強制,用戶程序可以重寫由MODBUS的請求而寫入的值。
6
寫單個保持寄存器。功能6寫一個單個保持寄存器的值到S7-200的V存儲區(qū)。
15
寫多個線圈(實際輸出)。功能15寫多個實際輸出值到S7-200的Q映像區(qū)。起始輸出點必須是一個字節(jié)的開始(如Q0.0或Q2.0),并且要寫得輸出的數(shù)量是8的倍數(shù)。這是MODBUS從站協(xié)議指令的限定。這些點不是被強制,用戶程序可以重寫由MODBUS的請求而寫入的值。
16
寫多個保持寄存器。功能16寫多個保持寄存器到S7-200的V區(qū)。在一個請求中最多可寫120字。
例國產(chǎn)精驅(qū)變頻器與S7200 CPU224XP PLC通訊
(1)設置變頻器的通訊參數(shù)
參數(shù)
設置值
說明
P0.01
4
啟動命令改為串行通訊
P0.03
2
頻率給定改為串行通訊
P3.09
133
9600波特率 無奇偶校驗
P3.10
3
從站地址 3
硬件接線
S7200通訊口1
第3腳-----RS485+ 第8腳----RS485-
(3) 初始化程序
變頻器的控制地址,因為變頻器控制地址為2000H,所以換位10進制為8192,MUDBUS地址40001開頭,需要加1,控制地址為8193,功能碼4為讀寫寄存器,因為啟
動變頻器的控制命令為17,所以傳送17到VW200則啟動變頻器
(5 ) 設置變頻器的給定頻率