例程延期界面如下:
威纶通触摸屏尾款程序下载
图片背景很丑,可以自己删除,用于生成三段码的界面控件在客户端也可以删除。
界面介绍:
如下图,
例程下载后可在电脑自己离线模拟。
程序初始运行时会跳转到此界面,供用户续期操作。
威纶通触摸屏尾款程序分期付款时间限制程序源代码下载
1.续期信息:重启软件或模拟软件后会变更一次,包含有用信息,用于客户与您进行交互传递用。
2.输入密匙:客户提供你续期信息后,你生成此密匙给客户延期,密匙有三段。
3.点击按钮:<输入三段码,点击执行延期>执行延期动作。
三段密钥输入正确后执行续期,一切正常则界面返回到欢迎界面10。
三段密钥任意错误则在此界面提示相关信息,3次连续错误则重启屏或模拟软件才可再次测试,防止用户一个个试密码。
4.生成三段密码;
生成三段密匙用的控件已用横线标识,发布程序时注意删除。
依次输入:客户提供的续期信息,延期模式(下拉选择 时分钞),延期时间、
点击<生成大段码给客户延期>,生成三段码给客户延期。
例程下载地址:
例程使用的编程软件版本为EBPro v6.04。
使用例程时,尽量一致,我研究威纶正向逆向很多,遇到太多编程软件的bug,不敢保证各版本间的兼容性。
个性修改到自己项目使用:
下载例程后,建议尽量读懂程序后再修改使用。
例程内有详尽的中文注释,,如果您是小老板不是电气出身,也可私信我代写程序。
结合自身设备程序,具体要自己修改的有:
1.超级密码默认为:263946146,在宏 get,第19行号处修改。
2.在电脑想离线多次模拟时,打开编程软件安装目录如下,清空文件夹内配方文件就好,一般清空目录内全部文件。
- D:\EBpro604\EBpro\HMI_memory\recipe,
复制代码
3.窗口200为延期界面,交给用户使用时,删除三段码生成部分控件。
下边为关键技术,可选择看看介绍。
实际使用时可将界面下边用于生成三段密码的部分删除。
客户端程序到期后,会弹出此界面提供用户的同时也锁定设备。
界面会生成续期信息,让用户提供给我们用于生成三段密码。
此信息重启触摸屏会随机再次生成,增大随机性。
我们拿到时用户给的续期信息后,可以再运行例程弹出此界面,
输入续期信息,选择延期的模式,填写要延期的时间,生成三段密匙。
三段密匙用于输入后点击按钮,会调用get宏解析密码,
根据一定的格式校验随机数,程序版本号,再提取续期模式,续期时间,
格式约定如下:
随机数| 版本号| 延期模式| 延期时长
FFFF|FFFF|FFFF|FFFFFFFF。
例程添加窗口200作为设备使用已到期弹窗。
例程使用到的屏IO如下,注意不要与自己程序内的地址重复:
LB0 //LB0为ON表示已在延期界面,暂时不执行macro_0;
RW200 //4字节,全局保存设备调用秒数
RW202 //4字节,窗口200显示延期信息;
RW204 //2字节,宏CHECK执行条件,1时禁止执行
LW200 //4字节,PLC控制元件,用于切换窗口用;
LW202,LW203,LW204,LW205,LW206,LW207, //2字节,显示设备试用,剩余年月日时分秒。
LW208, //2字节,后台LW208记录密码输入次数,3次输错重启才能再用
LW210,LW212, LW214 //12字节,窗口200,密码输入框内容;
LW220, //4字节,演示用,续期信息框。
LW222, //4字节,演示用,延期模式。
LW224, //4字节,演示用,延期时间。
LW226,LW228,LW230,分别4字节,演示用,生成供客户延期用密码;
例程不是根据屏或PLC的时间计时(因为时间在硬件上可修改),而是以秒为单位进行计时,
试用最长:2147483647/31536000=68年
例程留有超级密码:263946146
这些信息都可以在例程的三个宏内修改。
主要的宏为chek,设置周期1000ms执行,启用条件为RW_Bit2040为ON停止执行,
宏代码都有详细的注释,方便大伙儿阅读。
不熟悉宏编程,只看代码中的中文注释也能看懂与修改。
具体使用如下:
1.在电脑模拟时,初始运行程序。
例程会跳转到到期提示界面,
威纶通触摸屏尾款程序分期付款时间限制程序源代码下载
2.如上图,自己输入界面上生成的续期信息,选择秒延期,输入延期秒数30,点击<生成三段...>按钮。
这样,生成的三段可以提供出去,用于执行延期。
3.输入上边生成的三段码,点击<输入三段码,点击...>执行延期动作。
任意一段输入有误,在第一行出提示相关错误,三次有误,重启重新测试。
三段必须都输入正确,方可延长使用时间。
4.如果用户尾款已付清,可告之超级密码,
三段输入默认263946146,点击应用便可,可自己在宏代码内修改为自己的超级密码。
如果想在电脑上多次模拟测试,删除目录下的配方文件,
如果想屏上次测试,下载文件时,选择清除配方文件就好。
check宏代码如下:
更多宏内容,可下载例程学习与修改使用。
- macro_command main()
- //<>正在延期窗口,不向下执行;
- bool bOn=true
- GetData(bOn, "本机 触摸屏", LB, 0, 1)//LB0为ON表示已在延期界面,暂时不执行此宏;
- if bOn==true then
- return
- end if
- //<>软件使用到期,切换到输入密码的延期窗口。
- int nSecond=0
- GetData(nSecond, "本机 触摸屏", RW, 200, 1)//RW200存储软件允许使用的秒数,最长约68年;
- if nSecond<=0 then//秒数少于0表示已到期;
- //生成随机码显示在界面供用户提供来生成密码,254自定义为为程序版本号;
- short nTemp
- RAND(nTemp)
- int nRand
- nRand = (nTemp<<16)|254
- SetData(nRand, "本机 触摸屏", RW, 202, 1)//RW202,窗口200显示延期信息;
- short nIndex=200//此表示切换到窗口200(延期界面
- SetData(nIndex, "本机 触摸屏", LW, 200, 1)//LW200为<PLC控制元件>设置的切换窗口。
- bOn=true
- SetData(bOn, "本机 触摸屏", LB, 0, 1)//LB0为ON表示已在延期界面,暂时不执行此宏;
- nSecond = 0//
- SetData(nSecond, "本机 触摸屏", RW, 200, 1)//RW200存储软件允许使用的秒数。
- //软件使用到期,可选择额外执行一些动作;
- //<------------------------->;
- //<--------------------------->
- return
- end if
- //下边为程序正常运行时,执行试用时间递减;
- //软件允许使用的秒数递减。这里使用单字,可根据需要使用双字长度(支持约130年;
- nSecond = nSecond-1
- SetData(nSecond, "本机 触摸屏", RW, 200, 1)//RW200存储软件允许使用的秒数。
- TRACE("SECOND:%d\n",nSecond)
- //<>显示剩余时间,可选
- short y,m,d,H,M1,S
- S=nSecond%60
- M1=nSecond/60%60
- H=nSecond/3600%24
- d=nSecond/86400%30
- m=nSecond/2592000%12
- y=nSecond/31104000
- SetData(S, "本机 触摸屏", LW, 207, 1)
- SetData(M1, "本机 触摸屏", LW, 206, 1)
- SetData(H, "本机 触摸屏", LW, 205, 1)
- SetData(d, "本机 触摸屏", LW, 204, 1)
- SetData(m, "本机 触摸屏", LW, 203, 1)
- SetData(y, "本机 触摸屏", LW, 202, 1)
- //<>执行额外动作,可选;
- //<------------------------->
- //<--------------------------->
- end macro_command
复制代码- macro_command main()
- //<>获取设置的延期信息,延期模式,延期时间等信息;
- int nInfo,nMode,nTime
- GetData(nInfo, "本机 触摸屏", LW, 220, 1)
- GetData(nMode, "本机 触摸屏", LW, 222, 1)
- GetData(nTime, "本机 触摸屏", LW, 224, 1)
- //<>保证我们输入的数值不为0,这里使用250让客户端不识别;
- if (nInfo==0)then
- nInfo =250
- end if
- if(nMode==0)then
- nMode=250
- end if
- if(nTime==0)then
- nTime=250
- end if
- //<>延期模式高位用随机数代替加强干扰;
- short nTemp=0
- RAND(nTemp)
- nMode = ((nTemp<<0x10)|nMode)
- //<>延期信息与延期时间异或增强干扰
- nInfo = nInfo^nTime
- TRACE("FRONT_mode:%d,time:%d",nMode,nTime)//忽略,仅调试用;
复制代码
|