PLC的Modbus通信_第1頁
PLC的Modbus通信_第2頁
PLC的Modbus通信_第3頁
PLC的Modbus通信_第4頁
PLC的Modbus通信_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、PLC 與串口的 MODBUS 通信1 需求 2 方案MODBUS 協(xié)議是一種主從協(xié)議, 只允許一個主設(shè)備, 設(shè)計中以 PLC 作為主站 MSP430開 發(fā)板作為從站。如圖 1示。 圖 1 PLC與 MSP430連接圖為方便起見,首先以 PC 機作為 MODBUS 從站,在 PC 機上利用串口調(diào)試助手來接收和 發(fā)送數(shù)據(jù), PLC 通過 PPI 電纜連接到串口,采用 PROT0通訊口作為 MODBUS 通訊口。 3 具體實現(xiàn):3.1 MODBUS數(shù)據(jù)幀介紹MODBUS 廣泛應(yīng)用于工業(yè)通訊領(lǐng)域,它規(guī)定了通信雙方的通信格式,只要雙方都使用該 規(guī)定就可以解析出正確的通信內(nèi)容。在此, 首先介紹一下 MO

2、DBUS 通信的數(shù)據(jù)幀格式, 以 3號功能碼以及 16號功能碼為例, 3號功能碼是讀保持寄存器的值, 16號功能碼是寫保持寄存器的值。1、讀取保持寄存器當(dāng) MODBUS 主站需要讀取指定地址處數(shù)據(jù)時, 首先向從站發(fā)送一個讀命令幀, 所發(fā)送命 令幀格式如表 1。表 1 讀命令主站發(fā)送命令幀格式 數(shù)據(jù)幀說明如下表:表 2 讀命令主站發(fā)送命令幀說明 例:需要讀取 2號站從第 4個寄存器開始的 3個寄存器, MODBUS 主站發(fā)送的數(shù)據(jù)幀為:02 03 00 04 00 03 44 39從站在接收到主站的讀命令以后,會發(fā)送一個返回命令幀,返回的命令幀格式如表 3。表 3 讀命令從站返回命令幀格式 數(shù)據(jù)

3、幀說明如下表:表 4 讀命令從站返回命令幀說明 例:對于主站的讀命令幀, 2號站如果第 4個寄存器開始的 3個寄存器里面的值分別為:31,32H,33H,34H,35H,36H則應(yīng)答幀應(yīng)該是:02 03 06 31 32 33 34 35 36 D1 AC對于發(fā)送的命令幀與應(yīng)答幀之間有如下關(guān)系: 1:兩個數(shù)據(jù)幀的設(shè)備地址相同。 2:兩個數(shù)據(jù)幀的功能碼相同。 3:返回的數(shù)據(jù)量 N=2 DataNum如果從站在接收到數(shù)據(jù)以后,認為接收到的主站發(fā)送過來的數(shù)據(jù)是錯誤的,會返回一個 異常幀給主站,告訴主站,從站接收到的數(shù)據(jù)是錯誤的。異常幀的數(shù)據(jù)格式如表 5,數(shù)據(jù)幀不 再具體說明 。表 5 異常幀格式 例

4、:2號站在接收到主站發(fā)送的命令以后,判斷得出該命令是錯誤的,發(fā)送回一個異常幀:02 83 01 70 F0錯誤信息可以根據(jù)不同的錯誤類型而不同。2、寫保持寄存器當(dāng) MODBUS 主站需要向從站指定地址寫入數(shù)據(jù)時, 會發(fā)送一個數(shù)據(jù)幀, 數(shù)據(jù)幀格式如 表 6。表 6 寫命令主站發(fā)送數(shù)據(jù)幀格式 數(shù)據(jù)幀說明如下表:表 7 寫命令主站發(fā)送數(shù)據(jù)幀說明 例:需要向 2號從站第 80個寄存器開始的 4個寄存器里面依次寫入:11H,22H,33H,44H,55H,66H,77H,88H則 MODBUS 主站發(fā)送的數(shù)據(jù)幀為:02 10 00 50 00 04 08 11 22 33 44 55 66 77 88

