PPI 協(xié)議的通信過程解析與應(yīng)用_第1頁
PPI 協(xié)議的通信過程解析與應(yīng)用_第2頁
PPI 協(xié)議的通信過程解析與應(yīng)用_第3頁
PPI 協(xié)議的通信過程解析與應(yīng)用_第4頁
PPI 協(xié)議的通信過程解析與應(yīng)用_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、PPI 協(xié)議的通信過程解析與應(yīng)用目錄一、 引言1二、 協(xié)議分析12.1 讀命令分析22.2 寫命令分析32.3 其他命令分析42.4讀出數(shù)據(jù)分析5三、應(yīng)用63.1上位機程序63.2 PLC程序6四、結(jié)語6一、 引言SIEMENS 提供的MicroWin 軟件,采用的是PPI (Point to Point) 協(xié)議,僅僅可以用來傳輸、調(diào)試PLC 程序,并不向外界公布源代碼。在現(xiàn)場應(yīng)用中,當需要PLC 與上位機通信時,普遍使用自定義協(xié)議與上位機通信。在這種通信方式中,需要編程者首先定義自己的自由通信格式,在PLC 中編寫代碼,利用中斷方式控制通信端口的數(shù)據(jù)收發(fā)。采用這種方式,PLC編程調(diào)試較為繁瑣

2、,占用PLC 的軟件中斷和代碼資源,而且當PLC 的通信口定義為自由通信口時,PLC 的編程軟件無法對PLC 進行監(jiān)控,給PLC 程序調(diào)試帶來不便。利用PPI 協(xié)議實現(xiàn)通信,可以大大簡化控制程序的編寫難度。SIEMENS S7-200PLC 的編程通信接口,內(nèi)部固化PPI通信協(xié)議,如果上位機利用編程通信口遵循PPI 協(xié)議來讀寫PLC,就可以省略編寫自定義模式下的PLC 的通信代碼,可通過讀寫的方式實現(xiàn)數(shù)據(jù)和控制命令的通信。二、 協(xié)議分析上位機與PLC 通信時,通信過程以主從方式通信時,一次讀寫過程的步驟如下:(1) 首先主機(PC 機) 發(fā)出讀寫命令。(2) 從機(PLC) 作出接收正確的響應(yīng)

3、(E5)。(3) 主機接到此響應(yīng)則發(fā)出確認指令(10 02 00 5C 5E 16)。(4) PLC 回應(yīng)給上位機數(shù)據(jù)。這樣收發(fā)兩次數(shù)據(jù),完成一次數(shù)據(jù)的讀寫。PC 與PLC 采用主從方式通信,PC 按如下的格式發(fā)讀寫指令,PLC 作出接收正確的響應(yīng)返回應(yīng)答數(shù)據(jù)E5H 或F9H,上位機接到此響應(yīng)則發(fā)出確認命令(10 02 5C 5E 16),PLC再返回給上位機相應(yīng)數(shù)據(jù)。數(shù)據(jù)的組成格式是:SD LE LEr SD DA SA FC DSAP SSAP DU FCS ED 。SD:開始符(68H);LE、Ler:數(shù)據(jù)長度(從DA 到DU);DA:目的地址;SA:源地址;FC:功能碼(6CH);DS

4、AP:目的服務(wù)存取點;SSAP:源服務(wù)存取點;DU:數(shù)據(jù)單元;FCS:校驗和;ED:結(jié)束符(16H)。2.1 讀命令分析2.1.1 一次讀一條數(shù)據(jù)對于一次讀取一個數(shù)據(jù),讀命令都是33 個字節(jié)。前面的021 字節(jié)是相同的,為:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 ,因為是PC 上發(fā)的讀PLC 數(shù)據(jù)的命令,SA=00,DA=02,如果有多個站,DA 要改成相應(yīng)的站號。讀命令中從DA到DU 的長度為1B 即27 個字節(jié)。從22 字節(jié)開始根據(jù)讀取數(shù)據(jù)的類型、位置不同而不同。表1 讀不同存儲器命令的Byte22

5、32表1 中Byte 22 為讀取數(shù)據(jù)的長度:01:1 Bit 02:1 Byte 04:1 Word 06:Double Word 。表中Byte 24 為數(shù)據(jù)個數(shù):這里是01,一次讀一個數(shù)據(jù)。表中Byte 26 存儲器類型:01:V 存儲器00:其他。表中Byte 27 存儲器類型:04->S, 05->SM,06->AI, 07->AQ,1E-> C, 81->I, 82->Q,83->M, 84->V ,1F->T 。表中Byte 28,29,30 存儲器偏移量指針(存儲器地址*8):如VB100,存儲器地址為100,偏移量指

