S7200的MODBUS詳細應用示例參考模板_第1頁
S7200的MODBUS詳細應用示例參考模板_第2頁
S7200的MODBUS詳細應用示例參考模板_第3頁
S7200的MODBUS詳細應用示例參考模板_第4頁
S7200的MODBUS詳細應用示例參考模板_第5頁
已閱讀5頁,還剩38頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<PLC200 MODBUS協議配置使用方法> 1 / 43修訂歷史記錄日期版本說明(修改、補充、刪除)作者審核<2009/4/3 >第一版(已完)研發部·孫寶東研發部·王振岳5.13庫存儲區補充說明(36頁)注釋:紅色字體為注意點;藍色為修改補充;紫色為問題總結;茶色為暫時刪除;綠色為住宿。目 錄前言4第一章 使用Modbus協議庫6前言61.使用Modbus主設備協議的要求62.使用Modbus從站設備協議的要求73.Modbus主設備協議的初始化和執行時間74.Modbus從站協議的初始化和執行時間85.Modbus主設備尋址86.Modbus

2、 從站尋址87.Modbus主設備MBUS_MSG執行錯誤代碼108.Modbus從站協議執行錯誤代碼119.Modbus主設備高級用戶信息11第二章 使用Modbus主設備指令14前言141.MBUS_CTRL指令(初始化主設備)152.MBUS_MSG指令16第三章 使用Modbus從站指令22前言221.MBUS_INIT指令(初始化從站)232.MBUS_SLAVE指令263.常見問題26第四章 下載與通訊測試281.編譯、下載282.通訊31附表 主從站指令配置表37S7200 Modbus 主從協議版本(09年初稿版)制作:研發部前言:Modbus從站協議指令可以配置S7-200,

3、將其用作Modbus RTU從站,與Modbus主設備通訊。Modbus主設備協議指令可以配置S7-200,將其用作Modbus RTU主設備,與一個或多個Modbus從站通訊。Modbus指令安裝在STEP 7 Micro/WIN指令樹的"協議庫"文件夾中。有了這些新指令, 您可以將S7-200用作Modbus設備。當您在程序中加入Modbus指令時,會在項目中自動增加一個或多個相關子程序。Modbus主設備協議庫有兩個版本。一個版本使用CPU的端口0,另一個則使用CPU的端口1。端口1協議庫的POU名中帶有"_P1"(MBUS_CTRL_P1),表示

4、POU使用CPU上的端口1。在其它方面,這兩個Modbus主設備協議庫完全一致。Modbus從站協議庫僅支持端口0通訊。在 STEP 7 Micro/WIN 中,Modbus RTU 協議和 USS 協議操作庫位于操作樹的“庫”文件夾中。MODBUS 函數庫要求 STEP 7 Micro/WIN 為 V3.2 或更高版本。圖1: 添加函數庫第一章 使用Modbus協議庫前言:這些庫是附加函數庫,并非組態軟件 STEP 7 Micro/WIN 的組成部分。您如果需要使用 Modbus RTU 協議,必須先安裝“STEP 7 Micro/WIN 32 Toolbox V1.0”(包括庫),然后安裝

5、運行“STEP 7 Micro/WIN”。就會出現如圖1的庫。注意:這個函數庫包含可以在 STEP 7 Micro/WIN V3.2 中使用的 Modbus RTU 協議庫和 USS 協議庫。如果您安裝了 STEP 7 Micro/WIN V4.0 SP5 或者更高版本,那么操作庫中就會包含下列函數:· Modbus RTU Master V1.2 對應端口 0 和端口 1 · Modbus RTU Slave V1.0 對應端口 0 · USS protocol V2.3 對應端口 0 和端口 1下面我對Modbus RTU各指令功能與使用方法分別加以講解:1.

6、 使用Modbus主設備協議的要求Modbus主設備協議指令使用下列S7-200資源:·初始化Modbus主設備協議可以為Modbus主設備協議通訊指定專用CPU端口。當CPU端口被用于Modbus主設備協議通訊時,就無法用于任何其它用途,包括與STEP 7-Micro/WIN通訊。MBUS_CTRL指令控制將端口0分配給Modbus協議或PPI,Mode為1時分配給Modbus協議,為0是分配給PPI。將S7-200上的模式開關設為“STOP”,端口零也會被復位為PPI協議模式。MBUS_CTRL_P1指令(來自端口1協議庫)控制將端口1分配給Modbus主設備協議或PPI。

7、83;Modbus主設備協議指令影響與CPU通訊端口中自由端口通訊相關的所有SM位置。·Modbus主設備協議指令使用3個子程序和1個中斷例程。·Modbus主設備協議指令要求兩個Modbus主設備指令和支持例程有1620個字節的程序空間。·Modbus主設備協議指令的變量要求284個字節的V存儲器程序塊。該程序塊的起始地址由用戶指定,專門保留用于Modbus變量。· S7-200 CPU必須是固化程序修訂版2.00或最好支持Modbus主設備協議庫(CPU MLFB 21x-2xx23-0XB0)。·Modbus主設備協議庫為某些功能使用用戶

