首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[威纶通] 通过刷卡屏蔽光栅--宁德时代项目记录

[威纶通] 通过刷卡屏蔽光栅--宁德时代项目记录

作者头像
科控物联
发布2026-04-22 20:43:57
发布2026-04-22 20:43:57
780
举报

最终效果

用户管理页面:

相关参数设定:

相关脚本实现:

代码语言:javascript
复制
/*
 * 作者: Tecon
 * 描述: 刷卡->屏蔽光栅->刷卡->恢复光栅 功能脚本(已整理)
 * 原始脚本已按可读性重排,保留原逻辑与调用(GetData/SetData/DELAY 等宏)。
 */
macro_command main()
(
    unsigned char a[20] = "0";
    unsigned char b[20] = "0";
    unsigned char user1[16] = "1";
    unsigned char user2[16] = "2";
    unsigned char user3[16] = "3";
    unsigned char user4[16] = "4";
    unsigned char beforLogin[20] = "0";
    unsigned char iniLogin[16] = "0";
    unsigned short i = 0, m = 0, n = 0, j = 0, commond = 1;
    bool flag = 0, off = 0, ON = true, flagLogin = false;
    /* 从外设/配置读取数据 */
    GetData(a[0], "Barcode Scanner/Keyboard", BARCODE, 1, 20);
    GetData(m, "Local HMI", RECIPE, "password.Count");
    GetData(beforLogin[0], "Local HMI", LW, 100, 20);
    GetData(flagLogin, "Siemens S7-1200/S7-1500", M, 77.7, 1);
    n = m - 1;
    if (flagLogin == 1) then
    (
        /* 登录已初始化,按 Selection 遍历密码项 */
        for i = 0 to n step 1
        (
            SetData(i, "Local HMI", RECIPE, "password.Selection");
            GetData(b[0], "Local HMI", RECIPE, "password.ID");
            flag = StringCompare(a[0], beforLogin[0]);
            if (flag == 1) then
            (
                GetData(j, "Local HMI", RECIPE, "password.Pri");
                if (j == 4) then
                (
                    int commontLogOff = 3;
                    SetData(commontLogOff, "Local HMI", LW, 8950, 1);
                    SetData(iniLogin[0], "Local HMI", LW, 100, 16);
                    SetData(OFF, "Siemens S7-1200/S7-1500", M, 77.7, 1);
                    DELAY(2000);
                )
                break;
            )
            else
            (
                continue;
            )
        next i)
    )
    else
    (
        /* 未初始化登录,按 Selection 遍历密码项,与当前刷卡 ID 比对 */
        for i = 0 to n step 1
        (
            SetData(i, "Local HMI", RECIPE, "password.Selection");
            GetData(b[0], "Local HMI", RECIPE, "password.ID");
            flag = StringCompare(a[0], b[0]);
            if (flag == 1) then
            (
                GetData(j, "Local HMI", RECIPE, "password.Pri");
                if (j == 4) then
                (
                    /* 给 UAC 填入用户名/密码,触发命令,并设置 PLC 标志 */
                    SetData(user4[0], "Local HMI", "UAC 用户名称", 16);
                    SetData(user4[0], "Local HMI", "UAC 密码", 16);
                    SetData(b[0], "Local HMI", LW, 100, 16);
                    SetData(commond, "Local HMI", "UAC 命令", 1);
                    SetData(ON, "Siemens S7-1200/S7-1500", M, 77.7, 1);
                    DELAY(2000);
                )
                break;
            )
            else
            (
                continue;
            )
        next i)
    )
    /* 最后清除刷卡标志 */
    SetData(off, "Barcode Scanner/Keyboard", FLAG, 0, 1);
end macro_command

光栅和安全继电器接线图

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科控物联 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档