前言
西門子在 STEP 7-Micro/WIN SMART 中正式推出 Modbus RTU 主站協議庫(西門子標準庫指令)。使用 Modbus RTU 主站指令庫,可以讀寫 Modbus RTU 從站的數字量、模擬量 I/O 以及保持寄存器,從而實現PLC通過modbus方式控制其他器件。
提示:以下是本篇文章正文內容,下面案例可供參考
一、準備工作
S7-200smart st30
485通訊線
說明:這里將以S7-200smart作為主站,電腦串口調試助手作為從站。做操作演示。
此處省略接線。
二、寫梯形圖
1.MBus_CTRL
1. 調用 Modbus RTU 主站初始化和控制子程序
使用 SM0.0 調用 MBUS_CTRL 完成主站的初始化,并啟動其功能控制:

圖 2. 用 SM0.0 調用 Modbus RTU 主站初始化與控制子程序
各參數意義如下:
| a. | EN | 使能: | 必須保證每一掃描周期都被使能(使用 SM0.0) |
|---|---|---|---|
| b. | Mode | 模式: | 為 1 時,使能 Modbus 協議功能;為 0 時恢復為系統 PPI 協議 |
| c. | Baud | 波特率: | 支持的通訊波特率為1200,2400,4800,9600,19200,38400,57600,115200。 |
| d. | Parity | 校驗: | 校驗方式選擇 |
| 0=無校驗(通常默認選擇0) | |||
| 1=奇較驗 | |||
| 2=偶較驗 | |||
| e. | Port | 端口號: | 0 =CPU集成的 RS 485 通訊口 ; 1 = 可選CM 01信號板 。 |
| f. | Timeout | 超時: | 主站等待從站響應的時間,以毫秒為單位,典型的設置值為 1000 毫秒(1 秒),允許設置的范圍為 1 - 32767。 |
| 注意:這個值必須設置足夠大以保證從站有時間響應。 | |||
| g. | Done | 完成位: | 初始化完成,此位會自動置1。 |
| h. | Error | 有錯誤 | |
1.MBus_MSG
調用 Modbus RTU 主站讀寫子程序MBUS_MSG,發送一個Modbus 請求;

各參數意義如下:
| a. | EN | 使能: | 同一時刻只能有一個讀寫功能(即 MBUS_MSG)使能 |
|---|---|---|---|
| 注意:建議每一個讀寫功能(即 MBUS_MSG)都用上一個 MBUS_MSG 指令的 Done 完成位來激活,以保證所有讀寫指令循環進行(見例程)。 | |||
| b. | First | 讀寫請求位: | 每一個新的讀寫請求必須使用脈沖觸發 |
| c. | Slave | 從站地址: | 可選擇的范圍 1 - 247 |
| d. | RW | 讀寫請求: | 0 = 讀, 1 = 寫 |
| e. | Addr | 讀寫從站的 | 選擇讀寫的數據類型 |
| 數據地址: | 00001 至 0xxxx - 數字量輸出 | ||
| 10001 至 1xxxx - 數字量輸入 | |||
| 30001 至 3xxxx - 模擬量輸入 | |||
| 40001 至 4xxxx - 保持寄存器 | |||
| f. | Count | 數據個數 | 通訊的數據個數(位或字的個數) |
| 注意:Modbus主站可讀/寫的最大數據量為120個字(是指每一個 MBUS_MSG 指令) | |||
| g. | DataPtr | 數據指針: | 1. 如果是讀指令,讀回的數據放到這個數據區中 2. 如果是寫指令,要寫出的數據放到這個數據區中 |
| h. | Done | 完成位 | 讀寫功能完成位 |
| i. | Error | 錯誤代碼: | 只有在 Done 位為1時,錯誤代碼才有效 |
| 0 = 無錯誤 | |||
| 1 = 響應校驗錯誤 | |||
| 2 = 未用 | |||
| 3 = 接收超時(從站無響應) | |||
| 4 = 請求參數錯誤(slave address, Modbus address, count, RW) | |||
| 5 = Modbus/自由口未使能 | |||
| 6 = Modbus正在忙于其它請求 | |||
| 7 = 響應錯誤(響應不是請求的操作) | |||
| 8 = 響應CRC校驗和錯誤 | |||
| 101 = 從站不支持請求的功能 | |||
| 102 = 從站不支持數據地址 | |||
| 103 = 從站不支持此種數據類型 | |||
| 104 = 從站設備故障 | |||
| 105 = 從站接受了信息,但是響應被延遲 | |||
| 106 = 從站忙,拒絕了該信息 | |||
| 107 = 從站拒絕了信息 | |||
| 108 = 從站存儲器奇偶錯誤 | |||
三、使用難點與解答
通常支持485通訊的器件給的使用說明書,給的指令是16進制的字符串代碼。很難與當前PLC庫指令對應起來,尤其是命令地址。我們以IAI馬達給的使用說明書為例子。如圖所示:



該示例是PLC通過modbus去讀取馬達的位置。讀取控制器地址9000這個寄存器里面的數據
RW填0,表示去讀取數據。
Plc庫里面需要填的Addr(e)是十進制,需要將16進制的9000轉成十進制。
通過計算器得知:16#9000=36864
注意事項:這里博主也比較奇怪,實際使用讀取寄存器地址的時候需要+1,36865
不知道有沒有人可以解釋一下的。

由于這里是讀取寄存器,所以Addr=436865.

count是寄存器數量:按照示例,這里有2個寄存器。所以count填2
通過串口調試助手來測試一下:接通M15.0發送信號,串口調試助手收到了PLC發送的信號。且可以看到收到的數據與IAI操作手冊示例一致。測試成功

以上是通過modbus讀取的示例。
注意事項:
1、只有在操作就被控方寄存器的時候(無論讀取還是寫入),轉換的成十進制的地址后第一位需要加個4
2、注意發送命令和讀取命令的字符長度,需要正確填寫
3、需要注意波特率要填寫正確,與被控方保持一致。否則發出去的信號與收到的信號不相符
4、發出去的內容填寫到DataPtr中。

此處我們再來解讀plc的這個命令就比較清晰了:
通過MB_MSG,向1號從站讀取從36865(Addr)這個地址開始2位(Count)的數據,并把讀取到的數據寫入VB2000
如果是寫入:通過MB_MSG,將PLC的VB2000開始的2位寄存器內的數據,寫入到1號從站的36865寄存器中。
來源:電子開發網。
-
plc
+關注
關注
5051文章
14592瀏覽量
486866 -
西門子
+關注
關注
98文章
3310瀏覽量
120369 -
MODBUS
+關注
關注
28文章
2457瀏覽量
83185
原文標題:西門子PLC S7-200 smart如何使用Modbus 485通訊傳輸接收數據_200smart modbus
文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
西門子S7-200 Modbus RTU master指令與VLT2800通訊調試說明
運用西門子PLC通過Modbus RTU采集YGWE通訊數據案例
微硬創新RS485 MODBUS轉PROFINET網關PNMD485-K20連接西門子PLC和MODBUS設備配置案例
Profinet轉Modbus485網關將探測器接入到西門子1200PLC
西門子1200PLC和西門子1500PLC的ModbusRTU通訊
三菱PLC與西門子PLC如何實現485通訊?
西門子PLC如何使用Modbus 485通訊傳輸接收數據
評論