6、針為800,轉(zhuǎn)換成16進制就是320H,則Byte 2829 這三個字節(jié)就是:00 03 20。表中Byte 31 為校驗和。2.1.2 一次讀多條數(shù)據(jù)對于一次讀多個數(shù)據(jù)的情況,前21Byte 與上面相似,只是長度LE、LEr 及Byte 14 不同:Byte 14 數(shù)據(jù)塊占位字節(jié),它指明數(shù)據(jù)塊占用的字節(jié)數(shù)。與數(shù)據(jù)塊數(shù)量有關(guān),長度=4+數(shù)據(jù)塊數(shù)*10,如:一條數(shù)據(jù)時為4+10=0E (H)。同時讀M,V,Q 三個不同的數(shù)據(jù)塊時為4 +3*10 =22(H)。Byte 22 總是02 即以Byte 為單位。Byte 24 以字節(jié)為單位,連續(xù)讀取的字節(jié)數(shù)。如讀2 個VD 則Byte24=8。Byt

7、e 1930 按上述一次讀一個數(shù)據(jù)的格式依次列出。Byte 3142 另一類型的數(shù)據(jù),也是按上述格式給出。以此類推,一次最多讀取222 個字節(jié)的數(shù)據(jù)。2.2 寫命令分析一次寫一個Double Word 類型的數(shù)據(jù)。寫命令是40 個字節(jié),其余為38 個字節(jié)。寫一個Double Word 類型的數(shù)據(jù),前面的021 字節(jié)為:68 23 23 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10寫一個其他類型的數(shù)據(jù),前面的021 字節(jié)為:68 21 21 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04

8、 01 12 0A 10從22 字節(jié)開始根據(jù)寫入數(shù)據(jù)的值和位置不同而變化。表2 幾個寫命令的Byte2240 表2 中字節(jié)具體說明:Byte 22 Byte 30 寫入數(shù)據(jù)的長度、存儲器類型、存儲器偏移量與讀命令相同。Byte 34 如果寫入的是位數(shù)據(jù)這一字節(jié)為03,其它則為04。Byte 36 寫入數(shù)據(jù)的位數(shù):01: 1 Bit 08: 1 Byte 10H: 1 Word 20H: 1 Double WordByte 3540 值、校驗碼、結(jié)束符:如果寫入的是位、字節(jié)數(shù)據(jù),Byte35 就是寫入的值,Byte36=00,Byte37=檢驗碼,Byte38=16H,結(jié)束。如果寫個的是字數(shù)據(jù)(

9、雙字節(jié)),Byte35,Byte36 就是寫入的值, Byte37=檢驗碼,Byte38=16H,結(jié)束。如果寫個的是雙字數(shù)據(jù)(4 字節(jié)),Byte3538 就是寫入的值,Byte39=檢驗碼,Byte40=16H,結(jié)束。2.3 其他命令分析2.3.1 強制寫入I、Q、S 等不能使用上述的寫命令寫入數(shù)據(jù),只能用強制寫入的方式。前035 字節(jié)值如下(長度字段要根據(jù)實際情況而定) ,需要注意的是Byte8=07,68 2B 2B 68 02 00 6C 32 07 00 00 00 00 00 0C 00 12 0001 12 08 12 48 0B 00 00 00 00 00 FF 09 00

10、0E 00 01 10后面的內(nèi)容如下:Byte 32 占位字節(jié),從下一字節(jié)開始到校驗和前的字節(jié)數(shù)。說明同讀數(shù)據(jù)的Byte 14。Byte 36 強制寫入數(shù)據(jù)的長度:01:1 Bit 02:1 Byte 04:1 Word 06:Double Word。Byte 38 數(shù)據(jù)個數(shù):這里是01 ,一次強制寫多個數(shù)據(jù)時見下面的說明。Byte 40 存儲器類型。Byte 41 存儲器類型,見讀命令的說明。Byte 42、43、44 存儲器偏移量指針(存儲器地址*8)。Byte 45、46、47、48 值、校驗碼、結(jié)束符。2.3.2 取消強制寫強制寫入I、Q 等后,這些值就不能被程序改變,除非使用“取消強

