嵌入式技术
在工业自动化领域,用户产品经常会有密码登录的需求,通过单片机编程实现设置及修改密码程序。一说到密码,我们首先可能想到的是,先在单片机里面存储一个初始密码,然后在触摸屏输入一个密码数字,通过串口下发给单片机,单片机判断这个数字是否跟初始密码一致,来判断密码的正确的,然后可以进行一些修改或其他的操作。当然,这种原始的方法也不是不可行,但是,随着触摸屏组态软件的强大,很多操作都不需要单片机来直接参与,就能实现密码登录、密码修改等。市面上很多人机界面都有这个功能,迪文DGUS屏自然也不例外。
迪文DGUS屏通过自身二次开发平台(DWIN_OS)便可以轻松实现密码功能,省去了单片机编程,为我们的开发带来了极大的方便。本文在迪文官方提供的例程上做了一些修改,详细介绍了通过组态软件和OS程序来设置修改密码的方法,关于OS指令的详细说明请参考官方提供的资料《基于DWIN_OS指令的理解与应用(os详细文档指导资料)》。
首先,我们把需要用到的界面图片准备好,大致如下所示:
然后,建立一个新的工程,由于建立工程的步骤,前面的例程已经详细介绍过了,在此就不再赘述,不清楚如何建立工程的读者,请仔细阅读前面的章节。如有需要源码,可以站内私信笔者。
这里需要特别提醒一下读者,因为本例中需要用到OS,所以在工程配置的时候,需要勾选“启用OS”选项;
本例中,主要演示了如下功能:
1. 在“自动模式”界面,按下“手动模式”按键,会出现密码输入框,只有密码输入正确,才能跳转到“手动模式”;
2. 在“自动模式”或“手动模式”界面,按“密码管理”按键,密码输入正确后可进入到“密码管理”界面,在此界面,用户可以修改密码;
3. 在官方给的“密码登陆与改写”例程基础上,增加了按键判断,即:通过判断触摸屏上的“手动模式”按键和“密码管理”按键的返回值,来确定在密码输入正确后,是跳转“手动模式”界面,还是“密码管理”界面。这个功能,在某些场合下是非常有用的。
4. 本例中的密码有两种,一种是“普通密码”,用户可以任意修改;另外一种则是“超级密码”,用户不能更改。“超级密码”的作用就是为了防止用户忘记了自己设置的密码,而作为一把万能钥匙来重置密码。
为了照顾新手,笔者在这里,还是给大家简单分享一下每个界面的变量的配置,读者可以参考该设置,配置自己的工程。
首先,是“自动模式”界面的两个“按键返回”控件的配置:
接下来就是“手动模式”界面的两个“按键返回”变量的配置:
然后,就是“密码管理”界面的变量的配置,这里需要注意的就是,在“新建密码”输入框和“再次输入密码”输入框中,均有两个变量,一个是“数据变量显示”控件,另一个则是“数据变量输入”控件,尤其是需要注意这两个变量的地址要一致,并且,由于写变量是用的四个字节,需要用到两个地址控件来存储,所以,在设置下一个变量的地址的时候,需要加“2”,即,“新建密码”的变量地址只0x0052,那么“再次输入”的变量地址就应该为0x0054,其他的,大家参考笔者的配置即可。
接下来,就是密码输入框的配置了,这个地方之前在将数字键盘设计的时候也有讲过,参考之前的设计即可,不过这里需要记住这个密码输入框的地址是0x0050,因为在OS程序中需要用到。
接下来,就是“密码错误”界面的两个按键的配置,当我们密码输错的时候,我们一般会选择重新输入密码或者不想要输密码进行后续操作了,直接返回到主页。这个功能很容易实现,我们只需要添加两个“基本触控”变量即可。
然后,就是我们的密码修改过程中可能遇到的情况了,我们一般修改新密码的时候,需要输入两次新密码,以确保用户输入的准确性,反正用户误操作,改了一个自己都不知道的新密码。那么,检查这两次输入的密码是否一致,就显得很有必要了。当密码输入正确后,我们跳转到一个“密码修改成功”的界面:
然而,并不是每次用户都能讲两次密码输入成一致,有时候不小心多点了个数,或者中间某个数输入错了,这时候,我们就可以跳转到另外一个界面来提示用户,让用户选择是继续重置密码呢还是直接退出。
至此,DGUS界面部分设计就大功告成了,接下来的重头戏,就是OS程序部分了。首先,我们为了方便,先把DGUS屏中用到的一些变量的信息,直接以注释的形式添加到OS程序中,这样就可以不用去DGUS工程中去一一查看每个变量的含义了。接下来,就是两个CALL指令,即:调用子程序指令。调用完成后,以END结束,在下一个DGUS屏的周期到来,再开始调用子程序。
在每次一次调用子程序后,都会执行一个RET—子程序调用返回指令。
接下来,我们看下密码校验部分,在我们输入完密码,按下“OK”键后,OS程序就会自动来判断密码的正确性,前面说到了,在本例中,有两种密码,一种是普通密码,另外一种就是超级密码了。在新的工程时,本身是没有设置普通密码的,所以在第一次使用的时候,需要用超级密码权限在“密码管理”界面,设置一个8位数以下(含8位数)的非0密码。OS程序在判断密码的时候,会首先识别是不是普通密码,如果是普通密码,则直接跳转到“MA_OK”执行相关动作;若用户输入的密码不是普通密码,则再来判断是不是超级密码,如果是超级密码,同样跳转到“MA_OK”执行相关动作。若两者都不是,则跳转到“MA_ERR”,执行相关动作。这一部分的完整代码如下图所示:
在密码输入正确后,我们再来识别此时是应该跳转到“手动模式”界面,还是“密码管理”界面呢?这里主要是通过按键返回值来识别:
l 当变量地址0x1000的返回值是0x0001的时候,跳转到“手动模式”界面;
l 当变量地址0x1000的返回值是0x0003的时候,跳转到“密码管理”界面;
当然,其中本来还有一个返回0x0002的值,跳转到“参数设置”界面,笔者故意在本例中删去了,留个读者来做验证。
接下来就是“修改密码”的子程序了,这个子程序会判断“修改完成”按键是否按下,然后再来判断两次密码输入框里面的数据是否一致,如果一致的话,则可以成功修改并保存密码,若不一致,则跳到错误界面。
关于迪文DGUS屏密码的设计就简单介绍到这了,有关OS指令部分如有不明白之处,请参考《基于DWIN_OS指令的理解与应用(os详细文档指导资料)》,里面有每条指令的详细说明。更多例程请参考:【跟我学】基于51单片机的工业自动化控制系列教程
全部0条评论
快来发表一下你的评论吧 !