S7-200通過自由口連接MODBUS設備

作(zuò)者:管理(lǐ)員 點擊:16468次 發布時間:2022-10-14

軟件安(ān)裝(zhuāng)

首先安(ān)裝(zhuāng)STEP7 Micro/WIN V4.0 SP5及以上版本軟件,然後安(ān)裝(zhuāng)S7-200 MODBUS指令集,名(míng)稱為(wèi)Inst_Library_V11

硬件要求

Modbus RTU 主站庫對CPU的版本有(yǒu)要求。CPU 的版本必須為(wèi) 2.00 或者 2.01(即訂貨号為(wèi) 6ES721*-***23-0BA*),1.22版本之前(包括1.22版本)的 S7-200 CPU 不支持。

S7-200通過自由口MODBUS連接

接線(xiàn)方法如下

圖片1.png

西門子在 Micro/WIN V4.0 SP5 中(zhōng)正式推出 Modbus RTU 主站協議庫(西門子标準庫指令)。

圖片2.png 1. 西門子标準指令庫(Micro/WIN V4.0 SP5)

注意:
1. Modbus RTU 主站指令庫的功能(néng)是通過在用(yòng)戶程序中(zhōng)調用(yòng)預先編好的程序功能(néng)塊實現的,該庫對 Port 0 Port 1 有(yǒu)效。該指令庫将設置通信口工(gōng)作(zuò)在自由口模式下。
2. Modbus RTU 主站指令庫使用(yòng)了一些用(yòng)戶中(zhōng)斷功能(néng),編其他(tā)程序時不能(néng)在用(yòng)戶程序中(zhōng)禁止中(zhōng)斷。
3. Modbus RTU 主站庫對CPU的版本有(yǒu)要求。CPU 的版本必須為(wèi) 2.00 或者 2.01(即訂貨号為(wèi) 6ES721****23-0BA*),1.22版本之前(包括1.22版本)的 S7-200 CPU 不支持。

使用(yòng) Modbus RTU 主站指令庫,可(kě)以讀寫 Modbus RTU 從站的數字量、模拟量 I/O 以及保持寄存器。

要使用(yòng) Modbus RTU 主站指令庫,須遵循下列步驟:

1. 安(ān)裝(zhuāng)西門子标準指令庫

2. 按照要求編寫用(yòng)戶程序調用(yòng) Modubs RTU 主站指令庫

Modbus RTU 主站功能(néng)編程

1. 調用(yòng) Modbus RTU 主站初始化和控制子程序

使用(yòng) SM0.0 調用(yòng) MBUS_CTRL 完成主站的初始化,并啓動其功能(néng)控制:

圖片3.png

2. 用(yòng) SM0.0 調用(yòng) Modbus RTU 主站初始化與控制子程序

各參數意義如下:

a) EN  使能(néng): 必須保證每一掃描周期都被使能(néng)(使用(yòng) SM0.0

b) Mode 模式: 為(wèi) 1 時,使能(néng) Modbus 協議功能(néng);為(wèi) 0 時恢複為(wèi)系統 PPI 協議

c) Baud   波特率: 支持的通訊波特率為(wèi)1200240048009600192003840057600115200

d) Parity 校驗: 校驗方式選擇   0=無校驗 1=奇較驗 2=偶較驗  

e) Timeout 超時: 主站等待從站響應的時間,以毫秒(miǎo)為(wèi)單位,典型的設置值為(wèi) 1000 毫秒(miǎo)(1 秒(miǎo)),允許設置的範圍為(wèi) 1 - 32767。   

注意: 這個值必須設置足夠大以保證從站有(yǒu)時間響應。

f) Done完成位: 初始化完成,此位會自動置1。可(kě)以用(yòng)該位啓動 MBUS_MSG 讀寫操作(zuò)

g) Error  初始化錯誤代碼(隻有(yǒu)在 Done 位為(wèi)1時有(yǒu)效):

0= 無錯誤

1= 校驗選擇非法

2= 波特率選擇非法

3= 模式選擇非法

2. 調用(yòng) Modbus RTU 主站讀寫子程序MBUS_MSG,發送一個Modbus 請求;

圖片4.png

3. 調用(yòng)Modbus RTU 主站讀寫子程序

各參數意義如下:

