充电桩通常采用工业总线与后台通信。针对工业总线布网复杂、扩展性差、易受干扰等缺点,通过无线模块设计了一个充电桩数据采集器,以 ESP8266 作为核心通信模块,将充电桩的数据进行采集并上传到上位机。首先介绍了 ESP8266 硬件电路及其开发环境。接着根据采集数据的不同,提出了一种更高效率的采集方案。最后经过实际应用验证了该采集器的可行性。所设计的采集器具有一定的通用性,通过简单修改配置,可以将此采集器应用于不同设备的数据采集。
 
0 引言
据国家发改委公布的数据,截止到 2016 年,我国充电桩的数量不到 5 万个,远远不能满足国内电动汽车发展的需要,明显制约了电动汽车的普及。在“十三五”的规划指导下,越来越多的汽车制造商和电力企业投入了大量的资源开展充电桩等电动汽车基础设施的研究。但在积极推动电动汽车基础设施建设的情况下,仍存在认识不统一、配套政策不完善、协调推进难度大、标准规范不健全等问题。其中充电桩后台检测是充电桩快速推广发展的关键,要在充电站实现通信系统,通常需要布置各类工业总线(RS485、RS232、CAN 总线),其优点是数据传输可靠、设计简单[1];缺点是布网复杂、扩展性差、施工成本高、灵活性差、通信容量低,并且在一般的电力环境中都会存在很大的电磁干扰[2],普通线缆布置的总线网络常常会出现问题,另外对于早期投入建设但无良好通信功能的充电桩来说,在现场地下重新布置工业总线既不经济也不现实。因此,本文基于无线通信模块设计了一个充电桩数据采集器,该采集器的工作是将充电桩的数据上传到上位机,具有成本低、扩展性好、灵活性好等优点。
 
工业常用的无线通信模块有 NRF905、CC1101、CC3200、SIM900、ESP8266 等,前两者通常需要额外的单片机对其进行控制和数据处理;ESP8266 模块自带 GPIO 与 SPI 等接口,可以独立作为产品不需要额外的单片机;而 CC3200 和 SIM900 模块功能强大且包含了 MCU,但其价格昂贵、功耗较大。ESP8266 不仅价格低廉,还有如下优点:同类产品一般不带 Flash,ESP826612F 的 Flash 为 4 MB、内存为 80 KB;其兼容性非常好,支持 AT 指令、C、Python、Lua、Javascript、Arduino 等开发语言。因此 ESP8266 是业界一款里程碑式的 WiFi 芯片。
 
1 原理设计
选择 ESP8266 作为无线通信模块,通过 RS485 串口与充电桩连接,将 ESP8266 连接到 WiFi 与上位机处在同一局域网,实现局域网内通信。上位机通过下发查询报文采集充电桩的数据。充电桩只需转发报文采集电能表数据。
 
1.1 通信协议选择
系统总体框图如图 1 所示。
 
 
ESP8266 内置了完整的 TCP/IP 协议栈,可以作为 TCP 的客户端。固件提供了接口函数,用户可以不管 TCP/IP 底层代码的实现。为了确保数据传输的可靠和安全,选择 MODBUSTCP 协议与上位机通信。其中上位机作为 TCP 服务器。
 
由于充电桩的数据由电能表提供,因此选择电能表协议 DLT6452007 与 ESP8266 通信。
 
1.2 硬件设计
由于 ESP8266 集成了射频电路,内置 32 位 MCU,使得外围电路设计十分容易。其硬件电路图如图 2 所示。
 
 
由图 2 可以看出 ESP8266 的外围电路非常简单,ESP8266 对电源稳定性要求非常高,因此只需几个电容用于电源滤波。3.3 V 的电压可以直接用 LiPo 电池供电。本采集器使用的型号是 ESP826612E,该型号是 ESP8266 系列中最稳定、最成熟的模块。
 
充电桩的核心控制板 M287 是飞思卡尔的一块工控核心板,M287 通过 RS485 串口与 ESP8266 连接。
 
1.3 软件设计
1.3.1ESP8266 SDK 与 ESP8266 IDEEclipse IDE:它是由安可信发布的一款用于 ESP8266 二次开发的软件平台,由 Eclipse 集成了相关插件,相对于官方开发环境配置。Eclipse IDE 简易、方便,最重要的是可以在 Windows 下直接运行[7],编译过后能够直接生成 bin 文件,通过烧写工具 ESP8266Flasher 将 bin 文件烧入 ESP8266 即可。
 
ESP8266 SDK(Software Development Kit):用户根据自己的 ESP8266 型号在乐鑫官网上下载需要的 SDK。SDK 包含了所有驱动,为用户提供了一个非常简单易用的平台,虽然其底层代码对用户不透明,但都提供了接口函数,用户根据编程手册可以直接调用[3]。
 
