王旭东
充电桩压测方案
海镕多联机空调485控制器方案说明
电能平台压测程序使用说明
中台软网关解析规则整理
星纵物联LoraWAN网关方案整理
国网376.1协议整理
云快充协议对接方案
科德4G水表离线问题排查
海镕3种空调平台与中台对接参数文档
电信AEP平台NB设备接入教程
牧原项目ARCM500蓝牙调试程序对接文档
中台-Expasion架构设计调整
中台-蓝牙调试小程序对接说明
ADW300-IOT报警新版参数设置(增加DO1和DO2联动)
迈格瑞能MPS微电网混合逆变器整理
微电网混合逆变器参数下发整理
云南交投充电桩协议对接方案
AAC系列空调控制器整理
云快充2.1协议对接方案(新增V2G协议)
本文档使用 MrDoc 发布
-
+
首页
中台-Expasion架构设计调整
# 1. 模块说明 ## 对时 有时Expansion程序和中台不在一台服务器上,此时需要根据中台服务器的时间,对Expansion所在服务器时间进行校准。 TimeService应当包含以下内容: ```java public class TimeService { private static long TIME_OFFSET = 0l; /** * 发送对时报文 */ sendNtp(); /** * 处理对时报文,按照NTP协议计算出精确时间和时钟偏差,然后写入TIME_OFFSET */ handleNtp(); /** * 生成系统当前时间,并加上TIME_OFFSET */ current(); } ``` 在启动时需要先执行对时,再进行数据上报。 **此功能要可配置是否启用,不启用对时的话时钟偏差始终为0。** 通过中台的对时协议,每小时和服务端进行一次对时,算出本地精确时间CURRENT_TIME。 ``` CURRENT_TIME = (serverRecvTime + serverSendTime + deviceRecvTime - deviceSendTime) / 2 ``` 不管Linux还是Windows系统,都不方便直接将精确时间写入时钟,所以我们要算出时钟偏差。 ``` TIME_OFFSET = CURRENT_TIME - deviceRecvTime ``` 将这个时钟偏差记录在一个内存常量中,随时需要使用,要避免并发冲突。 封装一个TimeService类用于生成当前时间戳,时钟偏差常量可以放在这个类中,每次生成时间后,要对这个时间进行校准后才可以使用。 ``` 实际时间 = System.currentTimeMillis() + TIME_OFFSET ``` ## 主动抄表 定义一个定时任务线程池,用来执行主动抄表的定时任务,可以为每个下行抄表设置不同的循环间隔。 抄表任务支持定义不同的数据来源,例如:API、OPC UA等 获取到数据后,转为为标准格式进缓存。 ## 被动接收 定义MQTT等消息队列的消费者,收到数据后,转为为标准格式进缓存。 ## 数据缓存 数据缓存是一个先进先出的数据队列池,每个下行抄表对应一个数据队列,队列中每条数据都有一个唯一的雪花ID。 每个数据队列持有一个或多个上行线程,各上行线程定时从数据队列的头部取1条数据,将其格式化为上行协议所需报文并发出,成功后将上行线程的指针向后移一位,指向下一个雪花ID,失败的话结束本次循环,进入等待。 上行线程每次成功发出报文后,需要检查队列中是否还有数据,如果有的话,需要继续取出数据并转为上行报文发出,直到指针之后无数据。 数据缓存中有一个定时任务线程,定时清理数据队列中的数据,清理的逻辑是:检测某个数据队列中持有的上行线程,如果如果有数据在所有上行线程的指针前面,就清理这部分数据。 消息队列需要实现持久化机制,定时把数据持久化到数据库中,可以集成Redis,把数据队列和线程指针都持久化到磁盘。 ## 报警模块 ## 命令下发 ## 日志存储 抄表获取到的数据和上传的数据,存入数据库的日志表,按天分表,数据保存30天。 需要具备分页查询功能。
王旭东
2025年2月6日 11:12
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码