11、制命令”。取消強制命令的格式與強制寫入相似,變化的有以下幾點:(1) 是沒有“值”這一段,即沒有Byte4548。這影響到長度字節(jié)LE,LEr;占位字節(jié)Byte 32。(2) Byte16=10H, (3) Byte32=0CH,也就是第一條,沒有"值"這一段,數(shù)據(jù)塊長度變短了。對于一次強制寫入或取消多個數(shù)據(jù)的情況可以參照寫入命令寫出相應(yīng)的報文,這里不再給出。 2.3.3 STOP命令 STOP命令使得 S7-200 CPU從 RUN狀態(tài)轉(zhuǎn)換到 STOP狀態(tài)(此時 CPU模塊上的模式開關(guān)開應(yīng)打在 RUN或 TERM位置)。PC發(fā)出如下命令,PLC返回 F9,此時 PLC已進

12、入等待狀態(tài), PC再發(fā)確認報文( 10 02 5C 5E 16) ,完成一個命令過程。 681D1D 680200 6C3201000000000010 00 00 29 00 00 00 00 00 09 50 5F 50 52 4F 47 52 41 4D AA 16 2.3.4 RUN命令 RUN命令使得 S7-200 CPU從 STOP狀態(tài)轉(zhuǎn)換到 RUN狀態(tài)(此時 CPU模塊上的模式開關(guān)開應(yīng)打在 RUN或 TERM位置)。PC發(fā)出命令,PLC返回 F9,此時 PLC已進入運行狀態(tài), PC再發(fā)確認報文( 10 02 5C 5E 16),完成一個命令過程。 68 21 21 68 02 0

13、0 6C 32 01 00 00 00 00 00 14 00 00 28 00 00 00 00 00 00 FD 00 00 09 50 5F 50 52 4F 47 52 41 4D AA 16 2.4讀出數(shù)據(jù)分析(1)一次讀出一條數(shù)據(jù) PLC響應(yīng)的數(shù)據(jù)也是用 PPI封裝的。如果用一次讀一條數(shù)據(jù)命令,響應(yīng)的報文中就只包含一條數(shù)據(jù),此響應(yīng)報文的 Byte168。 Byte 04:DA =00 Byte 05:SA =02即從 02 PLC站發(fā)往 PC。 Byte 16:數(shù)據(jù)塊占位字節(jié),從 Byte21到校驗和前的字節(jié)數(shù)。一條數(shù)據(jù)時:Word=06,Double Word=08其它為 05。

14、 Byte 22:數(shù)據(jù)類型,位=3,其它=4。 Byte 24:數(shù)據(jù)寬度, Bit =01, Byte =08, Word =10H, Double Word=20H。 Byte 2528:值。如果網(wǎng)絡(luò)上只可能有一個站會發(fā)回響應(yīng)報文,那么可以簡單地根據(jù) LE長度字節(jié)判斷返回值的位置: LE=16H,返回值是字節(jié),或位類型的值,響應(yīng)報文的 Byte 25即是返回值; LE=17H,返回值是字(雙字節(jié))類型的值,響應(yīng)報文的 Byte 25,26即是返回值; LE=19H,返回值是雙字(四字節(jié))類型的值,響應(yīng)報文的 Byte 2528即是返回值。更準確的方式是要根據(jù)返回報文的 SA、DA,及存儲器位

15、置等信息識別目標地址和源地址,確認是這次申請的返回數(shù)據(jù),然后經(jīng)過校驗檢查,得到正確的數(shù)據(jù)。(2)一次讀出多條數(shù)據(jù)如果用的是一次讀多條數(shù)據(jù)的命令,響應(yīng)的報文中就包含有多條數(shù)據(jù)。這些數(shù)據(jù)只有類型參數(shù),沒有偏移量參數(shù),所以要注意根據(jù)讀命令的順序?qū)⑵湟灰粚?yīng)起來。 Byte 16:數(shù)據(jù)塊占位字節(jié),從 Byte21到校驗和前的字節(jié)數(shù),與數(shù)據(jù)塊數(shù)量和類型有關(guān)。 Byte 20:數(shù)據(jù)塊的個數(shù)。 Byte 21:開始為數(shù)據(jù)塊,每一個數(shù)據(jù)塊都以 FF 04開始,接下來的兩個字節(jié)表示這一數(shù)據(jù)塊的長度,以位計算,然后依次是連續(xù)的數(shù)據(jù)。下一個數(shù)據(jù)塊也是以 FF 04開始,重復(fù)上述格式,直到結(jié)束。三、應(yīng)用在實際應(yīng)用時,

