<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

西門子PPI協議詳解分析

plcjiemi ? 來源:plcjiemi ? 作者:plcjiemi ? 2022-10-03 17:59 ? 次閱讀

大家好:由于前段時間的瘋狂的研究西門子PPI協議解密之故,所以無心插柳的研究出了較實用的西門子S7-200 PPI協議,今天奉獻大家。我們經常要用于上位機、現場設備與S7-200CPU之間的通訊,但是西門子公司沒有公布PPI協議的格式,用戶如果想使用PPI協議監控,必須購買其監控產品或第三方廠家的組態軟件。大家要知道國內的組態王、紫金橋、力控等等組態公司是花了多少錢才得到的PPI的深層協議嗎?其實西門子工控產品的超高價壟斷掠奪行為已經引起了我們國家及業內人士的抵制和抗議,他們的什么軟件都需要授權且對于系統的霸道性是有目共睹的。

這樣給用戶自主開發就帶來了一定的困難,特別是想用VB、VC等語言自行開發,根本沒辦法接入PLC,要么你大把掏錢給他們。我是通過一個串口監視軟件的數據監視與分析,找出了PPI協議的關鍵報文格式所在。
其實西門子S7-200 PLC之間或者PLC與PC之間通信有很多種方式:自由口,PPI方式,MPI方式,Profibus方式。使用自由口方式進行編程時,在上位機和PLC中都要編寫數據通信程序。使用PPI協議進行通信時,PLC可以不用編程,而且可讀寫所有數據區,快捷方便。這也是我們之所以要研究、找出PPI協議的源動力!

下面我們就要說說分析的方法了!

西門子的STEP 7 MicroWIN 是用于S7-200系列PLC的開發工具,它使用PC機上的COM口通過一條PC/PPI編程電纜連到PLC的編程口上。這說明,PC實際上是可以通過串口同S7-200 CPU通訊。只是我們不知道通訊協議而已。通過截獲PC機串口上的收發數據,對照Step 7軟件發出的指令,我們就有可能分析出有關指令的報文和通訊方式;然后,直接通過串口向PLC發送報文,以驗證這些指令報文是否正確。本著這一思想,我們采用以下步驟獲得這些報文。

你首先下載上面那個英文的串口監控軟件,英文不好的網友可以使用我們為你漢化的漢化包,替換原文件即可,你必須使用這個軟件,因為我先前使用過很多的監控軟件,在收發數據很多的情況下都有死機現象,造成數據丟失,容易給我們錯誤分析。接下來你先打開這個軟件,新建、選擇端口COM1,然后再將PC/PPI編程電纜接在COM1上,這樣,Step7 Micro/Win發給PLC的報文就可以在監視軟件上完全裸露的展現在你的面前了。我們按S7-200系統手冊設置好串口參數:9600,8,E偶校驗,1位停止位。然后設置好Step7軟件,使之能與S7-200 CPU正常通訊。從Step7軟件中發出一個明確指令,監視軟件就能顯示這條報文了(用16進制顯示,ASCII碼的只能看到幾個版本號之類的,其他都沒有意義)。

我們的破解策略就是通過軟件監視的方法,分析PLC內部固有的PPI通訊協議,然后上位機采用VB編程,遵循PPI通訊協議,讀寫PLC數據,實現人機操作任務。這種通訊方法,與一般的自由通訊協議相比,省略了PLC的通訊程序編寫,只需編寫上位機的通訊程序資源。S7-200的編程口物理層為RS-485結構,SIEMENS提供MicroWin軟件,采用的是PPI(Point to Point)協議,關于232串口轉485你可以采用我們網站開發研制的自制PPI電纜,效果倍好哦!

不能光說不練??!下面我們就說說西門子PLC到底是怎么通訊的。

PC與PLC采用主從方式通訊,PC按如下文的格式發讀寫指令,PLC作出接收正確的響應(返回應答數據E5H或F9H見下文分析),上位機接到此響應則發出確認命令(10 02 00 5C 5E 16),PLC再返回給上位機相應數據。一般上位機要連接PLC就要先發送如下尋呼數據 10 02 00 49 4B 16 同志們吶!我們可都是有血、有肉、有思想、有靈感的高級動物啊,面對這么多枯燥、無味、復雜、混亂的機器數字你怎么記呢?反正我是記不住?。。╚_^開始洗腦)這時你可以閉上眼睛,安靜、靜、再靜。。。。。。想一想戰爭時期的戰地對講機通話模式,那么這個初始的尋呼指令(10 02 00 49 4B 16)就可以理解為:“洞兩洞兩(02),我是洞洞(00),聽到請回答,聽到請回答!over!”。