1.3.2 采集程序设计
用户应用的初始化功能在 user_init()实现,user_init()是程序的入口函数, ESP8266 开机从该函数开始执行。ESP8266 主程序流程框图如图 3 所示。
 
 
主程序 user_init()部分代码如下:
 
  void user_init()
 
  {
 
  uart_init(BIT_RATE_115200,BIT_RATE_115200);
 
  // 串口初始化
 
  user_set_station_config();
 
  //esp8266 WiFi 信息配置
 
  }
 
  void user_set_station_config()
 
  {
 
  struct station_config stationconfig;
 
  os_memset(&stationconfig.ssid, 0, 32);
 
  os_memset(&stationconfig.password, 0, 64);
 
  os_memcpy(&stationconfig.ssid, "WIFINAME", 8); // 设定连接的 WiFi
 
  os_memcpy(&stationconfig.password, "passward.", 8); //WiFi 密码
 
  stationconfig.bssid_set=0;
 
  wifi_station_set_config(&stationconfig);
 
  os_timer_disarm(&test_timer);
 
  os_timer_setfn(&test_timer,(os_timer_func_t*)user_check_ip, NULL);
 
  os_timer_arm(&test_timer, 2000, 1);
 
  }
 
最后配置 TCP 客户端信息,这里需要注意连接 TCP 服务器时必须确保 WiFi 已成功连接,因此设定了一个定时器 test_timer,该定时器的作用是通过 WiFi 状态接口函数 wifi_station_get_connect_status()循环检测 WiFi 是否连接成功,当 WiFi 连接成功后配置 TCP 客户端信息。下面为建立 TCP 连接的程序:
 
  user_check_ip()
 
  {
 
  tcpclient.type=ESPCONN_TCP;//tcp 连接方式
 
  tcpclient.state = ESPCONN_NONE;
 
  tcp_server_ip.addr = 0;
 
  const char esp_server_ip[4] = {x,x,x,x};
 
  os_memcpy(tcpclient.proto.tcp->remote_ip, esp_server_ip, 4);// 远程 IP 设定
 
  tcpclient.proto.tcp->remote_port = 8888; // 远程端口设定
 
  tcpclient.proto.tcp->local_port = espconn_port(); // 本地端口设定
 
  espconn_connect(&tcpclient);// 连接 tcp 服务器
 
  }
 
remote_ip 可以选择自动分配或固定 IP,远程端口 remote_port 根据上位机选择,通常选择比较大的,小的端口通常被上位机一些系统服务占据。
 

 

2 数据采集方案
根据充电桩电能表协议,需要采集的数据有变量数据、电能量数据、最大需量及发生时间数据、时间记录数据。
 
根据采集频率和是否需要实时显示,将数据分为两类,分别采用不同的方案采集。
 
第一类数据:电能量数据、最大需量及发生时间数据、时间记录数据,比如:A 相电压失压总次数和时间。此类数据非常多,并且是不需要实时显示的,采集频率很低,采用方案 A。
 
第二类数据:变量数据,比如:A、B、C 三相电压、电流、功率等,此类数据是需要实时显示的,其采集频率很高。采用方案 B。
 
2.1 采集方案 A
针对非实时更新数据:比如事件记录数据中的某条报文:A 相失压总次数和时间。上位机下发该条查询报文,ESP8266 解析该报文并下发给电能表,电能表响应该报文并回复报文给 ESP8266,ESP8266 解析回复报文再上传给上位机。采集方案 A 如图 4 所示。具体程序流程图如图 5 所示。
 
 
 
2.2 采集方案 B
针对实时更新数据:比如瞬时电压、电流、功率。由 ESP8266 向电能表循环发送 N 条报文,电能表响应每一条报文,ESP8066 解析 N 条报文,得到数据存入自身内存。上位机向 ESP8266 循环下发 N 条查询报文,ESP8266 取出内存中的数据回复上位机。采集方案 B 如图 6 所示。
 
 
具体程序流程图如图 7 所示。
 
2.3 采集方案比较
对比分析方案 A 和方案 B,由于方案 B 中的 ESP8266 与上位机和充电桩的通信是相互独立的,因此在程序上更容易实现。并且由于方案 B 相互间的通信是同时进行的,需要实时更新的数据已经被采集并存放在 ESP8266 内
 
存中,上位机在下发查询报文时,ESP8266 只需取出内存中的数据直接回复即可,无需将 MODBUSTCP 报文格式转化为 DLT6452007 报文格式,再下发到充电桩,最后才将充电桩回复的数据上传到上位机。综上所述,方案 B 的采集效率更高,因此数据的实时性也得到了提高。
 
两套流程交替运行,如果上位机准备查询的是非实时数据,此时 ESP8266 通过判断上位机下发的查询报文,停止 A 方案,开始 B 方案。由于非实时数据采集频率通常非常低,所以待一条非实时数据的报文得到正常响应后,重新开始 A 方案,停止 B 方案。
 
3 结论
本文基于 ESP8266 设计的无线数据采集器,成功地实现了充电桩的数据采集,针对不同数据类型使用不同采集方案提高了充电桩的数据采集效率。与传统的充电桩有线数据采集器相比,该采集器具有方便安装、易于维护、灵活扩展等特点。该采集器具有一定的通用性,通过修改配置文件并增加所需通信协议,即可以作为通用的数据采集产品。(王建,李涛,刘瑞)