
最终效果
用户管理页面:

相关参数设定:




相关脚本实现:
/*
* 作者: 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
光栅和安全继电器接线图