現在我們來簡單地分析一下這個指令的具體含義: 10起始符,咳嗽一聲要開始講話的意思。02是上位機要聯系的下位機PLC的地址站號,就是要找的人。 00就是上位機電腦本身自己的站號。49尋呼指令,呼叫尋找的意思。16終止符,over、完畢、結束的意思。 其中4B為校驗碼,防止數據傳輸出錯而設計的,它是這樣得來的:02+00+49和的最后兩位就是校驗碼,這就是所說的偶校驗或稱和校驗也稱余校驗,因為取的是除以100后的余數。計算器在16進制計算時公式(02+00+49)mod 100得出的數就是校驗碼,你計算一下是不是等于4B??!其他的所有PPI協議校驗都是如此。假如02站號的PLC收到尋呼信號那么會回答: 10 00 02 00 02 16 意思是:“報告洞洞(00) ,洞兩(02)收到,請指示,over!” 這樣的解釋是不是很好理解??!你有更好的解釋嗎?既然找到了要找的人,接下來PC上位機電腦,就是司令啦!就可以發號施令了。這時上位機發出一條指令,這個指令下面詳細解說,發號施令后如果PLC正確接收就會返回 E5 字符,意思是:“明白!”。其實啊,說到這里PLC只說他明白,他已經明白了上位機PC的指示,但并沒有執行命令,那么要怎么他才執行命令呢?就是上位機PC發出確認命令后才執行。這時上位機會發出確認指令(10 02 00 5C 5E 16),這里的5C是執行指令,意思是:“請洞兩立即執行,over!”。然后PLC就干他該干的工作了!原來PLC也不容易啊,怪不得叫下位機呢!就是下人的意思!

說了這么多亂不亂吶?目的就是要理清上下級關系、主從關系,指令的順序,用一個好的記憶方法記住枯燥無味的機器碼。

下面我們列表分析讀取PLC密碼的指令:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 08 00 00 03 00 05 E0 D2 16

讀命令分析:一次讀一條數據
1.開始定界符(68H)
2.報文數據長度
3.重復數據長度
4.開始定界符(68H)
5.遠程目標地址,指該地址的值,就是PLC的地址
6.本地地址,指該地址的指針,就是上位機自己的地址
7.功能碼,5CH為交替周期觸發,6CH為首次信息周期觸發,7CH為交替周期觸發。
8-17.目的服務存取點
18-22.源服務存取點 18位分析:01:位排列 02:字節排列 04:字排列 06:雙字排列
23-31.數據單元
32.校驗碼
33.結束分界符(16H)
報文數據長度和重復數據長度為自DA至DU的數據長度,校驗碼為DA至DU數據的和校驗,只取其中的末字節值關于這個校驗碼的計算方法同上面說明。
在讀寫PLC的變量數據中,讀數據的功能碼為 6CH,寫數據的功能碼為 7CH。
對于一次讀取一個數據,讀命令都是33個字節。前面的1—22字節是相同的,為

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
起始符 長度 起始符 遠程 本地 功能碼 通訊編號 參數長度 04讀05寫 排列格式
68 1B 1B 68 02 00 6C 32 01 00 00 00 88 00 0E 00 00 04 01 12 0A 10

讀取PLC密碼的指令:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 08 00 00 03 00 05 E0 D2 16

23 24 25 26 27 28 29 30 31 32 33
讀取長度 數據個數 存儲器類型 偏移量 校驗碼 終止符
02 00 08 00 00 03 00 05 E0 D2 16

因為是PC上發的讀PLC數據的命令,SA=00,DA=02,如果有多個站,DA要改成相應的站號。讀命令中從DA到DU的長度為1B即27個字節。從23字節開始根據讀取數據的類型、位置不同而不同。上表是讀不同存儲器命令的Byte23—33。

字節 23 24 25 26 27 28 29 30 31 32 33
功能 讀取長度 數據個數 存儲器類型 偏移量 校驗碼 終止符
讀Q0.1 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 00 01 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

