|

制作一款WIFI版的485接口数据采集模块

这个项目是因为工作需要,正好手头有一些 ESP8266 的芯片,所以就提前画了一块采集卡来做验证。采集卡做好后测试效果不错,这确实给前端工程师长了脸,谁说前端工程师不能会硬件开发?

首先介绍一下背景。

年初我做技术顾问的公司有一个项目需要采集485接口电表的数据,主要涉及到智能电表中电流电压等基本值,以及 电表07规约 中规定的一些必须值,目的是对一个工厂的设备用电情况进行统计分析,进而制定出生产计划,实现节能节省开支的目的。

在现有的架构中,电表的485接口全部是挂在串口服务器的485总线上的,是有线连接(这点完全可以理解,有线不管怎么说都比无线更靠谱)。串口服务通过配置,再和远程的服务器相连,也就是云端的采集服务,串口服务器和云端的服务器是一个TCP长连接,保持Socket通道,由云端统一对 串口服务器们 进行调度,需要采集那个电表的数据时,就让对应的串口服务器保持激活,在一个个去读电表的数据。

这个方案本身是可行的,但是比较臃肿,而且并没有体现出云端的价值,云端服务器虽然是服务器,但实际上干的是客户端的工作,这多少有点本末倒置。在新的改进方案中,计划让服务器做接口的角色,不在对串口服务器进行轮训调度,串口服务器的调度工作放到本地运行,所以出现两种可选方案:

  • 保持串口服务器不变,本地增加一台主机或者小型服务器,负责之前的调度工作,然后将采集到的数据上传给云端接口;
  • 取消串口服务器,改由一块WIFI采集卡进行采集,并把数据直接上报给云端接口。

我负责验证的就是第二种方案。与第一种方案相比,直接通过WIFI模块采集可以省去串口服务器,不用再经过调度器,相当于也节省了调度单元,物理成本会大大节省,并且结构清晰,拓扑图明朗,这是优点。当然也有部分确定,就是需要在现场布置WIFI热点,大功率设备在运行时可能会影响网络的信号,不过这是后话。

以上就是项目的简介。需要实现的部分其实也相对简单:画图+焊接+测试。

功能

在这个采集卡上,需要实现本地调度,所以就不需要再部署调度器了,本地调度的参数会定期到云端获取,采集卡与服务器通过TCP建立一个MQTT连接,所以可以实时双向通信;有序485数据的数据占用带宽比较小,所以使用MQTT就可以在服务器带宽一定的情况下连接更多的设备。

对于采集卡而言,需要做的事情就非常明确了:

  • 自动定时获取调度配置参数,根据参数定时采集电表数据;
  • 在网络连通的情况下,将采集到的数据通过MQTT实时上报到服务器;
  • 网络不畅通的情况下,将采集到的数据保存在卡上Flash存储器中,等下次网络连通后再依次上报;
  • 自动OTA升级,及时更新固件;

在老版的方案中,串口服务器担任的是透传角色,调度等任务需要交给云端服务器去干,对服务器而言就大材小用了。精简调整后的架构,让云端服务器的工作更单纯,所以能够节省大量等待时间,同时也可以 “调度” 更多的设备。

在实现方案中,采集卡只是 “卡” 的部分,其实需要设计一块底板,底板上集成电源模块和485接口,这样做的目的是尽可能不去改变现有产品的布线,同时又可以保证灵活性。

设计

依然使用 Eagle PCB 进行全部设计。

总结

由于工作关系,具体的实现细节,以及原理图和源码就不公开了,总之实现起来不是很难,功能也相对容易,另外我主要是做前期验证和编程,真正实施时的卡板是由硬件工程师去绘制的,本篇博文也仅做记录和方案验证。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注