「三菱 FX5U 系列 PLC 多期动态密码锁机方法详解」
上文我们介绍了以西门子 1200/1500 系列 PLC 为例的 5 种锁机方法,不少朋友反馈这些内容非常实用。今天,我们将聚焦于三菱系列 PLC 的锁机方法。
实际上,各类 PLC 锁机程序的逻辑框架大体相似,主要差异在于文本语言的编写方式以及所使用的指令有所不同。而本次,我们将以三菱 FX5U 系列 PLC 为例,详细介绍多期动态密码锁机的实现方法。
「一、锁机程序逻辑」
此次编写的锁机程序采用 ST 语言,借助 TRD 指令来获取本机时间。程序中的功能块会对预设期限和当前期限进行逐一比对。若发现存在超过当前期限且期限设置不为零的情况,便会触发输出锁动作。
「二、解锁方式」
在解锁方式上,本程序提供了两种途径:
以下是功能块局部标签地址的表格:
标签名称 | 数据类型 | 属性 | 描述 |
---|---|---|---|
VAR1 | 字有符号 | VAR | |
SPow | 双字[有符号] | VAR | 超级密码 |
CurrDate | 双字[有符号] | VAR_OUTPUT | 当前时间 |
Year | 字[有符号] | VAR_INPUT | 当前年 |
TellClock | 字[有符号] | VAR | 计时 |
Mon | 字[有符号] | VAR_INPUT | 当前月 |
Day | 字[有符号] | VAR_INPUT | 当前日 |
VarRand | 字[有符号] | VAR | |
RandCode | 字[有符号] | VAR_OUTPUT_RETAIN | 随机码 |
UnLock | 位 | VAR_INPUT | 锁定码 |
InCode | 双字[有符号] | VAR_INPUT | 解锁码 |
SetDate | 双字有符号 | VAR_IN_OUT | 设定时间 |
PowErr | 位 | VAR_OUTPUT | 密码错误 |
OutLock | 位 | VAR_OUTPUT_RETAIN | 输出锁 |
// 解锁方式:输入码 = 随机码 * 5 + 1,期限日期保存区占用20个字
// 超级密码
SPow := 887899;
// 动态码更新时间单位秒
Var1[0] := 600;
CurrDate := INT_TO_DINT(Year) * 10000 + INT_TO_DINT(Mon) * 100 + INT_TO_DINT(Day);
INCP(SM412, TellClock);
RND(TellClock >= Var1[0] OR SM402, VarRand);
MOV(TellClock >= Var1[0] OR SM402, ABS(VarRand + RandCode), RandCode);
MOV(TellClock >= Var1[0], 0, TellClock);
// 解锁
DMOV(UnLock AND InCode = INT_TO_DINT(RandCode) * 5 + 1 AND CurrDate >= SetDate[VAR1[1]], 0, SetDate[VAR1[1]]);
RST(UnLock AND InCode = INT_TO_DINT(RandCode) * 5 + 1 AND CurrDate >= SetDate[VAR1[1]], OutLock);
OUT(UnLock AND InCode <> INT_TO_DINT(RandCode) * 5 + 1, PowErr);
// 超级解锁
DFMOV(UnLock AND InCode = SPow, 0, 10, SetDate[0]);
RST(UnLock AND InCode = SPow, OutLock);
// 对比当前日期
SET(CurrDate >= SetDate[VAR1[1]] AND SetDate[VAR1[1]] <> 0, OutLock);
INC(SM400, VAR1[1]);
MOV(VAR1[1] >= 10, 0, VAR1[1]);
「五、主程序」
主程序使用TRD指令获取系统时间,并设定期限日期,和设定密码
「注」以上代码仅为示例,实际使用时请根据具体情况进行调整。