上表讀命令的Byte23-33從表中我們可以得出以下結果:
Byte 23 讀取數據的長度
01:1 Bit 02:1 Byte
04:1 Word 06:Double Word
Byte 25數據個數,這里是01 ,一次讀多個數據時見下面的說明。
Byte 27 存儲器類型,01:V存儲器 00:其它
Byte 28 存儲器類型
04:S 05:SM 06:AI 07:AQ 1E: C
81:I 82:Q 83:M 84:V 1F: T
Byte 29,30,31存儲器偏移量指針(存儲器地址*8),如:VB100,存儲器地址為100,偏移量指針為800,轉換成16進制就是320H,則Byte 29—31這三個字節就是:00 03 20。
Byte 32 校驗和,前面已說到這是從(DA+SA+DSAP+SSAP+DU) Mod 256 。

一次讀多條數據

對于一次讀多個數據的情況,前21Byte與上面相似只是長度LD,LDr及Byte 15不同:
Byte 15 數據塊占位字節,它指明數據塊占用的字節數。與數據塊數量有關,長度=4+數據塊數*10,如:一條數據時為4+10=0E(H);同時讀M,V,Q三個不同的數據塊時為4+3*10=22(H)。
Byte 23 總是02 即以Byte為單位。
Byte 25 以字節為單位,連續讀取的字節數。如讀2個VD則Byte25=8
Byte 19---30 按上述一次讀一個數據的格式依次列出,
Byte 31---42 另一類型的數據,也是按上述格式給出。
以此類推,一次最多讀取222個字節的數據。

寫命令分析:

一次寫一個Double Word類型的數據,寫命令是40個字節,其余為38個字節。寫一個Double Word類型的數據,前面的1—22字節為 :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 15 17 18 19 20 21 22
起始符 長度 起始符 遠程 本地 功能碼
68 21 21 68 02 00 7C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10

68 23 23 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
寫一個其它類型的數據,前面的0—21字節為 :(與上面比較,只是長度字節發生變化)
68 21 21 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10

23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
數據長度 數據個數 存儲類型 偏移量 數據形式 數據位數 寫入值 校驗碼 終止符
01 00 01 00 00 82 00 00 00 00 03 00 01 01 79 16

從22字節開始根據寫入數據的值和位置不同而變化。上表是幾個寫命令的Byte22—40。
字 節 23 24 25 26 276 28 298 30 31 32 33 34 35 36 37 387 39 40 41
寫入位置及值長度 個數 類型 偏移量 位數 值、校驗碼、 結束符
M0.0=1 01 00 01 00 00 82 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 1

寫命令的Byte22—最后, 經分析我們可以得出以下結果:
Byte 23-- Byte 31 寫入數據的長度、存儲器類型、存儲器偏移量與讀命令相同。T,C等不能用寫命令寫入。
Byte 33 如果寫入的是位數據這一字節為03,其它則為04
Byte 35 寫入數據的位數
01: 1 Bit 08: 1 Byte 10H: 1 Word 20H: 1 Double Word
Byte 36--41值、校驗碼、結束符
如果寫入的是位、字節數據,Byte35就是寫入的值,Byte36=00,Byte37=檢驗碼,Byte38=16H,結束。如果寫個的是字數據(雙字節),Byte35,Byte36就是寫入的值, Byte37=檢驗碼,Byte38=16H,結束。如果寫個的是雙字數據(四字節),Byte35—38就是寫入的值, Byte39=檢驗碼,Byte40=16H,結束。

