之前在西门子论坛官网看到通过随机数实现程序加密,感觉有点复杂,本着学以贯之的态度,打算自己做个。。
功能需求
通过时间判断,当超出设定时间,则触发锁屏,并提示激活,在登录特定账号并输入正确的激活码后,恢复使用。激活失败,则一直锁屏。
执行方案
密码创建——解锁和锁屏——功能执行
密码创建
创建全局DB字符串,并给字符串初始赋值,后续只有特定用户才可以修改密码。当忘记已修改后的密码后,可通过按钮初始密码。
解锁/锁屏
锁屏功能:通过比对当前时间和锁定时间,如果当前时间大于锁定时间,则触发锁屏画面弹出。使用计划任务创建1s的轮询。
解锁功能:只有登陆特定用户,并输入特定的激活码,才能解锁成功,
功能执行
用户使用权限的方式以按钮形式进行首次触发
执行步骤
- 创建全局变量,设置初始密码,
增加初始密码功能
IF "GlobalData".DataBool.InitialCode THEN
"GlobalData".Code := 'Acer4560';
END_IF;
- 上位画面组态
创建三个画面,主画面、设备参数、锁屏画面。
锁屏画面
设备参数
- 创建变量
4 创建脚本函数
根据功能需求,需要编写三个脚本函数,读取当前登陆用户。锁屏功能脚本、解锁功能脚本。
'读取当前登陆用户
Call GetUserName("LoginUserName") '获取当前登陆用户名
Call GetGroupNumber("LoginUserGroup") '获取当前登陆用户组
'判断用户是否登录成功
If SmartTags("LoginUserGroup") = 0 Then
SmartTags("LoginUserName") = "未登录"
End If
'比对当前时间和锁屏时间,触发锁屏功能
If SmartTags("LockFunction") = True Then
SmartTags("NowDTL") = Now
End If
If SmartTags("LockFunction") = True And SmartTags("NowDTL") >= SmartTags("LockTime") Then
Call ActivateScreen("锁屏画面",0)
End If
'解锁功能
If (SmartTags("LoginUserName") = "Acer4560") And (SmartTags("Code") = SmartTags("CodeInitial")) Then
SmartTags("LockFunction") = False
Call ActivateScreen("主画面",0)
End If
- 脚本定时执行
在触摸屏中,可以设定触发条件执行脚本功能,在此功能中,需要在登录用户发生变化时读取当前系统的登录用户。这样才能保证只有特定用户才能解锁。
另外在锁屏功能触发后,需要时刻比对当前时间和锁屏时间,如果当前时间大于锁屏时间,则触发锁屏。
脚本触发条件可以是周期时间或者任务事件。总结
技术应该共享,加密只是手段。针对此文,希望能学到的不是如何加密,而是如何更熟练使用触摸屏脚本功能、计划任务等。最后,将源程序附上仅供参考