天天看點

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

本文介紹通過485序列槽連接配接MCGS與S7200進行Modbus-Rtu通訊,MCGS為從站,S7200為主站。

S7200這個老古董,就是活在口中的東西,要不是項目需要,真的想不到還會用到這個,

組态軟體Micro/WIN也是年代久遠,是以寫了另一篇文章,S7200入門筆記。

 PLC200入門筆記1-軟體安裝和程式下載下傳

Modbus通訊協定是工業全球流行的通訊的協定了,相比大家都熟悉,不熟悉的建議先了解下,有助于項目實作,如果我釋出了我自己寫的modbus的草稿,你能在部落格頁面找到這篇文章。

前面兩篇文章連結:

MCGS入門筆記1-準備資料和項目操作

MCGS入門筆記2-與S7300以太網通訊 - 夜owl - 部落格園 (cnblogs.com)

  1. 組态MCGS    

這一部分跟上篇文章方法類似,這裡省略的地方可能在前面能找到

1.1組态通訊驅動

添加序列槽,主要設定端口号

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

添加裝置,從站要選擇

modbus序列槽資料轉發裝置,

設定從站位址和添加通訊變量

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

分别添加I0.0-I0.7、Q0.0-Q0.7、WORD40001-WORD40008變量

(下圖對應的是前篇文章S7300的圖,僅供參考)

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

1.2畫面組态

添加按鈕,用于改變變量

按下圖操作,圖比較亂。

按鈕設定資料對象為取反可能更容易調試。

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

添加矩形顯示,用于顯示變量變化,相當于LED

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

添加滑動塊,用于改變多位整數,40001滑條設定0-65535對應的是16位無符号字變量。

40002設定為0-255對應低位元組。

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

畫面顯示效果如圖。

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

二、組态S7-200

2.1組态軟體和硬體

S7200PLC組态軟體是STEP7_MicroWin32。

組态軟體因為年代久遠,并不友好,是以不好上手,很多注意的地方,比如通訊下載下傳不支援以太網,另外Modbus通訊需要安裝指令庫,這部分教程可以看另一篇文章,S7200入門筆記

硬體是

CPU 224XP CN REL 02.01

2.2測試程式程式設計

關于程式程式設計,西門子官方出了比較完整的教程,強烈推薦,裡面還有例程

https://www.ad.siemens.com.cn/service/article/wap/S7-200/S7-200modbus/Default.aspx

Modbus RTU 主站功能程式設計

1. 調用 Modbus RTU 主站初始化和控制子程式

使用 SM0.0 調用 MBUS_CTRL 完成主站的初始化,并啟動其功能控制:

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

2. 調用 Modbus RTU 主站讀寫子程式MBUS_MSG,發送一個Modbus 請求

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

我這裡用的是v1.0的modbus舊版本庫指令,與官方有一點不同,官方的v1.2如下圖

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

v1.2指令官方說明比較清楚

a. EN 使能: 同一時刻隻能有一個讀寫功能(即 MBUS_MSG)使能
MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊
 注意:建議每一個讀寫功能(即 MBUS_MSG)都用上一個 MBUS_MSG 指令的 Done 完成位來激活,以保證所有讀寫指令循環進行(見例程)。
b. First 讀寫請求位: 每一個新的讀寫請求必須使用脈沖觸發
c. Slave 從站位址: 可選擇的範圍   1 - 247
d. RW

0 =

讀, 1 =

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊
 注意:
1. 開關量輸出和保持寄存器支援讀和寫功能
2. 開關量輸入和模拟量輸入隻支援讀功能
e. Addr 讀寫從站的資料位址:
選擇讀寫的資料類型
00001 至 0xxxx - 開關量輸出
10001 至 1xxxx - 開關量輸入
30001 至 3xxxx - 模拟量輸入
40001 至 4xxxx - 保持寄存器
f. Count 資料個數 通訊的資料個數(位或字的個數)
MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊
 注意: Modbus主站可讀/寫的最大資料量為120個字(是指每一個 MBUS_MSG 指令)
g. DataPtr 資料指針: 1. 如果是讀指令,讀回的資料放到這個資料區中
2. 如果是寫指令,要寫出的資料放到這個資料區中
h. Done 完成位 讀寫功能完成位
i. Error 錯誤代碼