16、以 VB6.0開發(fā)為例,將 PPI協(xié)議封裝成控件的形式或以模塊的形式應(yīng)用。控件的形式對于一般不懂 PPI協(xié)議的用戶,使用起來比較方便,無需自己編寫代碼,可直接(付費購買)使用現(xiàn)成控件。對于 VB編程較為熟練的人員,可將 PPI協(xié)議編寫成通用模塊,供過程調(diào)用。 3.1上位機程序采用 VB6.0開發(fā),用于上位機和 S7-200系列 PLC的 PPI協(xié)議通信,實現(xiàn)下列功能:(1)讀寫出寄存器的數(shù)值(字節(jié)、字、雙字)。(2)進行組件( V、M、S、Q、)的置 I、復(fù)位操作。(3)讀取 C,T當前值。(4)讀取組件( V、M、S、Q、)的狀態(tài) I。(5)登錄并控制 PLC的運行、停止。(6)圖形曲線方式

17、監(jiān)控。(7)圖表添加監(jiān)控方式。(8)數(shù)據(jù)存儲及后期調(diào)用 (客戶訂制設(shè)計)。3.2 PLC程序采用模塊化編寫方法,構(gòu)造一個主程序和相應(yīng)的功能子程序,由主程序管理子程序。數(shù)據(jù)采集采用中斷子程序方式,根據(jù)數(shù)據(jù)對象的需求,選擇相應(yīng)的中斷間隔,中斷中將采集到的數(shù)據(jù)存放到通信協(xié)議中約定的存儲單元中,存儲單元定義為全局變量。這樣,上位機可根據(jù)通信協(xié)議通過簡單的讀取存儲單元的方式來獲取采集的數(shù)據(jù)。四、結(jié)語借助 PPI協(xié)議完成上位機與 PLC之間的數(shù)據(jù)和控制指令的傳輸,可降低利用 VB6.0開發(fā) PLC工控項目的難度,可大大縮短項目的開發(fā)時間及提高項目質(zhì)量,基于此技術(shù)開發(fā)研制的項目,現(xiàn)場應(yīng)用運行穩(wěn)定,方便實現(xiàn)控

18、制對象狀態(tài)參數(shù)的顯示、記錄及過程的控制。參考文獻 1西門子 PPI通訊協(xié)議. 2 PPI通訊 VB程序例.西門子S7-200 PLC之PPI通訊協(xié)議通過硬件和軟件偵聽的方法,分析PLC內(nèi)部固有的PPI通訊協(xié)議,然后上位機采用VB編程,遵循PPI通訊協(xié)議,讀寫PLC數(shù)據(jù),實現(xiàn)人機操作任務(wù)。這種通訊方法,與一般的自由通訊協(xié)議相比,省略了PLC的通訊程序編寫,只需編寫上位機的通訊程序資源 S7-226的編程口物理層為RS-485結(jié)構(gòu),SIEMENS提供MicroWin軟件,采用的是PPI(Point to Point)協(xié)議,可以用來傳輸、調(diào)試PLC程序。在現(xiàn)場應(yīng)用中,當需要PLC與上位機通訊時,較多

19、的使用自定義協(xié)議與上位機通訊。在這種通訊方式中,需要編程者首先定義自己的自由通訊格式,在PLC中編寫代碼,利用中斷方式控制套接字口的數(shù)據(jù)收發(fā)。采用這種方式,PLC編程調(diào)試較為煩瑣,占用PLC的軟件中斷和代碼資源,而且當PLC的通訊口定義為自由通訊口時,PLC的編程軟件無法對PLC進行監(jiān)控,給PLC程序調(diào)試帶來不便。 SIEMENS S7-200PLC的編程通訊接口,內(nèi)部固化的 通訊協(xié)議為PPI協(xié)議,如果上位機遵循PPI協(xié)議來讀寫PLC,就可以省略編寫PLC的通訊代碼。如何獲得PPI協(xié)議?可以在PLC的編程軟件讀寫PLC數(shù)據(jù)時,利用第三個串口偵聽PLC的通訊數(shù)據(jù),或者利用軟件方法,截取已經(jīng)打開且

20、正在通訊的端口的數(shù)據(jù),然后歸納總結(jié),解析出PPI協(xié)議的數(shù)據(jù)讀寫報文。這樣,上位機遵循PPI協(xié)議,就可以便利的讀寫PLC內(nèi)部的數(shù)據(jù),實現(xiàn)上位機的人機操作功能。 軟件設(shè)計 系統(tǒng)中測控任務(wù)由SIEMENS S7-226PLC完成,PLC采用循環(huán)掃描方式工作,當定時時間到時,執(zhí)行數(shù)據(jù)采集或PID控制任務(wù),完成現(xiàn)場的信號控制。計算機的監(jiān)控軟件采用VB編制,利用MSComm控件完成串口數(shù)據(jù)通訊,通訊遵循的協(xié)議為PPI協(xié)議。 PPI協(xié)議 西門子的PPI(Point to Point)通訊協(xié)議采用主從式的通訊方式,一次讀寫操作的步驟包括:首先上位機發(fā)出讀寫命令,PLC作出接收正確的響應(yīng),上位機接到此響應(yīng)則發(fā)出

