1. 引言
随着科技的发展和城市化的不断发展,城市交通拥堵问题严重。越来越多的人选择电动自动车出行。据2020年统计,我国电动车保有量高达3.5亿辆,是真正的国民交通工具。目前电动自行车每年发生火灾的概率为十万分之二。75%的电动自行车火灾,是在充电时发生的。2018年5月15日,国务院安委办下发《关于开展电动自行车消防安全综合治理工作的通知》。该通知工作措施第二条,明确鼓励新建住宅小区同步设置集中停放场所和具备定时充电、自动断电、故障报警等功能的智能充电控制设施。电动自动车充电桩往往比较密集,数量比较多,传统的电动自行车充电桩往往设计1拖10的充电桩,但布线较复杂。分布式控制的充电桩也多采用有线485的设计,数据交换速度比较慢。本设计则是基于以太网的局域网而设计的电动自动车充电桩的网关系统,数据交换速度快,布线简单,控制数量多,且可远程升级。实现对充电桩设备一对多的全面管理,维护设备的状态,并与服务器实时交换数据。
2. 系统整体设计与功能要求
本系统设计的充电桩系统为分布式控制的充电桩系统,采用网关来对所有的设备进行数据处理和转发,有效降低设备对服务器的依赖性,减小服务器的压力,节省4G流量,降低产品的运营成本,具体结构如下图1所示。
如上图所示,网关直接和服务器通信,服务器不参与充电桩之间的直接数据处理,这样的设计使得设备与网关的通信方式可以有更多的选择,而不局限一种通信方式,而且有利于后期的硬件设备和程序的升级,因为网关的存在,设备不与服务器直接交互,所以升级设备的通信方式,服务器不用做任何修改。设备程序升级时,网关可以缓存设备的升级文件,再进而逐个下发升级,这样大大减少了设备因为升级而消耗更多的流量。
网关要实现与服务器的功能有:远程抄表、远程获取设备状态、远程开启和关闭设备、远程充电信息获取、远程下发和上传充电订单、远程升级网关系统与设备系统。网关与设备之间要实现的功能有:网关发现设备、设备主动获取网关信息、设备状态上传、网关维护设备心跳状态、转发设备与服务器之间开启充电、结束充电、功能和电能信息、主动结束充电等功能。
2.1. 硬件框架图
本系统网关与设备之间通过以太网的方式连接,利用成熟的以太网通信方式可靠性高,且数据交换速度快,适合短时延,数据交换量大的场合。网关与设备之间的交互方式如下图2所示。

Figure 2. Gateway device connection diagram
图2. 网关设备连接图
本系统主系统采用基于CORTEX-M3的GD32F103VET6单片机,对服务器端本系统通过4G通信模组连接到服务器进行数据通信,本地设备与网关的连接则采用以太网的局域网通信方式。网关系统通过W5500接入交换机,设备端可采用ESP8266来接入交换机系统,本文程序是在RT-Thread Studio集成开发环境中开发,基于RT-Thread操作系统,建立多任务,通过交换机建立局域网,网关系统通过UDP通信与设备进行数据交互,通过4G完成与服务器的数据交互,最终实现设备到服务器的数据交互。
网关整体系统框架如下图3。

