APP下载

智能立体车库控制系统人机交互软件设计

2016-05-14李俊杰冯韬奚志远何異耿磊

科技资讯 2016年6期

李俊杰 冯韬 奚志远 何異 耿磊

摘 要:目前,“停车难”已成为困扰我国诸多城市的严重问题。兴建智能立体车库是解决这一难题行之有效的办法。作为用户和智能立体车库进行交流的最直接方式,人机交互界面的设计显得特别重要。本文在Linux系统下采用Qt语言对人机交互界面进行设计,利用信号与槽机制简单地实现界面之间的跳转,结合多线程技术实现串口通信和语音提示,同时引入了数据库存储车库日常运行时的数据与信息。本次设计的交互系统界面简洁美观,操作方便,可以直接移植到Linux嵌入式系统中运行使用。

关键词:智能立体车库 人机交互界面 Qt Linux

中图分类号:TP273 文献标识码:A 文章编号:1672-3791(2016)02(c)-0000-00

0 引言

截止2015年底,我国的机动车数量达到2.79亿辆,机动车驾驶人数达3.27亿,给城市交通带来了诸多的问题。为解决停车难的问题,机械式立体车库应运而生。在立体式车库的设计中,人机交互界面占有重要的地位,它是用户体验车库的主要方式,其展示结果将直接影响到用户体验。

目前,我国大多数机械式立体车库的人机交互界面的设计都过于简单,或是直接采用机械式操作和非接触式刷卡存取车。随着大数据时代的到来,这些设计方式不利于对车库用户信息的日常管理,满足不了现代科技飞速发展带来的种种需求。针对以上问题,本文采用Qt语言实现了人机交互界面的设计。管理员和用户均可以通过此界面对各自的信息进行管理,随时查看自己车位的使用状况。在出现紧急情况时,管理员可以通过该界面第一时间与用户取得联系。在使用的过程中,系统会以语音的形式引导使用者更好的操作该软件系统。本设计还支持手机移动端的操作,以短信的形式,通过GSM模块发送特定的内容到该软件系统,该系统就可以向下位机发送相应的数据进行存取车操作。

1 软件总体框架

本软件实现的功能主要是创建多个操作界面,并根据不同功能完成各个界面之间的跳转;在对界面进行操作时,通过配置串口、GPRS/GSM完成和下位机、手机APP的通信;搭建数据库,对管理员、用户和车位的信息进行存储,在数据的录入中,可以随时调用软键盘进行输入[1];软件在运行时还可支持中文的显示,并在操作车库的同时进行语音提示,使车库的使用更加便捷。本软件的总体框架图如图1所示。

2 软件整体工作流程

软件在启动时,应先对数据库、车位信息、串口等进行初始化。运行的过程中,始终对下位机串口、手机APP串口和软件自身界面进行监控。当有数据传入,即刻将收到的数据与数据库中的数据进行对比验证,验证成功方可进入系统。进入系统后,若操作车位,则向下位机发送数据;若联系用户,则向手机APP发送数据;若操作数据库,则在对比验证成功后对数据库进行更新。具体流程图如图2所示。

3 软件功能实现分析

3.1 界面切换

本文中采用了大量的信号(signals)和槽(slots),它们是Qt中的典型机制[2]。在本文中的具体使用方法如下:

Connect(发送者sender,信号函数SIGNAL,接受者reciever,槽函数SLOT)信号与槽主要对按下(QPushButton)事件进行捕捉,实现界面与界面之间的调转切换,完成该按键按下时相应的数据操作。图3为软件界面的调用框图。

3.2 串口通信

串口通信是本文实现的重点,它是连接下位机和手机APP的通信桥梁。在Qt语言中,提供了第三方类Posix_QextSerialPort对串口进行操作[3],Posix_QextSerialPort类打开串口及对串口进行初始化的主要代码如下所示:

uartCom = new Posix_QextSerialPort("/dev/ttySAC0", QextSerialBase::Polling);

uartCom->open(QIODevice::ReadWrite);

uartCom->setBaudRate(BAUD115200);

uartCom->setDataBits(DATA_8);

uartCom->setParity(PAR_NONE);

uartCom->setStopBits(STOP_1);

其中,uartCom为Posix_QextSerialPort的类对象,通过构造函数操作Linux系统/dev/路径下串口0的驱动程序ttySAC0。在Linux系统中,Posix_QextSerialPort对串口的操作只能采取轮询方式Polling,即定义一个定时器,每隔一段时间对串口进行扫描,查看是否有数据的操作。在以读写方式打开串口后,定义串口的通信方式。本文使用的串口0和串口1的通信方式均约定为:波特率115200,8个数据位,无奇偶校验,1个停止位。利用Posix_QextSerialPort类提供的write(const char *)函数和readAll()函数完成对串口数据的写入与读取。

3.3 GPRS/GSM短信接收