21、確認申請命令,PLC則完成正確的讀寫響應(yīng),響應(yīng)給上位機數(shù)據(jù)。這樣收發(fā)兩次數(shù)據(jù),完成一次數(shù)據(jù)的讀寫5。 其通訊數(shù)據(jù)報文格式大致有以下幾類: 1、讀寫申請的數(shù)據(jù)格式如下: SD LE LER SD DA SA FC DASP SSAP DU FCS ED SD:(Start Delimiter)開始定界符(68H) LE:(Length)報文數(shù)據(jù)長度 LER:(Repeated Length)重復(fù)數(shù)據(jù)長度 SD: (Start Delimiter)開始定界符(68H) SA:(Source Address)源地址,指該地址的指針,為地址值乘以8 DA:(Destination Address)目標

22、地址,指該地址的指針,為地址值乘以8 FC:(Function Code)功能碼 DSAP:(Destination Service Access Point)目的服務(wù)訪問點 SSAP:(Source Service Access Point)源服務(wù)訪問點 DU:(Data Unit)數(shù)據(jù)單元 FCS:(Frame Check Sequence)校驗碼 ED:(End Delimiter)結(jié)束分界符(16H) 報文數(shù)據(jù)長度和重復(fù)數(shù)據(jù)長度為自DA至DU的數(shù)據(jù)長度,校驗碼為DA至DU數(shù)據(jù)的和校驗,只取其中的末字節(jié)值。 在讀寫PLC的變量數(shù)據(jù)中,讀數(shù)據(jù)的功能碼為 6CH, 寫數(shù)據(jù)的功能碼為 7CH。

23、 2、PLC接收到讀寫命令,校驗后正確,返回的數(shù)據(jù)格式為 E5H 3、確認讀寫命令的數(shù)據(jù)格式為: SD SA DA FC FCS ED 其中SD為起始符,為10H SA為數(shù)據(jù)源地址 DA為目的地址 FC為功能碼,取5CH FCS為SA DA FC的和的末字節(jié) ED為結(jié)束符,取16H PPI協(xié)議的軟件編制 在采用上位機與PLC通訊時,上位機采用VB編程,計算器采用PPI電纜或普通的485串口卡與PLC的編程口連接,通訊系統(tǒng)采用主從結(jié)構(gòu),上位機遵循PPI協(xié)議格式,發(fā)出讀寫申請,PLC返回相應(yīng)的數(shù)據(jù)。程序?qū)崿F(xiàn)如下:1、 串口初始化程序: MSComm1.CommPort = 1 MSComm1.Se

24、ttings = "9600,e,8,1" MSComm1.InputLen = 0 MSComm1.RThreshold = 1 MSComm1.InputMode = comInputModeBinary PPI協(xié)議定義串口為以二進制形式收發(fā)數(shù)據(jù),這樣報文的通訊效率比ASCII碼高。2、 串口讀取數(shù)據(jù)程序,以讀取VB100數(shù)據(jù)單元為例: Dim Str_Read(0 To 32) 定義發(fā)送的數(shù)據(jù)為字節(jié)為元素的數(shù)組。 Str_ Read (32) = &H16 相應(yīng)的數(shù)組元素賦值,按照以下格式: Str_ Read (29) = (100*8) 256 地址為指針

25、值,先取高位地址指針 Str_ Read (30) = (100*8) Mod 256 取低位地址指針 Str_ Read (24) = 1 讀取的數(shù)據(jù)長度(Byte的個數(shù)) For I=4 to 30 Temp_FCS = Temp_FCS +Str_Read(i)Next I Str_Read(31)= Temp_FCS Mod 256 計算FCS校驗碼,其它數(shù)組元素賦值省略。 68 1B 1B 68 2 0 6C 32 1 0 0 0 0 0 E 0 0 4 1 12 A 10 2 0 1 0 1 84 0 3 20 8B 16 PLC返回數(shù)據(jù) E5 后,確認讀取命令,發(fā)送以下數(shù)據(jù): 1

