PLC的Modbus通信_(tái)第1頁(yè)
PLC的Modbus通信_(tái)第2頁(yè)
PLC的Modbus通信_(tái)第3頁(yè)
PLC的Modbus通信_(tái)第4頁(yè)
PLC的Modbus通信_(tái)第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、PLC與串口的MODBUS通信1 需求1程序開(kāi)始,賦值VB10=1,等待執(zhí)行步進(jìn)電機(jī)階段1。2VB10=1,等待執(zhí)行步進(jìn)電機(jī)階段1;VB10=2,等待執(zhí)行步進(jìn)電機(jī)階段2;VB10=3,等待執(zhí)行步進(jìn)電機(jī)階段3。2當(dāng)(VB10=1且I0.1)或者(VB10=2且I0.2)或者(VB10=3且I0.3),主站首先向從站發(fā)送控制命令幀,從站收到以后,返回給主站一應(yīng)答幀表明數(shù)據(jù)已經(jīng)收到。主站在接收到該應(yīng)答幀后開(kāi)始計(jì)時(shí),10s后讀從站執(zhí)行狀態(tài)信息,判斷從站該階段的動(dòng)作是否完成,如果完成了進(jìn)入下一階段的等待,如果未完成,5s后再次讀取從站執(zhí)行狀態(tài)信息判斷階段動(dòng)作是否完成。3步進(jìn)電機(jī)階段動(dòng)作能循環(huán)執(zhí)行。4緊急

2、情況下(I0.5=1),可以通過(guò)主站向從站寫入命令使從站程序初始化。5當(dāng)主站讀取到的狀態(tài)信息出錯(cuò)時(shí),可以通過(guò)I/O輸出指示出來(lái)(Q0.1指示步進(jìn)電機(jī)階段1讀取狀態(tài)信息出錯(cuò);Q0.2指示步進(jìn)電機(jī)階段2讀取狀態(tài)信息出錯(cuò);Q0.3指示步進(jìn)電機(jī)階段3讀取狀態(tài)信息出錯(cuò)),在錯(cuò)誤解除以后,可以通過(guò)I/O輸入(I0.0)將錯(cuò)誤指示消除,并使程序復(fù)位。2 方案MODBUS協(xié)議是一種主從協(xié)議,只允許一個(gè)主設(shè)備,設(shè)計(jì)中以PLC作為主站MSP430開(kāi)發(fā)板作為從站。如圖1示。圖1 PLC與MSP430連接圖為方便起見(jiàn),首先以PC機(jī)作為MODBUS從站,在PC機(jī)上利用串口調(diào)試助手來(lái)接收和發(fā)送數(shù)據(jù),PLC通過(guò)PPI電纜連

3、接到串口,采用PROT0通訊口作為MODBUS通訊口。3 具體實(shí)現(xiàn):3.1 MODBUS數(shù)據(jù)幀介紹MODBUS廣泛應(yīng)用于工業(yè)通訊領(lǐng)域,它規(guī)定了通信雙方的通信格式,只要雙方都使用該規(guī)定就可以解析出正確的通信內(nèi)容。在此,首先介紹一下MODBUS通信的數(shù)據(jù)幀格式,以3號(hào)功能碼以及16號(hào)功能碼為例,3號(hào)功能碼是讀保持寄存器的值,16號(hào)功能碼是寫保持寄存器的值。1、讀取保持寄存器當(dāng)MODBUS主站需要讀取指定地址處數(shù)據(jù)時(shí),首先向從站發(fā)送一個(gè)讀命令幀,所發(fā)送命令幀格式如表1。表1 讀命令主站發(fā)送命令幀格式設(shè)備地址功能碼地址H地址L數(shù)據(jù)量H數(shù)據(jù)量LCRC HCRC LAdd03HHoldStartDataN

