<object id="5egnf"></object>

    <dfn id="5egnf"></dfn>

  1. <sup id="5egnf"></sup>
        加入收藏 在線留言 聯系我們
        關注微信
        手機掃一掃 立刻聯系商家
        全國服務熱線17838383235

        SIEMESN西門子代理商6DL89030KD010AH5

        更新時間
        2024-10-30 14:14:21
        價格
        請來電詢價
        聯系電話
        17838383235
        聯系手機
        17838383235
        聯系人
        徐嘉泉
        立即詢價

        詳細介紹



        西門子的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?。∑渌乃蠵PI協議校驗都是如此。假如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字節是相同的,為


        123456789101112819202122起始符長度起始符遠程本地功能碼

        通訊編號參數長度

        04讀05寫排列格式681B1B6802006C320100000088000E00000401120A10


        讀取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


        2324252627282930313233讀取長度數據個數存儲器類型偏移量校驗碼終止符0200080000030005E0D216


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


        字節2324252627282930313233功能讀取長度數據個數存儲器類型偏移量校驗碼終止符讀Q0.10100010000820000006416讀M0.00100010000830000006516讀M0.10100010000830000016616讀SMB34020001000005000001F916讀VB1000200010001840003208B16讀VW1000400010001840003208D16讀VD1000600010001840003208F16讀I0.50100010000810000056816讀I0.70100010000810000076A16


        上表讀命令的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字節為 :


        123456789101112819202122起始符長度起始符遠程本地功能碼














        6821216802007C320100000000000E00000401120A10


        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


        232425262728293033738數據長度數據個數存儲類型偏移量數據形式數據位數寫入值校驗碼終止符01000100008200000000030001017916


        從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的版本號就返回來了。看下面:
        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的深層協議嗎?其實西門子工控產品的超高價壟斷掠奪行為已經引起了我們國家及業內人士的抵制和抗議,他們的什么軟件都需要授權且對于系統的霸道性是有目共睹的。

        這樣給用戶自主開發就帶來了一定的困難,特別是想用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到底是怎么通訊的。




        寫命令分析:



        1 00 FF 09 00 08 16 19 06 0D 01 08 18 1E EE 16

        聯系方式

        • 電  話:17838383235
        • 經理:徐嘉泉
        • 手  機:17838383235
        • 微  信:17838383235