Figure 3. Gateway hardware framework diagram
图3. 网关硬件框架图
2.2. 硬件系统设计
硬件系统的稳定性设计决定了整个系统的稳定性,根据环境的要求,我们设计产品为民用级产品,但是在器件选型方面按工业级的标准来选型。硬件系统决定了整个系统的通信交互方式。
主控芯片与各设备的通信接口如下:通过485总线访问电能表来获取当前总的电量以及工作电压和工作电流。通过SPI接口与W5500进行通信。通过SPI接口读写Flash芯片。通过异步串口通信访问4G模组。主控芯片支持5个异步串口、3个SPI接口以及2个I2C接口,满足系统的要求。
2.2.1. 主控系统设计
现今市面上的网关大多采用高端嵌入式处理器加操作系统设计,预置有丰富的应用软件,配置较高,导致成本高,不太适用于本系统场景 [1]。本系统采用兆易系列GD32F103VET6,相较于ST系列具有更高的性价比。架构上采用ARM公司的M3新内核。性能提升30%,主频可达108 MHz,可超频到120 MHz。价格上便宜20%~30%。由于GD系列的Flash零等待时间,本工程原来使用ST所以在工程上需做稍许更改。因为后期要升级系统版本,本文通过外接Flash芯片来存储升级程序。具体电路如下图4所示。
2.2.2. 电源系统设计
系统的稳定性很大一部分取决于电源的长期稳定性,本系统中网络和主控以及通信部分均采用3.3 V供电。本系统选用的4G模块工作电流比较大,瞬时电流可达1.5 A,4G通信模块的输入电压范围为5~24 V,模块资料声明电压过低会影响4G模块达不到额定−40度的工作标准,因此本系统采用直流12V直接给4G供电。通过AMS1117-3.3进行前端稳压之后再分别给其他模块供电。本系统设计了断电上传电路,所以通过DC-DC设计了12 V到5.6 V的电源电路(图5)。
2.2.3. 4G通信设计
4G模块选用成都移讯通的Q560工业4G通信模组,它支持7模15频,且有多重软件可靠设计与复合式的看门技术。支持AT命令进行配置和查询,标准的TTL接口通信电平。工业级的通信温度,满足整个系统的要求。与系统的接口比较简单,支持3.3 V的串口电平,可直接与模块进行通信连接(图6)。
以太网通信电路选用支持硬件TCP协议栈的W5500,W5500是WIZnet推出的高性能以太网接口芯片系列之一,内部集成全硬件TCP/IP协议栈 + MAC + PHY。全硬件协议栈技术采用硬件逻辑门电路实现复杂的TCP/IP协议簇,其应用具有简单快速、可靠性高、安全性好等显著优势 [2],支持TCP,UDP,ICMP,ARP,IPv4,IGMP及PPPoE协议,能提供8个独立的socket,每个socket可以含有最大16 KB的发送和接收缓存。W5500的SPI接口支持80 MHz的通信速率。接口电路如下图7所示。
2.2.4. 485通信模块设计
485通信模块主要用于采集外部电能表的信息,来获取当前系统的工作电压、工作电流能及电能损耗,实现远程抄表的功能,节省人力资源。系统采用的485电路如下图8所示。
3. 系统软件设计
本系统基于RT-Thread系统开发,它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务线程。根据功能要求我们设定以下7个独立线程,线程是RT-Thread操作系统中最小的调度单位,线程调度算法是基于优先级的全抢占式多线程调度算法,即在系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的,包括线程调度器自身 [3]。
3.1. 总体任务设计
优先级的分配比较重要,决定了系统对任务的响应时间,RT-Thread为抢占式的实时内核,因为要根据实际需要来设计优先级:
任务1:主函数任务,用于初始化网络设备、4G通信设备、RTC时钟、看门狗。对必要的信号量和队列进行初始化。初始化主要的任务函数,之后不断执行看门狗监测任务,主函数的优先级可以在rtconfig.h中进行定义#define RT_MAIN_THREAD_PRIORITY 10。
任务2:UDP数据处理指令,一旦开始运行后,该任务自动进入挂起状态,等待接收队列的到来,一旦接收到数据则开始对数据进行分析处理。
任务3:4G数据处理指令,一旦开始运行后,该任务自动进行挂起状态,等待串口通信分析处理4G的数据,若是符合要求的数据则会由串口任务发送数据到队列里,4G接收任务进入就绪状态,分析并处理数据。
任务4:UDP发送任务,把UDP发送任务独立出来,减少多任务运行多数据发送的时候引起的冲突问题。
任务5:设备心跳检测任务,此任务需要维护两个心跳,一个用于和服务器保持长链接的心跳任务,另一个用于定时获取设备状态的任务,网关定时向设备发送心跳,检测设备是否在线。
任务6:串口数据处理任务,用于处理串口接收到的数据并按协议进行前期的数据处理和分析。
任务7:串口发送数据任务,用于通过串口向服务器发送数据。此任务在没有数据需要发送时进入到挂起状态,RT-Thread是抢占式的操作系统,由于串口没有缓冲区,独立成任务可以防止多任务同时使用串口发送造成数据的发送错误。不采用信号量的方式而采用队列,提高数据的传输效率。
3.2. 程序设计
3.2.1. 初始化任务设计
本系统在RT-Thread Studio中进行编程,在系统配置时已经进行了前期的一些配置,例如串口1的相关配置和W5500的配置已经自动添加初始化链表中。具体其他的一些初始化配置可参见下图9。
系统执行完初始化链表上的任务之后开始执行用户的初始化函数,本系统首先初始了局域网的连接,然后读取Flash,对用户的一些配置初始化,检测设备是否有升级任务。之后初始化RTC时钟,最后初始化系统中需要的队列和信号量以及任务。进行到主函数任务,根据当前状态点亮对应LED灯。
3.2.2. 4G通信任务设计
在main函数里初始化4G相关的任务后,4G任务的优秀级大于main函数,所以会立即运行,开始运行时首先初始化4G模块,检测4G模块是否存在、读取4G信号质量、检测是否连接到网络并读取IP地址,初始化服务器地址并开启心跳定时器任务,定时向服务器端发送心跳数据包,来检测设备是否在线。接下来进行挂起状态,等待服务器端数据到来。
与外部通信要完成通过4G模块接收信息,然后解析相关数据并进行相关的操作,根据网关要实现的功能我们设计以下流程图10。
4G接收任务并及时处理响应服务器,有些回复信息需要设备的响应,因此数据在处理后应当及时释放CPU的控制权。为了保证接收任务能及时的处理,所以设计接收数据队列,根据先进先出的原则依次对信息进行处理。
3.2.3. 设备心跳任务设计
在设备出现故障或者网络出现问题时需要及时同步设备状态到服务器端,因为需要定时维护设备心跳,来获取设备的最新状态,心跳任务设计如下图11所示。

Figure 11. Flow chart of device search and heartbeat maintenance
图11. 设备查找与心跳维流程图
设备查找是网关通过发送UDP广播通信进行设备查找,查找到设备之后会记录设备的IP地址以及端口,下次和设备直接就可以直接通过IP地址进行通信。设备的心跳维护任务间隔为2分钟,以便能及时获得设备状态。
3.2.4. 网关与设备通信任务设计
内部通信任务用来维护设备的心跳和状态、设备的升级、转发设备的一些充电相关的指令。通过UDP实现点对点的通信,在应用层完成可靠性通信的建立。具体处理流程如下图12所示。

Figure 12. The gateway processing device message flow chart
图12. 网关处理设备消息流程图
4. 结语
本系统基于RT-Thread提供了一种分布式控制充电桩网关的系统设计方法,通过局域网实现一台网关管理多台充电桩设备,维护设备的状态信息,并实现与服务器间数据的透明转发。网关整体功能考虑周全。本系统在实际长期运行中可靠稳定,具有一定的实用价值。