4、umCRC高位CRC低位數(shù)據(jù)幀說(shuō)明如下表:表2 讀命令主站發(fā)送命令幀說(shuō)明設(shè)備地址要讀數(shù)據(jù)的從站地址功能碼03H代表讀取多個(gè)保持寄存器地址H所讀取數(shù)據(jù)的地址以兩個(gè)字節(jié)表示地址L數(shù)據(jù)量H所讀取數(shù)據(jù)的個(gè)數(shù)以兩個(gè)字節(jié)表示(注:此處說(shuō)的數(shù)據(jù)量以字為單位)數(shù)據(jù)量LCRC HCRC校驗(yàn)碼在數(shù)據(jù)幀中以兩個(gè)字節(jié)表示,主要用于檢驗(yàn)數(shù)據(jù)傳輸過(guò)程中是否出錯(cuò)CRC L例:需要讀取2號(hào)站從第4個(gè)寄存器開(kāi)始的3個(gè)寄存器,MODBUS主站發(fā)送的數(shù)據(jù)幀為:02 03 00 04 00 03 44 39從站在接收到主站的讀命令以后,會(huì)發(fā)送一個(gè)返回命令幀,返回的命令幀格式如表3。表3 讀命令從站返回命令幀格式設(shè)備地址功能碼數(shù)據(jù)量數(shù)

5、據(jù)1數(shù)據(jù)NCRC HCRC LAdd03H返回?cái)?shù)據(jù)的字節(jié)數(shù)NData(1-N)CRC高位CRC低位數(shù)據(jù)幀說(shuō)明如下表:表4 讀命令從站返回命令幀說(shuō)明設(shè)備地址返回?cái)?shù)據(jù)的從站地址功能碼03H代表該數(shù)據(jù)幀是應(yīng)答讀取多個(gè)保持寄存器數(shù)據(jù)量返回?cái)?shù)據(jù)的字節(jié)個(gè)數(shù)(注:以字節(jié)為單位)數(shù)據(jù)所返回的數(shù)據(jù)(數(shù)據(jù)個(gè)數(shù)與數(shù)據(jù)量相同)CRC HCRC校驗(yàn)碼在數(shù)據(jù)幀中以兩個(gè)字節(jié)表示,主要用于檢驗(yàn)應(yīng)答幀在傳輸過(guò)程中是否出錯(cuò)CRC L例:對(duì)于主站的讀命令幀,2號(hào)站如果第4個(gè)寄存器開(kāi)始的3個(gè)寄存器里面的值分別為:31,32H,33H,34H,35H,36H則應(yīng)答幀應(yīng)該是:02 03 06 31 32 33 34 35 36 D1 A

6、C對(duì)于發(fā)送的命令幀與應(yīng)答幀之間有如下關(guān)系:1:兩個(gè)數(shù)據(jù)幀的設(shè)備地址相同。2:兩個(gè)數(shù)據(jù)幀的功能碼相同。3:返回的數(shù)據(jù)量N=2DataNum如果從站在接收到數(shù)據(jù)以后,認(rèn)為接收到的主站發(fā)送過(guò)來(lái)的數(shù)據(jù)是錯(cuò)誤的,會(huì)返回一個(gè)異常幀給主站,告訴主站,從站接收到的數(shù)據(jù)是錯(cuò)誤的。異常幀的數(shù)據(jù)格式如表5,數(shù)據(jù)幀不再具體說(shuō)明。表5 異常幀格式設(shè)備地址功能碼錯(cuò)誤信息CRC HCRC LAdd083H一個(gè)字節(jié)的錯(cuò)誤信息CRC高位CRC低位例:2號(hào)站在接收到主站發(fā)送的命令以后,判斷得出該命令是錯(cuò)誤的,發(fā)送回一個(gè)異常幀:02 83 01 70 F0錯(cuò)誤信息可以根據(jù)不同的錯(cuò)誤類型而不同。2、寫保持寄存器當(dāng)MODBUS主站需要

