西門子S7-12001500程式塊加密,你真的瞭解嗎?

【導讀】PLC程式加密,其實不能算是一個新鮮的話題。雖然很多時候,程式加密本身並不是一個討喜的事情,但是某些情況下卻又不得不為之。

在展開正文之前,我想閒聊兩句。程式的加密這個話題,讓我想起了馬斯克關於申請專利保護的說辭。專利不應該成為阻礙行業進步,社會發展的障礙。同樣的,程式加密這個事情,亦是如此。真正的高手,其實從來不給自己寫的程式碼加密!因為敞開的程式給你,你也不見得能領悟他的精髓~

話題扯遠了,畢竟我們距離這樣的高手層次還有很長的路。今天我們就聊聊,讓別人最無可奈何的加密方式:與硬體繫結加密。

繫結儲存卡/繫結CPU

程式塊的的防複製保護,可分為兩種:繫結儲存卡的序列號和繫結CPU的序列號,兩者只能選其一。建議選擇繫結儲存卡的序列號,如果啟用該功能,在下載程式時,會自動比對序列號,如果與實際儲存卡的序列號不一致,則無法完成程式下載。

西門子S7-1200/1500程式塊加密,你真的瞭解嗎?

相關指令

然後呢,我們需要聊聊一個非常重要的指令:“Get_IM_Data”。該指令的作用就是讀出儲存卡的序列號和CPU的序列號,然後就可以用到自己想用的地方了。這個指令不僅適用於S7-1500,同樣也適合S7-1200的PLC。我們從‘擴充套件指令 > 診斷’ 中拖拽出‘Get_IM_Data’ 指令到程式編輯器即可。

在如下的例程(圖1)中,呼叫並引數化 ‘Get_IM_Data’ 指令,以讀取SMC(SIMATIC儲存卡)的資料。

西門子S7-1200/1500程式塊加密,你真的瞭解嗎?

引數

下表列出了“Get_IM_Data”指令的引數:

西門子S7-1200/1500程式塊加密,你真的瞭解嗎?

示例

在以下示例中,將讀取 S7-1500 CPU 的 IM0 資料。IM0 資料是裝置的基本資訊,包含製造商 ID、訂貨號、序列號以及硬體和韌體版本等資訊。

在全域性資料塊中建立 4 個變數和一個結構(資料型別為 IM0_Data),用於儲存 IM0 資料。此時,可為該結構指定任意名稱(“MyPLC_IM_Data”)。

西門子S7-1200/1500程式塊加密,你真的瞭解嗎?

在 LADDR 引數中輸入 CPU 的硬體識別符號。硬體識別符號唯一地標識產品。要確定 CPU 的硬體識別符號,請開啟 PLC 變量表和“系統常量”(System constants) 選項卡。然後在“名稱”(Name) 列中搜索 CPU。關聯值是您在 LADDR 引數中輸入的硬體識別符號。

西門子S7-1200/1500程式塊加密,你真的瞭解嗎?

在指令成功執行後,IM0 資料將寫入到資料塊。

西門子S7-1200/1500程式塊加密,你真的瞭解嗎?

小夥伴們,學會了嗎?記得一鍵三連哦!~