网站首页 > 技术教程 正文
工程应用中,为了追缴尾款或其他工程目的,可使用“锁机程序”,即控制机器或设备在特定条件下锁定(停止运行)的程序。这种程序可能基于时间、操作次数或其他逻辑条件来执行锁定动作。例如,一个锁机程序可能会根据设备的使用期限自动锁定机器,直到用户输入正确的解锁密码或支付相应的费用后才能继续使用。
前文介绍一款基于“时间”的锁机程序,其基本的设计逻辑如下:
- 设定锁机日期:设置一个初始的锁机日期,当PLC内部时钟到达这个日期时,设备将被锁定。
- 通过输入解锁密码,解除锁定机制,设备可正常运行。
这种锁机逻辑,需要人工输入“年、月、日、小时、分、秒”等信息,存在输入时间格式错误的可能,虽然设计了设定时间“防呆”逻辑,并以状态字的形式显示出来,如下图所示。
“时间密码锁”的主体锁定逻辑问题不大,但需要输入“授权截至”时间,智能化程度不足。因此,下文介绍一套“定时密码锁”逻辑,其基本设计逻辑如下:
- 首次执行时,读取当前系统时间,并根据设定的延迟月数,计算出“授权截止时间”,即锁机日期。
- 当PLC内部时钟到达这个日期时,设备将被锁定。
- 通过输入解锁密码,解除锁定机制,设备可正常运行。
主流程图如下:
图1 “定时密码锁”逻辑
程序接口
图2 程序接口
程序接口分为3个部分:
- 设定“授权”的月数:默认为6个月。这部分可以组态在触摸屏或SCADA上。
- 逻辑锁密码。密码的输入接口可组态在触摸屏或SCADA上。当输入密码正确时,则解锁所有逻辑,设备无障碍运行;当未输入密码或输入密码错误时,则启用“时间密码锁”逻辑。
- 具体的程序逻辑,可参见图1。
“授权时间”计算
计算星期的算法:Zeller公式
Zeller公式,是一个用于计算任意给定日期(1582年10月4日及以后的日期)是星期几的算法。Zeller公式的形式如下:
其中:
- h是星期几(0=星期六,1=星期日,2=星期一,……,6=星期五);
- q是日期(1-31);
- m是月份(3月=1,4月=2,……,2月=12。注意:1月和2月被视为上一年的13月和14月)。
- K是世纪年(即年份去掉前两位数字后的部分);
- J是世纪(即年份的前两位数字)。
程序调用格式如下:
- 通过输入设定的时间:InYear、InMonth、InDay、InHour、InMinute、InSecond直接写入“sSetTime”。
- 设定时间对应的“星期”数,通过Zeller公式(FbWeekCal)计算出来,并写入“sSetTime.WEEKDAY”。
这样,“sSetTime”就是包含正确“星期”数的DTL数据类型的数值了。
计算每月天数的算法
根据输入的“年”、“月”信息,计算当月的最大天数。主要是判断闰年与非闰年时,2月份的天数。
“授权时间”计算
根据系统当前时间及“授权”的月数“AuthorizedMonths”,计算“授权时间”,但月份直接相加可能跨年、计算出的月份对应的最大天数小于当前时间的“日期值”等,因此,计算出的“授权时间”不能直接使用,需要做一些处理:
- 新“月”份值大于12,则说明“授权”时间跨年,则“年份”值要“+1”。
- 计算出的月份对应的最大天数小于当前时间的“日期值”,如当前时间为2024年3月31日,授权月份为11个月,直接计算的话,“授权”时间为2025年2月31日,不符合日期格式。因此,需将“授权”时间设置为:2025年3月4日。
经过以上对“授权时间”的处理,即可作为“逻辑锁”的截止时间。执行【定时密码锁】逻辑。
密码管理与超时锁定
首次调用【FbTimeLimitLock】时,通过当前系统时间及给定的授权“月份数”,计算授权截止时间,并启用“时间锁”逻辑。在限时到达之前,设备正常运行。限时到达后,仍未输入密码,程序会因超时而给出锁定逻辑,从而暂时限时设备的正常运行。
设备锁定后,如想继续运行,则需要通过“付尾款”或“购买密钥”的方式,获得密码,取得程序的永久运行权限。
正确的输入一次密码后,程序即永久解锁,即使PLC断电、重启,也无需重新获得密钥。
猜你喜欢
- 2025-07-24 S7-1500PLC梯形图(LAD)基础指令——S_ODT接通延时定时器
- 2025-07-24 windows电脑如何设置定时关机?电脑设置定时关机的方法
- 2025-07-24 编写水泵定时自动轮换PLC程序(给水泵一用一备自动轮换控制plc)
- 2025-07-24 PLC定时器与计数器的配合使用,看看可以达到什么效果
- 2025-07-24 【分享】PLC定时停机实用八大招,请诸位谨慎使用!
- 2025-07-24 S7-200SAMRT定时器程序应用案例(s7_200定时器)
- 2025-07-24 简思定时器程序设计范例:自动门控制
- 2025-07-24 PLC编程100例之延时On/Off 程序(plc延时1秒的延时程序)
- 2025-07-24 如何实现Python+selenium在指定时间自动运行程序
- 2025-07-24 「PLC编程案例」基于S7-1200 PLC感应手自动冲水装置程序设计
你 发表评论:
欢迎- 最近发表
-
- S7-1500PLC梯形图(LAD)基础指令——S_ODT接通延时定时器
- windows电脑如何设置定时关机?电脑设置定时关机的方法
- 编写水泵定时自动轮换PLC程序(给水泵一用一备自动轮换控制plc)
- PLC定时器与计数器的配合使用,看看可以达到什么效果
- 【分享】PLC定时停机实用八大招,请诸位谨慎使用!
- S7-200SAMRT定时器程序应用案例(s7_200定时器)
- 简思定时器程序设计范例:自动门控制
- PLC编程100例之延时On/Off 程序(plc延时1秒的延时程序)
- 如何实现Python+selenium在指定时间自动运行程序
- 「PLC编程案例」基于S7-1200 PLC感应手自动冲水装置程序设计
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)