7、向從站指定地址寫入數(shù)據(jù)時(shí),會(huì)發(fā)送一個(gè)數(shù)據(jù)幀,數(shù)據(jù)幀格式如表6。表6 寫命令主站發(fā)送數(shù)據(jù)幀格式設(shè)備地址功能碼地址H地址L數(shù)量H數(shù)量L字節(jié)數(shù)具體數(shù)據(jù)CRC HCRC LAdd010HHoldStartDataNumbyteN1-byteNCRC高位CRC低位數(shù)據(jù)幀說(shuō)明如下表:表7 寫命令主站發(fā)送數(shù)據(jù)幀說(shuō)明設(shè)備地址要寫入數(shù)據(jù)的從站地址功能碼10H代表寫多個(gè)保持寄存器地址H要寫入數(shù)據(jù)的首地址,用兩個(gè)字節(jié)表示地址L數(shù)量H要寫入數(shù)據(jù)的個(gè)數(shù)(注:以字為單位)數(shù)量L字節(jié)數(shù)要寫入數(shù)據(jù)的個(gè)數(shù)(注:以字節(jié)為單位)具體數(shù)據(jù)CRC HCRC校驗(yàn)碼在數(shù)據(jù)幀中以兩個(gè)字節(jié)表示,主要用于檢驗(yàn)數(shù)據(jù)傳輸過(guò)程中是否出錯(cuò)CRC L例:

8、需要向2號(hào)從站第80個(gè)寄存器開(kāi)始的4個(gè)寄存器里面依次寫入: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 D4 F0當(dāng)從站接收到主站的寫命令幀以后,判斷接收到的信息是正確的,會(huì)返回一個(gè)命令幀告訴主站所發(fā)生的數(shù)據(jù)從站已經(jīng)正確接收到了,返回?cái)?shù)據(jù)幀格式如表8。表8寫命令從站返回?cái)?shù)據(jù)幀格式設(shè)備地址功能碼地址H地址L數(shù)據(jù)量H數(shù)據(jù)量LCRC HCRC LAdd010HHoldStartDataNumCRC高位CRC低位返回幀說(shuō)明如下表:表9 寫命令從站返回?cái)?shù)據(jù)幀說(shuō)明設(shè)備

9、地址被寫入數(shù)據(jù)的從站地址功能碼10H代表響應(yīng)的是寫多個(gè)保持寄存器地址H被寫入數(shù)據(jù)的首地址,用兩個(gè)字節(jié)表示地址L數(shù)量H被寫入數(shù)據(jù)的個(gè)數(shù)(注:以字為單位)數(shù)量LCRC HCRC校驗(yàn)碼在數(shù)據(jù)幀中以兩個(gè)字節(jié)表示,主要用于檢驗(yàn)數(shù)據(jù)返回過(guò)程中是否出錯(cuò)CRC L例:2號(hào)從站在接收到主站的寫命令以后,判斷接收到的信息是正確的,返回一個(gè)應(yīng)答幀:02 10 00 50 00 04 C1 E8對(duì)于PLC寫保持寄存器,發(fā)送的命令幀與應(yīng)答幀之間應(yīng)該有如下關(guān)系:1:設(shè)備地址相同2:功能碼相同3:兩個(gè)數(shù)據(jù)幀的地址HoldStart相同4:兩個(gè)數(shù)據(jù)幀的數(shù)據(jù)量DataNum相同如果從站在接收到數(shù)據(jù)以后,認(rèn)為接收到的主站發(fā)送過(guò)來(lái)

10、的數(shù)據(jù)是錯(cuò)誤的,會(huì)返回一個(gè)異常幀給主站,告訴主站,從站接收到的數(shù)據(jù)是錯(cuò)誤的。異常幀的數(shù)據(jù)格式如表10,命令幀不再具體說(shuō)明。表10 異常幀格式設(shè)備地址功能碼錯(cuò)誤信息CRC HCRC LAddr090H一個(gè)字節(jié)的錯(cuò)誤信息CRC高位CRC低位例:2號(hào)從站在接到到命令以后,判斷接收到的信息是一個(gè)錯(cuò)誤信息,返回一個(gè)異常幀:02 90 01 7D C0錯(cuò)誤信息可以根據(jù)不同的錯(cuò)誤類型而不同。3.2 PLC指令介紹對(duì)于S7-200 PLC,開(kāi)發(fā)了MODBUS庫(kù)函數(shù),可以直接使用它所帶的MODBUS庫(kù)函數(shù)來(lái)實(shí)現(xiàn)PLC與其他設(shè)備之間的MODBUS通信。選用PROT0作為MODBUS通信,主要用到MODBUS庫(kù)函數(shù)

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

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