26、0 2 0 5C 5E 16 然后上位機VB程序接受到以下數(shù)據(jù): 68 16 16 68 0 2 8 32 3 0 0 0 0 0 2 0 5 0 0 4 1 FF 4 0 8 22 78 16 首先識別目標地址和源地址,確認是這次申請的返回數(shù)據(jù),然后經(jīng)過校驗檢查,正確后解析出第26號數(shù)據(jù)(&H22)即為VB100字節(jié)的數(shù)據(jù)。 3、 串口寫入數(shù)據(jù)程序,以寫VB100數(shù)據(jù)單元為例: Dim Str_Write(0 To 37) 定義發(fā)送的數(shù)據(jù)為字節(jié)為元素的數(shù)組。 Str_Write (37) = &H16 相應(yīng)的數(shù)組元素賦值,按照以下格式 Str_Write (35) = &am

27、p;H10 要寫入的數(shù)據(jù)值 68 20 20 68 2 0 7C 32 1 0 0 0 0 0 E 0 5 5 1 12 A 10 2 0 1 0 1 84 0 3 20 0 4 0 8 C B9 16 PLC返回數(shù)據(jù) E5 后,確認寫入命令,發(fā)送以下數(shù)據(jù): 10 2 0 5C 5E 16 然后上位機VB程序接受到以下數(shù)據(jù): 68 12 12 68 0 2 8 32 3 0 0 0 0 0 2 0 1 0 0 5 1 FF 47 16 這是PLC正確接收并寫入信息的返回數(shù)據(jù)。4、串口接收程序: 在數(shù)據(jù)接收程序中,利用VB中MSComm控件,一 次接收緩沖區(qū)中的全部數(shù)據(jù),存放到數(shù)組形式的緩存單元

