电子秤作弊黑盒测试中显示信息获取的方法与实现
本文就台式电子秤软件作弊检测问题介绍了一种台式电子秤作弊黑盒检测系统,针对该系统中的重要实现模块——显示信息获取模块,基于硬件分析给出相应的实现方法并应用于实际检测中。
1.电子秤作弊黑盒检测系统介绍
电子秤作弊黑盒检测系统设计的出发点是能够使该系统取代人工重复执行穷举测试。
系统检测部分基于 C/S 构架,分为数据库服务器端、测试机端和单片机采集端。服务器端运行 SQL SERVER 数据库,作为系统的存储数据库;测试机端运行上位机程序,进行作弊检测系统的控制部分;单片机采集端用来获取电子秤屏幕显示信息、执行电子秤按键闭合、模拟电子秤传感器输出数据等。
上位机程序根据作弊码规则自动生成作弊码序列,将该序列传入单片机,单片机控制电子开关执行键盘按钮闭合操作模拟物理按键按下,并给出模拟重量传感器信号,再由电子秤显示信息获取模块抓取电子秤屏幕数据进行比较来判断电子秤是否作弊,循环执行以下流程即可实现穷举测试。
系统执行流程:
(1)清零、去皮操作;(2)给定模拟载荷,获取该载荷下重量屏幕显示值,并记做 W0;(3)输入待测按键序列;(4)获取当前屏幕显示值 W1,并与 W0 作比较,判断该按键序列是否为作弊码。
2.屏幕显示信息获取模块
台式电子秤的显示一般分为“重量”、“单价”、“总价”三个显示屏。常见的台式电子秤为 LED 数码管或 LCD 液晶屏,其中 LED 数码管驱动原理较为简单,本文主要对 LCD 液晶屏的显示信息获取进行讨论。
显示信息的获取可以通过:1,通过抓取主控芯片发送给驱动芯片的命令进行破译;2,直接抓取 LCD 液晶屏管脚信息进行破译实现。第一种方法仅需少量接线便可以抓取三个屏幕的信息,方便快捷,但需针对不同驱动芯片进行编程适配;第二种方法需要较多的接线,但是直接根据 LCD 显示原理进行获取,无需针对不同驱动芯片做适配,通用性强。综合实际情况,本文采用第二种获取方法。
2.1 模块原理
ACS-30 型台式电子秤 LCD 液晶屏一般采用段式 LCD 显示屏,通常有六块显示屏:“重量”、“单价”、“总价”各两块,其中“重量”与“单价”显示屏为 5 位 LCD,“总价”显示屏为 6 位 LCD,其外观如图 1 所示。
段式 LCD 液晶屏管脚分为段电极(SEG)与背电极(COM),不同于 LED 数码管驱动,LCD 液晶屏的驱动必须使用交流电压驱动才能保持稳定的显示。背电极(COM)电平一直处于交流变换状态,当某个背电极(COM)和 某个段电极(SEG)之间加了足够的交流电压之后,就会将对应的段点亮。常见的台式电子秤 LCD 驱动芯片有 HT1621、 TM7711 等。
重量 LCD 显示屏引脚如图 2 所示:1~4 管脚分别为 COM1~COM4 管脚 ,5~14 管脚分别为 SEG1~SEG10 管脚。若要使某一段显示时,需要在对应的段电极(SEG)和背电极(COM)之间加上足够的交流电压,即:相应背电极(COM)为最高电压值同时对应段电极(SEG)为最低电压值;或背电极(COM)为最低电压值同时对应段电极(SEG)为最高电压值。结合表 1,便可以得到各个数字点亮的规则。
用示波器对 LCD 显示屏背电极(COM)管脚进行分析,如图 3 所示:COM1 口电平周期变化,共有 4 种电平(电平的个数取决于偏置设置:bias):最高,最低,次高,次低,每种电平持续时间 2ms 左右,最高电平对最低电平约 3.3v,COM1~COM4 按顺序逐个扫描。
通过上述分析可以得出 LCD 显示屏信息获取算法:依次扫描 4 个背电极(COM)为最低电压时,判断各段电极(SEG)是否为最高电平,若是,则对应表 1 中的段点亮;若否,则该段不显示。扫描完所有的位,再结合图 2 与表 1 的对应规则就可获得显示屏的显示信息。
2.2 模块实现
基于上述 LCD 显示屏信息获取算法,可设计显示信息采集模块:采用 ARM 单片机作为主控芯片,采集 LCD 显示屏各管脚模拟值信息,按上述算法分析处理后得到显示屏信息,再通过串口传给上位机进行处理。
具体编程实施抓取时按照逐位抓取的方式进行,分别得到每一位的数字,然后再组合成重量显示示数:每一位显示值均需2位段电极(SEG)和全部4个背电极(COM)共同确定,故每一位显示值对应的段电极分别为:左起第一位对应 SEG1、SEG2,第二位对应 SEG3、SEG4,第三位对应 SEG5、SEG6,第四位对应 SEG7、SEG8,第五位对应 SEG9、SEG10。设定在每个背电极为最低电压时,读取对应位的 2 个段电极(SEG)的模拟值,设置阈值函数,读取段电极模拟信号值超过该阈值时返回 1,否则返回 0。读取该位完毕后,返回的数值组成一个8位的字节,和 0~9 数字的目标字节进行匹配,便可得到该位的显示数值,若返回字节不能和 0~9 数字的目标字节匹配则返回 Error。
整个 LCD 显示信息获取需要读完所有位,其程序流程图如图 4 所示。
测试时,将该模块连接线钩挂在 LCD 显示屏的引脚上,并统一好接地,便可以方便的读取 LCD 屏幕显示信息。
3.系统运行
屏幕显示信息获取模块通过串口与上位机连接,集成到系统中,接受上位机的抓取命令后执行抓取程序并返回屏幕显示值给上位机处理。该模块直接根据 LCD 液晶屏的特性进行抓取,与驱动芯片无关,无需根据驱动芯片做额外适配,通过上位机做校验后,抓取正确率满足测试要求。