a) EN 使能(néng): 同一時刻隻能(néng)有(yǒu)一個讀寫功能(néng)(即 MBUS_MSG)使能(néng)

注意:建議每一個讀寫功能(néng)(即 MBUS_MSG)都用(yòng)上一個 MBUS_MSG 指令的 Done 完成位來激活,以保證所有(yǒu)讀寫指令循環進行(見例程)。

b) First 讀寫請求位: 每一個新(xīn)的讀寫請求必須使用(yòng)脈沖觸發  

c) Slave 從站地址: 可(kě)選擇的範圍   1  247

d) RW 從站地址: 0 = 讀, 1 = 寫

   注意: 開關量輸出和保持寄存器支持讀和寫功能(néng)

輸入和模拟量輸入隻支持讀功能(néng)

e) Addr 讀寫從站的 選擇讀寫的數據類型

數據地址: 00001 0xxxx - 開關量輸出

10001 1xxxx - 開關量輸入

30001 3xxxx - 模拟量輸入

40001 4xxxx - 保持寄存器

f) Count 數據個數 通訊的數據個數(位或字的個數)

注意: Modbus主站可(kě)讀/寫的最大數據量為(wèi)120個字(是指每一個 MBUS_MSG 指令)

g) g. DataPtr 數據指針: 如果是讀指令,讀回的數據放到這個數據區(qū)中(zhōng)

          如果是寫指令,要寫出的數據放到這個數據區(qū)中(zhōng)

h) Done 完成位 讀寫功能(néng)完成位

i) Error 錯誤代碼: 隻有(yǒu)在 Done 位為(wèi)1時,錯誤代碼才有(yǒu)效

0 = 無錯誤

1 = 響應校驗錯誤

2 = 未用(yòng)

3 = 接收超時(從站無響應)