8、中斷。用戶中斷不能被用戶程序禁用。提示:欲將CPU通訊端口操作更換回PPI以便與STEP 7-Micro/WIN通訊,將MBUS_CTRL指令的模式參數設置為零(0)。您還可以將S7-200上的模式開關設置到STOP模式位置。這些方法中的任一個將設置CPU通訊端口與STEP 7-Micro/WIN通訊。2. 使用Modbus從站協議的要求Modbus從站協議指令使用下列S7-200資源:·初始化Modbus從站協議為Modbus從站協議通訊指定端口0。當端口0被用于Modbus從站協議通訊時,就無法用于任何其它用途,包括與STEP 7-Micro/WIN通訊。MBUS_INIT指令控

9、制將端口0指定給Modbus從站協議或PPI。·Modbus從站協議指令影響與端口0中自由端口通訊相關的所有SM位置。·Modbus從站協議指令使用3個子程序和2個中斷例程。·Modbus從站協議指令要求兩個Modbus主設備指令和支持例程有1857個字節的程序空間。·Modbus從站協議指令的變量要求779個字節的V存儲器程序塊。該程序塊的起始地址由用戶指定,專門保留用于Modbus變量。一定要設置V存儲區,不然編譯時會出現錯誤信息,設置過程很簡單: 點擊“文件”“庫存儲區”,出現如下畫面(進行設置即可):提示:欲將端口0操作更換回PPI以便與STEP

10、 7-Micro/WIN通訊,用另一條MBUS_INIT指令重新指定端口0。您還可以將S7-200上的模式開關設為STOP模式。這樣會將參數復原為端口0。3. Modbus主設備協議的初始化和執行時間Modbus主設備協議每次掃描都需要少量的時間來執行MBUS_CTRL指令。MBUS_CTRL初始化Modbus主設備(首次掃描)需要大約1.11毫秒的時間,以后掃描需要大約0.41毫秒。當MBUS_MSG子程序執行請求時,將執行掃描時間。大多數時間用于計算Modbus CRC的請求和應答。CRC (循環冗余檢驗)確保通訊消息的完整性。對于請求和應答中的每個字,掃描時間會延長約1.85毫秒。最大請

11、求/應答(讀取或寫入120個字)使掃描時間延長約222毫秒。當在從站中接收應答并至少發出請求時,主要是讀取請求在延長掃描時間。當將數據發送到從站并至少收到應答時,主要是寫入請求在延長掃描時間。4. Modbus從站協議的初始化和執行時間Modbus通訊使用CRC (循環冗余檢驗)確保通訊消息的完整性。Modbus從站協議使用預先計算數值的表格減少處理消息的時間。該CRC表初始化約需240毫秒。初始化在MBUS_INIT子程序中進行,通常在進入RUN模式后用戶程序首次掃描時執行。如果MBUS_INIT子程序和任何其它初始化程序要求的時間超過500微秒掃描監視時間,您需要復原監視定時器,并將輸出保

12、持在啟用狀態(如果擴展模塊要求)。輸出模塊監視定時器可用向模塊輸出寫入的方法復原。請參閱監視復原指令。當MBUS_SLAVE子程序執行請求時,掃描時間會延長。由于大多數時間用于計算Modbus CRC,對于請求中和應答中的每個字節,掃描時間會延長約420微秒。最大請求/應答(讀取或寫入120個字)使掃描時間延長約100毫秒。5. Modbus主設備尋址Modbus地址通常寫作包含數據類型和偏移量的5個字符的數值。第一個字符決定數據類型,最后四個字符在數據類型中選擇適當的數值。然后,Modbus主設備指令將地址映射至正確的功能,以便發送到從站。Modbus主設備指令支持下列Modbus地址:00

13、001至09999是離散輸出(線圈)10001至19999是離散輸入(觸點)30001至39999是輸入寄存器(通常是模擬量輸入)40001至49999是保持寄存器所有Modbus地址均以1為基位,表示第一個數據值從地址1開始。有效地址范圍將取決于從站。不同的從站將支持不同的數據類型和地址范圍。6. Modbus 從站尋址Modbus地址通常被寫為包含數據類型和偏移量的5個字符的數值。第一個字符決定數據類型,最后四個字符在數據類型中選擇適當的數值。然后,Modbus主設備將地址映射至正確的功能。Modbus從站指令支持下列地址:00001至00128是映射至Q0.0 - Q15.7的離散輸出1

14、0001至10128是映射至I0.0 - I15.7的離散輸入30001至30032是映射至AIW0至AIW62的模擬輸入寄存器40001至4xxxx是映射至V存儲器的保持寄存器。所有Modbus地址均以1為基位。下表顯示映射至S7-200地址的Modbus地址。Modbus地址S7-200地址00001Q0.000002Q0.100003Q0.2.00127Q15.600128Q15.710001I0.010002I0.110003I0.2.10127I15.610128I15.730001AIW030002AIW230003AIW4.30032AIW6240001Hold Start400

