最近要配合MES采集和控制数控设备,又不想把这功能集成在MES中,另外也是为了提高扩展性,于是就用PowerDesigner设计了系统结构图,简单画了一下类图,经过初步研究,觉得可行,就动手。
系统组成部分:
1、设备管理服务,管理系统中的设备数据,若未在此服务中注册的设备,消息调度服务将丢弃消息;当终端采集程序有更新,将通过MQ下发更新消息,终端设备自动更新程序并重启应用新的程序。此服务订阅
2、消息调度服务,所有设备的消息均发送到此服务,数据接入接口采用插件式方式接入,目前支持MQTT和MQ两种协议,内置一个MQTT服务,向内部应用服务接收到设备的消息,可扩展应用,例如历史记录、大屏展示两个微服务,各自独立,互不干扰,可将来扩展应用。
设备消息进入到调度服务后,经过简单处理和过滤,在内部MQTT服务器发送标准格式的消息,其Topic定义为 DeviceMessage/{DeviceType}/{DeviceID},对于不同的具体应用,可以定制模拟接收不同范围的设备数据,例如对某一中设备类型D001,则接收DeviceMessage/D001/+这样就可以接收此设备类型下的所有数据。
调度器内部开启了一个设备状态缓存器,当超过10秒(可配置)未收到设备上传的消息,则判定设备离线。当设备状态发生变化,将通过调度器发送设备状态变化的消息。缓存使用框架自带的CYBMemoryCache类实现,例如 cache.Set(deviceId,status,TimeSpan.FromSeconds(10),(key,value,reason)=>{//在此发送超时消息}),其中key是deviceId,value是status,reason是该key从缓存中移除的原因,包括使用代码主动移除,被替换,超时移除。原来框架使用的是微软自带的MemoryCache类,但是使用起来比较复杂,且超时消息是被动触发,使用也复杂,因此自己写了个这么类。
3、历史记录服务,所有接入的设备消息,自动记录到Mongo数据库中,且提供API接口查询历史记录。设备

本文介绍了一种基于PowerDesigner设计的IOT系统结构,主要包括设备管理服务、消息调度服务、历史记录服务、大屏展示服务等部分。系统支持MQTT、MQ等多种通讯协议,并通过中转服务器进行数据转换与调度。
最低0.47元/天 解锁文章
171万+

被折叠的 条评论
为什么被折叠?