4 = 請求參數錯誤(slave address, Modbus address, count, RW

5 Modbus/自由口未使能(néng)  

6 Modbus正在忙于其它請求

7 = 響應錯誤(響應不是請求的操作(zuò))

8 = 響應CRC校驗和錯誤

-

101 = 從站不支持請求的功能(néng)

102 = 從站不支持數據地址

103 = 從站不支持此種數據類型

104 = 從站設備故障

105 = 從站接受了信息,但是響應被延遲

106 = 從站忙,拒絕了該信息

107 = 從站拒絕了信息

108 = 從站存儲器奇偶錯誤

常見的錯誤:

· 如果多(duō)個 MBUS_MSG 指令同時使能(néng)會造成 6 号錯誤

· 從站 delay 參數設的時間過長(cháng)會造成主站 3 号錯誤

· 從站掉電(diàn)或不運行,網絡故障都會造成主站 3 号錯誤

3. 在 CPU 的 V 數據區(qū)中(zhōng)為(wèi)庫指令分(fēn)配存儲區(qū)(Library Memory)

Modbus Master 指令庫需要一個284個字節的全局 V 存儲區(qū)。

1.如下圖所示在程序塊上點擊右鍵選擇庫内存區(qū)

圖片5.png

2.出現對話框,分(fēn)配一個大小(xiǎo)為(wèi)284的存儲區(qū)域。注意:不要與别的存儲區(qū)域相沖突。

圖片6.png

Modbus RTU 主站協議庫的補充說明

此為(wèi)西門子正式推出的标準庫指令說明資料。

Modbus RTU Master 協議和 PPI 協議之間切換:

Modbus RTU Master 協議指令庫使通信口工(gōng)作(zuò)在自由口模式下,此時不能(néng)與 Micro/WIN 軟件通信。要在切換回 PPI 協議,可(kě)以:

·  MBUS_CTRL 指令的 Mode 輸入端設置為(wèi)邏輯“0”

·  CPU 的允許模式選擇開關置為(wèi) STOP 位置

Modbus RTU Master 協議庫的執行時間:

Modbus RTU Master 協議庫的 MBUS_CTRL 指令不需要很(hěn)長(cháng)的執行時間。MBUS_需要 1.11 ms 用(yòng)于初始化,在後續的每個掃描周期中(zhōng)隻占用(yòng) 0.41 ms。

調用(yòng) MBUS_MSG 子程序會加長(cháng)處理(lǐ)時間。大部分(fēn)時間都用(yòng)于 CRC 校驗的計算。每讀、寫一個字的數據就需要 1.85 ms 掃描時間。數據最多(duō)的情況下(讀、寫 120 字的數據),掃描時間大概會擴增加 222 ms。讀操作(zuò)的時間主要消耗在接收數據上;寫操作(zuò)的時間主要消耗在發送數據上。

Modbus 地址

通常 Modbus 地址由 5 位數字組成,包括起始的數據類型代号,以及後面的偏移地址。Modbus Master 協議庫把标準的 Modbus 地址映射為(wèi)所謂 Modbus 功能(néng)号,讀寫從站的數據。Modbus Master 協議庫支持如下地址:

· 00001 - 09999:數字量輸出( 線(xiàn)圈)

· 10001 - 19999:數字量輸入(觸點)

· 30001 - 39999:輸入數據寄存器(通常為(wèi)模拟量輸入)

· 40001 - 49999:數據保持寄存器

Modbus Master 協議庫支持的功能(néng)

為(wèi)了支持上述 Modbus 地址的讀寫,Modbus Master 協議庫需要從站支持下列功能(néng):

1. 需要從站支持的功能(néng)

Modbus 地址

/寫

Modbus 從站須支持的功能(néng)

00001 - 09999
數字量輸出

   讀

功能(néng) 1

   寫

功能(néng) 5:寫單輸出點
功能(néng) 15:寫多(duō)輸出點

10001 - 19999
數字量輸入

   讀

功能(néng) 2

   寫

30001 - 39999
輸入寄存器

   讀

功能(néng) 4

   寫

40001 - 49999
保持寄存器

   讀

功能(néng) 3

   寫

功能(néng) 6:寫單寄存器單元
功能(néng) 16:寫多(duō)寄存器單元

Modbus 地址和 S7-200 存儲區(qū)地址的映射

S7-200 通過 Modbus Master 和 Slave 協議庫通信時,Modbus 地址和 S7-200 内存儲區(qū)地址的 映射關系都類似。

Modbus 保持寄存器地址映射舉例:

Modbus 保持寄存器地址

40001     12 34  

40002     56 78  

40003     9A BC  

S7-200 存儲區(qū)字尋址

VW200     12 34  

VW202     56 78  

VW204     9A BC  

 S7-200 存儲區(qū)字節尋址

VB200     12

VB201     34

VB202     56

VB203     78

VB204     9A

VB205     BC

Modbus 數字量地址映射舉例:

位地址(0xxxx 和 1xxxx)數據總是以字節為(wèi)單位打包讀寫。第一個字節中(zhōng)的最低有(yǒu)效位對應 Modbus 地址的起始地址。如下圖所示:

圖片7.png

MODBUS從站

西門子Modbus從站協議庫包括兩條指令:MBUS_INIT 指令和MBUS_SLAVE 指令。•MBUS_INIT 指令用(yòng)于啓用(yòng)和初始化或禁止Modbus通訊。

•MBUS_SLAVE 指令用(yòng)于為(wèi)Modbus主設備發出的請求服務(wù)。

•MBUS_INIT 指令用(yòng)于啓用(yòng)和初始化或禁止Modbus從站通訊。在使用(yòng)MBUS_SLAVE 指令之前,必須正确執行MBUS_INIT 指令。指令完成後立即設定完成位,才能(néng)繼續執行下一條指令。

圖片8-Edit.jpg

MBUS_INIT 指令說明:

•EN:指令使能(néng)位。•Mode:模式選擇,啓動/停止Modbus從站通信。Mode 參數允許使用(yòng)以下兩個數值:1——啓動,0——停止。

•Address:從站地址,MODBUS從站地址,取值1~247

•Baud:波特率,可(kě)選1200240048009600192003840057600115200•Parity:奇偶校驗,0=無校驗;1=奇校驗;2=偶校驗。

•Delay:延時,附加字符間延時,缺省值為(wèi)0

•MaxIQ:最大I/Q位,參與通信的最大I/O點數,S7-200I/O映像區(qū)為(wèi)128/128,缺省值為(wèi)128

•MaxAI:最大AI字數,參與通信的最大AI通道數,可(kě)為(wèi)1632

•MaxHold:設定供Modbus地址4xxxx使用(yòng)的V存儲器中(zhōng)的字保持寄存器數目。

•HoldStart:保持寄存器區(qū)起始地址,以&VBx指定(間接尋址方式)。

•Done:初始化完成标志(zhì),成功初始化後置1

•Error:初始化錯誤代碼。

{"時延"參數通過将指定的毫秒(miǎo)數增加至标準Modbus信息超時的方法延長(cháng)标準Modbus信息結束超時條件。該參數的典型數值在有(yǒu)線(xiàn)網絡上應為(wèi)0。如果您在使用(yòng)帶有(yǒu)糾錯功能(néng)的調制解調器,将時延設為(wèi)50100毫秒(miǎo)的數值。如果您在使用(yòng)擴展頻譜無線(xiàn)電(diàn),将時延設為(wèi)10100毫秒(miǎo)的數值。"時延"數值可(kě)以是032767毫秒(miǎo)。

MaxIQ參數将供Modbus地址00xxxx01xxxx使用(yòng)的IQ點數設為(wèi)0128之間的數值。數值0禁止所有(yǒu)向輸入和輸出的讀取。建議使用(yòng)的MaxIQ數值是128,該數值可(kě)在S7-200中(zhōng)存取所有(yǒu)的IQ點。

 

MaxAI參數将供Modbus地址03xxx使用(yòng)的字輸入(AI)寄存器數目設為(wèi)032之間的數值。數值0禁止模拟輸入的讀數。建議使用(yòng)的MaxAI數值如下,這些數值可(kě)允許存取所有(yǒu)的S7-200模拟輸入:

 

*0用(yòng)于CPU 221

*16用(yòng)于CPU 222

*32用(yòng)于CPU 224226226XM

 

MaxHold參數設定供Modbus地址04xxx使用(yòng)的V内存中(zhōng)的字保持寄存器數目。例如,為(wèi)了允許主設備存取2000個字節的V内存,将MaxHold設為(wèi)1000個字的數值(保持寄存器)。

 

HoldStart參數是V内存中(zhōng)保持寄存器的起始地址。該數值一般被設為(wèi)VB0,因此HoldStart參數被設為(wèi)&VB0VB0地址)。其他(tā)V内存地址可(kě)指定為(wèi)保持寄存器的起始地址,以便在項目的其他(tā)地方使用(yòng)VB0Modbus主設備可(kě)存取V内存MaxHold個字數,從HoldStart開始。

MBUS_INIT指令完成時,"完成"輸出打開。"錯誤"輸出字節包含執行指令的結果。請參閱Modbus從屬協議執行錯誤代碼中(zhōng)可(kě)能(néng)因執行指令而産(chǎn)生的錯誤條件。

 

MBUS_SLAVE指令被用(yòng)于為(wèi)Modbus主設備發出的請求服務(wù),并且必須在每次掃描時執行,以便允許該指令檢查和回答(dá)Modbus請求。在每次掃描且EN輸入開啓時執行該指令。MBUS_SLAVE指令無輸入參數。當MBUS_SLAVE指令對Modbus請求作(zuò)出應答(dá)時,"完成"輸出打開。如果沒有(yǒu)需要服務(wù)的請求時,"完成"輸出關閉。"錯誤"輸出包含執行該指令的結果。該輸出隻有(yǒu)在"完成"打開時才有(yǒu)效。如果"完成"關閉,錯誤參數不會改變。請參閱Modbus從屬協議執行錯誤代碼中(zhōng)可(kě)能(néng)因執行該指令而導緻的錯誤條件。}