5、D4 F0當(dāng)從站接收到主站的寫命令幀以后,判斷接收到的信息是正確的,會返回一個命令幀告 訴主站所發(fā)生的數(shù)據(jù)從站已經(jīng)正確接收到了,返回數(shù)據(jù)幀格式如表 8。表 8寫命令從站返回數(shù)據(jù)幀格式 返回幀說明如下表:表 9 寫命令從站返回數(shù)據(jù)幀說明 例:2號從站在接收到主站的寫命令以后,判斷接收到的信息是正確的,返回一個應(yīng)答幀: 02 10 00 50 00 04 C1 E8對于 PLC 寫保持寄存器,發(fā)送的命令幀與應(yīng)答幀之間應(yīng)該有如下關(guān)系:1:設(shè)備地址相同2:功能碼相同3:兩個數(shù)據(jù)幀的地址 HoldStart 相同4:兩個數(shù)據(jù)幀的數(shù)據(jù)量 DataNum 相同如果從站在接收到數(shù)據(jù)以后,認為接收到的主站發(fā)送過

6、來的數(shù)據(jù)是錯誤的,會返回一個 異常幀給主站,告訴主站,從站接收到的數(shù)據(jù)是錯誤的。異常幀的數(shù)據(jù)格式如表 10,命令幀不再具體說明。表 10 異常幀格式 例:2號從站在接到到命令以后,判斷接收到的信息是一個錯誤信息,返回一個異常幀: 02 90 01 7D C0錯誤信息可以根據(jù)不同的錯誤類型而不同。3.2 PLC指令介紹對于 S7-200 PLC, 開發(fā)了 MODBUS 庫函數(shù), 可以直接使用它所帶的 MODBUS 庫函數(shù)來 實現(xiàn) PLC 與其他設(shè)備之間的 MODBUS 通信。選用 PROT0作為 MODBUS 通信,主要用到 MODBUS 庫函數(shù)中的 MBUS_CTRL和 MBUS_MSG。用于