15、02HoldStart+240003HoldStart+4.4xxxxHoldStart+2 x (xxxx-1)Modbus從站協議允許您限制Modbus主設備可存取的輸入、輸出、模擬輸入和保持寄存器(V存儲器)數量。MBUS_INIT指令的MaxIQ參數指定Modbus主設備允許存取的離散輸入或輸出(I或Q)的最大數目。MBUS_INIT指令的MaxAI參數指定Modbus主設備允許存取的輸入寄存器(AIW)的最大數目。MBUS_INIT指令的MaxHold參數指定Modbus主設備允許存取的保持寄存器(V存儲器字)的最大數目。請參閱MBUS_INIT指令說明,了解有關為Modbus從站設

16、定存儲器限制的進一步詳情。7. Modbus主設備MBUS_MSG執行錯誤代碼MBUS_MSG錯誤代碼說明0無錯誤1應答時奇偶校驗錯誤:僅當使用偶校驗或奇校驗時才會發生。傳輸被干擾,可能會收到不正確的數據。該錯誤通常是由電氣故障(例如錯誤接線或者影響通訊的電噪聲)引起的。2未使用3接收超時:在"超時"時間內,沒有來自從站的應答。可能有以下一些原因:與從站的電氣連接有問題、主設備和從站設置為不同的波特率/奇偶校驗設置,以及錯誤的從站地址。4請求參數出錯:一個或多個輸入參數(從站、讀寫、地址或計數)被設置為非法值。檢查文檔中輸入參數的允許值。5Modbus主設備未啟用:在調用M

17、BUS_MSG前,每次掃描時都調用MBUS_CTRL。6Modbus忙于處理另一個請求:一次只能激活一條MBUS_MSG指令。7應答時出錯: 收到的應答與請求不相關。這表示從站中出現了某些錯誤,或者錯誤的從站應答了請求。8應答時CRC錯誤: 傳輸被干擾,可能會收到不正確的數據。該錯誤通常是由電氣故障(例如錯誤接線或者影響通訊的電噪聲)引起的。101從站不支持在該地址處所請求的功能:請參閱"使用Modbus主設備指令"幫助主題中的所需Modbus從站功能支持表。102從站不支持數據地址:"地址"加上"計數"所要求的地址范圍超出了從站所允

18、許的地址范圍。103從站不支持數據類型:該"地址"類型不被從站支持。104從站故障105從站已接受消息但應答延遲:這是MBUS_MSG的錯誤,用戶程序應在稍后重新發送請求。106從站忙,因此拒絕消息:可以再次嘗試相同的請求,以獲得應答。107從站因未知原因而拒絕消息108從站存儲器奇偶校驗錯誤:從站中有錯誤。8. Modbus從站協議執行錯誤代碼錯誤代碼說明0無錯誤1內存范圍錯誤2非法波特率或奇偶校驗3非法從屬地址4非法Modbus參數值5保持寄存器與Modbus從屬符號重疊6收到奇偶校驗錯誤7收到CRC錯誤8非法功能請求/功能不受支持9請求中的非法內存地址10從屬功能未啟

19、用9. Modbus主設備高級用戶信息·返回的功能與請求不匹配(錯誤代碼7)。Modbus主設備將在設置"完成"和"錯誤"輸出參數前,重新發送請求兩個附加時間。通過查找Modbus主設備符號表中的符號mModbusRetries然后在執行MBUS_CTRL后改變該值,可以更改重試次數。mModbusRetries值是"字節"類型,重試范圍是0至255。內部字符超時如果應答中字符之間的時間超出了指定的時間限制,Modbus主設備將中止來自從站的應答。缺省時間設置為100毫秒,可允許Modbus主設備協議用于大多數有線或電話調制

20、解調器聯網的從站。如果檢測到該錯誤,MBUS CTRL"錯誤"參數將設置為錯誤代碼3。當字符之間需要較長的時間時,可能是因為傳送介質(例如電話調制解調器)或者因為從站自身需要更多的時間。通過查找Modbus主設備符號表中的符號mModbusCharTimeout然后在執行MBUS_CTRL后改變該值,可以延長該超時時間。mModbusCharTimeout值是"整型"類型,范圍是1至少30000毫秒。單個對多個位/字寫入功能某些Modbus從站不支持Modbus功能寫入單個離散輸出位(Modbus功能5)或寫入單個保持寄存器(Modbus功能6)。這些設

21、備僅支持多個位寫入(Modbus功能15)或多個寄存器寫入(Modbus功能16)。如果從站不支持單個位/字Modbus功能,則MBUS_MSG指令將返回錯誤代碼101。Modbus主設備協議允許強制MBUS_MSG指令,以使用多個位/字Modbus功能來取代單個的位/字Modbus功能。通過查找Modbus主設備符號表中的符號mModbusForceMulti然后在執行MBUS_CTRL后改變該值,可以強制執行多個位/字指令。mModbusForceMulti值是"布爾"數據類型, 應該設置為"1"以在寫入單個位/寄存器時強制使用多個位/字功能。累加器

