<object id="seflp"></object>

    1. <object id="seflp"></object>
      <dfn id="seflp"></dfn>
          加入收藏 在線留言 聯系我們
          關注微信
          手機掃一掃 立刻聯系商家
          全國服務熱線17838383235
          公司新聞
          6ES7322-1FF01-0AA0現貨西門子代理
          發布時間: 2024-03-10 11:39 更新時間: 2024-11-22 08:50

          6ES7322-1FF01-0AA0現貨西門子代理

          6ES7322-1FF01-0AA0現貨西門子代理

          6ES7322-1FF01-0AA0現貨西門子代理


          西門子1200PLC的Modbus(RTU)詳細說明全集




          S7-1200 Modbus RTU通信概述


          (資料信息來源西門官網)


          Modbus具有兩種串行傳輸模式:分別為ASCII和RTU。

          Modbus是一種單主站的主從通信模式,Modbus網絡上只能有一個主站存在,主站在Modbus網絡上沒有地址,每個從站必須有唯一的地址,從站的地址范圍為0 - 247,其中0為廣播地址,從站的實際地址范圍為1 - 247。Modbus RTU通信以主從的方式進行數據傳輸,在傳輸的過程中Modbus RTU主站是主動方,即主站發送數據請求報文到從站,Modbus RTU從站返回響應報文。




          S7-1200以下模塊支持 Modbus RTU通信:

          通信模塊/通信板

          訂貨號

          CM1241 RS232

          6ES7 241-1AH32-0XB0

          CM1241 RS485

          6ES7 241-1CH30-0XB0

          CM1241 RS422/485

          6ES7 241-1CH32-0XB0

          CB 1241 RS485

          6ES7 241-1CH30-1XB0



          注意

          1. 使用通信模塊CM 1241 RS232作為Modbus RTU主站時,只能與一個從站通訊。

          2. 使用通信模塊CM 1241 RS485作為Modbus RTU主站時,則允許建立多與 32 個從站的通訊。

          3. 使用通信板CB 1241 RS485時,CPU 固件必須為 V2.0 或更高版本,且使用軟件必須為STEP 7 Basic V11 或STEP 7 Professional V11 以上更高版本。







          S7-1200 Modbus RTU指令




          隨著 TIA PORATL 軟件和 S7-1200 CPU 固件的不斷更新,S7-1200 Modbus RTU 指令也出現了不同的版本。用戶需要根據使用的軟件和硬件,正確選擇使用符合要求的 S7-1200 Modbus RTU 指令來實現 Modbus RTU 通信。

          軟件,硬件要求和指令版本說明如下。




          圖片軟件STEP 7 V11 中的S7-1200 Modbus RTU 指令



          軟件STEP 7 V11版本開始,可以從“指令”→“通信處理器”→“MODBUS”下直接調用 “MB_COMM_LOAD”和“MB_MASTER”或“MB_SLAVE”指令,如下圖1所示:

          圖片

          圖1 Modbus RTU指令


          Modbus RTU指令有兩個版本:分別為V1 和V2。版本V1初在 STEP 7 Basic V10.5 中提供;版本V2 在 STEP 7 Basic/Professional V11 中提供。




          圖片軟件STEP 7 V13 SP1 中的S7-1200 Modbus RTU 指令



          TIA V13 SP1版本軟件中提供了2個版本的 Modbus RTU指令。如下圖 2 所示:早期版本的 Modbus RTU 指令(圖2. 中 MODBUS (V2.2))僅可通過 CM1241 通信模塊或 CB1241 通信板進行 Modbus RTU 通信。新版本的Modbus RTU指令(圖2. 中 MODBUS(RTU) V3.0)擴展了Modbus RTU的功能,該指令除了支持 CM1241 通信模塊、CB1241 通信板,還支持PROFINET或PROFIBUS分布式 I/O 機架上的PTP通信模塊實現 Modbus RTU 通信。


          注意:新版本 Modbus RTU 指令的使用限制條件    新版本 Modbus RTU 指令通過CM1241通信模塊或CB1241通信板進行Modbus RTU通信時,需要滿足如下條件:a. S7-1200 CPU 的固件版本不能低于V4.1;b. CM1241通信模塊 V2.1 以上或 CB1241。

          圖片 

          圖2. 兩個版本 Modbus RTU 指令






          常見問題

          圖片1、西門子不提供支持MODBUS-ASCII通信模式的的現成指令,需要用戶自己用自由口模式編程。圖片2、Modbus RTU指令版本 V2 將參數“REQ”和“DONE”添加到“MB_COMM_LOAD”指令。而且,“MB_MASTER”和“MB_SLAVE ”指令的“MB_ADDR ”參數現在允許一個UInt值以進行擴展尋址。圖片3、不能在同一CPU 程序中同時使用V1(V1.x)和V2(V2.y)指令版本。用戶程序的 Modbus 指令必須具有相同的主版本號;主版本組內的各個指令可具有不同的次版本號。圖片4、對S7-1200 通信模塊CM1241組態并編程調用“MB_COMM_LOAD”指令,可將其設置為Modbus RTU通信模式。通過編程調用“MB_MASTER”指令,S7-1200 通信模塊CM1241可作為Modbus RTU主站,或調用“MB_SLAVE”指令,S7-1200 通信模塊CM1241可作為Modbus RTU從站。圖片5、無論S7-1200 通信模塊CM1241作為Modbus RTU主站還是從站,都需要調用“MB_COMM_LOAD”指令進行編程。圖片6、S7-1200 CM1241/CB1241 Modbus RTU 通信支持兩位停止位。S7-1200 CM1241/CB1241屬性里可以設置停止位,但是該模塊用于 Modbus 通信時,此設置的停止位無效,需要在 Modbus_Commload 指令的背景DB里Static修改STOP_BITS停止位數值為2。如下圖3、4所示:

          圖片

          圖3. CM1241 配置停止位參數


          Modbus_Commload 指令的背景DB里Static修改STOP_BITS停止位數值為2(默認值=1)

          圖片

          圖4. 修改 Modbus RTU 通信停止位




          Modbus RTU新版本指令介紹


          (資料信息來源西門官網)

          TIA V13 SP1版本軟件中提供了2個版本的Modbus RTU指令:

          圖片

          圖1. 兩個版本Modbus RTU指令


          早期版本的Modbus RTU指令(圖1中MODBUS (V2.2))僅可通過CM1241通信模塊或CB1241通信板進行Modbus RTU通信。
          新版本的Modbus RTU指令(圖1中 MODBUS(RTU) V3.0)擴展了Modbus RTU的功能,該指令除了支持CM1241通信模塊、CB1241通信板,還支持PROFINET或 PROFIBUS分布式I/O機架上的PTP通信模塊實現Modbus RTU通信。

          新版本Modbus RTU指令所支持的PTP模塊如下圖2所示:

          圖片圖2. 新版本 Modbus RTU指令所支持的PTP模塊


          新版Modbus RTU指令的使用

          新版本Modbus RTU指令中包含Modbus RTU 主站指令和從站指令。本文以 CPU1217C+CM1241 RS422/485+ET200SP CM PTP 模塊為例,介紹新版本 Modbus RTU 指令主從通信的編程步驟。 
          其中CPU機架CM1241 RS422/485作為Modbus RTU從站,分布式機架ET200SP中 CMPTP模塊作為Modbus RTU主站。網絡結構圖如下:

          圖片圖3. Modubus RTU 網絡通信結構圖



          使用到的硬件和軟件如下:

          硬件:
          ① CPU1217C(訂貨號:6ES7 217-1AG40-0XB0),固件版本V4.1.3
          ② CM1241 RS422/485模塊(訂貨號:6ES7 241-1CH32-0XB0),固件版本V2.1
          ③ 24V 電源PS307(訂貨號:6ES7307-1KA02-0AA0) 
          ④ ET200 SP IM155-6PN HF(訂貨號:6ES7155-6AU00-0CN0)
          ⑤ CM PTP模塊(訂貨號:6ES7137-6AA00-0BA0)


          軟件:
          ① TIA V13 SP1 UP 9





          一、設備組態

          1組態CM1241 RS422/485模塊

          打開設備視圖,添加S7-1200CPU,并在硬件目錄里找到“通信模塊”→“點到點”→“CM1241(RS422/485)”,拖拽此模塊至CPU左側即可,如下圖4所示:

          圖片

          圖4. 添加 CM 1241 RS422/485模塊


          需要注意:固件版本>=V2.1 的CM 1241 RS422/485模塊,才支持新版本Modbus RTU指令。


          接下來,在“設備視圖”中用鼠標選中CM1241(RS422/485)模塊,在“屬性”→“端口組態”中配置此模塊硬件接口參數,
          本例以傳輸率=9.6Kbps,奇偶校驗=無奇偶校驗,數據位=8位字符,停止位=1為例。如CM 1241 端口組態設置如下圖5所示:

          圖片圖5. CM1241 RS422/485 模塊端口組態


          后在“硬件標識符”里確認一下硬件標識符為269(該參數在程序編程中會被使用),如下圖6所示:

          圖片

          圖6.硬件標識符


          另外,S7-1200 還提供了系統和時鐘存儲器功能,為了便于后續指令,建議使能該功能。在CPU “屬性”→“常規”→“系統和時鐘存儲器”使能系統和時鐘存儲器功能,如圖7所示。

          圖片圖7. 系統和時鐘存儲器功能


          2組態ET200 SP CM PtP模塊
          a、插入一個ET200SP分布式站點。

          打開網絡視圖并拖入一個ET200SP站點,并將其分配給相應的IO控制器(本例CPU1217C 為 IO 控制器),如圖8所示。

          圖片圖8. 插入ET200SP站點


          b、組態ET200SP 站點。

          在ET200SP的"設備視圖"環境下,為ET200SP 站點添加信號、通信模塊和服務器模塊,在本例中只添加了CM PTP模塊和服務器模塊。
          需要注意:ET200SP站點中,服務器模塊是必須組態的。服務器模塊隨接口模塊一起采購,無需單獨購買。

          ET200SP接口模塊需要為其分配IP地址和Device Name, 有關ET200 SP 分布式IO 組態詳細步驟,請參考《ET200 SP使用快速入門》。

          《ET200 SP 使用快速入門》下載鏈接:
          https://support.industry.siemens.com/cs/cn/zh/view/78304711

          在ET200SP"設備視圖"中用鼠標選中CM PTP,在“屬性”→“常規”→“接口”→“操作模式”中配置此模塊硬件接口參數,
          本例設定“指定工作模式":"半雙工(RS485)2線制操作";"接收線路的初始狀態":"無"。如下圖9所示:

          圖片圖9. CM PTP 操作模式


          接下來,在“屬性”→“常規”→“接口”→“端口組態”中配置此模塊端口組態參數,
          本例設定"協議":"Freeport/Modbus";"端口參數"設置:傳輸率=9.6Kbps,奇偶校驗=無奇偶校驗,數據位=8位字符,停止位=1為例。端口組態設置如下圖10所示:

          圖片圖10. CM PTP 端口組態


          后需要在“硬件標識符”里確認一下CM PTP 模塊硬件標識符,該參數在程序編程中會被使用。




          二、軟件編程

          1Modbus RTU 主站編程

          Modbus RTU主站編程需要調用Modbus_Comm_Load指令和Modbus_Master指令,其中Modbus_Comm_Load指令通過Modbus RTU協議對通信模塊進行組態,Modbus_Master指令可通過由Modbus_Comm_Load指令組態的端口作為Modbus主站進行通信,Modbus_Comm_Load指令的MB_DB參數必須連接到Modbus_Master指令的(靜態)MB_DB參數。

          本例中分布式機架ET200SP中CM PTP模塊作為Modbus RTU主站,其相關編程步驟如下:


          a、OB1中插入一個FC函數,并在函數中拖入Modbus_Comm_Load指令和Modbus_Master指令。如圖11所示

          圖片

          圖11. 拖入Modbus RTU 主站指令


          Modbus_Comm_Load指令各參數意義如下表1所示:

          引腳

          說明

          REQ

          上升沿觸發

          PORT

          通信端口的硬件標識符

          BAUD

          波特率選擇:3600,6000,12000,2400,4800,9600,19200,38400,57600,76800,115200

          PARITY

          奇偶檢驗選擇:0-無;1-奇校驗;2-偶校驗

          FLOW_CTRL

          流控制選擇:0-(默認值)無流控制

          RTS_ON_DLY

          RTS延時選擇:0-(默認值)

          RTS_OFF_DLY

          RTS關斷延時選擇:0-(默認值)

          RESP_TO

          響應超時:默認值 = 1000 ms。MB_MASTER 允許用于從站響應的時間(以毫秒為單位)。

          MB_DB

          對 Modbus_Master 或 Modbus_Slave 指令的背景數據塊的引用。
          MB_DB 參數必須與 Modbus_Master 或 Modbus_Slave 指令中的靜態變量MB_DB 參數相連。

          DONE

          如果上一個請求完成并且沒有錯誤,DONE 位將變為 TRUE 并保持一個周期。

          ERROR

          如果上一個請求完成出錯,則 ERROR 位將變為 TRUE 并保持一個周期。STATUS 參數中的錯誤代碼僅在 ERROR = TRUE 的周期內有效。

          STATUS

          端口組態錯誤代碼,請參考TIA 軟件在線幫助或S7-1200 系統手冊。

                                        表1 MB_COMM_LOAD指令參數意義
          Modbus_Master指令各參數意義如下表2所示:

          引腳

          說明

          EN

          使能端

          REQ

          TRUE = 請求向 Modbus 從站發送數據 ,建議采用上升沿觸發

          MB_ADDR

          Modbus RTU從站地址。默認地址范圍:0至247;擴展地址范圍:0至65535。值0被保留用于將消息廣播到所有Modbus從站。

          MODE

          模式選擇:指定請求類型(讀取或寫入)。

          DATA_ADDR

          從站中的起始地址:指定Modbus從站中將供訪問的數據的起始地址。

          DATA_LEN

          數據長度:指定要在該請求中訪問的位數或字數。

          DATA_PTR

          數據指針:指向要進行數據寫入或數據讀取的標記或數據塊地址。

          DONE

          完成位:上一請求已完成且沒有出錯后,DONE 位將保持為 TRUE 一個掃描周期時間。

          BUSY

          FALSE – Modbus_Master 無激活命令:
          TRUE – Modbus_Master 命令執行中

          ERROR

          對 Modbus_Master 或 Modbus_Slave 指令的背景數據塊的引用。
          MB_DB 參數必須與 Modbus_Master 或 Modbus_Slave 指令中的靜態變量MB_DB 參數相連。

          STATUS

          如果上一個請求完成并且沒有錯誤,DONE 位將變為 TRUE 并保持一個周期。

          ERROR

          如果上一個請求完成出錯,則 ERROR 位將變為 TRUE 并保持一個周期。STATUS 參數中的錯誤代碼僅在 ERROR = TRUE 的周期內有效。

          STATUS

          錯誤代碼

          表2 Modbus_Master指令參數意義



          注意

          ① Modbus_Comm_Load指令不建議在啟動組織塊OB100中調用,建議在OB1中調用。Modbus_Comm_Load指令在OB1中調用時,其輸入位“REQ”需使用上升沿觸發,本例中該輸入位采用 “FirstScan” 系統存儲器位。
          ② Modbus_Comm_Load指令背景數據塊中的靜態變量“MODE”用于描述PTP模塊的工作模式,有效的工作模式包括:

          · 0 = 全雙工 (RS232)

          · 1 = 全雙工 (RS422) 四線制模式(點對點)

          · 2 = 全全雙工 (RS 422) 四線制模式(多點主站,CM PtP (ET 200SP))

          · 3 = 全全雙工 (RS 422) 四線制模式(多點從站,CM PtP (ET 200SP))

          · 4 = 半雙工 (RS485) 二線制模式

          該靜態變量“MODE”默認數據為0(RS232 全雙工模式),需要根據CM PTP模塊實際組態修改該數值,本例中CM PTP模塊工作在RS485半雙工模式需要將該數值修改為4,如圖12所示。

          圖片

          圖12. Modbus_Comm_Load背景數據塊靜態變量“MODE”修改為4

          ③ Modbus_Master指令的“DATA_PTR”參數用于指向要進行數據寫入或數據讀取的數據區域地址,該數據區域支持優化訪問的數據塊或者非優化(標準的)數據塊,建議采用非優化訪問的數據塊。
          本例中使用的數據區為非優化訪問的數據塊,在數據塊的屬性中取消“優化的塊訪問”即可將數據塊修改為非優化訪問的數據塊(鼠標右鍵數據塊,選擇“屬性”,取消“優化的塊訪問”),如圖13所示。

          圖片圖13. 設置數據塊為非優化訪問

          當Modbus_Master指令的“DATA_PTR”指向非優化訪問的數據塊時,該輸入參數需要使用指針方式填寫如P#DB3.DBX0.0 WORD 5 方式填寫。
          ④ 當Modbus RTU網絡中存在多個modbus RTU從站或一個modbus RTU從站同時需要讀操作和寫操作,則需要調用多個Modbus_Master指令,Modbus_Master指令之間需要采用輪詢方式調用。
          下圖14用于描述兩個Modbus_Master指令輪詢調用的方式。

          圖片圖14.Modbus_Master輪詢調用方式



          b、插入"Pull or plug of modules" 中斷OB83。

          本例中Modbus RTU主站模塊安裝在分布式IO站點上,因此程序中需要考慮分布式IO站點故障、CM PTP 模塊插拔模塊等故障。 
          分布式IO站點中插出、拔入模塊時,操作系統都會調用一次OB83。通過OB83接口區的輸入變量“16#Event_Class”判斷故障的模塊和類型:事件類型16#39表示模塊被拔出,事件類型16#38表示模塊被插入。
          CM PTP 模塊被重新插入的時候,需要在中斷OB83中調用Modbus_Comm_Load 指令對通信模塊進行重新組態,如圖15所示。圖片

          圖15. OB83中再次調用Modbus_Comm_Load 指令



          注意

          ① OB83 中調用Modbus_Comm_Load指令的背景數據塊需要與OB1中調用的Modbus_Comm_Load指令的背景數據塊相同。
          ② CM PTP模塊的硬件標識符也可以在"PLC變量"--->"系統常數"中查詢,如圖16. 所示。

          圖片

          圖16. 系統常量



          c、插入"Rack or Station failure" 中斷OB86。

          分布式IO站點故障和恢復時,操作系統都會調用一次OB86。通過OB86接口區的輸入變量“16#Event_Class”判斷故障的模塊和類型:事件類型16#39表示站點故障,事件類型16#38表示站點恢復。
          CM PTP 模塊所在的IO站點恢復時,需要在中斷OB86中調用Modbus_Comm_Load 指令對通信模塊進行重新組態,如圖17所示。

          圖片

          圖17. OB86中調用Modbus_Comm_Load 指令



          注意

          ①OB86 中調用Modbus_Comm_Load指令的背景數據塊需要與OB1中調用的Modbus_Comm_Load指令的背景數據塊相同。
          ② 分布式IO 站點的硬件標識符也可以在"PLC變量"--->"系統常數"中查詢。



          2Modbus RTU 從站編程

          Modbus RTU從站編程需要調用Modbus_Comm_Load指令和Modbus_Slave指令,其中Modbus_Comm_Load指令通過Modbus RTU協議對通信模塊進行組態,Modbus_Slave指令可通過由Modbus_Comm_Load指令組態的端口作為Modbus從站進行通信,Modbus_Comm_Load指令的MB_DB參數必須連接到Modbus_Slaver指令的(靜態)MB_DB參數。

          本例中CPU機架CM1241 RS422/485作為Modbus RTU從站,其相關編程步驟如下:

          OB1中插入一個FC函數,并在函數中拖入Modbus_Comm_Load指令和Modbus_Slave指令。如圖18所示

          圖片

          圖18. 拖入Modbus RTU 從站指令


          Modbus_Slave指令各參數意義如下表3所示:

          引腳

          說明

          MB_ADDR

          Modbus 從站的標準尋址:
          標準尋址范圍(1 到 247)
          擴展尋址范圍(0 到 65535)

          MB_HOLD_REG

          數據指針,指向Modbus 保持寄存器的地址, Modbus 保持寄存器可以為M存儲區或DB數據區。
          如果Modbus 保持寄存器為DB數據區,則DB數據區支持優化訪問的數據塊或非優化訪問的數據塊,建議采用非優化訪問的數據塊。 

          NDR

          可用的新數據:

          · FALSE - 無新數據

          · TRUE – 表示新數據已由 Modbus 主站寫入 
          如果上一個請求完成并且沒有錯誤,NDR 位將變為 TRUE 并保持一個周期。

          DR

          讀取數據:

          · FALSE - 無新數據

          · TRUE –表示該指令已將 Modbus 主站接收到的數據存儲在目標區域中。
          如果上一個請求完成并且沒有錯誤,DR 位將變為 TRUE 并保持一個周期。

          ERROR

          如果上一個請求完成出錯,則 ERROR 位將變為 TRUE 并保持一個周期。如果執行因錯誤而終止,則 STATUS 參數中的錯誤代碼僅在 ERROR = TRUE 的周期內有效。

          STATUS

          錯誤代碼

          表3 Modbus_Slave指令參數意義



          注意


          聯系方式

          • 電  話:17838383235
          • 經理:徐嘉泉
          • 手  機:17838383235
          • 微  信:17838383235