返回主站|会员中心|保存桌面

三菱电机服务商    

PLC、变频器、伺服驱动、触摸屏,机器人

联系方式
  • 联系人:黄小姐
  • 电话:15523729285
  • 邮件:15523729285@163.com
新闻分类
  • 暂无分类
站内搜索
 
首页 > 新闻中心 > 三菱时间变量密码程序怎么写!
新闻中心
三菱时间变量密码程序怎么写!
发布时间:2025-04-15        浏览次数:0        返回列表
  1. 实时时钟模块配置

    • 三菱PLC的FX5U系列内置实时时钟(RTC),可通过工程工具或指令(如TWR、TRD)进行时间设置和读取。

    • 时间数据包括年、月、日、时、分、秒和星期,支持24小时制。

  2. 时间读取指令

    • 使用TRD指令可从RTC读取当前时间,数据存储在特殊辅助寄存器(如D8013-D8019)。

    • 示例代码展示了如何读取时间到数据寄存器(如D10-D16)。

  3. 动态密码生成算法

    • 一种常见的方法是使用时间基一次性密码(TOTP)算法,结合当前时间和密钥生成动态密码。

    • 算法示例包括PRESENT和SPECK分组密码,用于加密时间值生成密码。

  4. 密码验证逻辑

    • 验证方检查密码接收时间与最近身份验证时间的差值,确保在容忍时间内。

    • 使用分组密码算法对密码进行解密和验证。

  5. 示例程序分析

    • 提供了动态密码解锁程序的示例,包括授权天数设置、随机码生成和永久密码功能。

    • 程序占用内存和源代码空间,需留意PLC存储空间大小。

  6. 安全性和可靠性

    • 动态密码方案提高了系统安全性,防止未经授权的访问。

    • 密码生成和验证过程需确保可靠性,避免被轻易破解。

  7. 编程软件和语言

    • 使用GX Works2或GX Works3编程软件,支持梯形图(Ladder Diagram)和结构化文本(ST)等语言。

    • 示例代码展示了如何使用ST语言实现密码生成和验证逻辑。

  8. 实际应用场景

    • 时间变量密码程序适用于需要定期更新密码的自动化系统,如设备授权管理、临时访问控制等。

    • 通过HMI界面输入和显示密码,提高用户体验。

以下为您详细介绍三菱PLC时间变量密码程序的实现方法,包含具体步骤和示例代码:

一、实现原理

通过PLC的实时时钟(RTC)模块获取当前时间,结合加密算法生成动态密码。验证方需输入正确的时间变量密码才能完成设备解锁或授权操作。

二、关键步骤

1. 配置RTC模块

  • 内置时钟设置
    使用TWR(Time Write)指令写入初始时间,或通过编程软件(GX Works2/3)的“时钟设置”菜单配置。
    示例

    ladder


    -- 将D10-D16中的预设时间写入RTC

    LD X0          -- 触发信号(如首次上电)

    MOV K2025 D10  -- 年(4位)

    MOV K4 D11     -- 月

    MOV K15 D12    -- 日

    MOV K14 D13    -- 时(24小时制)

    MOV K30 D14    -- 分

    MOV K0 D15     -- 秒

    MOV K1 D16     -- 星期(0=周日)

    TWR D10 D16    -- 执行时间写入

2. 读取当前时间

  • 使用TRD指令
    从RTC读取时间到数据寄存器(如D20-D26)。
    示例

    ladder


    -- 读取RTC时间到D20-D26

    LD X1          -- 周期性触发(如每秒)

    TRD D20        -- 执行时间读取

    -- D20=年,D21=月,D22=日,D23=时,D24=分,D25=秒,D26=星期

3. 生成动态密码

  • 时间基算法(TOTP)
    提取时间变量(如时+分+秒),结合密钥进行加密运算。
    示例(简化版)

    structured-text


    -- 使用时、分、秒生成6位密码

    hour := D23;

    minute := D24;

    second := D25;



    -- 加密运算(示例:取后6位)

    raw_value := (hour * 3600 + minute * 60 + second) * 12345;

    password := MOD(raw_value, 1000000);



    -- 将密码转换为字符串格式(如"123456")

    password_str := STR(password, 6);

4. 密码验证逻辑

  • 比较输入与生成值
    通过HMI输入6位密码,与PLC生成的密码比对。
    示例

    ladder


    -- 假设输入密码存储在D30-D35(ASCII码)

    LD X2          -- 输入完成信号

    CMP D30 K'1'    -- 逐位比较

    CMP D31 K'2'

    CMP D32 K'3'

    CMP D33 K'4'

    CMP D34 K'5'

    CMP D35 K'6'

    ANDP           -- 所有位匹配时触发

    OUT Y0         -- 解锁成功,驱动输出

三、完整示例程序

1. 动态密码生成程序

structured-text


-- 初始化密钥(示例值)

ConST SECRET_KEY : INT := 123456;



-- 生成密码函数

FUNCTION Generate_Password : STRING(6)

VAR

current_time : DT;

hour, minute, second : INT;

raw_value : DINT;

password : INT;

BEGIN

-- 读取当前时间

current_time := TIME();

hour := current_time.HOUR;

minute := current_time.MINUTE;

second := current_time.SECOND;



-- 计算动态值

raw_value := (hour * 3600 + minute * 60 + second) * SECRET_KEY;

password := MOD(raw_value, 1000000);



-- 转换为6位字符串

Generate_Password := INT_TO_STR(password, 6);

END_FUNCTION



-- 主程序

IF RTC_Read_Flag THEN

Current_Password := Generate_Password();

-- 将Current_Password发送至HMI显示

END_IF

2. 密码验证程序

ladder


-- 输入密码比较(示例:6位数字)

LD X3          -- 输入确认信号

CMP D100 K1    -- 第1位比较

CMP D101 K2    -- 第2位比较

CMP D102 K3    -- 第3位比较

CMP D103 K4    -- 第4位比较

CMP D104 K5    -- 第5位比较

CMP D105 K6    -- 第6位比较

ANDP           -- 所有位匹配

OUT Y1         -- 解锁成功

ELSE

OUT Y2       -- 解锁失败

END_IF

四、安全性增强措施

  1. 密钥管理

    • SECRET_KEY存储在PLC的受保护区域(如EEPROM),避免直接暴露。

  2. 时间窗口限制

    • 设置密码有效时间(如1分钟),超时后密码失效。

  3. 日志记录

    • 记录密码尝试时间和结果,便于审计。

五、HMI界面设计(示例)

  1. 密码输入界面

    • 6位数字输入框,支持触摸屏输入。

  2. 实时时钟显示

    • 显示当前RTC时间,供用户参考。

  3. 状态指示

    • 绿灯:解锁成功;红灯:解锁失败。

通过上述方法,可实现基于时间变量的动态密码系统,适用于设备授权管理、临时访问控制等场景。实际部署时需根据具体需求调整加密算法和验证逻辑。

收缩
  • 电话咨询

  • 15523729285
  • 添加微信客服