22、用途累加器(AC0、AC1、AC2, AC3)由Modbus主設備指令使用,并在"交叉參考"列表中顯示。累加器中的數值被Modbus主設備指令保存和恢復。當執行Modbus主設備指令時,保存累加器中的所有用戶數據。保持寄存器地址大于9999Modbus保持地址通常在40001到49999的范圍內。該范圍對大多數應用程序來說足夠了,但是某些數據映射到保持寄存器的Modbus從站所具有的地址超過9999。這些設備不適合常規的Modbus尋址方案。Modbus主設備指令支持通過可選的尋址方法對大于9999的保持寄存器進行尋址。MBUS_MSG指令允許參數"地址"

23、;具有附加范圍以支持保持寄存器地址的擴充范圍。400001至465536用于保持寄存器例如:要訪問保持寄存器16768,MBUS_MSG的"地址"參數應該設置為416768。擴充尋址允許訪問Modbus協議支持的65536個可能地址的全部范圍。該擴充尋址僅支持保持寄存器。第二章 使用Modbus主設備指令前言:欲在S7-200程序中使用Modbus主設備指令,請執行以下步驟:1.在程序中插入MBUS_CTRL指令,并在每次掃描時執行MBUS_CTRL。您可以使用MBUS_CTRL指令初始化或更改Modbus通訊參數。當您插入MBUS_CTRL指令時,會在程序中自動增加幾個受

24、保護的子程序和中斷例程。2.使用協議庫存儲器命令,為Modbus主設備協議指令需要的V存儲器指定一個起始地址。3.將一條或多條MBUS_MSG指令放入程序中。可以根據需要將盡可能多的MBUS_MSG指令放入程序中,但每次只能激活這些指令中的一條。4.連接S7-200 CPU上的端口0 (或對端口1協議庫是端口1)和Modbus從站之間的通訊電纜。當心:帶有不同參考電位的互連裝置會引起互連電纜中出現意外電流。這些意外電流會引起通訊錯誤或損壞裝置。確保所有用通訊電纜連接的設備共享一個共用電路參考或單獨隔離,以防不需要的電流通過。Modbus主設備指令使用如下顯示的Modbus功能讀取或寫入特定的M

25、odbus地址。Modbus從站必須支持所需的Modbus功能才能讀取或寫入特定的Modbus地址。所需的Modbus從站功能支持Modbus地址讀取或寫入所需的Modbus從站功能00001 09999 離散輸出讀取寫入功能1功能5用于單個輸出點 功能15用于多個輸出點10001 19999離散輸出讀取寫入功能2不能30001 39999 輸入寄存器讀取寫入功能4不能40001 49999 保持寄存器讀取寫入功能3功能6用于單個寄存器 功能16用于多個寄存器1.MBUS_CTRL指令(初始化主設備) 輸入/輸出操作數數據類型模式I, Q, M, S, SM, T, C, V, L布爾波特VD

26、, ID, QD, MD, SD, SMD, LD, AC, Constant, *VD, *AC, *LD雙字奇偶校驗VB, IB, QB, MB, SB, SMB, LB, AC, Constant, *VD, *AC, *LD字節超時VW, IW, QW, MW, SW, SMW, LW, AC, Constant, *VD, *AC, *LD字完成I, Q, M, S, SM, T, C, V, L布爾錯誤VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *L字節用于S7-200端口0的MBUS_CTRL指令(或用于端口1的MBUS_CTRL_P1指

27、令)可初始化、監視或禁用Modbus通訊。在使用MBUS_MSG指令之前,必須正確執行MBUS_CTRL指令。指令完成后立即設定"完成"位,才能繼續執行下一條指令。在每次掃描且 EN輸入打開時執行該指令。MBUS_CTRL指令必須在每次掃描時(包括首次掃描)被調用,以允許監視隨MBUS_MSG指令啟動的任何突出消息的進程。除非每次調用MBUS_CTRL,否則Modbus主設備協議將不能正確運行。"模式"輸入數值選擇通訊協議。輸入值1將CPU端口分配給Modbus協議并啟用該協議。輸入值0將CPU端口分配給PPI系統協議并禁用Modbus協議。 "

28、;波特"參數將波特率設為1200、2400、4800、9600、19200、38400、57600或115200波特。"奇偶校驗"參數被設為與Modbus從站奇偶校驗相匹配。所有設置使用一個起始位和一個停止位。可接受的數值為: 0 - 無奇偶校驗1 - 奇校驗2 - 偶校驗"超時"參數設為等待來自從站應答的毫秒時間數。"超時"數值可以設置的范圍為1毫秒到32767毫秒。典型值是1000毫秒(1秒)。"超時"參數應該設置的足夠大,以便從站有時間對所選的波特率作出應答。"超時"參數用于確定

