天天看點

modbus從站模拟軟體_S7-200 Modbus RTU從站

modbus從站模拟軟體_S7-200 Modbus RTU從站

2.1從站通信協定

S7-200 CPU上的通信口Port0可以支援Modbus RTU協定,成為Modbus RTU從站。此功能是通過S7-200的自由口通信模式實作,是以可以通過無線資料電台等慢速通信裝置傳輸。

詳情請參考《S7-200系統手冊》之相關章節。

要實作Modbus RTU通信,需要STEP 7-Micro/WIN32 V3.2以上版本的程式設計軟體,而且須安裝STEP 7-Micro/WIN32 V3.2 Instruction Library(指令庫)。Modbus RTU功能是通過指令庫中預先編好的程式功能塊實作的。

Modbus RTU從站指令庫隻支援CPU上的通信0口(Port0)。

2.2程式設計基本步驟

1,檢查Micro/WIN的軟體版本,應當是STEP 7-Micro/WIN V3.2以上版本。

2,檢查Micro/WIN的指令樹中是否存在Modbus RTU從站指令庫(圖1),庫中應當包括MBUS_INIT和MBUS_SLAVE兩個子程式。如果沒有,須安裝Micro/WIN32 V3.2的Instruction Library(指令庫)軟體包;

modbus從站模拟軟體_S7-200 Modbus RTU從站

圖1. 指令樹中的庫指令

3,程式設計時使用SM0.1調用子程式MBUS_INIT進行初始化,使用SM0.0調用MBUS_SLAVE,并指定相應參數。關于參數的詳細說明,可在子程式的局部變量表中找到;

modbus從站模拟軟體_S7-200 Modbus RTU從站

圖2. 調用Modbus RTU通信指令庫

圖中參數意義如下:

  • 模式選擇:啟動/停止Modbus,1=啟動;0=停止
  • 從站位址:Modbus從站位址,取值1~247
  • 波特率:可選1200,2400,4800,9600,19200,38400,57600,115200
  • 奇偶校驗:0=無校驗;1=奇校驗;2=偶校驗
  • 延時:附加字元間延時,預設值為0
  • 最大I/Q位:參與通信的最大I/O點數,S7-200的I/O映像區為128/128,預設值為128
  • 最大AI字數:參與通信的最大AI通道數,可為16或32
  • 最大保持寄存器區:參與通信的V存儲區字(VW)
  • 保持寄存器區起始位址:以&VBx指定(間接尋址方式)
  • 初始化完成标志:成功初始化後置1
  • 初始化錯誤代碼
  • Modbus執行:通信中時置1,無 Modbus 通信活動時為 0。
  • 錯誤代碼:0=無錯誤

4,在CPU的V資料區中配置設定庫指令資料區(Library Memory);

5,如有必要,使用主站軟體測試。

注意:由子程式參數HoldStart和MaxHold指定的保持寄存器區,是在S7-200 CPU的V資料存儲區中配置設定,此資料區不能和庫指令資料區有任何重疊,否則在運作時會産生錯誤,不能正常通信。注意Modbus 中的保持寄存器區按"字"尋址,即MaxHold規定的是VW而不是VB的個數。

在圖2的例子中,規定了 Modbus 保持寄存器區從 VB0 開始(HoldStart = VB0),并且保持寄存器為1000個字(MaxHold=1000),因保持寄存器以字(兩個位元組)為機關,實際上這個通信緩沖區占用了VB0~VB1999共2000個位元組。是以配置設定庫指令保留資料區時至少要從VB2000開始。當然保持區不一定要從VB0開始。

注意:你選用的CPU的V存儲區大小!CPU型号不同V資料存儲區大小不同。應根據需要選擇Modbus保持寄存器區域的大小。

包含 Modbus RTU 從站指令庫的項目編譯、下載下傳到CPU中後,在程式設計計算機(PG/PC)上運作一些 Modbus 測試軟體可以檢驗S7-200的Modbus RTU通信是否正常,這對查找故障點很有用。測試軟體通過計算機序列槽(RS-232)和PC/PPI電纜連接配接CPU。如果必要,須将PC/PPI電纜設定在自由口通信方式。

可到一些軟體下載下傳網站尋找類似軟體,如 ModScan32 等。

2.3從站位址與S7-200的位址對應

Modbus位址總是以00001、30004之類的形式出現。S7-200内部的資料存儲區與Modbus的0、1、3、4共4類位址的對應關系如下:

圖3. Modbus位址對應表

modbus從站模拟軟體_S7-200 Modbus RTU從站

其中T為S7-200中的緩沖區起始位址,即 HoldStart。

如果已知S7-200中的V存儲區位址,推算Modbus位址的公式如下:

Modbus位址 = 40000 + (T/2+1) ; T為偶數