13、動(dòng)對(duì)Modbus從站的請(qǐng)求并處理應(yīng)答。當(dāng)EN輸入和"首次"輸入打開(kāi)時(shí),BUS_MSG指令啟動(dòng)對(duì)Modbus從站的請(qǐng)求。發(fā)送請(qǐng)求、等待應(yīng)答、并處理應(yīng)答通常需要多次掃描。EN輸入必須打開(kāi)以啟用請(qǐng)求的發(fā)送,并應(yīng)該保持打開(kāi)直到"完成"位被置位,BUS_MSG指令如圖3示。圖3 BUS_MSG指令First:應(yīng)當(dāng)通過(guò)一個(gè)邊沿檢測(cè)元素打開(kāi),這將導(dǎo)致請(qǐng)求被傳送一次。Slave: Modbus從站的地址。RW:指定指令的類型是讀指令還是寫指令,0表示指令為讀;1表示指令為寫。Addr:讀取Modbus從站的起始地址。Count:指定此次讀寫數(shù)據(jù)的個(gè)數(shù) 。DataPtr:

14、要寫入數(shù)據(jù)的首地址或者是讀取上來(lái)數(shù)據(jù)存放的首地址。Done:指令完成時(shí)該位置1。Error:當(dāng)指令執(zhí)行出現(xiàn)錯(cuò)誤時(shí),在該寄存器處顯示出錯(cuò)誤號(hào)。例:1、需要讀取2號(hào)站地址為0004開(kāi)始的3個(gè)寄存器里面的值到VB200地址開(kāi)始的寄存器里,設(shè)置如圖4。2、需要將VB100地址開(kāi)始的4個(gè)寄存器里面的值寫到地址為004F開(kāi)始的寄存器里面,設(shè)置如圖5。 圖4 讀數(shù)據(jù)設(shè)置 圖6 寫數(shù)據(jù)設(shè)置在這里需要注意的有兩點(diǎn):第一,對(duì)于要寫入或者是要讀取的寄存器地址,如果需要讀0004開(kāi)始的寄存器,地址要設(shè)置為40005而不是40004,同樣如果需要寫004F地址應(yīng)該設(shè)置為40080而不是40079,這是通過(guò)觀察其發(fā)送出的

15、數(shù)據(jù)幀發(fā)現(xiàn)的,如果讀寄存器時(shí)地址設(shè)置為40004,發(fā)送出的命令幀是:02 03 00 03 00 03 F5 F8寫命令同樣存在地址不同的情況。第二,就是要讀取的數(shù)據(jù)量是以字為單位而不是以字節(jié)為單位。3.3 I/O分配在這次設(shè)計(jì)中一共用到了5個(gè)輸入,3個(gè)輸出,具體分配如表7表7 I/O分配表I/O名稱作用I/O類型I0.0復(fù)位按鈕輸入I0.1發(fā)送步進(jìn)電機(jī)階段1控制命令輸入I0.2發(fā)送步進(jìn)電機(jī)階段2控制命令輸入I0.3發(fā)送步進(jìn)電機(jī)階段3控制命令輸入I0.5急停輸入Q0.1步進(jìn)電機(jī)階段1錯(cuò)誤輸出Q0.2步進(jìn)電機(jī)階段2錯(cuò)誤輸出Q0.3步進(jìn)電機(jī)階段3錯(cuò)誤輸出3.4 PLC程序設(shè)計(jì)PLC程序包含一個(gè)主程