29、Modbus從站是否對請求做出應答。"超時"值確定Modbus主設備在發送了請求的最后一個字符后,將要等待多長時間才會有應答的第一個字符。如果在"超時"規定的時間內至少收到應答的一個字符,Modbus主設備將從Modbus從站接收到整個應答。MBUS_CTRL指令完成時,"完成"輸出打開。"錯誤"輸出包含執行該指令的結果。下表定義了在執行MBUS_CTRL指令時會產生的錯誤條件。 MBUS_CTRL錯誤代碼說明0 無錯誤1 奇偶校驗選擇無效2 波特率選擇無效3 超時選擇無效4 模式選擇無效2.MBUS_MSG指令輸

30、入/輸出數據類型操作數首次I, Q, M, S, SM, T, C, V, L (以上升沿檢測元素為條件的功率流)布爾從站VB, IB, QB, MB, SB, SMB, LB, AC, Constant, *VD, *AC, *LD字節讀寫VB, IB, QB, MB, SB, SMB, LB, AC, Constant, *VD, *AC, *LD字節地址VD, ID, QD, MD, SD, SMD, LD, AC, Constant, *VD, *AC, *LD雙字計數VW, IW, QW, MW, SW, SMW, LW, AC, Constant, *VD, *AC, *LD整型D

31、ataPtr&VB雙字完成I, Q, M, S, SM, T, C, V, L布爾錯誤 VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *LD字節MBUS_MSG指令(或用于端口1的MBUS_MSG_P1)用于啟動對Modbus從站的請求并處理應答。當EN輸入和"首次"輸入打開時,BUS_MSG指令啟動對Modbus從站的請求。發送請求、等待應答、并處理應答通常需要多次掃描。EN輸入必須打開以啟用請求的發送,并應該保持打開直到"完成"位被置位。注釋:一次只能激活一條MBUS_MSG指令。如果啟用了多條MBUS

32、_MSG指令,則將處理所執行的第一條MBUS_MSG指令,之后的所有MBUS_MSG指令將中止并產生錯誤代碼6。"首次"參數應該在有新請求要發送時才打開以進行一次掃描。"首次"輸入應當通過一個邊沿檢測元素(例如上升沿)打開,這將導致請求被傳送一次。"從站"參數是Modbus從站的地址。允許的范圍是0到247。地址0是廣播地址,只能用于寫請求。不存在對地址0的廣播請求的應答。并非所有的從站會支持廣播地址。S7-200 Modbus從站協議庫不支持廣播地址。"讀寫"參數指定是否要讀取或寫入該消息。"讀寫&qu

33、ot;參數允許使用下列兩個值:0 -讀,1 -寫。 離散輸出(線圈)和保持寄存器支持讀取和寫入請求。離散輸入(觸點)和輸入寄存器僅支持讀取請求。"地址"參數是起始的Modbus地址。允許使用下列取值范圍:00001至09999是離散輸出(線圈);10001至19999是離散輸入(觸點);30001至39999是輸入寄存器;40001至49999是保持寄存器 "地址"的指定取值范圍基于Modbus從站支持的地址。"計數"參數指定在該請求中讀取或寫入的數據元素的數目。"計數"值是位數(對于位數據類型)和字數(對于字數據

34、類型)。地址0xxxx -"計數"是要讀取或寫入的位數。地址1xxxx -"計數"是要讀取的位數。地址3xxxx -"計數"是要讀取的輸入寄存器的字數。地址4xxxx -"計數"是要讀取或寫入的保持寄存器的字數。MBUS_MSG指令將讀取或寫入最大120個字或1920個位(240字節的數據)。"計數"的實際限值將取決于Modbus從站中的限制。"DataPtr"參數是指向S7-200 CPU的V存儲器中與讀取或寫入請求相關的數據的間接地址指針。對于讀取請求,DataPtr應該

35、指向用于存儲從Modbus從站讀取的數據的第一個CPU存儲器位置。對于寫入請求,DataPtr應該指向要發送到Modbus從站的數據的第一個CPU存儲器位置。 DataPtr值作為間接地址指針傳遞到MBUS_MSG。例如,如果要寫入Modbus從站的數據從S7-200 CPU中的地址VW200開始,則DataPtr的數值將會是&VB200 (VB200的地址)。指針必須始終是VB類型,即使它們指向字數據。 保持寄存器(地址4xxxx)和輸入寄存器(地址3xxxx)的值是字(2個字節或16位)。S7-200 CPU字的格式與Modbus寄存器相同。低位編號的V存儲器地址是寄存器的最高有效

