帮忙看看宏指令做出厂授权码的功能哪里不对 点击:311 | 回复:5



实达 小王

    
  • 精华:0帖
  • 求助:4帖
  • 帖子:8帖 | 16回
  • 年度积分:310
  • 历史总积分:313
  • 注册:2016年6月06日
发表于:2019-10-25 19:13:33
楼主
求助帖200分-未结帖

我才学习使用宏指令 ,想通过宏指令直接判断是否授权。不用在PLC里写程序。

初步功能可以实现,就是开机出厂密码成功写入HMI内存,也可以输入密码比较。输入正确正确则可以正常授权。否则指定干扰PLC数据的程序。

但是发现个问题,就是我输入的次数,始终不能断电保存。断电重启后无论正确与否,还可以点击输入元件,同时我原本需要隐藏的输入键盘元件居然还能再次点开。这都是累计输入次数的数据没有保存到内存的原因。

初学者,求师兄们帮帮我吧。程序图和源代码如下,拜谢!!


macro_command main()


short date,date1,zero,conter,conter1,password

bool a,b,c,d,g


DELAY(1000)

password=5239//出厂权限密码

d=true

DELAY(1000)

SetData(password, "本机 触摸屏", RW, 22, 1)//把出厂密码写入HMI内存RW22

DELAY(1000)

d=false

SetData(d, "本机 触摸屏", LB, 9029, 1) //强制保存到内存

GetData(date, "本机 触摸屏", RW, 22, 1)//读取出厂权限密码

GetData(date1, "本机 触摸屏", RW, 24 , 1)//读取人工输入密码

GetData(c, "本机 触摸屏", LB,120, 1)     //输入密码ENTER确认一次通知LB120累计输入的次数

SetData(conter, "本机 触摸屏", RW, 26, 1)//把输入的次数保存到HMI内存RW26

GetData(conter1, "本机 触摸屏", RW, 26, 1)//再从内存里读出保存后的次数


if c==true then                            //输入确认一次

 conter=conter+1                           //累加一次次数

 SetData(c, "本机 触摸屏", LB, 9029, 1)    //强制保存

 DELAY(200)

 c=false      //输入成功一次强制OFF通知  以便下次再ON时计数

 SetData(c, "本机 触摸屏", LB, 9029, 1)//强制保存

 SetData(c, "本机 触摸屏", LB,120, 1)//复位通知原件 以便下次通知计数

end if 

  

if conter1>=2 then//如果输入密码次数大于等于2

   g=true         //通知原件准备锁定并隐藏输入键盘

   SetData(g, "本机 触摸屏", LB, 9029, 1)

   DELAY(200)

   SetData(c, "本机 触摸屏", LB, 9029, 1)

   SetData(g, "本机 触摸屏", LB, 130, 1)//输入键盘的安全条件 当130置位 就隐藏键盘

 else  //如果输入密码次数没到2次

    g=false

    SetData(g, "本机 触摸屏", LB, 130, 1) //输入键盘的安全条件 当130保持OFF 可以继续输入 

end if


if date<>date1 then//如果输入密码不等于 出厂权限密码

   a=true//准备执行脚本程序 清楚PLC里指定数据 并断开输出

   SetData(a, "本机 触摸屏", LB, 100, 1)//弹出锁定文字指示

   SetData(zero, "MITSUBISHI FX0n/FX2", D, 132, 1)

   SetData(zero, "MITSUBISHI FX0n/FX2", D, 138, 1)

   SetData(zero, "MITSUBISHI FX0n/FX2", D, 229, 1)

   SetData(a, "MITSUBISHI FX0n/FX2", SM, 8034, 1)

else   

   a=false

   SetData(a, "本机 触摸屏", LB, 100, 1)//弹出锁定文字指示

   SetData(a, "MITSUBISHI FX0n/FX2", SM, 8034, 1) 

   

end if   

   

end macro_command   


1分不嫌少!



实达 小王

  • 精华:0帖
  • 求助:4帖
  • 帖子:8帖 | 16回
  • 年度积分:310
  • 历史总积分:313
  • 注册:2016年6月06日
发表于:2019-10-25 19:15:33
1楼

哪位师兄有类似现成的程序分享一下吧,谢谢,谢谢,谢谢!

乖乖小笨熊

  • 精华:2帖
  • 求助:0帖
  • 帖子:1120帖 | 10479回
  • 年度积分:3885
  • 历史总积分:48775
  • 注册:2006年8月05日
发表于:2019-10-27 01:08:05
2楼

威纶官网样例那里就有分期付款案例,你莫非从来不看的吗

实达 小王

  • 精华:0帖
  • 求助:4帖
  • 帖子:8帖 | 16回
  • 年度积分:310
  • 历史总积分:313
  • 注册:2016年6月06日
发表于:2019-10-28 02:57:22
3楼

回复内容:

对:乖乖小笨熊 威纶官网样例那里就有分期付款案例,你莫非从来不看的吗     内容的回复:

分期付款跟宏指令不一样,有些型号的屏幕不支持分期付款。而且我做的功能是出厂授权,防止人家偷盗程序。

太月星辰

  • 精华:0帖
  • 求助:1帖
  • 帖子:4帖 | 160回
  • 年度积分:81
  • 历史总积分:669
  • 注册:2011年11月02日
发表于:2019-11-25 16:51:58
4楼

把计数器变量每次使用前,先读取HMI寄存器里的内容赋值到计数器变量中,再执行计数器变量的操作即可!这样就达到掉电保持了,你自己定义一个变量,貌似没有掉电保持功能吧?朋友成功以后能否分享一下你的程序。

太月星辰

  • 精华:0帖
  • 求助:1帖
  • 帖子:4帖 | 160回
  • 年度积分:81
  • 历史总积分:669
  • 注册:2011年11月02日
发表于:2019-11-25 16:53:32
5楼

把计数器变量每次使用前,先读取HMI寄存器里的内容赋值到计数器变量中,再执行计数器变量的操作即可!

SOIJOR

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 123回
  • 年度积分:86
  • 历史总积分:86
  • 注册:2016年8月03日
发表于:2021-02-23 16:21:18
6楼

传到PLC的断电保持区


相关主题

官方公众号

智造工程师