看完上面的指令分析我們現在就舉例幾個常用的PPI協議來分析一下:
PC尋呼:10 02 00 49 4B 16
PLC返回:10 00 02 02 04 16
PC發送:10 02 00 5C 5E 16
PLC返回: E5
我們先來看看西門子S7-200PLC的讀取密碼指令:
請用串口軟件以16進制發送,端口設置9600;e;8;1
發送:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 08 00 00 03 00 05 E0 D2 16 意思:要求傳送(03區)系統存儲區05E0位開始的8個字符(這就是8個密碼數值)。
如果通訊無誤,PLC會返回 E5,意思:已經收到
那么這時上位機再次發送確認執行指令 10 02 00 5C 5E 16 意思:請執行命令。(說到這里打住一下,PLC返回E5指令后上位機PC要在很短的時間內發送確認指令,晚了剛才的指令就無效了具體多長時間我也沒測準,反正1、2秒時間是沒有問題的。這也是很多網友問我通訊失敗的原因所在)那么這時PLC還就真的乖乖的執行命令,返回如下字符:68 1D 1D 68 00 02 08 32 03 00 00 00 00 00 02 00 0C 00 00 04 01 FF 04 00 40 9B 98 02 06 9D 9A 00 76 7D 16
好了,說到這里就此停止,大家看看密碼是多少??!你如果真正明白了PPI協議就不難找出出密碼了,但是這個密碼是經過二次加密的,并不是真正的密碼,還需要破譯,至于密碼算法在此不便公開,不過你多做實驗一定能得出結果的。
下面再看一個讀取PLC版本號的指令:
我們在解密中首先要確定的是PLC的版本號。就是要看看是老版本還是02版的,也好做出加解密方案。他的通訊源碼是這樣的:
68 1B 1B 68 02 00 7C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 14 00 00 03 00 00 00 09 16
發送完上面數據PLC返回E5.
再次發送確認指令:10 02 00 5C 5E 16
這時plc的版本號就返回來了??聪旅妫?br /> 68 29 29 68 00 02 08 32 03 00 00 00 00 00 02 00 18 00 00 04 01 FF 04 00 A0 43 50 55 20 32 32 36 20 43 4E 20 20 20 20 20 20 30 32 30 31 D7 16
你看這一段:43 50 55 20 32 32 36 20 43 4E 20 20 20 20 20 20 30 32 30 31 就是plc版本號的ASCII碼。用ASC方式顯示就會看的更明白上面數據是:C P U SP 2 2 6 SP C N 0 2 0 1 (sp就是空格)0201是版本號。
再一個就是讀TD200密碼指令:
68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 02 00 01 84 00 00 50 B9 16 (VW10)
寫M0指令:
68 20 20 68 02 00 7C 32 01 00 00 00 00 00 0E 00 05 05 01 12 0A 10 01 00 01 00 00 83 00 00 00 00 03 00 01 01 80 16
讀222位3區(系統區)數據指令:
68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 DE 00 00 03 00 00 00 C3 16
讀取密碼保護位指令:
68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 01 00 00 03 00 05 D8 C3 16
改寫密碼保護位指令:(你來驗證是否可行)
68 20 20 68 02 00 7C 32 01 00 00 00 00 00 0E 00 05 05 01 12 0A 10 08 00 01 00 00 03 00 05 D8 00 04 00 08 04 EF 16
68 20 20 68 02 00 7C 32 01 00 00 00 00 00 0E 00 05 05 01 12 0A 10 02 00 01 00 00 03 00 05 D8 00 03 00 08 04 E8 16
全部清除指令:
68 21 21 68 02 00 7C 32 07 00 00 00 24 00 08 00 0C 00 01 12 04 11 45 01 00 FF 09 00 08 16 19 06 0D 01 08 18 1E EE 16

關于此PPI協議我也是初步研究難免有失誤之處,希望眾網友有更好的見解與發現能夠到我們論壇發表,也可以給我留言!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • plc
    plc
    +關注

    關注

    4985

    文章

    12540

    瀏覽量

    456343
  • 西門子
    +關注

    關注

    92

    文章

    2893

    瀏覽量

    114112
  • ASCII
    +關注

    關注

    4

    文章

    169

    瀏覽量

    34722
  • PPI協議
    +關注

    關注

    0

    文章

    4

    瀏覽量

    2761
  • PPI
    PPI
    +關注

    關注

    0

    文章

    22

    瀏覽量

    4986