36、字節。高位編號的V存儲器地址是寄存器的最低有效字節。下表顯示了S7-200字節和字尋址如何與Modbus寄存器格式相對應。S7-200 CPU存儲器字節地址S7-200 CPU存儲器字地址Modbus保持寄存器地址地址十六進制數據地址十六進制數據地址十六進制數據VB20012VW20012 34400112 34VB20134VB20256VW20256 78400256 78VB20378VB2049AVW2049A BC40039A BCVB205BC位數據(地址0xxxx和1xxxx)區域作為壓縮字節被讀取和寫入,也就是說,每個數據字節內壓縮8位。第一個數據字節的最低有效位是尋址的位號(

37、參數"地址")。如果僅寫入單個的位,則該位必須處于指向DataPtr的字節的最低有效位字節。壓縮字節的格式(顯示離散輸入地址)Vx.7-Vx.01000810007100061000510004100031000210001對于未在偶數字節邊界上開始的位數據地址,與起始地址相關的位必須處于字節的最低有效位。參見如下在Modbus地址10004處開始的3位壓縮字節格式實例。壓縮字節的格式(在地址10004處開始的離散輸入)當寫入到離散輸出數據類型(線圈)時,用戶必須在數據通過DataPtr傳遞到MBUS_MSG指令之前,將壓縮字節內的位放置到正確的位位置中。"完成&

38、quot;輸出在發送請求和接收應答時關閉。"完成"輸出在應答完成或MBUS_MSG指令因錯誤而中止時打開。"錯誤"輸出僅當"完成"輸出打開時有效。請參閱Modbus主設備MBUS_MSG執行錯誤通過MBUS_MSG指令返回。低位編號的錯誤代碼(1到8)是由MBUS_MSG指令檢測到的錯誤。這些錯誤代碼通常指示與MBUS_MSG指令的輸入參數有關的問題,或接收來自從站的應答時出現的問題。奇偶校驗和CRC錯誤指示存在應答但是數據未正確接收。這通常是由電氣故障(例如連接有問題或者電噪聲)引起的。高位編號的錯誤代碼(從101開始)是由Modb

39、us從站返回的錯誤。這些錯誤指示從站不支持所請求的功能,或者所請求的地址(或數據類型或地址范圍)不被Modbus從站支持。程序舉例該實例程序顯示了在每次輸入I0.0打開時,如何使用Modbus主設備指令將4個保持寄存器寫入Modbus從站然后再從中讀取。S7-200 CPU將把自VW100開始的4個字寫入Modbus從站。數據將寫入從站中自地址40001開始的4個保持寄存器。S7-200 CPU于是將從Modbus從站讀取4個保持寄存器。數據將來自保持寄存器40010 40013,并放置到S7-200 CPU的V存儲器中自VW200開始的地址。實例程序數據傳送如果從MBUS_MSG指令返回一個

40、錯誤,則程序將打開輸出Q0.1和Q0.2。通過每次掃描時調用MBUS_CTRL來初始化和監視Modbus主設備。Modbus主設備設置為9600波特,無奇偶校驗。從站允許1000毫秒(1秒)的應答時間。在首次掃描時,重設用于兩條MBUS_MSG指令的啟用標記(M2.0和M2.1)。當I0.0從"關閉"切換到"打開"時,為第一條MBUS_MSG指令(M2.0)設置啟用標記。當第一個啟用標記(M2.0)打開時,調用MBUS_MSG指令。"首次"參數必須僅為啟用指令時的首次掃描而設置。該指令將4個保持寄存器寫入(RW = 1)從站2。要寫入

41、的數據取自CPU中的VB100-VB107 (4個字)并寫入Modbus從站中的地址40001 -40004。當第一條MBUS_MSG指令完成后("完成"從0變為1),清除對第一條MBUS_MSG指令的啟用,并為第二條MBUS_MSG指令設定啟用。如果錯誤(MB1)不為零,則設置Q0.1以顯示錯誤。當第二個啟用標記(M2.1)打開時,調用第二條MBUS_MSG指令。"首次"參數必須僅為啟用指令時的首次掃描而設置。該指令從從站2讀取(RW = 0) 4個保持寄存器。數據從Modbus從站的地址40010 ?40013讀取并復制到CPU中的VB200 ?VB

42、207 (4字)。當第二條MBUS_MSG指令完成("完成"從0變為1)后,清除對第二條MBUS_MSG指令的啟用。如果錯誤(MB1)不為零,則設置Q0.2以顯示錯誤。第三章 使用Modbus從站指令前言:編程時使用SM0.1調用子程序MBUS_INIT進行初始化,使用SM0.0調用MBUS_SLAVE,并指定相應參數。關于參數的詳細說明,可在子程序的局部變量表中找到;欲在S7-200程序中使用Modbus從站指令,請執行以下步驟:1.在程序中插入MBUS_INIT指令,并僅限為一次掃描執行MBUS_INIT指令。您可以使用MBUS_INIT指令初始化或更改Modbus通訊

