news 2026/1/26 9:14:42

威纶通触摸屏宏指令分期付款程序(全系列支持)- 12期自动生成密码与锁机时间提示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
威纶通触摸屏宏指令分期付款程序(全系列支持)- 12期自动生成密码与锁机时间提示

威綸通触摸屏宏指令做的分期付款程序(支持威纶通全系列),一共12期,每期和终极密码自动生成,具有提前提示剩余锁机时间功能,从剩余5天提示,格式为天时分秒。

这个分期锁机程序的核心在于时间计算和密码验证。我发现在实际项目中,很多同行处理时间差时容易忽略闰年问题,这里直接用系统时间戳做减法更稳妥。先看时间计算部分的实现:

macro_command main() // 获取首次运行时间戳 long installTime = GetData([PLC]D1000) if installTime == 0 then installTime = GetCurrentTimestamp() SetData(installTime, "[PLC]D1000", 4) endif // 计算剩余天数 long currentTime = GetCurrentTimestamp() long remainSeconds = installTime + 31104000 - currentTime //12个月=31104000秒 int daysLeft = remainSeconds / 86400 // 倒计时5天时启动提示 if daysLeft <=5 then ShowRemainTime(remainSeconds) endif // 锁机检测 if remainSeconds <=0 then SystemLock() endif end macro_command

这段代码有几个关键点:1.使用D1000寄存器固化安装时间 2.直接处理时间戳避免日期转换错误 3.倒计时计算精确到秒级。注意31104000是12个月的总秒数(360天),实际应该用365天,但工业场景中习惯按每月30天计算。

密码生成算法是项目的核心机密,这里分享简化版的动态密码生成逻辑:

function GeneratePassword(int stage) char[6] dynamicCode long seed = GetCurrentTimestamp() / 86400 //每日更新种子 // 混淆算法 int baseNum = (stage * 16807) % 32749 int magicNum = (seed ^ 0x3D9F3B1D) & 0xFFFF int passcode = (baseNum + magicNum) % 1000000 // 补足6位数字 StringFormat(dynamicCode, "%06d", passcode) return dynamicCode end function

这个算法的精妙之处在于:每日密码种子变化 + 分期数混淆 + 位运算加密。其中16807是线性同余生成器的经典乘数,0x3D9F3B1D这个魔数经过多次测试验证,能有效防止暴力破解。

界面提示部分需要处理时间格式转换,这里分享秒数转天时分秒的实用函数:

function ShowRemainTime(long totalSeconds) int days = totalSeconds / 86400 int hours = (totalSeconds % 86400) / 3600 int minutes = (totalSeconds % 3600) / 60 int seconds = totalSeconds % 60 // 更新触摸屏显示元件 SetData(days, "[HMI]RemainDays", 2) SetData(hours, "[HMI]RemainHours", 2) SetData(minutes, "[HMI]RemainMinutes", 2) SetData(seconds, "[HMI]RemainSeconds", 2) // 闪烁提醒 if days ==0 and hours < 24 then BlinkControl(LC_Alert, 500, RED) endif end function

实际部署时要注意:1.触摸屏元件地址需要对应HMI变量表 2.闪烁效果需要提前在HMI元件属性中配置 3.时间同步建议增加NTP校时功能。遇到过现场设备时钟电池失效导致的时间回溯问题,后来增加了RTC异常检测机制才解决。

程序里还藏着个彩蛋:当连续三次输入错误密码时,系统不会立即锁死,而是弹出技术支持的联系方式——毕竟工业现场最重要的是保障生产连续性。这个设计让我们的方案在招标时获得不少加分。

测试阶段用宏指令模拟了十年时间加速测试,结果发现时间戳溢出问题。后来改用双字存储时间戳(范围到2147年),足够用到设备报废了。有些同行用BCD码处理时间,其实直接操作时间戳更高效可靠。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/17 12:00:42

玩转汽车电子】手把手拆解MPC5634底层驱动黑盒子

NXP MPC5634芯片底层驱动simulink封装库折腾过嵌入式开发的兄弟都知道&#xff0c;汽车电子这行的寄存器配置简直比相亲还麻烦。去年给某主机厂做ECU项目时&#xff0c;笔者被NXP MPC5634的寄存器手册折磨得差点秃头——直到发现了Simulink封装库这个外挂。先看个真实案例&…

作者头像 李华
网站建设 2026/1/10 0:10:06

鼎捷和钉钉系统集成破局2026:iPaaS成制造业破解“系统割裂”关键

在数字经济浪潮席卷全球的今天&#xff0c;制造业与零售电商领域正面临严峻的系统割裂挑战。据2025年行业调研显示&#xff0c;超过41%的供应链管理者表示&#xff0c;数据质量差与系统集成困难已成为阻碍AI技术深度应用的主要障碍。在此背景下&#xff0c;一句“鼎捷和钉钉系统…

作者头像 李华
网站建设 2026/1/18 9:38:21

Nginx 请求转发配置指南

Nginx 请求转发配置指南 1. 简介 Nginx 是一款高性能的 HTTP 和反向代理服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。本文档将介绍如何使用 Nginx 配置请求转发&#xff0c;并解释一些常用的配置参数。 2. Nginx 安装 在配置之前&#xff0c;确保你的系统已经安…

作者头像 李华
网站建设 2026/1/19 9:22:02

Vue3-07 setup 与 Options API 的关系

总结 data, methods 可以和 setup同时存在&#xff0c;但是不建议这么写 setup能否读取data中的数据setup是最早的生命周期 data 可以读取 setup中的变量&#xff0c;反之不行 setup 与 Options API 的关系 vue2 可以 和 vue3 语法共存。Vue2 的配置&#xff08;data、methos……

作者头像 李华