国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

[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

復制代碼


您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 05:11

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表