2.4從站指令庫支援的功能碼

Modbus RTU 從站指令庫支援特定的 Modbus 功能。通路使用此指令庫的主站必須遵循這個指令庫的要求。

圖 4. Modbus RTU 從站功能碼

modbus從站模拟軟體_S7-200 Modbus RTU從站

2.5從站例程

Modbus RTU 從站例程

需要 STEP 7-Micro/WIN V4.0 SP3 以上版打開

2.6從站常見問題

Modbus 從站的網絡位址與 S7-200 的 CPU 網絡位址有什麼關系?

沒有關系。支援網絡通信的通信協定必須有其自己的網絡尋址規定。Modbus 從站的位址隻是它在 Modbus 網絡上的位址,而通常所說的 S7-200 CPU 位址是 CPU 在西門子的 PPI 網絡上的站位址。S7-200 CPU 的大部分通信功能都通過 PPI 網絡完成,例如程式設計、網絡讀寫通信等。

如何了解 Modbus 位址與功能碼的差別?

Modbus 位址與 Modbus 的功能碼是兩個層次的概念。

根據 Modbus 通信協定,Modbus 資料的位址使用 00xxx、10xxx、30xxx 和 40xxx 的形式,分别表示數字量輸出、數字量輸入、模拟量輸入等資料位址。在使用 S7-200 的指令庫時,Modbus 資料位址與 S7-200 的 I/O 和資料存儲區位址間有特定的對應關系。

有些裝置表明它支援 Modbus RTU 通信協定,但也詳細提供了讀寫資料的詳細通信幀格式,其中包括如何指定 Modbus 站的位址,需要讀寫資料類型、長度等等。資料幀有特定位元組指出此指令讀寫的資料類型和位址,此位元組的資料内容即所謂"功能碼",如功能 1 指定讀取單個/多個數字量輸出點的值。

支援 Modbus 協定的裝置或軟體,使用時使用者直接設定或看到的應當是 Modbus 資料位址。Modbus 位址所通路的資料,是通過各種"功能"讀寫而來。功能碼是 Modbus 位址的底層。如果 Modbus 通信的一方提供的所謂 Modbus 協定隻有功能碼,則需要注意了解此功能号與 Modbus 位址間的對應關系。

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

Modbus 指令庫使用的是 CPU 的自由口通信功能,工作在自由口模式下的通訊口不能使用 Micro/WIN 的 PPI 程式設計通信監控。如果通信口都已經被占用,可以考慮:

  • 加一個通信子產品(如 EM 277、CP 243-1、EM 241 等)擴充出一個程式設計通信口
  • 中止自由口模式,可以将 CPU 上的模式開關從 RUN 撥到 STOP;或者保持處于 RUN 狀态,用程式停止指令庫的 Modbus 模式(參見指令庫應用)

為何有些 HMI 軟體使用 Modbus RTU 讀取S7-200中的實數會出現錯誤?

有些HMI軟體使用Modbus RTU通信協定時,處理存儲在資料保持寄存器中的實數(浮點數)的方式與西門子的實數儲存格式不同。西門子的PLC遵循"高位元組低位址、低位元組高位址"的規律。

Modbus RTU的保持寄存器總是以"字(雙位元組)"為機關,而一個實數需要4個位元組(雙字)表示。HMI軟體在處理時可能會把保持寄存器的兩個"字"互換位置,造成不能識别以西門子格式表示的實數。如果HMI軟體一方無法處理這種實數,則可在S7-200 CPU中程式設計将存入資料緩沖區(保持寄存器區)的實數的高字和低字互換。

為何有的HMI軟體用Modbus RTU可以讀取作為從站的S7-200的内容,但不能寫入?

可能此軟體使用了Modbus功能15(寫多個離散量)或類似功能(功能 16)。S7-200從站協定遵守"以整位元組位址邊界(如Q0.0、Q2.0)開始、以8的整數倍為位個數"的規約。如果HMI軟體未嚴格執行此規律就可能發生寫入錯誤的情況。

S7-200是否支援 Modbus ASCII 模式?

S7-200可以支援上述模式,但是沒有現成的指令庫,需要使用者自己程式設計。

項目編譯後為何出現很多錯誤?

使用指令庫時,若編譯後出現很多錯誤,一般是因為未指定庫指令資料存儲區。請參考相關條目。

S7-200 CPU的Port1是否可以支援Modbus RTU協定?

可以。使用者可以自己程式設計實作。

在S7-200的"Tips and Tricks"幫助文檔中,Tip041是Modbus RTU從站程式,使用者可以參考。

S7-200是否可以組成Modbus RTU通信網絡?如何組網?

S7-200可以組成RS-485基礎上的Modbus RTU網絡。如果通信對象是不同标準的通信口,可能還需要轉換。