錯誤代碼

說明

0

無錯誤

1

内存範圍錯誤

2

非法波特率或奇偶校驗

3

非法從屬地址

4

非法Modbus參數值

5

保持寄存器與Modbus從屬符号重疊

6

收到奇偶校驗錯誤

7

收到CRC錯誤

8

非法功能(néng)請求/功能(néng)不受支持

9

請求中(zhōng)的非法内存地址

10

從屬功能(néng)未啓動

MBUS_SLAVE 指令說明:

MBUS_SLAVE 指令被用(yòng)于為(wèi)Modbus主設備發出的請求服務(wù),并且必須在每次掃描時執行,以便允許該指令檢查和回答(dá)Modbus請求。MBUS_SLAVE 指令無輸入參數,在每次掃描且EN 輸入開啓時執行。

•EN:指令使能(néng)位。

•DoneModbus執行通信中(zhōng)時置1,無MODBUS 通信活動時為(wèi)0

•Error:錯誤代碼。

錯誤代碼

說明

0

無錯誤

1

内存範圍錯誤

2

非法波特率或奇偶校驗

3

非法從屬地址

4

非法Modbus參數值

5

保持寄存器與Modbus從屬符号重疊

6

收到奇偶校驗錯誤

7

收到CRC錯誤

8

非法功能(néng)請求/功能(néng)不受支持

