Siemens PPI協(xié)議分析
時(shí)間:2007-02-25 10:04:00來(lái)源:jiangf
導(dǎo)語(yǔ):?在不使用西門子或其它組態(tài)軟件的情況下,利用分析得到的PPI協(xié)議實(shí)現(xiàn)了上位機(jī)對(duì)PLC的監(jiān)控。
摘 要:通過(guò)數(shù)據(jù)監(jiān)視,分析的方法,找出了PPI協(xié)議的關(guān)鍵報(bào)文格式,可用于上位機(jī)、現(xiàn)場(chǎng)設(shè)備與S7-200 CPU之間通訊。
關(guān)鍵字:PLC ,PPI ,協(xié)議
1 前言
西門子S7-200 PLC之間或者PLC與PC之間通信有很多種方式:自由口,PPI方式,MPI方式,Profibus方式。使用自由口方式進(jìn)行編程時(shí),在上位機(jī)和PLC中都要編寫(xiě)數(shù)據(jù)通信程序。使用PPI協(xié)議進(jìn)行通信時(shí),PLC可以不用編程,而且可讀寫(xiě)所有數(shù)據(jù)區(qū),快捷方便。但是西門子公司沒(méi)有公布PPI協(xié)議的格式。用戶如果想使用PPI協(xié)議監(jiān)控,必須購(gòu)買其監(jiān)控產(chǎn)品或第三方廠家的組態(tài)軟件。這樣給用戶自主開(kāi)發(fā)帶來(lái)一定困難,特別是自行開(kāi)發(fā)的現(xiàn)場(chǎng)設(shè)備就不能通過(guò)PPI協(xié)議接入PLC。其它通訊方式編程也存在編程復(fù)雜,需要購(gòu)買軟件和授權(quán)等局限性(1)。通過(guò)數(shù)據(jù)監(jiān)視、分析的方法,我們找出了PPI協(xié)議的關(guān)鍵報(bào)文格式,可用于上位機(jī)、現(xiàn)場(chǎng)設(shè)備與S7-200 CPU之間通訊。
2 分析方法
西門子的Step 7 Micro/Win32 是用于S7-200系列PLC的開(kāi)發(fā)工具,它使用PC機(jī)上的COM口通過(guò)一條PC/PPI編程電纜連到PLC的編程口上。這說(shuō)明,PC實(shí)際上是可以通過(guò)串口同S7-200 CPU通訊。只是我們不知道通訊協(xié)議而已。通過(guò)截獲PC機(jī)串口上的收發(fā)數(shù)據(jù),對(duì)照Step 7軟件發(fā)出的指令,我們就有可能分析出有關(guān)指令的報(bào)文和通訊方式;然后,直接通過(guò)串口向PLC發(fā)送報(bào)文,以驗(yàn)證這些指令報(bào)文是否正確。本著這一思想,我們采用以下步驟獲得這些報(bào)文。
首先制作一個(gè)串口的分支器,COM1的RX、TX分別接到COM2的TX、RX,即交叉接線,使得COM1發(fā)的數(shù)據(jù)COM2能收到。PC/PPI編程電纜接在COM1上,這樣,Step7 Micro/Win32發(fā)給PLC的報(bào)文就可以在COM2上接收了。我們按S7-200系統(tǒng)手冊(cè)設(shè)置好兩個(gè)串口,參數(shù)要一樣,均為9600,8,偶校驗(yàn),1位停止位。然后設(shè)置好Step7軟件,使之能與S7-200 CPU正常通訊。從Step7軟件中發(fā)出一個(gè)明確指令,COM2上的監(jiān)視軟件就能顯示這條報(bào)文了(用16進(jìn)制顯示)。通過(guò)與Profibus標(biāo)準(zhǔn)的類比(2)我們就可以得到一些關(guān)鍵的報(bào)文了。這種方法比分析PLC中NETR,NETW指令要直接、全面(3)。
3 PPI協(xié)議分析
PC與PLC采用主從方式通訊,PC按如下的格式發(fā)讀寫(xiě)指令,PLC作出接收正確的響應(yīng)(返回應(yīng)答數(shù)據(jù)E5H或F9H見(jiàn)下文分析),上位機(jī)接到此響應(yīng)則發(fā)出確認(rèn)命令(10 02 5C 5E 16),PLC再返回給上位機(jī)相應(yīng)數(shù)據(jù)。
SD LE LEr SD DA SA FC DSAP SSAP DU FCS ED
SD:開(kāi)始符(68H) LE、Ler:長(zhǎng)度(從DA到DU)
DA:目的地址 SA:源地址
FC:功能碼 (6CH) DSAP:目的服務(wù)存取點(diǎn)
SSAP:源服務(wù)存取點(diǎn) DU:數(shù)據(jù)單元
FCS:校驗(yàn)和 ED:結(jié)束符(16H)
3.1 讀命令分析
一次讀一條數(shù)據(jù)
對(duì)于一次讀取一個(gè)數(shù)據(jù),讀命令都是33個(gè)字節(jié)。前面的0—21字節(jié)是相同的,為 :
68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
因?yàn)槭荘C上發(fā)的讀PLC數(shù)據(jù)的命令,SA=00,DA=02,如果有多個(gè)站,DA要改成相應(yīng)的站號(hào)。讀命令中從DA到DU的長(zhǎng)度為1B即27個(gè)字節(jié)。從22字節(jié)開(kāi)始根據(jù)讀取數(shù)據(jù)的類型、位置不同而不同。表一是讀不同存儲(chǔ)器命令的Byte22—32。
字節(jié) 22 23 24 25 26 27 28 29 30 31 32
功能 讀取長(zhǎng)度 數(shù)據(jù)個(gè)數(shù)* 存儲(chǔ)器類型 偏移量 校驗(yàn) 結(jié)束
讀q0.0 01 00 01 00 00 82 00 00 00 64 16
讀m0.0 01 00 01 00 00 83 00 00 00 65 16
讀M0.1 01 00 01 00 00 83 00 00 01 66 16
讀SMB34 02 00 01 00 00 05 00 01 10 F9 16
讀VB100 02 00 01 00 01 84 00 03 20 8B 16
讀VW100 04 00 01 00 01 84 00 03 20 8D 16
讀vd100 06 00 01 00 01 84 00 03 20 8F 16
讀i0.5 01 00 01 00 00 81 00 00 05 68 16"
讀i0.7 01 00 01 00 00 81 00 00 07 6A 16"
表 一 讀命令的Byte22-32
從表中我們可以得出以下結(jié)果:
Byte 22 讀取數(shù)據(jù)的長(zhǎng)度
01:1 Bit 02:1 Byte
04:1 Word 06:Double Word
Byte 24數(shù)據(jù)個(gè)數(shù),這里是01 ,一次讀多個(gè)數(shù)據(jù)時(shí)見(jiàn)下面的說(shuō)明。
Byte 26 存儲(chǔ)器類型,01:V存儲(chǔ)器 00:其它
Byte 27 存儲(chǔ)器類型
04:S 05:SM 06:AI 07:AQ 1E: C
81:I 82:Q 83:M 84:V 1F: T
Byte 28,29,30存儲(chǔ)器偏移量指針(存儲(chǔ)器地址*8),如:VB100,存儲(chǔ)器地址為100,偏移量指針為800,轉(zhuǎn)換成16進(jìn)制就是320H,則Byte 28—29這三個(gè)字節(jié)就是:00 03 20。
Byte 31 校驗(yàn)和,前面已說(shuō)到這是從(DA+SA+DSAP+SSAP+DU) Mod 256 。
一次讀多條數(shù)據(jù)
對(duì)于一次讀多個(gè)數(shù)據(jù)的情況,前21Byte與上面相似只是長(zhǎng)度LD,LDr及Byte 14不同:
Byte 14 數(shù)據(jù)塊占位字節(jié),它指明數(shù)據(jù)塊占用的字節(jié)數(shù)。與數(shù)據(jù)塊數(shù)量有關(guān),長(zhǎng)度=4+數(shù)據(jù)塊數(shù)*10,如:一條數(shù)據(jù)時(shí)為4+10=0E(H);同時(shí)讀M,V,Q三個(gè)不同的數(shù)據(jù)塊時(shí)為4+3*10=22(H)。
Byte 22 總是02 即以Byte為單位。
Byte 24 以字節(jié)為單位,連續(xù)讀取的字節(jié)數(shù)。如讀2個(gè)VD則Byte24=8
Byte 19——-30 按上述一次讀一個(gè)數(shù)據(jù)的格式依次列出,
Byte 31——-42 另一類型的數(shù)據(jù),也是按上述格式給出。
以此類推,一次最多讀取222個(gè)字節(jié)的數(shù)據(jù)。
3.2 寫(xiě)命令分析
一次寫(xiě)一個(gè)Double Word類型的數(shù)據(jù),寫(xiě)命令是40個(gè)字節(jié),其余為38個(gè)字節(jié)。
寫(xiě)一個(gè)Double Word類型的數(shù)據(jù),前面的0—21字節(jié)為 :
68 23 23 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
寫(xiě)一個(gè)其它類型的數(shù)據(jù),前面的0—21字節(jié)為 :(與上面比較,只是長(zhǎng)度字節(jié)發(fā)生變化)
68 21 21 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
從22字節(jié)開(kāi)始根據(jù)寫(xiě)入數(shù)據(jù)的值和位置不同而變化。表二是幾個(gè)寫(xiě)命令的Byte22—40。
字 節(jié) 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
寫(xiě)入位置及值 長(zhǎng)度 個(gè)數(shù) 類型 偏移量 位數(shù) 值、校驗(yàn)碼、結(jié)束符
M0.0=1 01 00 01 00 00 83 00 00 00 00 03 00 01 01 00 71 16
M0.0=0 01 00 01 00 00 83 00 00 00 00 03 00 01 00 00 70 16
M0.1=1 01 00 01 00 00 83 00 00 01 00 03 00 01 01 00 72 16
vb100=10 02 00 01 00 01 84 00 03 20 00 04 00 08 10 00 AE 16
vb100=FF 02 00 01 00 01 84 00 03 20 00 04 00 08 FF 00 9D 16
VW100=FFFF 04 00 01 00 01 84 00 03 20 00 04 00 10 FF FF A6 16
VD100=FFFFFFFF 06 00 01 00 01 84 00 03 20 00 04 00 20 FF FF FF FF B8 16
表二 寫(xiě)命令的Byte22—40
經(jīng)分析我們可以得出以下結(jié)果:
Byte 22—— Byte 30 寫(xiě)入數(shù)據(jù)的長(zhǎng)度、存儲(chǔ)器類型、存儲(chǔ)器偏移量與讀命令相同。T,C等不能用寫(xiě)命令寫(xiě)入。
Byte 32 如果寫(xiě)入的是位數(shù)據(jù)這一字節(jié)為03,其它則為04
Byte 34 寫(xiě)入數(shù)據(jù)的位數(shù)
01: 1 Bit 08: 1 Byte 10H: 1 Word 20H: 1 Double Word
Byte 35——40值、校驗(yàn)碼、結(jié)束符
如果寫(xiě)入的是位、字節(jié)數(shù)據(jù),Byte35就是寫(xiě)入的值,Byte36=00,Byte37=檢驗(yàn)碼,Byte38=16H,結(jié)束。如果寫(xiě)個(gè)的是字?jǐn)?shù)據(jù)(雙字節(jié)),Byte35,Byte36就是寫(xiě)入的值, Byte37=檢驗(yàn)碼,Byte38=16H,結(jié)束。如果寫(xiě)個(gè)的是雙字?jǐn)?shù)據(jù)(四字節(jié)),Byte35—38就是寫(xiě)入的值, Byte39=檢驗(yàn)碼,Byte40=16H,結(jié)束。
3.3 其它命令分析
強(qiáng)制寫(xiě)入
I、Q、S 等不能使用上述的寫(xiě)命令寫(xiě)入數(shù)據(jù),只能用強(qiáng)制寫(xiě)入的方式。
前0—35字節(jié)值如下(長(zhǎng)度字段要根據(jù)實(shí)際情況而定),需要注意的是Byte8=07,
68 2B 2B 68 02 00 6C 32 07 00 00 00 00 00 0C 00 12 00 01 12 08 12 48 0B 00 00 00 00 00 FF 09 00 0E 00 01 10
后面的內(nèi)容如下:
Byte 32 占位字節(jié),從下一字節(jié)開(kāi)始到校驗(yàn)和前的字節(jié)數(shù)。說(shuō)明同讀數(shù)據(jù)的Byte 14.
Byte 36 強(qiáng)制寫(xiě)入數(shù)據(jù)的長(zhǎng)度
01:1 Bit 02:1 Byte
04:1 Word 06:Double Word
Byte 38 數(shù)據(jù)個(gè)數(shù),這里是01 ,一次強(qiáng)制寫(xiě)多個(gè)數(shù)據(jù)時(shí)見(jiàn)下面的說(shuō)明。
Byte 40 存儲(chǔ)器類型
Byte 41 存儲(chǔ)器類型,見(jiàn)讀命令的說(shuō)明。
Byte 42、43、44存儲(chǔ)器偏移量指針(存儲(chǔ)器地址*8)
Byte 45、46、47、48 值、校驗(yàn)碼、結(jié)束符
取消強(qiáng)制寫(xiě)
強(qiáng)制寫(xiě)入I、Q 等后,這些值就不能被程序改變,除非使用”取消強(qiáng)制命令”。 取消強(qiáng)制命令的格式與強(qiáng)制寫(xiě)入相似,變化的有以下幾點(diǎn):(1)是沒(méi)有”值”這一段,即沒(méi)有Byte45—48。這影響到長(zhǎng)度字節(jié)LE,LEr;占位字節(jié)Byte 32.(2)Byte16=10H, (3) Byte32=0CH,也就是第一條,沒(méi)有”值”這一段,數(shù)據(jù)塊長(zhǎng)度變短了。
對(duì)于一次強(qiáng)制寫(xiě)入或取消多個(gè)數(shù)據(jù)的情況可以參照寫(xiě)入命令寫(xiě)出相應(yīng)的報(bào)文,這里不再給出。
STOP命令
STOP命令使得S7-200 CPU從RUN狀態(tài)轉(zhuǎn)換到STOP狀態(tài)(此時(shí)CPU模塊上的模式開(kāi)關(guān)開(kāi)應(yīng)打在RUN或TERM位置)。PC發(fā)出如下命令,PLC返回F9,此時(shí)PLC已進(jìn)入等待狀態(tài),PC再發(fā)確認(rèn)報(bào)文(10 02 5C 5E 16),完成一個(gè)命令過(guò)程。
68 1D 1D 68 02 00 6C 32 01 00 00 00 00 00 10 00 00 29 00 00 00 00 00 09 50 5F 50 52 4F 47 52 41 4D AA 16
RUN 命令
RUN命令使得S7-200 CPU從STOP狀態(tài)轉(zhuǎn)換到RUN狀態(tài)(此時(shí)CPU模塊上的模式開(kāi)關(guān)開(kāi)應(yīng)打在RUN或TERM位置)。PC發(fā)出下命令,PLC返回F9,此時(shí)PLC已進(jìn)入運(yùn)行狀態(tài),PC再發(fā)確認(rèn)報(bào)文(10 02 5C 5E 16),完成一個(gè)命令過(guò)程。
68 21 21 68 02 00 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
3.4 讀出數(shù)據(jù)分析
一次讀出一條數(shù)據(jù)
PLC響應(yīng)的數(shù)據(jù)也是用PPI封裝的。如果用一次讀一條數(shù)據(jù)命令,響應(yīng)的報(bào)文中就只包含一條數(shù)據(jù),此響應(yīng)報(bào)文的Byte16<=8。
Byte 04:DA=00 Byte 05:SA=02 即從02 PLC站發(fā)往PC。
Byte 16:數(shù)據(jù)塊占位字節(jié),從Byte21到校驗(yàn)和前的字節(jié)數(shù)。
一條數(shù)據(jù)時(shí):Word=06 Double Word=08 其它為 05。
Byte 22:數(shù)據(jù)類型,位=3,其它=4。
Byte 24:數(shù)據(jù)寬度,Bit=01,Byte=08,Word=10H,Double Word=20H
Byte 25—28:值。
如果網(wǎng)絡(luò)上只可能有一個(gè)站會(huì)發(fā)回響應(yīng)報(bào)文,那么可以簡(jiǎn)單的根據(jù)LE長(zhǎng)度字節(jié)判斷返回值的位置:LE=16H,返回值是字節(jié),或位類型的值,響應(yīng)報(bào)文的Byte 25即是返回值;LE=17H,返回值是字(雙字節(jié))類型的值,響應(yīng)報(bào)文的Byte 25,26即是返回值;LE=19H,返回值是雙字(四字節(jié))類型的值,響應(yīng)報(bào)文的Byte 25—28即是返回值。更準(zhǔn)確的方式是要根據(jù)返回報(bào)文的SA,DA,及存儲(chǔ)器位置等信息識(shí)別目標(biāo)地址和源地址,確認(rèn)是這次申請(qǐng)的返回?cái)?shù)據(jù),然后經(jīng)過(guò)校驗(yàn)檢查,得到正確的數(shù)據(jù)。
一次讀出多條數(shù)據(jù)
如果用的是一次讀多條數(shù)據(jù)的命令,響應(yīng)的報(bào)文中就包含有多條數(shù)據(jù)。這些數(shù)據(jù)只有類型參數(shù),沒(méi)有偏移量參數(shù),所以要注意根據(jù)讀命令的順序?qū)⑵湟灰粚?duì)應(yīng)起來(lái)。
Byte 16:數(shù)據(jù)塊占位字節(jié),從Byte21到校驗(yàn)和前的字節(jié)數(shù),與數(shù)據(jù)塊數(shù)量和類型有關(guān)。
Byte 20:數(shù)據(jù)塊的個(gè)數(shù)。
Byte 21 開(kāi)始為數(shù)據(jù)塊,每一個(gè)數(shù)據(jù)塊都以FF 04開(kāi)始,接下來(lái)的兩個(gè)字節(jié)表示這一數(shù)據(jù)塊的長(zhǎng)度,以位計(jì)算,然后依次是連續(xù)的數(shù)據(jù)。下一個(gè)數(shù)據(jù)塊也是以FF 04開(kāi)始,重復(fù)上述格式,直到結(jié)束。
4 應(yīng)用
PC與與PLC通訊
在采用PC機(jī)與PLC通訊時(shí),計(jì)算機(jī)采用PPI電纜或普通的485串口卡與PLC的編程口連接, PC機(jī)采用VB編程,遵循PPI協(xié)議,主從式的通訊方式,一次讀寫(xiě)操作的步驟包括:首先上位機(jī)發(fā)出讀寫(xiě)命令,PLC作出接收正確的響應(yīng)(返回應(yīng)答數(shù)據(jù)E5H),上位機(jī)接到此響應(yīng)則發(fā)出確認(rèn)命令(10 02 5C 5E 16),PLC完成正確的讀寫(xiě)響應(yīng),返回給上位機(jī)相應(yīng)數(shù)據(jù)。這樣收發(fā)兩次數(shù)據(jù),完成一次數(shù)據(jù)的讀寫(xiě)。那么我們就可以利用上述PPI協(xié)議,讀寫(xiě)S7-200PLC中的各種類型數(shù)據(jù),包括I、Q、SM、M、V、T、C、S等數(shù)據(jù)類型,能夠直接讀出以上變量中的位、字節(jié)、字、雙字等,(其中讀位變量時(shí),實(shí)際是讀取該位所在的字節(jié)值)??梢愿淖働LC的運(yùn)行狀態(tài)(RUN/STOP)。 在編程時(shí),最好將讀取的檢測(cè)值、輸出值等數(shù)據(jù),存放在PLC的一個(gè)連續(xù)的變量區(qū)中,當(dāng)上位機(jī)讀取PLC的數(shù)據(jù)時(shí),就可以一次讀出這組連續(xù)的數(shù)據(jù),減少數(shù)據(jù)的分次頻繁讀取。當(dāng)修改設(shè)定值等數(shù)據(jù)時(shí),進(jìn)行寫(xiě)數(shù)據(jù)的通訊操作。
現(xiàn)場(chǎng)設(shè)備與PLC通訊
利用PPI協(xié)議除了能與上位機(jī)(PC)通訊外,更重要的是為現(xiàn)場(chǎng)設(shè)備與S7-200CPU之間的通訊提供了捷徑。自行開(kāi)發(fā)的設(shè)備可以方便的利用PPI協(xié)議通過(guò)485/232接口接入S7-200CPU,聯(lián)入PLC的網(wǎng)絡(luò),包括控制面板,采集器等。
5 總結(jié)
通過(guò)分析STEP7 Micro/win32軟件與S7-200CPU的通訊數(shù)據(jù),我們得到了西門子PPI協(xié)議的關(guān)鍵報(bào)文格式,這一結(jié)果對(duì)工程實(shí)踐具有較高的參考價(jià)值。在不使用西門子或其它組態(tài)軟件的情況下,利用分析得到的PPI協(xié)議實(shí)現(xiàn)了上位機(jī)對(duì)PLC的監(jiān)控?,F(xiàn)場(chǎng)設(shè)備與PLC通訊方面的工作正在進(jìn)行中。另外這種對(duì)通訊端口進(jìn)行監(jiān)測(cè)、分析的方法也對(duì)一些未知協(xié)議的測(cè)定和通訊錯(cuò)誤的檢查具有指導(dǎo)意義。
參考資料
1. 周曉平, 姜建芳, 蘇少鈺, 陳迅. S7-200系列PLC與監(jiān)控計(jì)算機(jī)通信實(shí)現(xiàn)的研究. 微計(jì)算機(jī)信息 2004;1.
2. SIEMENS. SIMATIC S7-200可編程序控制器 系統(tǒng)手冊(cè). 02 ed, 2000.
3. 郝莉, 王東興. PROFIBUS從站與S7-200PLC的通訊研究. 北京機(jī)械工業(yè)學(xué)院學(xué)報(bào)(綜合版) 2000;15
標(biāo)簽:
中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(www.connectcrack.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。