隨著中國整體經濟實力的加強,制造和加工工業正逐步向中國轉移,這給中國國內工業裝備市場帶來了大量的商機,國內各行業的制造商開發和制造出大量價廉物美的設備,取得了良好的經濟和社會效應。但是,也有小部分的制造商,由于其自身能力和客觀因素的限制,無法及時開發出合適的產品,但利益的驅動使他們把目光瞄準了同行,抄襲和仿制同行開發成功的產品,更有甚者是整機拷貝或者克隆。由于現代工業設備大量采用PLC作為主控制系統,PLC作為整個設備的核心部件,其軟件包涵了生產工藝,控制邏輯,設備數據,加工參數及信息通訊等重要內容,從而成為設備仿制者重點要獲取的目標之一?v觀目前中國國內市場上應用的主流品牌PLC,雖然在設計上都采用了各種軟硬件加密的手段,但破解者運用的破解手段也越來越先進,從最初的窮舉法,端口偵聽,軟件跟蹤,到現在可以通過直接復制提取內存芯片的內容來分析破解,更有甚者在互連網上公開討論和傳播破解方法和工具,因此所有產品無一例外地遭到了破解。這對中國眾多的中小型OEM制造商來說是非常不利的,“我們幾年的開發成果可能因此一夜之間付諸東流”當得知S7-200/300硬件加密也被破解后,一位OEM制造商無奈地說。由于仿制者的開發成本很低或幾乎為零,因此開發者還沒有來得及收回開發成本就陷入了低價競爭,這極大的影響了開發者開發新產品的積極性,對我國的裝備工業的長遠發展是十分有害的。
難道就這樣束手無策,聽任仿制者為所欲為了嗎?答案是否定的,多年來一直關注和研究PLC控制程序保護方面的問題,筆者在實踐中取得了一些經驗和心得,在本文中愿意和同行們共同分享和討論,大家共同為保護自己的勞動成果而努力。筆者多年來一直從事西門子SIAMTIC S7 PLC的應用,因此本文也只是從純粹的技術層面出發,重點探討SIMATIC S7 PLC控制程序的保護。
 在系統設計的初期,我們應該從系統的角度來考慮PLC控制程序的保護:
1. T.I.A(全集成自動化)的概念有助于保護我們的KNOW HOW
T.I.A實現了組態和編程,數據管理和通訊,自動化與驅動產品(包括PLC控制器、HMI人機界面、網絡、驅動器等產品)的高度集成。實踐證明,采用T.I.A集成概念設計的控制系統很難被抄襲。同一個軟件平臺,相同的硬件組成,一樣的總線通訊,完全可以設計出截然不同的控制系統,這是一個讓開發者自由發揮的平臺。例如,一個CPU315-2DP和2個MM440變頻器進行PROFIBUS-DP的通訊,除了PLC和變頻器有常規的數據交換,如果用戶使用了DRIVES ES的工程軟件,還能實現2個MM440之間的直接的快速數據交換,另外通過DRIVES ES還能實現PLC和MM440之間超過10個總共16個PZD過程數據的交換,實現PLC批量下載變頻器參數的功能。而這一切的實現從表面上看,硬件沒有發生任何的變化,仿制者很難從硬件上來判斷出系統是如何控制這兩臺驅動器的速度的。不熟悉西門子產品的仿制者無法輕易更換硬件配置或修改軟件,而即使仿制者是個西門子產品的專家,要獨自分析清楚具體細節問題也不是件容易的事情。從某種程度上說,T.I.A大大提高了對仿制者的技術水平要求的門檻,達到西門子系統集成專家水平的技術人員一是不多,二很少有愿意做這些不齒的事情的。
此外,對于一些較大系統的OEM開發商,路由通訊功能,iMAP軟件包等都是很不錯的T.I.A系統功能或工具,我們應該盡量利用T.I.A給我們帶來的技術優勢,占領技術制高點,加大仿制或抄襲的技術難度。
2. 使用通訊功能
在實際的工作中,我們往往會遇到一些系統間需要數據交換的問題(如PLC-PLC之間,PLC與驅動器之間,PLC與儀表之間),無論是西門子產品之間還是西門子產品與第三方產品之間,建議使用通訊的方案來代替模擬量或開關量之間的信號互連的方案。對于前者,仿制者只能看見一條硬件的通訊線,至于有多少數據是如何通過通訊交換的,仿制者必須要花精力研究具體的用戶程序才能搞清楚;而對于后者,開發者是省心省力了,仿制者也是一目了然,盡收眼底。
PLC與驅動器的通訊,除了了控制字/狀態字、設定值/反饋值及過程變量的數據通訊,驅動器工作的參數最好也能由PLC通過軟件下載,這樣即可以降低最終用戶維護系統的技術要求,同時可以防止仿制者通過驅動器工作參數分析系統尤其在驅動方面的工作原理和設計思路。西門子公司的工程軟件DRIVE ES BASIC/SIAMTIC,為廣大的西門子產品用戶實現此類功能提供了一個強大的工具;而使用SIMATIC PLC卻使用第三方驅動器的用戶,也可以自行開發針對性的參數讀寫程序,一般支持PROFIBU-DP的驅動器都可以實現。
有時候我們的控制系統會由多個子控制系統構成,由此形成多CPU加人機界面的網絡,西門子S7-200產品常見的是PPI網絡,S7-300/400產品常見的是MPI網絡,通常是人機界面與CPU之間的數據交換,而我們也可在CPU的用戶程序中添加一些無須組態的S7基本通訊功能(S7-200可用NETR/NETW指令,S7-300/400可以用X_PUT/X_GET指令),定時或不定時地在CPU之間進行少量數據交換,通過這些數據實現子系統控制邏輯的互鎖。對于這樣的系統,仿制者要分析某一子系統的程序也不是件十分容易事情。
3. 使用面板類型的人機界面
盡量在自動化系統中使用面板類型的人機界面來代替單一的按鈕指示燈,雖然按鈕指示燈的功能是無法保密的,但目前為止,面板型人機界面能夠實現程序上載并實現反編譯的產品還不多見,開發者可以在面板的畫面上加上明顯的廠家標識和聯系方式等信息,仿制者還不至于傻到連這個也原樣照抄吧。這樣迫使仿制者必須重新編寫操作面板的程序甚至于PLC的程序,而開發者則可利用面板和PLC數據接口的一些特殊功能區(如西門子面板的區域指針,或VB腳本)來控制PLC的程序執行。這樣的PLC程序在沒有HMI源程序的情況下只能靠猜測和在線監視來獲取PLC內部變量的變化邏輯,費時費力,極大的增加了仿制抄襲的難度。
4. 采用高級語言編寫部分重要的工藝程序
這一點主要針對采用S7-300/400或WINAC產品的控制設備,除了使用STEP 7提供的LAD,STL,FBD標準編程語言來開發控制程序,我們還可以使用SCL,S7-GRAPH等高級語言來開發一些重要的工藝程序,WINAC還可以使用ODK軟件包開發出專有的程序塊。一般的仿制者是不容易搞到這些開發工具的,即使有也不一定會使用,更不用說來讀懂這些程序了。
 在項目具體實施的過程中,我們應該從軟件開發技巧的角度來考慮PLC控制程序的保護:
1. 編程方式的采用
a) 采用模塊化的程序結構,采用符號名,參數化來編寫子程序塊
b) S7-300/400盡量采用背景數據塊和多重背景的數據傳遞方式
c) 多采用間接尋址的編程方式
d) 復雜系統的控制程序尤其是一些帶有順序控制或配方控制的程序,可以考慮采用數據編程的方式,即通過數據的變化來改變系統的控制邏輯或控制順序。
用戶應該盡量采用以上幾種高級層次的編程方式,這樣編出來的程序中嵌入系統的保護加密程序,才不容易被發現和破解
2. 主動保護方法
a) 利用系統的時鐘
b) 利用程序卡或者CPU的ID號和序列號
c) 利用EEPROM的反寫入功能,及一些需要設置的內存保持功能
d) 利用系統提供的累時器功能
e) 在用戶程序的數據塊中設置密碼
f) 軟件上設置邏輯陷阱
g) 可以反向利用自己在編程時犯的錯誤
3. 被動保護方法
a) 在內存容量利用許可的條件下,不要刪除被認為是無用的程序
b) 在數據塊里留下開發者的標識,以便于將來遭到侵權時可以取證
4. 應用反破解技術的注意事項
a) 在用戶程序中嵌入保護程序要顯得自然一些,不能很突兀的加出一段程序來,代碼要盡量精簡,變量符號名應與被嵌入程序段的變量保持一致
b) 往往一種保護加密手段是不夠的,應該多種方法并用,并且這些保護程序一旦激活后對系統造成的后果也應該盡量不同,造成所謂的“地雷效應”,從而增加程序被破解的難度,時間與成本,短時間內讓抄襲者束手無策,
c) 保護好程序的原代碼,如果需要交付程序的,在不影響用戶對設備維護的前提下,應對交付的程序做適當的技術處理,如刪除部分符號名,采用上載的程序或數據塊
d) 做好嚴格的測試,以避免保護程序的不完善引起的誤動作而帶來的不必要的麻煩,同時也能降低售后服務的的費用
 運用保護手段的原則
我們雖然掌握了一些加密保護的手段,有一點必須明白,密碼和鎖的道理是一樣的,天下沒有打不開的鎖,也沒有解不開的密碼,我們從技術上采取的措施來防止侵權的作用還是十分有限的,因此大家不能把所有的希望都寄托在所謂的加密技術或破解與反破解技術上;除此之外我們還可以通過專利的申請等其他諸如法律手段來保護我們的知識產權;但最重要的是我們不能安于現狀,而是要勇于創新,不斷地利用新技術開發新產品,占領技術新高地,爭做行業的領頭人,才能使我們的企業立于不敗之地。
加密保護技術本身也是一把雙刃劍,用好了客戶滿意,自己的權益又悄悄的得到了保護,用不好不僅不起作用,給售后服務帶來許多麻煩,還會得罪客戶;好人掌握這種技術是用來保護自己不被侵權,而用心不良的人會利用它去要挾客戶。因此本文也僅限于討論了關于PLC程序加密保護的一些原則性指導性的內容,而沒有公布具體的程序代碼指令,請讀者們諒解。
謹以此文獻給并鼓舞那些辛勤奮斗在開發生產一線為祖國自動化事業做出巨大貢獻的諸多同行;同時譴責那些企圖不勞而獲,竊取他人勞動成果的仿制者侵權者。