16、序和4個(gè)子程序構(gòu)成。4個(gè)子程序分別是一個(gè)初始化子程序和3個(gè)步進(jìn)電機(jī)階段控制子程序。 主程序主程序主要是根據(jù)條件調(diào)用相應(yīng)的子程序,此外還處理一些簡(jiǎn)單的邏輯運(yùn)算。主程序流程圖如圖7:圖7 主程序流程圖如圖7示,首先判斷是否調(diào)用初始化子程序,然后對(duì)MODBUS主設(shè)備進(jìn)行初始化,接著根據(jù)VB10值的不同分別調(diào)用相應(yīng)的步進(jìn)電機(jī)階段動(dòng)作子程序,掃描完相應(yīng)子程序以后還要判斷急停按鈕是否有效,如果無(wú)效,自此一個(gè)掃描周期結(jié)束,進(jìn)入下一個(gè)掃描周期;如果有效,首先將VB10清零,然后向從站的命令寄存器寫入代表急停的命令,到此一個(gè)掃描周期結(jié)束。 初始化初始化子程序是在上電或者是滿足復(fù)位條件時(shí)調(diào)用的,在該子程序里面完成

17、了4個(gè)動(dòng)作:第一,將寫數(shù)據(jù)緩沖區(qū)VB100到VB107全部清零;第二,將存放3個(gè)階段狀態(tài)信息返回值的寄存器VB200,VB210,VB220清零;第三,將3個(gè)階段子程序中所用到的控制寄存器VD0,VD4,VW8清零;第四,將VB10里面的值賦值為1,允許步進(jìn)電機(jī)階段1動(dòng)作。初始化流程如圖8示。圖8 初始化流程圖 步進(jìn)電機(jī)階段控制步進(jìn)電機(jī)階段控制包括3個(gè)子程序,三個(gè)子程序的動(dòng)作流程結(jié)構(gòu)一樣,當(dāng)進(jìn)入相應(yīng)步進(jìn)電機(jī)階段子程序后執(zhí)行:步驟1:判斷是否滿足發(fā)送相應(yīng)的步進(jìn)電機(jī)階段控制命令,如果不滿足繼續(xù)等待;如果滿足,進(jìn)入下一步。步驟2:將上一步進(jìn)電機(jī)階段控制所用到的寄存器清零。步驟3:將存放3個(gè)步進(jìn)電機(jī)階

18、段狀態(tài)信息返回值的寄存器(VB200,VB210,VB220)清零,進(jìn)入下一步。步驟4:對(duì)VB100賦值。步驟5:將VB100開(kāi)始地址處的4個(gè)數(shù)據(jù)寫入從站,進(jìn)入下一步。步驟6:判斷是否接收到下位機(jī)返回的接收正確的信號(hào),如果接收到進(jìn)入下一步驟,如果沒(méi)有接收到,另行處理,現(xiàn)在程序中還沒(méi)有編寫。步驟7:延時(shí)10S,讀取從站狀態(tài)信息寄存器里面的值,放入對(duì)應(yīng)的寄存器。步驟8:根據(jù)相應(yīng)寄存器里面值判斷相應(yīng)的步進(jìn)電機(jī)階段動(dòng)作是否完成,如果狀態(tài)信息表示完成,進(jìn)入步驟10,如果狀態(tài)信息表示未完成進(jìn)入下一步。如果接收到的狀態(tài)信息錯(cuò)誤,在指定的輸出點(diǎn)報(bào)錯(cuò)。步驟9:延時(shí)5S,再次執(zhí)行步驟8。步驟10:賦值VB10,

