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)
-
組态MCGS
這一部分跟上篇文章方法類似,這裡省略的地方可能在前面能找到
1.1組态通訊驅動
添加序列槽,主要設定端口号
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SYlZWMyIWOyQ2Y0MzMkhDOkNmYwYzM2QzM3EjZyYDZ18CXxIzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
添加裝置,從站要選擇
modbus序列槽資料轉發裝置,
設定從站位址和添加通訊變量
分别添加I0.0-I0.7、Q0.0-Q0.7、WORD40001-WORD40008變量
(下圖對應的是前篇文章S7300的圖,僅供參考)
1.2畫面組态
添加按鈕,用于改變變量
按下圖操作,圖比較亂。
按鈕設定資料對象為取反可能更容易調試。
添加矩形顯示,用于顯示變量變化,相當于LED
添加滑動塊,用于改變多位整數,40001滑條設定0-65535對應的是16位無符号字變量。
40002設定為0-255對應低位元組。
畫面顯示效果如圖。
二、組态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 完成主站的初始化,并啟動其功能控制:
2. 調用 Modbus RTU 主站讀寫子程式MBUS_MSG,發送一個Modbus 請求
我這裡用的是v1.0的modbus舊版本庫指令,與官方有一點不同,官方的v1.2如下圖
v1.2指令官方說明比較清楚
a. | EN | 使能: | 同一時刻隻能有一個讀寫功能(即 MBUS_MSG)使能 |
| |||
b. | First | 讀寫請求位: | 每一個新的讀寫請求必須使用脈沖觸發 |
c. | Slave | 從站位址: | 可選擇的範圍 1 - 247 |
d. | RW | 0 = 讀, 1 = 寫 | |
| |||
1. 開關量輸出和保持寄存器支援讀和寫功能 | |||
2. 開關量輸入和模拟量輸入隻支援讀功能 | |||
e. | Addr | 讀寫從站的資料位址: | |
選擇讀寫的資料類型 | |||
00001 至 0xxxx - 開關量輸出 | |||
10001 至 1xxxx - 開關量輸入 | |||
30001 至 3xxxx - 模拟量輸入 | |||
40001 至 4xxxx - 保持寄存器 | |||
f. | Count | 資料個數 | 通訊的資料個數(位或字的個數) |
| |||
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. 輪詢各個指令可以通路不同的從站
在位址為1的從站請求發送完成後,置位M3.2,觸發位址為2的從站發送請求。
上圖的功能碼是3,是讀取位址為1從站的保持寄存器數值,位址為0,也就是起始位址為40001,讀取40001-40008的8個字儲存在Vw130-Vw146
讀取40002的數值,取低位元組,拷貝到VB100和QB0.
VB100用于再次寫入MCGS的輸出狀态變量,也就是上面M3.1觸發的請求
QB0會同步PLC的輸出狀态顯示。
關于modbus位址和S7-200 存儲區位址
三.硬體連接配接
MCGS序列槽引腳定義,這裡選擇的是COM2
西門子序列槽引腳定義,這裡是CM1241的手冊圖,S7200的也适用
如上圖所示引腳3接7,8接8
四.測試效果
下載下傳MCGS組态到觸摸屏
下載下傳程式到PLC,并且監控變量表,
拖動40001,40002的滑條,VW130,VW132同步
拖動40003的滑條,VW134同步,并且,QB0取低位元組VB135的數值,如上圖所示,VB135=255時,輸出位全亮,另外觸摸屏上的輸出狀态也同步VB100。
五.常見問題
1.放置該指令需要建立一個或多個POU
如果需要添加V1.2的指令庫,,添加指令會報錯,因為庫的名字重複了,需要删除原來舊版本的庫
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所示:
圖1
2,在彈出的頁籤中設定庫指令資料區,如圖2所示: