版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
SiemensPPI協(xié)議分析大家好:我是山東臨沂的郝金紅,PLC解密網(wǎng)是我的個人網(wǎng)站。由于前段時間的瘋狂的研究西門子PPI協(xié)議解密之故,所以無心插柳的研究出了較實(shí)用的西門子S7-200PPI協(xié)議,今天奉獻(xiàn)大家。我們經(jīng)常要用于上位機(jī)、現(xiàn)場設(shè)備與S7-200CPU之間的通訊,但是西門子公司沒有公布PPI協(xié)議的格式,用戶如果想使用PPI協(xié)議監(jiān)控,必須購買其監(jiān)控產(chǎn)品或第三方廠家的組態(tài)軟件。大家要知道國內(nèi)的組態(tài)王、紫金橋、力控等等組態(tài)公司是花了多少錢才得到的PPI的深層協(xié)議嗎?其實(shí)西門子工控產(chǎn)品的超高價(jià)壟斷掠奪行為已經(jīng)引起了我們國家及業(yè)內(nèi)人士的抵制和抗議,他們的什么軟件都需要授權(quán)且對于系統(tǒng)的霸道性是有目共睹的,而且我是深受其害的。^_^我最近弄了個WINCC,裝了一個星期還沒裝上,網(wǎng)友告訴我要重做系統(tǒng)才可以,悲哀啊。。。。。。這樣給用戶自主開發(fā)就帶來了一定的困難,特別是想用VB、VC等語言自行開發(fā),根本沒辦法接入PLC,要么你大把掏錢給他們。洋為中用,最近在國外網(wǎng)站得到一個串口監(jiān)視軟件,帶協(xié)議分析的相當(dāng)不錯,你吧!我就是通過此軟件的數(shù)據(jù)監(jiān)視、分析方法,找出了PPI協(xié)議的關(guān)鍵報(bào)文格式所在。其實(shí)西門子S7-200PLC之間或者PLC與PC之間通信有很多種方式:自由口,PPI方式,MPI方式,Profibus方式。使用自由口方式進(jìn)行編程時,在上位機(jī)和PLC中都要編寫數(shù)據(jù)通信程序。使用PPI協(xié)議進(jìn)行通信時,PLC可以不用編程,而且可讀寫所有數(shù)據(jù)區(qū),快捷方便。這也是我們之所以要研究、找出PPI協(xié)議的源動力!下面我們就要說說分析的方法了!
西門子的STEP7MicroWIN是用于S7-200系列PLC的開發(fā)工具,它使用PC機(jī)上的COM口通過一條PC/PPI編程電纜連到PLC的編程口上。這說明,PC實(shí)際上是可以通過串口同S7-200CPU通訊。只是我們不知道通訊協(xié)議而已。通過截獲PC機(jī)串口上的收發(fā)數(shù)據(jù),對照Step7軟件發(fā)出的指令,我們就有可能分析出有關(guān)指令的報(bào)文和通訊方式;然后,直接通過串口向PLC發(fā)送報(bào)文,以驗(yàn)證這些指令報(bào)文是否正確。本著這一思想,我們采用以下步驟獲得這些報(bào)文。首先你這個英文的串口監(jiān)控軟件,英文不好的網(wǎng)友可以用金山快譯翻譯一下,你必須使用這個軟件,因?yàn)槲蚁惹笆褂眠^很多的監(jiān)控軟件,在收發(fā)數(shù)據(jù)很多的情況下都有死機(jī)現(xiàn)象,造成數(shù)據(jù)丟失,容易給我們錯誤分析。接下來你先打開這個軟件,新建、選擇端口COM1,然后再將PC/PPI編程電纜接在COM1上,這樣,Step7Micro/Win發(fā)給PLC的報(bào)文就可以在監(jiān)視軟件上完全裸露的展現(xiàn)在你的面前了。我們按S7-200系統(tǒng)手冊設(shè)置好串口參數(shù):9600,8,E偶校驗(yàn),1位停止位。然后設(shè)置好Step7軟件,使之能與S7-200CPU正常通訊。從Step7軟件中發(fā)出一個明確指令,監(jiān)視軟件就能顯示這條報(bào)文了(用16進(jìn)制顯示,ASCII碼的只能看到幾個版本號之類的,其他都沒有意義)。我們的破解策略就是通過軟件監(jiān)視的方法,分析PLC內(nèi)部固有的PPI通訊協(xié)議,然后上位機(jī)采用VB編程,遵循PPI通訊協(xié)議,讀寫PLC數(shù)據(jù),實(shí)現(xiàn)人機(jī)操作任務(wù)。這種通訊方法,與一般的自由通訊協(xié)議相比,省略了PLC的通訊程序編寫,只需編寫上位機(jī)的通訊程序資源。S7-200的編程口物理層為RS-485結(jié)構(gòu),SIEMENS提供MicroWin軟件,采用的是PPI(PointtoPoint)協(xié)議,關(guān)于232串口轉(zhuǎn)485你可以采用我們網(wǎng)站開發(fā)研制的自制PPI電纜,效果倍好哦!還是自己動手,豐衣足食?。〔荒芄庹f不練??!下面我們就說說西門子PLC到底是怎么通訊的。PC與PLC采用主從方式通訊,PC按如下文的格式發(fā)讀寫指令,PLC作出接收正確的響應(yīng)(返回應(yīng)答數(shù)據(jù)E5H或F9H見下文分析),上位機(jī)接到此響應(yīng)則發(fā)出確認(rèn)命令(10025C5E16),PLC再返回給上位機(jī)相應(yīng)數(shù)據(jù)。一般上位機(jī)要連接PLC就要先發(fā)送如下尋呼數(shù)據(jù)100200494B16同志們吶!我們可都是有血、有肉、有思想、有靈感的高級動物啊,面對這么多枯燥、無味、復(fù)雜、混亂的機(jī)器數(shù)字你怎么記呢?反正我是記不住?。。╚_^開始洗腦)這時你可以閉上眼睛,安靜、靜、再靜。。。。。。想一想戰(zhàn)爭時期的戰(zhàn)地對講機(jī)通話模式,那么這個指令(100200494B16)就可以理解為:00呼叫02,聽到請回答?,F(xiàn)在我們來簡單的分析一下這個指令的具體含義:10起始符02是上位機(jī)要聯(lián)系的下位機(jī)的地址站號,就是要找的人00就是上位級本身自己的站號49尋呼指令16終止符其中4B為校驗(yàn)碼,是這樣得來的:02+00+49的最后兩位就是校驗(yàn)碼,這就是所說的偶校驗(yàn)或稱和校驗(yàn)也稱余校驗(yàn),因?yàn)槿〉氖怯鄶?shù)。計(jì)算器在16進(jìn)制計(jì)算時公式(02+00+49)mod100得出的數(shù)就是校驗(yàn)碼,你計(jì)算一下是不是等于4B啊!其他的所有PPI協(xié)議校驗(yàn)都是如此。假如02站號的PLC收到尋呼信號那么會回答:100002000216意思是:報(bào)告00,02收到,請指示這樣的解釋是不是很好理解?。∧阌懈玫慕忉寙??接下來呢,找到了要尋呼的人PC上位機(jī),就是司令啦!就可以發(fā)號施令了,發(fā)號施令后PLC正確接收后就會發(fā)送E5字符,意思是:“02洞兩明白”。其實(shí)啊,說到這里PLC只說他明白,他已經(jīng)明白了上位機(jī)PC的指示,但并沒有執(zhí)行命令,那么要怎么他才執(zhí)行命令呢?就是上位機(jī)PC發(fā)出確認(rèn)命令后才執(zhí)行。這時上位機(jī)會發(fā)出確認(rèn)指令(10025C5E16),意思是:“請立即執(zhí)行”。然后PLC就干他應(yīng)當(dāng)干的工作了!原來PLC也不容易啊,怪不得叫下位機(jī)呢!說了這么多亂不亂吶?目的就是要理清上下級關(guān)系、主從關(guān)系,指令的順序,用一個好的記憶方法記住枯燥無味的機(jī)器碼。下面我們列表分析讀取PLC密碼的指令:681B1B6802006C320100000000000E00000401120A100200080000030005E0D216讀命令分析:一次讀一條數(shù)據(jù)
SDLELERSDDASAFCDASPSSAPDUFCSED
SD:(StartDelimiter)開始定界符(68H)
LE:(Length)報(bào)文數(shù)據(jù)長度
LER:(RepeatedLength)重復(fù)數(shù)據(jù)長度
SD:(StartDelimiter)開始定界符(68H)
SA:(SourceAddress)目標(biāo)地址,指該地址的值,就是PLC的地址
DA:(DestinationAddress)本地地址,指該地址的指針,就是上位機(jī)自己的地址
FC:(FunctionCode)功能碼,5CH為交替周期觸發(fā),6CH為首次信息周期觸發(fā),7CH為交替周期觸發(fā)。
DSAP:(DestinationServiceAccessPoint)目的服務(wù)存取點(diǎn)
SSAP:(SourceServiceAccessPoint)源服務(wù)存取點(diǎn)
DU:(DataUnit)數(shù)據(jù)單元
FCS:(FrameCheckSequence)校驗(yàn)碼
ED:(EndDelimiter)結(jié)束分界符(16H)
報(bào)文數(shù)據(jù)長度和重復(fù)數(shù)據(jù)長度為自DA至DU的數(shù)據(jù)長度,校驗(yàn)碼為DA至DU數(shù)據(jù)的和校驗(yàn),只取其中的末字節(jié)值關(guān)于這個校驗(yàn)碼的計(jì)算方法同上面說明。
在讀寫PLC的變量數(shù)據(jù)中,讀數(shù)據(jù)的功能碼為6CH,寫數(shù)據(jù)的功能碼為7CH。
對于一次讀取一個數(shù)據(jù),讀命令都是33個字節(jié)。前面的0—21字節(jié)是相同的,為0123456789101112131415161718192021SDLELERSDDASAFC開始符長度長度開始符站號源地址功能碼協(xié)議識別遠(yuǎn)程控制冗余識別冗余識別協(xié)議數(shù)據(jù)單元參考參數(shù)長度參數(shù)長度數(shù)據(jù)長度數(shù)據(jù)長度04讀05寫變量地址數(shù)681B1B6802006C320100000000000E00000401120A10讀取PLC密碼的指令:681B1B6802006C320100000000000E00000401120A100200080000030005E0D2162223242526272829303132DUFCSDE讀取長度數(shù)據(jù)個數(shù)存儲器類型偏移量校驗(yàn)碼結(jié)束符0200080000030005E0D216因?yàn)槭荘C上發(fā)的讀PLC數(shù)據(jù)的命令,SA=00,DA=02,如果有多個站,DA要改成相應(yīng)的站號。讀命令中從DA到DU的長度為1B即27個字節(jié)。從22字節(jié)開始根據(jù)讀取數(shù)據(jù)的類型、位置不同而不同。上表是讀不同存儲器命令的Byte22—32。字節(jié)2223242526272829303132功能讀取長度數(shù)據(jù)個數(shù)存儲器類型偏移量校驗(yàn)碼結(jié)束符讀Q0.10100010000820000006416讀M0.00100010000830000006516讀M0.10100010000830000016616讀SMB34020001000005000001F916讀VB1000200010001840003208B16讀VW1000400010001840003208D16讀VD1000600010001840003208F16讀I0.50100010000810000056816讀I0.70100010000810000076A16上表讀命令的Byte22-32從表中我們可以得出以下結(jié)果:
Byte22讀取數(shù)據(jù)的長度
01:1Bit02:1Byte
04:1Word06:DoubleWord
Byte24數(shù)據(jù)個數(shù),這里是01,一次讀多個數(shù)據(jù)時見下面的說明。
Byte26存儲器類型,01:V存儲器00:其它
Byte27存儲器類型
04:S05:SM06:AI07:AQ1E:C
81:I82:Q83:M84:V1F:T
Byte28,29,30存儲器偏移量指針(存儲器地址*8),如:VB100,存儲器地址為100,偏移量指針為800,轉(zhuǎn)換成16進(jìn)制就是320H,則Byte28—29這三個字節(jié)就是:000320。
Byte31校驗(yàn)和,前面已說到這是從(DA+SA+DSAP+SSAP+DU)Mod256。
一次讀多條數(shù)據(jù)
對于一次讀多個數(shù)據(jù)的情況,前21Byte與上面相似只是長度LD,LDr及Byte14不同:
Byte14數(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)。
Byte22總是02即以Byte為單位。
Byte24以字節(jié)為單位,連續(xù)讀取的字節(jié)數(shù)。如讀2個VD則Byte24=8
Byte19---30按上述一次讀一個數(shù)據(jù)的格式依次列出,
Byte31---42另一類型的數(shù)據(jù),也是按上述格式給出。
以此類推,一次最多讀取222個字節(jié)的數(shù)據(jù)。
寫命令分析:一次寫一個DoubleWord類型的數(shù)據(jù),寫命令是40個字節(jié),其余為38個字節(jié)。寫一個DoubleWord類型的數(shù)據(jù),前面的0—21字節(jié)為:0123456789101112131415161718192021開始符長度長度開始符6821216802007C320100000000000E00000401120A106823236802006C320100000000000E00000401120A10
寫一個其它類型的數(shù)據(jù),前面的0—21字節(jié)為:(與上面比較,只是長度字節(jié)發(fā)生變化)
6821216802006C320100000000000E00000401120A1022232425262728293031323334353637數(shù)據(jù)長度數(shù)據(jù)個數(shù)存儲類型偏移量數(shù)據(jù)形式數(shù)據(jù)位數(shù)寫入值校驗(yàn)碼終止符01000100008200000000030001017916從22字節(jié)開始根據(jù)寫入數(shù)據(jù)的值和位置不同而變化。上表是幾個寫命令的Byte22—40。
字節(jié)22232425262728293031323334353637383940
寫入位置及值長度個數(shù)類型偏移量位數(shù)值、校驗(yàn)碼、結(jié)束符
M0.0=10100010000820000000003000101007116
M0.0=00100010000830000000003000100007016
M0.1=10100010000830000010003000101007216
vb100=10020001000184000320000400081000AE16
vb100=FF02000100018400032000040008FF009D16
VW100=FFFF04000100018400032000040010FFFFA616
VD100=FFFFFFFF06000100018400032000040020寫命令的Byte22—最后,經(jīng)分析我們可以得出以下結(jié)果:
Byte22--Byte30寫入數(shù)據(jù)的長度、存儲器類型、存儲器偏移量與讀命令相同。T,C等不能用寫命令寫入。
Byte32如果寫入的是位數(shù)據(jù)這一字節(jié)為03,其它則為04
Byte34寫入數(shù)據(jù)的位數(shù)
01:1Bit08:1Byte10H:1Word20H:1DoubleWord
Byte35--40值、校驗(yàn)碼、結(jié)束符
如果寫入的是位、字節(jié)數(shù)據(jù),Byte35就是寫入的值,Byte36=00,Byte37=檢驗(yàn)碼,Byte38=16H,結(jié)束。如果寫個的是字?jǐn)?shù)據(jù)(雙字節(jié)),Byte35,Byte36就是寫入的值,Byte37=檢驗(yàn)碼,Byte38=16H,結(jié)束。如果寫個的是雙字?jǐn)?shù)據(jù)(四字節(jié)),Byte35—38就是寫入的值,Byte39=檢驗(yàn)碼,Byte40=16H,結(jié)束。
看完上面的指令分析我們現(xiàn)在就舉例幾個常用的PPI協(xié)議來分析一下:
PC尋呼:100200494B16
PLC返回:100002020216
PC發(fā)送:1002005C5E16
PLC返回:E5
我們先來看看西門子S7-200PLC的讀取密碼指令:
請用串口軟件以16進(jìn)制發(fā)送,端口設(shè)置9600;e;8;1
發(fā)送:681B1B6802006C320100000000000E00000401120A100200080000030005E0D216意思:要求傳送(03區(qū))系統(tǒng)存儲區(qū)05E0位開始的8個字符(這就是8個密碼數(shù)值)。
如果通訊無誤,PLC會返回E5,意思:已經(jīng)收到
那么這時上位機(jī)再次發(fā)送確認(rèn)執(zhí)行指令1002005C5E16意思:請執(zhí)行命令。(說到這里打住一下,PLC返回E5指令后上位機(jī)PC要在很短的時間內(nèi)發(fā)送確認(rèn)指令,晚了剛才的指令就無效了具體多長時間我也沒測準(zhǔn),反正1、2秒時間是沒有問題的。這也是很多網(wǎng)友問我通訊失敗的原因所在)那么這時PLC還就真的乖乖的執(zhí)行命令,返回如下字符:681D1D680002083203000000000002000C00000401FF0400409B9802069D9A00767D16
好了,說到這里就此停止,大家看看密碼是多少啊!你如果真正明白了PPI協(xié)議就不難找出出密碼了,但是這個密碼是經(jīng)過二次加密的,并不是真正的密碼,還需要破譯,至于密碼算法在此不便公開,不過你多做實(shí)驗(yàn)一定能得出結(jié)果的。
下面再看一個讀取PLC版本號的指令:
我們在解密中首先要確定的是PLC的版本號。就是要看看是老版本還是02版的,也好做出加解密方案。他的通訊源碼是這樣的:
681B1B6802007C320100000000000E00000401120A100200140000030000000916
發(fā)送完上面數(shù)據(jù)PLC返回E5.
再次發(fā)送確認(rèn)指令:1002005C5E16
這時plc的版本號就返回來了??聪旅妫?/p>
682929680002083203000000000002001800000401FF0400A04350552032323620434E20202020202030323031D716
你看這一段:4350552032323620434E20202020202030323031就是plc版本號的ASCII碼。用ASC方式顯示就會看的更明白上面數(shù)據(jù)是:CPUSP226SPCN0201(sp就是空格)0201是版本號。
再一個就是讀TD200密碼指令:
681B1B6802006C320100000000000E00000401120A100
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公共建筑裝飾設(shè)計(jì)理念與創(chuàng)意考核試卷
- 第五單元 第1課《廣東名山秀水》(說課稿)-2023-2024學(xué)年六年級下冊綜合實(shí)踐活動廣州版
- Unit 1 Signs Lesson6 (說課稿)-2024-2025學(xué)年北師大版(三起)英語四年級上冊
- 2025年華師大新版高三地理下冊月考試卷含答案
- 2025年人教新起點(diǎn)選擇性必修2生物下冊月考試卷含答案
- 增強(qiáng)趣味性與教育意義考核試卷
- 2025年外研版七年級科學(xué)上冊月考試卷含答案
- 2025年冀少新版拓展型課程化學(xué)下冊月考試卷含答案
- 味精生產(chǎn)過程中的資源綜合利用考核試卷
- 堅(jiān)果加工企業(yè)生產(chǎn)計(jì)劃與調(diào)度考核試卷
- 物業(yè)工程管理安全培訓(xùn)課件
- 《文化苦旅》讀書分享 PPT
- 氧化鋁生產(chǎn)工藝教學(xué)拜耳法
- 2023年十八項(xiàng)醫(yī)療核心制度考試題與答案
- 氣管切開患者氣道濕化的護(hù)理進(jìn)展資料 氣管切開患者氣道濕化
- GB/T 12706.1-2020額定電壓1 kV(Um=1.2 kV)到35 kV(Um=40.5 kV)擠包絕緣電力電纜及附件第1部分:額定電壓1 kV(Um=1.2 kV)和3 kV(Um=3.6 kV)電纜
- 管理模板:某跨境電商企業(yè)組織結(jié)構(gòu)及部門職責(zé)
- 底架總組裝工藝指導(dǎo)書
- 簡單臨時工勞動合同模板(3篇)
- 聚酯合成反應(yīng)動力學(xué)
- 上??萍即髮W(xué),面試
評論
0/150
提交評論