43、參數。當您插入MBUS_INIT指令時,會在程序中自動增加幾個隱藏的子程序和中斷例行程序。2.使用協議庫存儲器命令,為Modbus從站協議指令需要的V存儲器指定一個起始地址。3.僅將一條MBUS_SLAVE指令放入程序中。每次掃描時均調用該指令,為所有收到的請求提供服務。4.連接S7-200上的端口0和Modbus主設備之間的通訊電纜。當心:帶有不同參考電位的互連裝置會使不需要的電流從互連電纜中通過。這些不需要的電流會引起通訊錯誤或損壞裝置。確保所有用通訊電纜連接的設備共享一個共用電路參考或單獨隔離,以防不需要的電流通過。累加器(AC0、AC1、AC2、AC3)被Modbus從站指令使用,在&

44、quot;交叉參考"列表中顯示。執行之前,Modbus從站指令累加器中的數值被保存,并在Modbus從站指令完成之前還原至累加器,以確保在執行Modbus從站指令時累加器中的所有用戶數據被保留。Modbus從站協議指令支持Modbus RTU協議。這些指令使用S7-200的自由端口實用程序支持最常用的Modbus功能。詳情見附表2從站功能碼與說明。1.MBUS_INIT指令(初始化從站) 輸入/輸出操作數數據類型模式、地址、奇偶校驗VB, IB, QB, MB, SB, SMB, LB, AC, Constant, *VD, *AC, *LD字節波特、HoldStartVD, ID,

45、 QD, MD, SD, SMD, LD, AC, Constant, *VD, *AC, *LD雙字延時、MaxIQ、MaxAI、MaxHoldVW, IW, QW, MW, SW, SMW, LW, AC, Constant, *VD, *AC, *LD字字完成I, Q, M, S, SM, T, C, V, L布爾錯誤VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *LD字節MBUS_INIT指令被用于啟用和初始化或禁止Modbus通訊。在使用MBUS_SLAVE指令之前,必須正確執行MBUS_INIT指令。指令完成后立即設定"完成&quo

46、t;位,才能繼續執行下一條指令。在每次掃描且EN輸入打開時執行該指令。應當在每次通訊狀態改變時執行MBUS_INIT指令。因此,EN輸入應當通過一個邊緣檢測元素用脈沖打開,或者僅在首次掃描時執行。"模式"輸入數值選擇通訊協議:輸入數值1將端口0指定給Modbus協議并啟用協議;將輸入數值0則將端口0指定給PPI,并禁用Modbus協議。"波特"參數將波特率設為1200、2400、4800、9600、19200、38400、57600或115200。"地址"參數將地址設為1和247之間(包括1和247)的數值。"奇偶校驗&qu

47、ot;參數被設為與Modbus主設備奇偶校驗相匹配。可接受的數值為:0-無奇偶校驗1-奇數校驗2-偶數校驗"延時"參數通過將指定的毫秒數增加至標準Modbus信息超時的方法延長標準Modbus信息結束超時條件。該參數的典型數值在有線網絡上應為0。如果您在使用帶有糾錯功能的調制解調器,將延時設為50至100毫秒的數值。如果您在使用擴展頻譜無線電,將延時設為10至100毫秒的數值。"延時"數值可以是0至32767毫秒。MaxIQ參數將供Modbus地址0xxxx和1xxxx使用的I和Q點數設為0至128之間的數值。數值0禁止所有向輸入和輸出的讀取。建議使用的

48、MaxIQ數值是128,該數值可在S7-200中存取所有的I和Q點。MaxAI參數將供Modbus地址3xxxx使用的字輸入(AI)寄存器數目設為0至32之間的數值。數值0禁止模擬輸入的讀數。建議使用的MaxAI數值如下,這些數值可允許存取所有的S7-200模擬輸入:0用于CPU 22116用于CPU 22232用于CPU 224、224XP、226和226XMMaxHold參數設定供Modbus地址4xxxx使用的V存儲器中的字保持寄存器數目。例如,為了允許主設備存取2000個字節的V存儲器,將MaxHold設為1000個字的數值(保持寄存器)。HoldStart參數是V存儲器中保持寄存器的

49、起始地址。該數值一般被設為VB0,因此HoldStart參數被設為&VB0 (VB0地址)。其它V存儲器地址可指定為保持寄存器的起始地址,以便在項目的其它地方使用VB0。Modbus主設備可存取V內存MaxHold個字數,從HoldStart開始。注意:你選用的CPU的V存儲區大小!CPU型號不同V數據存儲區大小不同。應根據需要選擇Modbus保持寄存器區域的大小。MBUS_INIT指令完成時,"完成"輸出打開。"錯誤"輸出字節包含執行指令的結果。請參閱Modbus從站協議執行錯誤代碼中可能因執行指令而產生的錯誤條件。包含 Modbus RTU