對比下v1.0版本指令庫

解釋下主要差別

v1.0的bFoucti~是功能碼,不同Modbus的功能碼對應不同,上圖v1.0的15功能碼就是寫入多個輸出,位址和功能碼參考下表

表 1.功能

Modbus 位址 讀/寫 Modbus 從站須支援的功能

00001 - 09999

數字量輸出

功能 1

功能 5:寫單輸出點

功能 15:寫多輸出點

10001 - 19999

數字量輸入

功能 2

30001 - 39999

輸入寄存器

功能 4

40001 - 49999

保持寄存器

功能 3

功能 6:寫單寄存器單元

功能 16:寫多寄存器單元

以下參考博途幫助檔案

Modbus 功能代碼 用于讀取從站(伺服器)資料的功能 - 标準尋址
01 讀取輸出位: 每個請求 1 至 2000/19921) 位
02 讀取輸入位: 每個請求 1 至 2000/19921) 位
03 讀取保持寄存器: 每個請求 1 至 125/1241) 字
04 讀取輸入字: 每個請求 1 至 125/1241) 字
1) 用于擴充尋址

用于寫入資料的功能: 更改分布式 I/O 和程式資料

用于向從站(伺服器)寫入資料的功能 - 标準尋址
05 寫入一個輸出位: 每個請求 1 位
06 寫入一個保持寄存器: 每個請求 1 個字
15 寫入一個或多個輸出位:每個請求 1 至 1960 位
16 寫入一個或多個保持寄存器:每個請求 1 至 122 個字

v1.2版本使用讀寫+位址+個數的方式代替功能碼,比如 寫入+位址為0+位數為1相當于功能嗎05

3. 輪詢各個指令可以通路不同的從站

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

在位址為1的從站請求發送完成後,置位M3.2,觸發位址為2的從站發送請求。

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

上圖的功能碼是3,是讀取位址為1從站的保持寄存器數值,位址為0,也就是起始位址為40001,讀取40001-40008的8個字儲存在Vw130-Vw146

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

讀取40002的數值,取低位元組,拷貝到VB100和QB0.

VB100用于再次寫入MCGS的輸出狀态變量,也就是上面M3.1觸發的請求

QB0會同步PLC的輸出狀态顯示。

關于modbus位址和S7-200 存儲區位址

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

三.硬體連接配接

MCGS序列槽引腳定義,這裡選擇的是COM2

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

西門子序列槽引腳定義,這裡是CM1241的手冊圖,S7200的也适用

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

如上圖所示引腳3接7,8接8

四.測試效果

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

下載下傳MCGS組态到觸摸屏

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

下載下傳程式到PLC,并且監控變量表,

拖動40001,40002的滑條,VW130,VW132同步

拖動40003的滑條,VW134同步,并且,QB0取低位元組VB135的數值,如上圖所示,VB135=255時,輸出位全亮,另外觸摸屏上的輸出狀态也同步VB100。

五.常見問題

1.放置該指令需要建立一個或多個POU

如果需要添加V1.2的指令庫,,添加指令會報錯,因為庫的名字重複了,需要删除原來舊版本的庫

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

2. 此POU包含一個或多個對參數化子程式無效的調用

庫删除了,程式塊(POU)裡面的指令沒有删除會報錯

3.庫資料區問題-通訊變量個别字出現問題,通訊時間長,通訊功能錯誤,編譯報錯

檢查庫位址配置設定有沒有重疊,這部分沒有設定好,會很麻煩

參考西門子教程3.1

3.1配置設定庫指令資料區

調用STEP 7 - Mciro/WIN32 V3.2 Instruction Library(指令庫)需要配置設定庫指令資料區(Library Memory)。庫指令資料區是相應庫的子程式和中斷程式所要用到的變量存儲空間。

如果在程式設計時不配置設定庫指令資料區,編譯時會産生許多相同的錯誤(錯誤18)。

操作步驟(以Modbus RTU庫指令為例):

1,在指令樹的Project(項目)中,以滑鼠右鍵單擊Program Block(程式塊),在彈出的快捷菜單中選擇Library Memory。如圖1所示:

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊

圖1

2,在彈出的頁籤中設定庫指令資料區,如圖2所示:

MCGS入門筆記3-與S7200(master)Modbus-Rtu通訊