9

請求中(zhōng)的非法内存地址

10

從屬功能(néng)未啓動


常見問題
Modbus RTU 主站庫對 CPU 的版本确實有(yǒu)要求,CPU 的版本必須為(wèi) 2.00 或者 2.01(即訂貨号為(wèi)6ES721*-***23-0BA*),1.22 版本之前(包括 1.22 版本)的 S7-200 CPU 不支持。
Modbus RTU 主站庫對 CPU 的版本是否有(yǒu)要求,為(wèi)什麽編譯例子程序時,會遇到 4 個錯誤?

Modbus 指令庫啓動後,如何通過同一個通信端口進行 CPU 監控?

Modbus 指令庫使用(yòng)的是 CPU 的自由口通信功能(néng),工(gōng)作(zuò)在自由口模式下的通訊口不能(néng)使用(yòng) Micro/WIN 的 PPI 編程通信監控。如果通信口都已經被占用(yòng),可(kě)以考慮:

· 加一個通信模塊(如 EM 277、CP 243-1、EM 241 等)擴展出一個編程通信口

· 中(zhōng)止自由口模式,可(kě)以将 CPU 上的模式開關從 RUN 撥到 STOP;或者保持處于 RUN 狀态,用(yòng)程序停止指令庫的 Modbus 模式(參見指令庫應用(yòng))

如何理(lǐ)解 Modbus 地址與功能(néng)碼的區(qū)别?

Modbus 地址與 Modbus 的功能(néng)碼是兩個層次的概念。

根據 Modbus 通信協議,Modbus 數據的地址使用(yòng) 0xxxx、1xxxx、3xxxx 和 4xxxx 的形式,分(fēn)别表示數字量輸出、數字量輸入、模拟量輸入等數據地址。在使用(yòng) S7-200 的指令庫時,Modbus 數據地址與 S7-200 的 I/O 和數據存儲區(qū)地址間有(yǒu)特定的對應關系。

有(yǒu)些設備表明它支持 Modbus RTU 通信協議,但也詳細提供了讀寫數據的詳細通信幀格式,其中(zhōng)包括如何指定 Modbus 站的地址,需要讀寫數據類型、長(cháng)度等等。數據幀有(yǒu)特定字節指出此指令讀寫的數據類型和地址,此字節的數據内容即所謂“功能(néng)碼”,如功能(néng) 1 指定讀取單個/多(duō)個數字量輸出點的值。

支持 Modbus 協議的設備或軟件,使用(yòng)時用(yòng)戶直接設置或看到的應當是 Modbus 數據地址。Modbus 地址所訪問的數據,是通過各種“功能(néng)”讀寫而來。功能(néng)碼是 Modbus 地址的底層。如果 Modbus 通信的一方提供的所謂 Modbus 協議隻有(yǒu)功能(néng)碼,則需要注意了解此功能(néng)号與 Modbus 地址間的對應關系。

如何訪問大于 9999 的保持寄存器地址?

通常 Modbus 協議的保持寄存器地址範圍在 40001 - 49999 之間。對于多(duō)數應用(yòng)來說已經夠了。但有(yǒu)些 Modbus 從站把地址映射到保持寄存器區(qū)的地址超過 9999 的部分(fēn)。

Modbus Master 協議庫支持超過 9999 的保持寄存器地址。地址範圍為(wèi) 400001 - 465536。隻需在調用(yòng) MBUS_MSG 子程序時給 Addr 參數賦相應的值即可(kě),如 416768。

Modubs Master 擴展地址模式僅支持保持寄存器區(qū),不支持其他(tā)地址類型。



德(dé)陽旭捷科(kē)技(jì )有(yǒu)限公(gōng)司