50、從站指令庫的項目編譯、下載到CPU中后,在編程計算機(PG/PC)上運行一些Modbus 測試軟件可以檢驗S7-200的ModbusRTU通信是否正常,這對查找故障點很有用。測試軟件通過計算機串口(RS-232)和PC/PPI電纜連接CPU。如果必要,須將PC/PPI電纜設置在自由口通信方式。可到一些軟件下載網站尋找類似軟件,如 ModScan32 等。NETWORK 1 / 首次掃描時初始化Modbus從站協議/ 將從站地址設為1,將端口0設為9600波特,將奇偶校驗設為偶數,/ 允許存取所有的I、Q和AI數值,允許存取1000臺保存寄存器(2000個字節)/ 從VB0開始。 LD SM0.

51、1CALL MBUS_INIT, 1, 1, 9600, 2, +0, +128, +32, +1000, &VB0, M0.1, MB1NETWORK 2 / 每次掃描時執行Modbus從站協議LD SM0.0CALL MBUS_SLAVE, M0.2, MB22.MBUS_SLAVE指令輸入/輸出操作數數據類型完成I, Q, M, S, SM, T, C, V, L布爾錯誤VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *LD字節MBUS_SLAVE指令被用于為Modbus主設備發出的請求服務,并且必須在每次掃描時執行,以便允許該指令檢查和回答

52、Modbus請求。在每次掃描且EN輸入開啟時執行該指令。MBUS_SLAVE指令無輸入參數。當MBUS_SLAVE指令對Modbus請求作出應答時,"完成"輸出打開。如果沒有需要服務的請求時,"完成"輸出關閉。"錯誤"輸出包含執行該指令的結果。該輸出只有在"完成"打開時才有效。如果"完成"關閉,錯誤參數不會改變。請參閱Modbus從站協議執行錯誤代碼 中可能因執行該指令而導致的錯誤條件。3.常問問題Modbus 從站的網絡地址與 S7-200 的 CPU網絡地址有什么關系? 沒有關系。支持網絡通

53、信的通信協議必須有其自己的網絡尋址規定。 Modbus 從站的地址只是它在 Modbus網絡上的地址,而通常所說的 S7-200 CPU 地址是 CPU 在西門子的 PPI 網絡上的站地址。S7-200 CPU的大部分通信功能都通過 PPI 網絡完成,例如編程、網絡讀寫通信等。如何理解 Modbus 地址與功能碼的區別? Modbus 地址與 Modbus 的功能碼是兩個層次的概念。根據 Modbus 通信協議,Modbus 數據的地址使用 00xxx、10xxx、30xxx 和 40xxx的形式,分別表示數字量輸出、數字量輸入、模擬量輸入等數據地址。在使用 S7-200 的指令庫時,Modb

54、us 數據地址與 S7-200的 I/O 和數據存儲區地址間有特定的對應關系。 有些設備表明它支持 Modbus RTU 通信協議,但也詳細提供了讀寫數據的詳細通信幀格式,其中包括如何指定 Modbus站的地址,需要讀寫數據類型、長度等等。數據幀有特定字節指出此指令讀寫的數據類型和地址,此字節的數據內容即所謂“功能碼”,如功能 1指定讀取單個/多個數字量輸出點的值。 支持 Modbus 協議的設備或軟件,使用時用戶直接設置或看到的應當是 Modbus 數據地址。Modbus地址所訪問的數據,是通過各種“功能”讀寫而來。功能碼是 Modbus 地址的底層。如果 Modbus 通信的一方提供的所謂

55、Modbus 協議只有功能碼,則需要注意了解此功能號與 Modbus 地址間的對應關系。Modbus 指令庫啟動后,如何通過同一個通信端口進行 CPU監控?Modbus 指令庫使用的是 CPU 的自由口通信功能,工作在自由口模式下的通訊口不能使用 Micro/WIN 的 PPI編程通信監控。如果通信口都已經被占用,可以考慮:加一個通信模塊(如 EM 277、CP 243-1、EM 241 等)擴展出一個編程通信口,中止自由口模式,可以將 CPU 上的模式開關從 RUN 撥到 STOP;或者保持處于 RUN 狀態,用程序停止指令庫的Modbus 模式(參見指令庫應用)為何有些 HMI 軟件使用

56、Modbus RTU讀取S7-200中的實數會出現錯誤?有些HMI軟件使用ModbusRTU通信協議時,處理存儲在數據保持寄存器中的實數(浮點數)的方式與西門子的實數保存格式不同。西門子的PLC遵循“高字節低地址、低字節高地址”的規律。 ModbusRTU的保持寄存器總是以“字(雙字節)”為單位,而一個實數需要4個字節(雙字)表示。HMI軟件在處理時可能會把保持寄存器的兩個“字”互換位置,造成不能識別以西門子格式表示的實數。如果HMI軟件一方無法處理這種實數,則可在S7-200CPU中編程將存入數據緩沖區(保持寄存器區)的實數的高字和低字互換。為何有的HMI軟件用ModbusRTU可以讀取作為從站的S7-200的內容,但不能寫入?可能此軟件使用了Modbus功能15(寫多個離散量)或類似功能(功能16)。S7-200從站協議遵守“以整字節地址邊界(如Q0.0、Q

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論