【导读】PLC程序加密,其实不能算是一个新鲜的话题。虽然很多时候,程序加密本身并不是一个讨喜的事情,但是某些情况下却又不得不为之。
在展开正文之前,我想闲聊两句。程序的加密这个话题,让我想起了马斯克关于申请专利保护的说辞。专利不应该成为阻碍行业进步,社会发展的障碍。同样的,程序加密这个事情,亦是如此。真正的高手,其实从来不给自己写的代码加密!因为敞开的程序给你,你也不见得能领悟他的精髓~ 话题扯远了,毕竟我们距离这样的高手层次还有很长的路。我们就聊聊,让别人无可奈何的加密方式:与硬件绑定加密。
绑定存储卡/绑定CPU
程序块的的防拷贝保护,可分为两种:绑定存储卡的序列号和绑定CPU的序列号,两者只能选其一。建议选择绑定存储卡的序列号,如果激活该功能,在下载程序时,会自动比对序列号,如果与实际存储卡的序列号不一致,则无法完成程序下载。
相关指令
然后呢,我们需要聊聊一个非常重要的指令:“Get_IM_Data”。该指令的作用就是读出存储卡的序列号和CPU的序列号,然后就可以用到自己想用的地方了。这个指令不仅适用于S7-1500,同样也适合S7-1200的PLC。我们从'扩展指令 > 诊断' 中拖拽出'Get_IM_Data' 指令到程序编辑器即可。
在如下的例程(图1)中,调用并参数化 'Get_IM_Data' 指令,以读取SMC(SIMATIC存储卡)的数据。
参数
下表列出了“Get_IM_Data”指令的参数:
示例
在以下示例中,将读取 S7-1500 CPU 的 IM0 数据。IM0 数据是设备的基本信息,包含制造商 ID、订货号、序列号以及硬件和固件版本等信息。
在全局数据块中创建 4 个变量和一个结构(数据类型为 IM0_Data),用于存储 IM0 数据。此时,可为该结构指定任意名称(“MyPLC_IM_Data”)。
在 LADDR 参数中输入 CPU 的硬件标识符。硬件标识符唯一地标识产品。要确定 CPU 的硬件标识符,请打开 PLC 变量表和“系统常量”(System constants) 选项卡。然后在“名称”(Name) 列中搜索 CPU。关联值是您在 LADDR 参数中输入的硬件标识符。
在指令成功执行后,IM0 数据将写入到数据块。