无论任何设计,进行功能测试的工作都是必不可少的,且是非常耗费时间和精力的。
这里介绍一种在Linux环境下,利用模拟方式进行出入管理功能的测试方法。
其思路是将模拟的出入行为以数据的方式放置到文件中,任何借助随机函数来模拟出入时间的变化,最终经程序处理来产生出入管理的登记报表。
在这个过程中,涉及以下问题的解决。
数据结构、处理流程、处理方法及程序、测试效果等
1. 定位读取数据
为了减轻反复测试的消耗,模拟出入行为的数据被存放在文件中,这样只要修改数据,就变换了出入的状况。
该文件的数据格式为:
姓名1
状态1
姓名2
状态2
...
其中:状态=0,表示进入;状态=1,表示离开。
由于文件是按顺序记录数据的,要读取其内容就涉及到定位读取的问题。
为此,可使用以下的方法来定位读取数据。
设待读取的文件是mn.txt,指定行为i,则读取第i行的语句为:
head -n $i mn.txt | tail -n 1
2. 自动建立临时数组
为了便于对数据进行处理,可将文件中的数据转存到数组中。
将读取文件的内容转存到下标为i的数组ls中,其语句为:
ls[$i]=$(head -n $i mn.txt | tail -n 1)
若将文件的内容全部按行的顺序转存到数组ls中,其程序为:

其中;语句let n=$(sed -n ‘$=’ mn.txt)的作用是获得文件的总行数,用它可判别读取操作何时结束。
3. 随机数的使用
由于出入的行为是有时间特征的,为模拟这种时间变化的随机性,可通过随机函数来形成。
产生时间随机变化的程序为:

其中:变量sj存放是随机数,变量ys则存放是限定了范围的随机数,语句sleep $ys这是通过延时来产生时间变化。
4.进出时间登记
利用状态标志,就可进行出入的判别并标记出其行为的时间点,进行时间登记的程序见图1所示。

图1 测试程序
经程序的执行,其测试结果如图2所示,说明程序设计合理,能有效地解决耗费时间的测试问题。

图2 测试效果
5.登记报表生成
有了以上的模拟测试结果,实现报表生成的思路是:当状态为0时,用当前时间来改写状态值;当状态为不为0时,则用存放的时间为进入时间,以当前的时间为退出时间。
对于模拟数据的使用,可分为两部分。即前部的数据是进入的信息,后部的数据则是退出的信息,因为由进入到退出有较大的时间间隔,所以其数据必定有明显分界线。
此外,还操作的一个问题就是,当状态为非0值时,要从前部的数据中,按姓名去寻找对应的进入时间。为此,要在前部的数据进行轮询查找定位以提取数据。
所生成的文件名称为djgl.txt,其记录的数据结构为:
姓名: 进入时间: 退出时间: 其它信息:
...
生成登记报表的程序见图3所示,经程序运行,所生成的报表见图4所示。


图3 报表生成程序


图4 生成结果
6. 辅助功能的实现
在多数情况下,开发板是具有PWM调节功能,利用它可控制舵机来实现门闸的开关。
但也存在PWM功能无法使用的情况,那该任何解决呢?
方法就是,使用延时函数自行构建一个可控制占空比名称生成函数。
对于常规的舵机来讲,其外观和基本特点见图5和图6所示。

图5 舵机及引脚功能

图6 舵机特点
为控制门闸的开关,其控制程序见图7所示。

图7 门闸控制程序
为便于测试,这里是用触摸按键来控制舵机的开合,每触摸一次按键,舵机就变化一次开合状态。
在程序中,调节使用的引脚是GPIO22,触摸按键使用的引脚是GPIO128。
在进行门禁管理时,当识别到人员进出时,即可控制门闸的开关。
除此之外,借助AI的识别结果,还可以语音的方式发出提示信息,如:进入时发出“你好,珍妮”,或在离开时,发出“再见!”语音内容。

图8 语音提示程序
我要赚赏金
