找回密码
 注册

QQ登录

只需一步,快速开始

搜索

[HMI/SCADA] 威纶通触摸屏的宏指令实现到期密码锁机

[复制链接]
潇湘雨 发表于 2022-1-20 16:16:07 | 显示全部楼层 |阅读模式
厂商
厂商: 其他
宏指令脚本如下:
  1. macro_command main()

  2. unsigned int time_sum[6]={0,0,0,0,0,0}   //时间组合数组
  3. unsigned int Dynamic_password[2]={0,0}   //动态密码存放
  4. unsigned int Verification_Code=0         //验证码存放
  5. unsigned int Input_password=0            //输入密码框
  6. unsigned int mm1=0, mk1=0,mm2=0, mk2=0,mm3=0, mk3=0,mm4=0, mk4=0,mm5=0, mk5=0 //定义10个变量为密码计算,
  7. unsigned short  year=0,month=0,day=0,hour=0,minute=0,second=0 //系统时间存放---声明时间变量
  8. bool init_button=false,Open_button1=false,Open_button2=false,Open_button3=false,Open_button4=false,Open_button5=false//声明位状态变量
  9.      //1.初始化按钮,     2.1#开启按钮,     3.2#开启按钮      4.3#开启按钮        5.4#开启按钮      6.5#开启按钮

  10. bool Release_button=false,ON=true,OFF=false, Picture_locked=false,M99_ON=true,M99_OFF=false //声明位状态变量
  11.      //3.解除按钮                              4.画面控制         5.PLC,M99-打开,PLC,M99-关闭

  12. unsigned short Year_input[5]={0,0,0,0,0},month_input[5]={0,0,0,0,0},day_input[5]={0,0,0,0,0},count=0  //获取-输入时间期限变量
  13. unsigned short K0=0,K1=1,K2=2,K3=3,K4=4    //常数赋值---5次期限0-4
  14. unsigned int   DK0=0                       //常数赋值
  15. unsigned short R1=11                       //主画面编号


  16. GetData(year,  "Local HMI", LW, 9022, 1)  //获取系统时间年
  17. GetData(month, "Local HMI", LW, 9021, 1)  //获取系统时间月
  18. GetData(day,   "Local HMI", LW, 9020, 1)  //获取系统时间日
  19. GetData(hour,  "Local HMI", LW, 9019, 1)  //获取系统时间时
  20. GetData(minute,"Local HMI", LW, 9018, 1)  //获取系统时间分
  21. GetData(second,"Local HMI", LW, 9017, 1)  //获取系统时间秒
  22. SetData(ON,    "Local HMI", LB, 9029, 1)  //强制保存---强制保存配方资料到触摸屏

  23. Dynamic_password[0]=(year+month+day+hour)*123+1234567  //期限解锁密码算法
  24. Dynamic_password[1]=(year+month+day+hour)*123+3456789  //终级解锁密码算法

  25. time_sum[0]=year*10000+month*100+day        //系统时间组合
  26. Verification_Code=(year+month+day+hour)*123 //验证码算法

  27. GetData(Open_button1, "Local HMI", RW_Bit, 600, 1) //读取   分期按钮1  是否开启
  28. GetData(Open_button2, "Local HMI", RW_Bit, 601, 1) //读取   分期按钮2  是否开启
  29. GetData(Open_button3, "Local HMI", RW_Bit, 602, 1) //读取   分期按钮3  是否开启
  30. GetData(Open_button4, "Local HMI", RW_Bit, 603, 1) //读取   分期按钮4  是否开启
  31. GetData(Open_button5, "Local HMI", RW_Bit, 604, 1) //读取   分期按钮5  是否开启

  32. GetData(init_button,    "Local HMI", RW_Bit, 11, 1)//读取   初始化按钮状态
  33. GetData(Release_button, "Local HMI", RW_Bit, 12, 1)//读取   解除按钮状态
  34. GetData(Picture_locked, "Local HMI", RW_Bit, 14, 1)//画面控制

  35. GetData(count,             "Local HMI", RW, 2, 1)  //读取期数
  36. GetData(Input_password,    "Local HMI", RW, 3, 1)  //读取密码
  37. SetData(Verification_Code, "Local HMI", RW, 5, 1)  //验证码显示
  38. GetData(mm1,               "Local HMI", RW, 5, 1)  //读取验证码

  39. mk1=mm1+372100   //第一期密码:= 验证码 + 372100
  40. mk2=mm1+472800   //第二期密码:= 验证码 + 472800
  41. mk3=mm1+573500   //第三期密码:= 验证码 + 573500
  42. mk4=mm1+674200   //第四期密码:= 验证码 + 674200
  43. mk5=mm1+774900   //第五期密码:= 验证码 + 774900



  44. //初始化处理
  45. if init_button then
  46.    SetData(OFF, "Local HMI", RW_Bit, 600, 1) //分期功能-关闭
  47.    SetData(OFF, "Local HMI", RW_Bit, 601, 1) //分期功能-关闭
  48.    SetData(OFF, "Local HMI", RW_Bit, 602, 1) //分期功能-关闭
  49.    SetData(OFF, "Local HMI", RW_Bit, 603, 1) //分期功能-关闭
  50.    SetData(OFF, "Local HMI", RW_Bit, 604, 1) //分期功能-关闭
  51.    
  52.    SetData(OFF, "Local HMI", RW_Bit, 12, 1)  //解除按钮-复位
  53.    SetData(K0,  "Local HMI", RW, 2, 1)        //期数-清
  54.    SetData(DK0, "Local HMI", RW, 3, 1)       //密码框-清零
  55.    SetData(OFF, "Local HMI", RW_Bit, 13, 1)  //密码输入错误复位
  56. end if


  57. //一期密码时间设定
  58. GetData(Year_input[0],  "Local HMI", RW, 10, 1) //输入年
  59. GetData(month_input[0], "Local HMI", RW, 11, 1) //输入月
  60. GetData(day_input[0],   "Local HMI", RW, 12, 1) //输入日

  61. time_sum[1]=Year_input[0]*10000+month_input[0]*100+day_input[0]//输入时间组合:如20211209

  62. if Open_button1 and time_sum[0]>=time_sum[1] and count==0  then  //第1期打开锁机条件:1#开启+系统时间>=设定时间+1期

  63.    SetData(ON, "Local HMI", RW_Bit, 14, 1)                       //锁机画面弹出  
  64. end if

  65. if count==0 and mk1==Input_password  and Release_button then     //第1期解锁条件:1期+计算密码=输入密码+解锁按钮按下

  66.    SetData(OFF, "Local HMI", RW_Bit, 14, 1)   //锁机画面关闭
  67.    SetData(DK0, "Local HMI", RW, 3, 1)        //密码框清零
  68.    SetData(OFF, "Local HMI", RW_Bit, 600, 1)  //分期功能-关闭
  69.    SetData(K1,  "Local HMI", RW, 2, 1)        //期数加1
  70.    SetData(R1,  "Local HMI", LW, 0, 1)        //切换主画面
  71. end if  
  72.   
  73.   
  74. //二期密码时间设定
  75. GetData(Year_input[1],  "Local HMI", RW, 20, 1)  //输入年
  76. GetData(month_input[1], "Local HMI", RW, 21, 1)  //输入月
  77. GetData(day_input[1],   "Local HMI", RW, 22, 1)  //输入日

  78. time_sum[2]=Year_input[1]*10000+month_input[1]*100+day_input[1] //输入时间组合

  79. if Open_button2 and time_sum[0]>=time_sum[2] and count==1  then //第2期打开锁机条件:2#开启+系统时间>=设定时间+1期

  80.    SetData(ON, "Local HMI", RW_Bit, 14, 1)                      //锁机画面弹出
  81. end if

  82. if count==1 and mk2==Input_password and Release_button then //第2期解锁条件:2期+计算密码=输入密码+解锁按钮按下

  83.    SetData(OFF, "Local HMI", RW_Bit, 14, 1)   //锁机画面关闭
  84.    SetData(DK0, "Local HMI", RW, 3, 1)        //密码框清零
  85.    SetData(OFF, "Local HMI", RW_Bit, 601, 1)  //分期功能-关闭
  86.     SetData(K2, "Local HMI", RW, 2, 1)        //期数加1
  87.    SetData(R1,  "Local HMI", LW, 0, 1)        //切换主画面
  88. end if




  89. //三期密码时间设定
  90. GetData(Year_input[2],  "Local HMI", RW, 30, 1)  //输入年
  91. GetData(month_input[2], "Local HMI", RW, 31, 1)  //输入月
  92. GetData(day_input[2],   "Local HMI", RW, 32, 1)  //输入日

  93. time_sum[3]=Year_input[2]*10000+month_input[2]*100+day_input[2]  //输入时间组合

  94. if Open_button3 and time_sum[0]>=time_sum[3] and count==2 then   //第3期打开锁机条件:3#开启+系统时间>=设定时间+1期

  95.    SetData(ON, "Local HMI", RW_Bit, 14, 1)                       //锁机画面弹出
  96. end if

  97. if count==2 and  mk3==Input_password and Release_button then     //第3期解锁条件:3期+计算密码=输入密码+解锁按钮按下

  98.    SetData(OFF, "Local HMI", RW_Bit, 14, 1)     //锁机画面关闭
  99.    SetData(DK0, "Local HMI", RW, 3, 1)          //密码框清零
  100.    SetData(OFF, "Local HMI", RW_Bit, 602, 1)    //分期功能-关闭
  101.    SetData(K3,  "Local HMI", RW, 2, 1)          //期数加1
  102.    SetData(R1,  "Local HMI", LW, 0, 1)          //切换主画面
  103. end if


  104. //四期密码时间设定
  105. GetData(Year_input[3],  "Local HMI", RW, 40, 1)  //输入年
  106. GetData(month_input[3], "Local HMI", RW, 41, 1)  //输入月
  107. GetData(day_input[3],   "Local HMI", RW, 42, 1)  //输入日

  108. time_sum[4]=Year_input[3]*10000+month_input[3]*100+day_input[3] //输入时间组合

  109. if Open_button4 and time_sum[0]>=time_sum[4] and count==3 then  //第4期打开锁机条件:4#开启+系统时间>=设定时间+1期

  110.    SetData(ON, "Local HMI", RW_Bit, 14, 1)                      //锁机画面弹出
  111. end if


  112. if count==3 and  mk4==Input_password and Release_button then    //第4期解锁条件:4期+计算密码=输入密码+解锁按钮按下

  113.    SetData(OFF, "Local HMI", RW_Bit, 14, 1)   //锁机画面关闭
  114.    SetData(DK0, "Local HMI", RW, 3, 1)        //密码框清零
  115.    SetData(OFF, "Local HMI", RW_Bit, 603, 1)  //分期功能-关闭
  116.    SetData(K4,  "Local HMI", RW, 2, 1)        //期数加1
  117.    SetData(R1,  "Local HMI", LW, 0, 1)        //切换主画面
  118. end if





  119. //五期密码时间设定
  120. GetData(Year_input[4],  "Local HMI", RW, 50, 1) //输入年
  121. GetData(month_input[4], "Local HMI", RW, 51, 1) //输入月
  122. GetData(day_input[4],   "Local HMI", RW, 52, 1) //输入日

  123. time_sum[5]=Year_input[4]*10000+month_input[4]*100+day_input[4] //输入时间组合



  124. if Open_button5 and time_sum[0]>=time_sum[5] and count==4 then  //第5期打开锁机条件:1#开启+系统时间>=设定时间+1期

  125.   SetData(ON, "Local HMI", RW_Bit, 14, 1)                      //锁机画面弹出
  126.   end if


  127. if (count==4 and  mk5==Input_password and Release_button)or(Dynamic_password[1]==Input_password and Release_button) then //第5期解锁条件:5期+计算密码=输入密码+解锁按钮按下(或者终极解码+解除按钮)

  128.    SetData(OFF, "Local HMI", RW_Bit, 14, 1)   //锁机画面关闭
  129.    SetData(DK0, "Local HMI", RW, 3, 1)        //密码框清零
  130.    SetData(K0,  "Local HMI", RW, 2, 1)        //期数加1
  131.    SetData(OFF, "Local HMI", RW_Bit, 600, 1)  //分期功能-关闭
  132.    SetData(OFF, "Local HMI", RW_Bit, 601, 1)  //分期功能-关闭
  133.    SetData(OFF, "Local HMI", RW_Bit, 602, 1)  //分期功能-关闭
  134.    SetData(OFF, "Local HMI", RW_Bit, 603, 1)  //分期功能-关闭
  135.    SetData(OFF, "Local HMI", RW_Bit, 604, 1)  //分期功能-关闭
  136.    SetData(R1,  "Local HMI", LW, 0, 1)        //切换主画面
  137. end if




  138. if Open_button1 and mk1 or Open_button2 and mk2 or Open_button3 and mk3 or Open_button4 and mk4 or Open_button5 and mk5 <>Input_password and Release_button==1 then//P判断输入密码是否正确,显示提示!

  139.    SetData(ON,  "Local HMI", RW_Bit, 13, 1)   //密码输入错误
  140.    else
  141.    SetData(OFF, "Local HMI", RW_Bit, 13, 1)   //密码输入错误复位
  142. end if







  143. //R0:画面切换备用 R1:各开关铵钮存放及位控制/的R1.0开启按钮R1.1初始化按钮R1.2解除按钮按钮R1.3密码错误指示R1.4锁机画面弹出
  144. //R2—R3:密码输入。

  145. end macro_command

复制代码


您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-4-25 10:21

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表