28、中,然后分析每個元素的值,得到讀寫的數(shù)據(jù)。 Dim RCV_Array() As Byte Dim Dis_Array As String Dim RCV_Len As Long RCV_Array = MSComm1.Input 取出串口接收緩沖器的數(shù)據(jù)。 RCV_Len = UBound(RCV_Array) ReDim Temp(0 To UBound(RCV_Array) For i = 0 To RCV_Len Dis_Array = Dis_Array & Hex(RCV_Array (i) & " " Next i Text1.Text = D

29、is_Array 接收到的數(shù)據(jù)送顯示。 在程序的讀寫過程中,一次最大可以讀寫222個字節(jié),目前給出的數(shù)據(jù)讀寫為整數(shù)格式。 數(shù)據(jù)類型 Str_ Read(27) S 04H SM 05H I 81H Q 82H M 83H V 84H 以上程序,是以讀寫PLC的V變量區(qū)為例,利用PPI協(xié)議還可以讀寫S7-200PLC中的各種類型數(shù)據(jù),包括I、Q、SM、M、V、T、C、S等數(shù)據(jù)類型,能夠直接讀出以上變量中的位、字節(jié)、字、雙字等,其中讀位變量時,是讀取該位所在的字節(jié)值,然后上位機自動識別出該位的值。按照讀寫的數(shù)據(jù)類型,其中Str_Read(27)的值各不同: 在控制系統(tǒng)中,PLC與上位計算器的通訊,

30、采用了PPI通訊協(xié)議,上位機每0.5秒循環(huán)讀寫一次PLC。PLC編程時,將要讀取的檢測值、輸出值等數(shù)據(jù),存放在PLC的一個連續(xù)的變量區(qū)中,當上位機讀取PLC的數(shù)據(jù)時,就可以一次讀出這組連續(xù)的數(shù)據(jù),減少數(shù)據(jù)的分次頻繁讀取。當修改設(shè)定值等數(shù)據(jù)時,進行寫數(shù)據(jù)的通訊操作。 利用西門子PPI協(xié)議采集數(shù)據(jù)摘  要:利用西門子S7-200 PLC內(nèi)置的PPI協(xié)議的部分功能,可以做出簡單使用的控制和采集系統(tǒng)。 關(guān)鍵詞:PPI協(xié)議、PLC通訊、數(shù)據(jù)采集1、前言西門子S7-200系列可編程控制器(PLC)是控制領(lǐng)域應(yīng)用最廣的小型PLC之一,它支持兩種與計算機通信方式:自由端口,PPI

31、方式使用自由口方式進行編程時,必須定義自己的通訊協(xié)議,在上位機和PLC中都要編寫數(shù)據(jù)通信程序,占用PLC的內(nèi)存。使用PPI協(xié)議進行通信時,PLC可以不用編程,而且可讀寫所有數(shù)據(jù)區(qū),快捷方便。但是西門子公司沒有公布PPI協(xié)議的格式。用戶如果想使用PPI協(xié)議,必須購買西門子的協(xié)議模塊或其它廠家的組態(tài)軟件。只對于一些小型系統(tǒng)來說成本比較高,若只應(yīng)用幾個數(shù)據(jù),就購買一套軟件,實在是浪費。利用S7-200內(nèi)置的PPI協(xié)議,開發(fā)自己的控制或采集系統(tǒng)不愧是一個捷徑。2、部分PPI協(xié)議格式SD:(Start Delimiter)開始定界符(68H)LE:(Length)報文數(shù)據(jù)長度LER:(Repe

32、ated Length)重復(fù)報文數(shù)據(jù)長度(從DA到DU)SD: (Start Delimiter)開始定界符(68H) SA:(Source Address)數(shù)據(jù)源站地址DA:(Destination Address)數(shù)據(jù)目標站地址FC:(Function Code)功能碼DSAP:(Destination Service Access Point)目的服務(wù)存取點SSAP:(Source Service Access Point)源服務(wù)存取點DU:(Data

33、0;Unit)數(shù)據(jù)單元FCS:校驗碼(從DA到DU數(shù)據(jù)和)ED:(End  Code)結(jié)束碼(16H)3、通訊過程從計算機上的COM口通過一條PC/PPI編程電纜連到PLC的編程口上(最小的系統(tǒng)要求),計算機(為主,地址為00)與PLC(為從,地址為02)采用主從方式通訊,具體過程如下圖所示,一次讀寫操作的步驟包括:(1)首先主機(計算機)發(fā)出讀寫命令,(2)從機(PLC)作出接收正確的響應(yīng)(E5),(3)主機接到此響應(yīng)則發(fā)出確認指令(10 02 00 5C 5E 16),(4)PLC回應(yīng)給上位機數(shù)據(jù)。這樣收發(fā)兩次數(shù)據(jù),完成

34、一次數(shù)據(jù)的讀寫。4、讀寫指令實例4.1讀指令實例 對于一次讀取一個數(shù)據(jù),讀命令都是33個字節(jié)。前面的021字節(jié)是相同的,SA=00,DA=02(PLC缺省地址),如果有多個站,DA要改成相應(yīng)的站號。讀命令中從DA到DU的長度為1B即27個字節(jié)。從22字節(jié)開始根據(jù)讀取數(shù)據(jù)的類型、位置不同而不同。 下表是讀不同存儲器命令的Byte2232。讀命令的Byte22-32實際輸出指令:讀VB100,Byte28-30 為100*8=&H032068 1B 1B 68 2 0 6C 32 

35、1 0 0 0 0 0 E 0 0 4 1 12 A 10 2 0 1 0 1 84 0 3 20 8B 16 4.2 寫指令實例:一次寫一個類型的數(shù)據(jù)V100,寫V區(qū)地址 Byte28-30 為100*8=&H0320寫VB100(16):68 20 20 68 2&#

36、160;0 6C 32 1 0 0 0 0 0 E 0 5 5 1 12 A 10 2 0 1 0 1 84 0 3 20 0 4 0 8 10 B9 16寫VW100(16):68 21 21 68 2 0 6C

37、60;32 1 0 0 0 0 0 E 0 6 5 1 12 A 10 4 0 1 0 1 84 0 3 20 0 4 0 10 0 10 B9 16 寫VD100(16):68 23 23 68 2 0 6C 

38、;32 1 0 0 0 0 0 E 0 8 5 1 12 A 10 6 0 1 0 1 84 0 3 20 0 4 0 20 0 0 0 10 B9 16Byte 22- Byte 30 寫入數(shù)據(jù)的長度、存儲器類型、存儲器偏移量與

39、讀命令相同。Byte 35-38 寫入數(shù)據(jù)的位數(shù)。5、應(yīng)用實例在鋼管制造行業(yè),水壓靜載試驗機(簡稱水壓機)是必備的檢驗和試驗設(shè)備。因為美國石油協(xié)會的API標準管線鋼管 Spec 5L和國家標準GB/T9711-1997規(guī)定,螺旋焊管和直縫焊管必須經(jīng)過規(guī)定的靜水壓試驗,并且保存水壓過程的壓力曲線。該系統(tǒng)原來是用MCGS工控組態(tài)軟件+VB程序來完成的,采集速度較慢,最多一秒鐘采集一個,比較緩慢?,F(xiàn)用VB語言,通過PPI協(xié)議直接采集PLC的水壓值進行處理,簡潔又迅速,懷可以開發(fā)出多種功能。采用PPI電纜將計算機COM1口與PLC的PORT0編程口連接,通訊系統(tǒng)

40、采用主從結(jié)構(gòu),通訊協(xié)議遵循PPI協(xié)議格式,計算機發(fā)出讀寫申請,PLC返回相應(yīng)的數(shù)據(jù)。程序?qū)崿F(xiàn)如下5.1 初始化程序Private Sub Form_Load()With MSComm1.CommPort = 1.Settings = "9600,e,8,1" 波特率9600,偶校驗,8數(shù)據(jù)位,1停止位.InputLen = 0.RThreshold = 1 收到字符就產(chǎn)生事件.InputMode = comInputModeBinary 二進制接收模式End With If MSComm1.PortOpen = False ThenMSComm1.PortOpen = Tr

41、ue 打開通訊串口End IfEnd SubPrivate Sub Form_Unload(Cancel As Integer)If MSComm1.PortOpen = True ThenMSComm1.PortOpen = False 關(guān)閉通訊串口End IfEnd Sub5.2 讀VW函數(shù)Function ppird(readaddress As String) 讀VW的地址,例如:1000Dim i As Integer, temp As IntegerDim sendbyte(32) As Bytesendbyte(0) = &H68sendbyte(1) = &H1

42、Bsendbyte(2) = &H1Bsendbyte(3) = &H68sendbyte(4) = &H2sendbyte(5) = &H0sendbyte(6) = &H6Csendbyte(7) = &H32sendbyte(8) = &H1sendbyte(9) = &H0sendbyte(10) = &H0sendbyte(11) = &H0sendbyte(12) = &H0sendbyte(13) = &H0sendbyte(14) = &HEsendbyte(15) = &a

43、mp;H0sendbyte(16) = &H0sendbyte(17) = &H4sendbyte(18) = &H1sendbyte(19) = &H12sendbyte(20) = &HAsendbyte(21) = &H10sendbyte(22) = &H4sendbyte(23) = &H0sendbyte(24) = &H1sendbyte(25) = &H0sendbyte(26) = &H1sendbyte(27) = &H84sendbyte(28) = &H0sendby

44、te(29) = (readaddress * 8) 256 計算讀高位地址sendbyte(30) = (readaddress * 8) Mod 256 計算讀低位地址sendbyte(31) = &H0sendbyte(32) = &H16For i = 4 To 30 temp = temp + sendbyte(i)Nextsendbyte(31) = temp Mod 256 計算校驗碼ppird = sendbyte 返回讀VW 指令碼End Function5.3 寫VW函數(shù)Function ppiww(adressx As Integer, datax As

45、Integer) adressx 為寫VW的地址datax 要寫入VW的整數(shù)Dim i As Integer, temp As IntegerDim sendbyte(38) As Bytesendbyte(0) = &H68sendbyte(1) = &H21sendbyte(2) = &H21sendbyte(3) = &H68sendbyte(4) = &H2sendbyte(5) = &H0sendbyte(6) = &H6Csendbyte(7) = &H32sendbyte(8) = &H1sendbyte(9

46、) = &H0sendbyte(10) = &H0sendbyte(11) = &H0sendbyte(12) = &H0sendbyte(13) = &H0sendbyte(14) = &HEsendbyte(15) = &H0sendbyte(16) = &H6sendbyte(17) = &H5sendbyte(18) = &H1sendbyte(19) = &H12sendbyte(20) = &HAsendbyte(21) = &H10sendbyte(22) = &H4s

47、endbyte(23) = &H0sendbyte(24) = &H1sendbyte(25) = &H0sendbyte(26) = &H1sendbyte(27) = &H84sendbyte(28) = &H0sendbyte(29) = (adressx * 8) 256sendbyte(30) = (adressx * 8) Mod 256sendbyte(31) = &H0sendbyte(32) = &H4sendbyte(33) = &H0sendbyte(34) = &H10sendbyte(35

48、) = datax 256sendbyte(36) = datax Mod 256sendbyte(37) = &H0sendbyte(38) = &H16For i = 4 To 36 temp = temp + sendbyte(i)Nextsendbyte(37) = temp Mod 256ppiww = sendbyte 返回寫VW 指令碼End Function5.4 利用MSCOMM的事件獲取數(shù)據(jù)Private Sub MSComm1_OnComm()Dim rcvtemp(5) As Byte 

49、;  定義確認發(fā)送的數(shù)組數(shù)據(jù)元素為字節(jié)Dim rcv_array() As ByteDim yy As Long  Select Case MSComm1.CommEvent     Case comEvReceive            rcv_array = MSComm1

50、.Input  取出串口接收緩沖器的數(shù)據(jù)。            If rcv_array(0) = &HE5 Then            SComm1.RThreshold =25             rcvtemp(0) = &H10             rcvtemp(1)&#

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論