7、 S7-200端口 0的 MBUS_CTRL指令可初始化、監(jiān)視或禁用 Modbus 通訊。在使用 MBUS_MSG指令之前, 必須正確執(zhí)行 MBUS_CTRL指令。 指令完成后立即設(shè)定 " 完成 " 位, 才 能繼續(xù)執(zhí)行下一條指令。在每次掃描且 EN 輸入打開時執(zhí)行該指令。 MBUS_CTRL指令必須 在每次掃描時 (包括首次掃描 被調(diào)用, 以允許監(jiān)視隨 MBUS_MSG指令啟動的任何突出消息的 進程。除非每次調(diào)用 MBUS_CTRL,否則 Modbus 主設(shè)備協(xié)議將不能正確運行, MBUS_CTRL指令如圖 2。 圖 2 MBUS_CTRL指令Mode :輸入數(shù)值選擇通訊

8、協(xié)議。輸入值 1為 Modbus 協(xié)議;輸入值 0為 PPI 協(xié)議。在本 次設(shè)計中輸入 1。Baud :設(shè)置波特率, 可以設(shè)置的波特率有 1200、 2400、 4800、 9600、 19200、 38400、 57600和 115200,在本次設(shè)計中,波特率選擇為 9600。Parity :設(shè)置校驗方式。 0 - 無奇偶校驗; 1 - 奇校驗; 2 - 偶校驗。在本次設(shè)計中采用無 奇偶校驗。Timeout :設(shè)置超時時間,用于確定主站發(fā)送命令以后從站是否相應(yīng),一般設(shè)置為 1000。 Done :執(zhí)行該命令完成時,該位被置為 1。Error :當(dāng)指令執(zhí)行出現(xiàn)錯誤的時候,該寄存器顯示錯誤類型。

9、MBUS_MSG指令用于啟動對 Modbus 從站的請求并處理應(yīng)答。當(dāng) EN 輸入和 " 首次 " 輸入 打開時, BUS_MSG指令啟動對 Modbus 從站的請求。發(fā)送請求、等待應(yīng)答、并處理應(yīng)答通常 需要多次掃描。 EN 輸入必須打開以啟用請求的發(fā)送,并應(yīng)該保持打開直到 " 完成 " 位被置位, BUS_MSG指令如圖 3示。 圖 3 BUS_MSG指令First :應(yīng)當(dāng)通過一個邊沿檢測元素打開,這將導(dǎo)致請求被傳送一次。Slave :Modbus 從站的地址。RW :指定指令的類型是讀指令還是寫指令, 0表示指令為讀 ;1表示指令為寫。Addr :讀

10、取 Modbus 從站的起始地址。Count :指定此次讀寫數(shù)據(jù)的個數(shù) 。DataPtr :要寫入數(shù)據(jù)的首地址或者是讀取上來數(shù)據(jù)存放的首地址。Done :指令完成時該位置 1。Error :當(dāng)指令執(zhí)行出現(xiàn)錯誤時,在該寄存器處顯示出錯誤號。例:1、需要讀取 2號站地址為 0004開始的 3個寄存器里面的值到 VB200地址開始的寄存器 里,設(shè)置如圖 4。2、需要將 VB100地址開始的 4個寄存器里面的值寫到地址為 004F 開始的寄存器里面, 設(shè)置如圖 5。 圖 4 讀數(shù)據(jù)設(shè)置 圖 6 寫數(shù)據(jù)設(shè)置在這里需要注意的有兩點:第一,對于要寫入或者是要讀取的寄存器地址,如果需要讀 0004開始的寄存器

11、,地址要 設(shè)置為 40005而不是 40004,同樣如果需要寫 004F 地址應(yīng)該設(shè)置為 40080而不是 40079,這 是通過觀察其發(fā)送出的數(shù)據(jù)幀發(fā)現(xiàn)的, 如果讀寄存器時地址設(shè)置為 40004, 發(fā)送出的命令幀是: 02 03 00 03 00 03 F5 F8寫命令同樣存在地址不同的情況。第二,就是要讀取的數(shù)據(jù)量是以字為單位而不是以字節(jié)為單位。3.3 I/O分配在這次設(shè)計中一共用到了 5個輸入, 3個輸出,具體分配如表 7表 7 I/O分配表 3.4 PLC程序設(shè)計PLC 程序包含一個主程序和 4個子程序構(gòu)成。 4個子程序分別是一個初始化子程序和 3個 步進電機階段控制子程序。主程序主要

12、是根據(jù)條件調(diào)用相應(yīng)的子程序,此外還處理一些簡單的邏輯運算 。 主程序流 程圖如圖 7:圖 7 主程序流程圖初始化子程序是在上電或者是滿足復(fù)位條件時調(diào)用的,在該子程序里面完成了 4個動作:第一,將寫數(shù)據(jù)緩沖區(qū) VB100到 VB107全部清零;第二,將存放 3個階段狀態(tài)信息返回值的寄存器 VB200,VB210,VB220清零; 第三,將 3個階段子程序中所用到的控制寄存器 VD0,VD4,VW8清零;第四,將 VB10里面的值賦值為 1,允許步進電機階段 1動作。初始化流程如圖 8示。 圖 8 初始化流程圖步進電機階段控制包括 3個子程序,三個子程序的動作流程結(jié)構(gòu)一樣,當(dāng)進入相應(yīng)步進 電機階段

13、子程序后執(zhí)行:步驟 1:判斷是否滿足發(fā)送相應(yīng)的步進電機階段控制命令,如果不滿足繼續(xù)等待;如果滿 足,進入下一步。步驟 2:將上一步進電機階段控制所用到的寄存器清零。步驟 3:將存放 3個步進電機階段狀態(tài)信息返回值的寄存器 (VB200,VB210,VB220 清零, 進入下一步。步驟 4:對 VB100賦值。步驟 5:將 VB100開始地址處的 4個數(shù)據(jù)寫入從站,進入下一步。步驟 6:判斷是否接收到下位機返回的接收正確的信號,如果接收到進入下一步驟,如果 沒有接收到,另行處理,現(xiàn)在程序中還沒有編寫。步驟 7:延時 10S ,讀取從站狀態(tài)信息寄存器里面的值,放入對應(yīng)的寄存器。步驟 8:根據(jù)相應(yīng)寄

14、存器里面值判斷相應(yīng)的步進電機階段動作是否完成, 如果狀態(tài)信息表 示完成,進入步驟 10,如果狀態(tài)信息表示未完成進入下一步。如果接收到的狀態(tài)信息錯誤, 在指定的輸出點報錯。步驟 9:延時 5S ,再次執(zhí)行步驟 8。步驟 10:賦值 VB10, 允許發(fā)送下一步進電機階段動作命令。3個步進電機階段的動作流程圖如圖 9示。開始 否 滿足發(fā)送控制命令 是 清步進階段3中用于控制的V寄存器(VW7,VB9) 將存放3個步進階段狀態(tài)信息返回值寄存器(VB200,VB210,VB220清零 對VB100賦值 將VB100地址開始的4個數(shù)據(jù)寫入從站 否 接收到正確的反饋 程序中沒編 是 延時10S 讀單片機階段

15、執(zhí)行狀態(tài)寄存器值到PLC 延時5S 其他 報錯 判斷狀態(tài)值 完成 賦值;VB10 未完成 結(jié)束 圖 9 步進電機階段動作流程圖 3 個步進電機階段動作流程圖類似,不同之處如表: 階段 步驟名 步驟 1 步驟 2 步驟 4 步進電機階段 1 判斷條件是 I0.1 清 VB7,VB8,VB9 賦值 VB100=01H 步進電機階段 2 判斷條件是 I0.2 清 VB1,VB2,VB3 賦值 VB100=02H 步進電機階段 3 判斷條件是 I0.3 清 VB4,VB5,VB6 賦值 VB100=04H 第 11 頁 共 14 頁 返回一個錯誤信息時,比如在步進電機階段 1 時,從站返回一個步進電機

16、階段 2 完成,那么 PLC 接收到消息以后直接在指定報錯點 Q0.1 報錯。 3、進入允許步進電機階段 2 時,按照步進電機階段 1 的操作順序進行操作。與步進電機 階段 1 不同的有三點: 第一,PLC 發(fā)送到從站的控制命令幀不一樣,步進電機階段 2 PLC 發(fā)送的控制命令幀為: 02 10 00 4F 00 04 08 02 00 00 00 00 00 00 00 61 89 第二,當(dāng) PLC 在發(fā)送讀數(shù)據(jù)請求以后,從站返回的數(shù)據(jù)幀不一樣,如果步進電機階段 2 未完成返回的數(shù)據(jù)幀應(yīng)該是: 02 03 06 05 00 00 00 00 00 35 D0 當(dāng)步進電機階段 2 完成時返回的

17、數(shù)據(jù)幀應(yīng)該是: 02 03 06 06 00 00 00 00 00 35 E3 第三,返回狀態(tài)信息出現(xiàn)錯誤時,步進電機階段 2 的錯誤指示是用的 Q0.2,步進電機階 段 3 不在細說。 4,當(dāng)步進電機階段 3 完成以后,再次觸發(fā) I0.1,可以進入下一個步進電機階段 1 的動作。 5,在步進電機階段 1,如果讀取到的狀態(tài)信息錯誤時,能夠在 Q0.1 指示出來;在步進電 機階段 2,如果讀取到的狀態(tài)信息錯誤時,能夠在 Q0.2 指示出來;在步進電機階段 3,如果讀 取到的狀態(tài)信息錯誤時,能夠在 Q0.3 指示出來;并且可以通過 I0.0 將該指示解除以及將程序 復(fù)位,讓程序進入允許步進電機階段 1 動作狀態(tài)。 6,通過 I0.5 按鈕,可以實現(xiàn)在某一特定時刻向從站發(fā)送一個命令幀讓從站程序復(fù)位,設(shè) 計中采用的是發(fā)送 08H。 5 問題分析 1 串口主動發(fā)送給 P

溫馨提示

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

評論

0/150

提交評論