当 S7-1200 中的程序修改后,软件校验和会发生改变。使用 GetChecksum 指令可以读取 PLC 程序中的软件较验和,将其与之前的校验和进行比较可以得知 PLC 的程序是否被改动。
本文档介绍了如何使用 GetChecksum 指令判断 PLC 中的程序是否被修改并纪录修改时间。
硬件: CPU 1215FC V4.4 (V4.2 开始支持)
软件:TIA Portal V17
建立的 DB 块内容如图 1 所示。
注意:此处的校验和变量 、上一周期校验和变量、最终纪录的修改时间一定要设置为保持性变量,否则会在 CPU 停机时,不能正确保存。
图 1. 建立存储用 DB
GetChecksum 指令位于“扩展指令>诊断”文件夹,如图 2 所示。
图 2. 指令集中的位置
指令调用如图 3 所示,指令参数参考表 1。
图 3. 调用指令块
参数 | 说明 |
Scope |
|
Checksum | 用于纪录校验和,连接的变量类型必须为 ARRAY[0..7] of Byte |
Done | 校验和读取完成时为 true |
Busy | 指令执行中为 true,完成后为 false |
Error | 指令执行过程中发生错误为 true |
Status | 指令的执行状态,错误状态仅存在一个周期,抓取错误状态(方法如图 6 所示) |
表 1. 指令管脚说明
当前读取的校验和与上一周期保存的校验和比较,当校验和发生改变时,纪录校验和改变时的时间,这个时间是程序改变后下载的生效时间。如图 4 所示。
图 4. 输出程序修改后下载的时间
将本周期计算的校验和保存到上周期校验和变量,用于下一周期的比较,如图 5 所示。
图 5. 纪录上一周期的校验和
错误代码仅当发生错误时出现一个周期,需要使用错误位为 true 时抓取错误代码,如图 6 所示。
图 6. 保存错误代码
可以在程序下载后,对比离线的校验和及在线读取的校验和,检查程序是否正确下载,如图 7 所示。
图 7. 检查程序中读取的校验和
注意:此程序仅检查标准程序的修改;可以通过修改 Scope 为 2,检查安全程序的修改;通过修改 Scope 为 3,检查文本列表的修改。