19、允許發(fā)送下一步進(jìn)電機(jī)階段動(dòng)作命令。3個(gè)步進(jìn)電機(jī)階段的動(dòng)作流程圖如圖9示。圖9 步進(jìn)電機(jī)階段動(dòng)作流程圖3個(gè)步進(jìn)電機(jī)階段動(dòng)作流程圖類似,不同之處如表: 階段步驟名步進(jìn)電機(jī)階段1步進(jìn)電機(jī)階段2步進(jìn)電機(jī)階段3步驟1判斷條件是I0.1判斷條件是I0.2判斷條件是I0.3步驟2清VB7,VB8,VB9清VB1,VB2,VB3清VB4,VB5,VB6步驟4賦值VB100=01H賦值VB100=02H賦值VB100=04H步驟7讀取從站執(zhí)行狀態(tài)信息存在VB200讀取從站執(zhí)行狀態(tài)信息存在VB210讀取從站執(zhí)行狀態(tài)信息存在VB220步驟8狀態(tài)信息錯(cuò)誤在Q0.1報(bào)錯(cuò)狀態(tài)信息錯(cuò)誤在Q0.1報(bào)錯(cuò)狀態(tài)信息錯(cuò)誤在Q0.1報(bào)

20、錯(cuò)步驟10賦值VB10=2賦值VB10=3賦值VB10=1 緊急處理在緊急情況下,MODBUS主站向從站發(fā)送一個(gè)命令,從站在收到這個(gè)命令以后,讓程序進(jìn)入初始化的動(dòng)作。在此設(shè)計(jì)中緊急情況用輸入I0.5代替,當(dāng)I0.5接通時(shí),向從站發(fā)送一個(gè)08H,發(fā)送的命令幀為:02 10 00 4F 00 04 08 08 00 00 00 00 00 00 00 E1 F6從站在接收到08H以后就知道信息值表示讓程序初始化。 4 調(diào)試將程序下載到PLC,將PLC處于運(yùn)行狀態(tài),此時(shí)程序進(jìn)入允許步進(jìn)電機(jī)階段1的控制命令發(fā)送。1、點(diǎn)擊I0.2或者是I0.3,PLC上面沒(méi)有響應(yīng),原因是此時(shí)PLC只允許步進(jìn)電機(jī)階段1動(dòng)

21、作,而剛才是要求發(fā)送步進(jìn)電機(jī)階段2和步進(jìn)電機(jī)階段3的控制命令,所以不響應(yīng)。2、點(diǎn)擊I0.1,程序開(kāi)始響應(yīng),發(fā)送一幀數(shù)據(jù)到MODBUS從站。數(shù)據(jù)幀為:02 10 00 4F 00 04 08 01 00 00 00 00 00 00 00 21 9C在接收到該串?dāng)?shù)據(jù)后在串口上返回一幀數(shù)據(jù):02 10 00 4F 00 04 F0 2E表示從站已經(jīng)正確的接收到了PLC的控制命令。10S以后PLC會(huì)發(fā)送一個(gè)讀取狀態(tài)信息的數(shù)據(jù)幀到從站,數(shù)據(jù)幀為:02 03 00 04 00 03 44 39表示需要讀取從0004地址開(kāi)始的3個(gè)數(shù)據(jù),接收到該數(shù)據(jù)幀以后,假如從站步進(jìn)電機(jī)階段1還沒(méi)有完成,那么返回一幀數(shù)據(jù)

22、:02 03 06 02 00 00 00 00 00 34 67表示從站此時(shí)正在執(zhí)行步進(jìn)電機(jī)階段1,PLC收到數(shù)據(jù)幀以后知道此時(shí)從站狀態(tài)值為2,還沒(méi)有完成步進(jìn)電機(jī)階段1動(dòng)作,于是延時(shí)5S再次發(fā)送讀狀態(tài)信息的數(shù)據(jù)幀;如果從站接收到讀取狀態(tài)信息幀時(shí),步進(jìn)電機(jī)階段1的動(dòng)作已經(jīng)完成,那么返回一幀數(shù)據(jù):02 03 06 03 00 00 00 00 00 35 B6表示此時(shí)從站處于狀態(tài)3即:已經(jīng)完成了步進(jìn)電機(jī)階段1。PLC接收到返回消息后知道步進(jìn)電機(jī)階段1完成了,可以進(jìn)行步進(jìn)電機(jī)階段2動(dòng)作了,于是將VB10里面賦值為2;當(dāng)從站返回一個(gè)錯(cuò)誤信息時(shí),比如在步進(jìn)電機(jī)階段1時(shí),從站返回一個(gè)步進(jìn)電機(jī)階段2完成,