上位机与手机APP的通信主要通过串口控制GPRS/GSM模块完成[4]。GPRS/GSM模块内置了TCP/IP协议,只需往该模块中写入AT指令即可实现收发短信和拨打电话的功能。表1为本文中用到的基本AT指令。

在通过串口往GPRS/GSM模块写入AT指令时,需要在写入的字符串后面加上“\r”,Linux系统中“\r”为回车标志。收到手机APP端发送的短信后,要提取发送者的号码以及发送的信息内容与数据库中的内容进行比对,才能正确的将相应的命令发送到下位机。经过多次测试,接收到短信时串口会收到并读取带有“+CMTI”字符串的数据,每次读取到的短信数据中,发送者的手机号码在“+86”(移动卡)或“"86”(联通卡)字符串后面,收到的短信内容位于“+32"”后面。根据这些数据,就可以将字符串中的号码和内容截取出来。

3.4 数据库搭建

Qt中支持多种数据库语言,本文选用最基础的sql语言搭建存储管理员、用户和车位具体信息的数据库[5]。本文调用QSqlDatabase的addDatabase函数创建了名为database.db的sql数据库,并通过QSqlQuery对象的exec()在数据库中创建了两个表格(userinfo和managerinfo)分别存放用户信息、管理员信息和车位信息,其中用户信息和车位信息如表2所示。

在上位机软件的编写过程中,会多次对数据库进行操作,比如密码验证、密码修改、添加删除用户、车位选择界面的显示等。

3.5 数据共享

在程序的编写过程中,经常出现多个类调用同一个对象的情况,为此,本文使用定义全局变量的方法来实现数据的共享,其中定义的全局变量如表3所示。

其中,user为停车位选择界面类的对象,在用户操作界面和管理员操作界面都要调用该对象,将其定义为全局变量,方便引用;gprsCom为操作GPRS/GSM模块的串口类对象,在欢迎界面、联系用户界面都使用同一串口,故定义为全局变量;uartCom为与下位机通信串口的类对象,在欢迎界面、管理员操作界面、用户操作界面都会使用该串口发数据,定义为全局变量;closeParkingFlag为bool型变量,当其值为true时,任何界面都可以调用它来关闭本界面。

3.6 语音提示

为了使人机交互界面更加人性化,本文加入了语音提示功能。在Linux系统中,madplay是一款通过命令行控制的音乐播放软件,只需将madplay移植入Linux系统中即可。完成madplay的移植后,需要单独创建一个线程来播放语音,否则会导致系统界面运行崩溃。在程序中用system()写入命令就可以实现语音播放功能。如下所示:

system("madplay /music/addok.mp3");

3.7 中文显示

QT/E-4.7.1支持中文显示[6],格式为wenquanyi,在main函数中定义QFont的对象,使用该对象的setFamily()函数设置此格式,具体代码为:

QFont font;

font.setFamily(("wenquanyi"));

a.setFont(font);

4 系统测试

把编译好的可执行文件移植到嵌入式系统中[7],上电开机。设计的软件系统界面运行流畅,语音提示清晰,支持中文显示。进入管理员或用户操作界面,输入密码进行验证,密码错误报警提示,密码一致则正确跳转;对车库用户进行管里,在信息表中可以看到数据库运行正常。用USB转串口线与电脑连接模拟与下位机的通信,存取车时均发送了正确数据;进入联系用户界面,成功给数据库中的用户拨打电话和发送短信,用手机给软件系统发送数据,成功接收并向下位机(电脑)发送了相应数据。经过多次测试,整个软件系统运行稳定,效率高,使用方便。

5 结束语

本文采用Qt实现了友好的智能立体车库人机交互界面,可方便地移植到Linux嵌入式系统中使用;引入数据库存储车库的数据信息,符合现代社会的大数据发展趋势;通过触摸屏完成存取车的操作,操作过程中伴有语音提示,更加贴近人们的日常生活。

参考文献

[1] 谢芬,潘丽,刘守印.基才QT/E的嵌入式Linux系统的软键盘实现 [J].电子设计工程,2012,20(5):177-179.

[2] 丁林松,黄丽琴.Qt4图形设计与嵌入式开发[M].北京:人民邮电出版社,2009:78-489.

[3] 陈静.基于Ubuntu13.04系统下QT串口通信设计 [J].电子世界,2014(18):244-244.

[4] 白洁.基于ARM的嵌入式GPRS通讯系统的设计与实现 [J].高校实验室工作研究,2013(44):44-46

[5] 梁隆恺,韩改宁,王晓妮.嵌入式Qt下的数据库程序设计与开发[J].办公自动化,综合版,2014(11):58-61.

[6] 周继芹,薛天宇.基于嵌入式Linux和Qtopia平台中文环境的实现 [J]网络新媒体技术,2008, 29(2):80-83.

[7] 陈敬,向伟.基于嵌入式Linux的QT/Embedded移植与应用开发 [J].电脑与信息技术,2013, 21(1):57-59.