收藏 人收藏

    評論

    相關推薦

    西門子S7-200 PPI協議分析 相關資料分享

    大家好:由于前段時間的瘋狂的研究西門子PPI協議解密之故,所以無心插柳的研究出了較實用的西門子S7-200 PPI
    發表于 07-02 06:07

    怎樣去分析西門子S7-200 PPI協議

    西門子PLC到底是怎么通訊的?怎樣去分析西門子S7-200 PPI協議?
    發表于 09-22 06:16

    西門子S7-200 PPI協議獲取及其通信控件研究

    西門子S7-200 PPI協議獲取及其通信控件研究
    發表于 01-10 12:46 ?39次下載
    <b class='flag-5'>西門子</b>S7-200 <b class='flag-5'>PPI</b><b class='flag-5'>協議</b>獲取及其通信控件研究

    西門子是哪個國家的品牌_西門子發明了什么

    本文開始介紹了西門子是哪個國家的品牌以及西門子的發展歷史,其次介紹了西門子的發明成果,最后對西門子的家電進行了分析。
    的頭像 發表于 04-04 08:45 ?5.2w次閱讀

    博世和西門子哪個好_博世和西門子的關系

    本文開始闡述了博世和西門子的關系以及分析西門子和博世哪個更好,其次分析西門子和博世的冰箱哪個更好,最后介紹了博世和
    的頭像 發表于 04-04 09:30 ?15.4w次閱讀

    干貨 | PLC與西門子觸摸屏的RS485通信

    S7-200 SMART CPU既可以通過本體集成的RS485端口或信號板連接支持PPI協議西門子HMI設備,還可以通過本體集成的以太網口來連接支持S7協議
    的頭像 發表于 06-19 16:31 ?7077次閱讀
    干貨 | PLC與<b class='flag-5'>西門子</b>觸摸屏的RS485通信

    英創信息技術工控主板通過PPI協議連接西門子PLC

    西門子S7-200系列PLC是工業場合應用最廣的現場控制設備之一,S7-200系列PLC支持自由端口、MPI、PPI和Moddus等通訊方式。自由端口方式需要用戶自己制定通訊協議,PLC與上位機兩端
    的頭像 發表于 02-05 11:21 ?2148次閱讀
    英創信息技術工控主板通過<b class='flag-5'>PPI</b><b class='flag-5'>協議</b>連接<b class='flag-5'>西門子</b>PLC

    詳解西門子S7-300基本指令應用

    詳解西門子S7-300基本指令應用說明。
    發表于 04-22 14:58 ?23次下載

    西門子S7協議轉Modbus協議網關

    西門子S7協議轉Modbus協議網關
    發表于 11-13 15:03 ?1579次閱讀

    快速了解西門子串口PPI、200、200smart驅動協議如何使用

    快速學會西門子串口PPI、200、200smart驅動協議如何使用
    的頭像 發表于 03-06 16:22 ?1.3w次閱讀

    MPI/DP轉以太網/YT-PPI-ETH-Z西門子以太網模塊

    本次使用的是YT-PPI-ETH-Z西門子以太網模塊,支持西門子S7以太網通訊驅動,包括microWIN,支持wincc以TCP/IP方式直連S7-200。工具/原料西門子以太網模塊
    的頭像 發表于 11-22 18:49 ?934次閱讀
    MPI/DP轉以太網/YT-<b class='flag-5'>PPI</b>-ETH-Z<b class='flag-5'>西門子</b>以太網模塊

    MQTT協議網關串口PPI連接西門子200PLC操作說明

    MQTT協議網關串口PPI連接西門子200PLC操作說明
    發表于 03-06 17:41 ?0次下載

    杭氧與西門子簽署合作協議

    杭氧與西門子簽署合作協議 3月7日杭州制氧機集團有限公司與西門子簽署戰略合作協議;杭氧與西門子雙方將在企業管理運營提升方面展開深入合作,共同
    的頭像 發表于 03-11 11:58 ?356次閱讀

    485口還是網口?西門子PLC通訊方式到底怎么選?

    西門子PLC都有一定的了解,但要你說出西門子PLC各種通信方式的特點,相信很多人都不能完整答出。下面給大家介紹幾種常見的西門子通信方式及其方案示意圖供大家參考~ 01 PPI通訊
    的頭像 發表于 04-24 11:04 ?429次閱讀
    485口還是網口?<b class='flag-5'>西門子</b>PLC通訊方式到底怎么選?

    非夕科技與西門子達成戰略合作協議,正式加入西門子Xcelerator生態

    近日,Flexiv非夕科技與西門子達成戰略合作協議,正式加入西門子 Xcelerator 生態,雙方將聯合打造面向多行業的自適應機器人應用解決方案。
    的頭像 發表于 05-24 14:49 ?358次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>