23、那么PLC接收到消息以后直接在指定報(bào)錯(cuò)點(diǎn)Q0.1報(bào)錯(cuò)。3、進(jìn)入允許步進(jìn)電機(jī)階段2時(shí),按照步進(jìn)電機(jī)階段1的操作順序進(jìn)行操作。與步進(jìn)電機(jī)階段1不同的有三點(diǎn):第一,PLC發(fā)送到從站的控制命令幀不一樣,步進(jìn)電機(jī)階段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ù)請(qǐng)求以后,從站返回的數(shù)據(jù)幀不一樣,如果步進(jìn)電機(jī)階段2未完成返回的數(shù)據(jù)幀應(yīng)該是:02 03 06 05 00 00 00 00 00 35 D0當(dāng)步進(jìn)電機(jī)階段2完成時(shí)返回的數(shù)據(jù)幀應(yīng)該是:02 03 06 06 00 00 00 00 00

24、35 E3第三,返回狀態(tài)信息出現(xiàn)錯(cuò)誤時(shí),步進(jìn)電機(jī)階段2的錯(cuò)誤指示是用的Q0.2,步進(jìn)電機(jī)階段3不在細(xì)說(shuō)。4,當(dāng)步進(jìn)電機(jī)階段3完成以后,再次觸發(fā)I0.1,可以進(jìn)入下一個(gè)步進(jìn)電機(jī)階段1的動(dòng)作。5,在步進(jìn)電機(jī)階段1,如果讀取到的狀態(tài)信息錯(cuò)誤時(shí),能夠在Q0.1指示出來(lái);在步進(jìn)電機(jī)階段2,如果讀取到的狀態(tài)信息錯(cuò)誤時(shí),能夠在Q0.2指示出來(lái);在步進(jìn)電機(jī)階段3,如果讀取到的狀態(tài)信息錯(cuò)誤時(shí),能夠在Q0.3指示出來(lái);并且可以通過(guò)I0.0將該指示解除以及將程序復(fù)位,讓程序進(jìn)入允許步進(jìn)電機(jī)階段1動(dòng)作狀態(tài)。6,通過(guò)I0.5按鈕,可以實(shí)現(xiàn)在某一特定時(shí)刻向從站發(fā)送一個(gè)命令幀讓從站程序復(fù)位,設(shè)計(jì)中采用的是發(fā)送08H。5 問(wèn)

25、題分析1 串口主動(dòng)發(fā)送給PLC的數(shù)據(jù)PLC不能收到原因分析:MODBUS協(xié)議是一種主從協(xié)議,它不允許從站主動(dòng)的向主站發(fā)送數(shù)據(jù),只允許主站以輪詢的方式與從站進(jìn)行數(shù)據(jù)交換.解決辦法:如果PLC需要某一個(gè)地址的數(shù)據(jù),首先要向從站發(fā)送一個(gè)讀指令,從站在接收到讀指令以后將數(shù)據(jù)返回。2 PLC在發(fā)送完數(shù)據(jù)幀給從站以后,通過(guò)從站發(fā)送給PLC的數(shù)據(jù)幀有時(shí)可以收到,有時(shí)不可以收到?,F(xiàn)象:當(dāng)PLC發(fā)送一幀數(shù)據(jù)到從站以后,從站返回的信息有時(shí)候PLC可以接收到,有時(shí)候不可以接收到。并且接收不到數(shù)據(jù)時(shí)指令顯示是接收超時(shí)。原因分析:PLC中對(duì)MODBUS主設(shè)備進(jìn)行初始化時(shí)設(shè)置了一個(gè)超時(shí)時(shí)間,從站給PLC的數(shù)據(jù)須在PLC發(fā)送完命令幀以后的這個(gè)時(shí)間內(nèi)完成,P

溫馨提示

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

評(píng)論

0/150

提交評(píng)論