基于STM32和组态王的停车场短信预约系统的设计
扫描二维码
随时随地手机看文章
引 言
近年来,随着城市的快速发展,中心城区的停车难问题日益凸显,停车资源没有得到有效利用是造成停车难的原因之一,而预约系统可以让用户与资源提供者进行远程交流,从而缓解这种供求矛盾。随着移动通信技术的快速发展,手机已经成为人们必备的通讯工具。将手机短信服务应用于预约系统,可以使服务更加人性化,更便于人们使用。基于 STM32 和组态王的停车场短信预约系统,让停车场真正实现智能化、人性化,使中心城区停车资源得到有效利用,对改善城区交通具有一定的积极作用。
1 系统结构设计与功能
本系统采用了ARMCor-tex-M4内核的STM32F407ZGT6作 为 主 控 芯 片 ,STM32F407ZGT6 是 意 法 半 导 体(STMicroelectronics)基于ARMCor-tex-M4内核推出的专门用于高性能、低成本、低功耗嵌入式领域的 32 位微处理器 [1]。采用SIMCOM公司的 SIM900A作为通信芯片,通过通信(GSM)模块与 STM32实现短信的发送和接受。基于FreeModbus协议的RTU模式的通信方式,通过RS232接口实现STM32单片机与组态王之间的通信,将短信内容和用户手机号码传给上位机组态王,并通过组态王对停车场进行监控,从而实现短信自动预约停车位的功能。该系统整体硬件结构设计如图 1所示。
该停车场短信预约系统的工作过程如下:当系统正常运行时,若客户需要提前预约停车位,可通过手机发送短信至系统设定的主机号码,通过GSM 网络和 SIM900A 短信收发模块接收预约短信,并通过 RS 232 接口与STM32 主机进行通信。该请求被 STM32 检测并产生一个中断,读取信息及用户号码, 并存储在寄存器中,通过FreeModbus 协议和 RS 232 接口将短信内容和用户号码传给组态王,组态王读取并记录用户号码。组态王软件通过查询停车位数据库,监测停车场车位数, 若有空余车位,则STM32 指令自动发送“预约成功”短信到客户手机上 ;若无空余车位,则发送“车位已满”短信。
停车场短信预约系统主要由四个功能模块构成,即主控模块、通信(GSM)模块、电源模块、数据传输模块 [2]。主控模块采用STM32 作为主控芯片,来控制短信的收发与数据的传输 ;GSM 模块采用SIM900A 进行无线通信 ;电源模块采用12 V 独立电源和USB 接口(COM1)相结合的供电方式; 数据传输模块由两部分组成,STM32 与GSM 模块之间通过RS232 接口(COM3)实现通信,与 PC 机之间通过USB 转RS232 接口(COM2)实现通信。远程终端是手机和装有组态王的上位机(PC),将用户发送的信息和手机号码经过处理之后,储存下来,方便信息的查询。
2 软件设计
该系统以 MDK5 软件为开发平台,通过调用库函数的方法,进行程序设计,应用串口助手和 ModbusPoll 实现程序的设计和调试。
2.1 短信收发子系统的设计
为了实现STM32 与SIM900A 模块之间的数据传输,实现短信收发,首先要对 STM32 进行初始化,然后配置系统时钟、中断控制器、输入输出的GPIO 以及相应的串口。STM32 初始化流程图如图 2 所示。参数配置时,需要对照原理图进行编写,查看芯片端口的使用情况及其作用,然后对该子系统进行配置,以保证模块能够正常运行。
短信功能的实现主要涉及到两个关键部分,一个是 AT 命令,另一个是串口的读写。AT 命令是主控芯片STM32和SIM900A之间的通信协议, 以此完成对 SIM900A的控制。短信的收发主要有两种模式,一种是文本模式,该模式只支持英文内容,另一种是PDU 模式[3]。本系统选择 PDU模式进行短信的收发。
SIM900A的短信功能主要分为两个部分,分别为读取短信和发送短信。接收短信的设置命令为AT+CMGR,我们将接收到的短信内容放在一个长度为 30的BUF中,再将BUF 写入到串口 3中,然后再读取串口 3中的内容,这样,短信的编号就获取完毕。获取了短信的编号之后,就能去获取短信的具体内容,而短信的内容则存放在ALPHA中,它处于响应的第三个位置,通过 SIM_AT_RESPONSE(1)函数,检查GSM 模块发送过来的数据,及时上传给电脑,就获取了短信的内容。发送短信的设置命令为 :AT+CIPSEND,首先将发送短信的电话号码存入到一个BUF中,将这个BUF 写入到串口3中,以此获取手机号码。最后将固定的短信内容写到串口3, 通过 SIM900A发送给手机用户,具体短信发送接收流程图如图 3所示[4]。
该系统若要实现自动预约的功能,则在实现短信收发功能的基础上,通过Modbus 协议使STM32 与上位机组态王进行通信,从而实现短信的自动读取和发送。短信内容是根据组态王软件对停车场车位使用情况的监控而选择发送写好的固定信息,若监控显示有空余车位,则发送“预约成功,欢迎您的 光临”,若监控显示无空余车位,则发送“对不起,车位已满”。 该子系统主程序流程图如图 4 所示。
2.2 STM32与组态王通信子系统的设计
FreeModbus 是一个针对嵌入式应用的免费(自由)的通 用 Modbus 协议 的 移 植。 目前,Modbus 协议 的 异 步串行传输通信方式, 对应的通信模式是 ModbusRTU 和ModbusASCII[5]。组态王内置的单片机通信协议都有这两种模式,ASCII 码协议内容较为简单,但其传输数据类型的局限性大,可用于传输数据的寄存器少,而本系统要求进行字符的发送和接收,传输的数据量较大,因此我们选择了ModbusRTU 模式对控制器 STM32 进行配置。
为了实现组态王和 STM32 单片机之间的通信,在设计中, 选择移植 FreeModbus 协议,通过程序设计将STM32 配置为FreeModbus 从机,可以通过组态王进行数据的读写。
STM32 和组态王的通信子系统可分为 :初始化模块、数据接收模块和数据处理及发送模块 [6]。初始化模块主要完成波特率设置、串口中断和定时器设置。其中,ModbusRTU 是基于串口的数据传输模式,为了实现组态王和STM32 单片机之间的通信,必须设置相同的传输模式和串口参数。数据接收模块主要完成串口接收中断和信息帧接收超时的定时器中断处理。数据处理及发送主要根据信息帧完成相关的工作及给主机回复的相关信息。其配置程序流程图如图 5 所示。
2.3 STM32与组态王通信子系统的调试
采用 ModbusPoll 作为 RTU 主站软件,用户可以通过该 人机界面选择从站地址来查看下位机的操作(读寄存器操作和 写寄存器操作)。ModbusRTU 的测试目标是 RTU 主站能否对 RTU 从站发出请求帧完成相应功能,从站能否解析请求帧及 时响应主站请求,发出应答帧。与 PC 机相连之后,分别对两 种功能服务进行若干测试,并根据 ModbusRTU 协议的内容 验证所得到的结果是否正确。主站PC 机通信测试如图6所示。
3 组态监控界面的设计
进入组态王运行系统,显示出组态王运行系统画面,如 图 7 所示,即可看到预约指示灯按照预约状态动态变化和实 时的车位数量信息,达到了实时监控的预期目标,保证系统 正常运行。通过组态监控画面实时反映预约系统的运行状态, 当有预约信息到来时,“请求预约”指示灯 1 闪烁,“客户信息”处显示当前预约手机号,没预约时指示灯亮绿灯。发送“预约 已成功”信息时,“预约已成功”指示灯 2 闪烁,发送成功亮 绿灯,发送失败亮红灯;发送“车位已满”信息时,“车位已满” 指示灯 3 闪烁,发送成功亮绿灯,发送失败亮红灯。
4 结 语
组态王和 STM32 单片机以及 GSM 模块可以组合成一套 经济可靠的数据采集、信息传输系统,应用于停车场,管理 人员在监控室就可以了解整个停车场的使用情况,对停车位 进行远程监测、调度,降低了劳动成本、提高工作效率,同 时使停车资源得到有效利用,对改善城区交通具有一定的积极 作用。该系统还可以推广应用到其他需要短信预约系统的场所, 这种系统不但可靠、实用、经济,而且设计简单,易于扩充, 具有较高的推广价值。