基于微服务架构的简单的IOT系统

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近要配合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接口查询历史记录。设备数据分成每月一个表记录。

4、大屏展示服务,为适应不同的大屏展示需求,不同类型的设备或者单独设备,可定制组织大屏展示数据格式,且支持热插拔的插件;前端通过WebApi向此服务请求数据,后端采用内存缓存大屏数据,大大降低高频率刷新数据的压力,但对于内存的需求就会相应增加,对于设备数量多的企业应用,需要配备更多的内存的服务器。

在应用程序目录下,放置一个Receiver目录,把要处理大屏的接收器文件放到此目录中,并使用FileSystemWatcher监视文件变化,实现热插拔接收器,不过,这个文件监视变化占用的系统资源有点多,且不太灵光,还未能很好解决,先用着。接收器必须实现接口IMessageReceiver,接收器为每个设备开启一个IContainer容器,把大屏需要展示的数据存放到此容器中,当前端调用获取大屏数据时候,实际上是把容器的数据发送出去,此容器是具有一定处理逻辑的,根据大屏展示的实际需求来定制开发,例如汇总一定时间周期的数据。

5、系统管理服务,整个IOT系统的协调和调度,以支持微服务之间的通讯。

6、基础数据服务,对于企业应用,注册公司名称以及参与到系统中的员工等信息。

7、中台调度服务(可选),当应用增多的时候,可实现微服务负载均衡。

系统设计主要技术:

Asp.net Core,RabbitMQ,MQTT,WebSocket,WebApi,MongoDB,Redis,SSO,OAuth,EChart,ModbusTCP

使用组件:

.net5.0,MQTTnet,RabbitMQ.Client

主要解决问题:

1、要能够接收不同的外部通讯协议,构建一个转换数据的工具类,此功能分两部分,一部分是基于树莓派的数据接收和发送功能,这个是系统自带的部分,可以支持基于net或者485的接入方式,更加灵活;树莓派中的程序,能够通过管理微服务下发程序,实现即时更新功能;另外一部分是在中转微服务中,这样可以支持MQTT以外的通讯,例如http,socket等。

2、建立一个中转服务器,其内部使用MQTT作为中转器,且支持WebSocket,可以直接提供给页面处理展示数据,此服务不能参杂任何个性化的功能,例如报警等。此服务主要是接收经过转换后的标准数据格式,下发设备控制指令,转发通知、警报等消息

3、构建基于Mongo的DAL层,实现框架的IDAL接口,方便接入现有系统开发框架。

4、构建中转消息的发送和接收组件,主要功能是为管理微服务、日志微服务、大屏微服务等提供数据接入基础。

5、构建设备数据处理的基类,用于针对性设备的报警、计算等功能,且以插件的形式出现。在管理微服务中设计一个热插拔功能,能够自动加载或者卸载插件。

6、与MES互相通讯的WebApi接口定义。此方法可以在现有开发框架上定义互相的API接口即可。

数据流大致说明

设备(PLC)-数据转换-中转-[日志微服务、管理微服务-(设备类型、设备、程序下发、插件管理、报警管理)、大屏微服务-(插件管理,数据计算)]

后台管理示例界面:

一下是一个简单的数据采集测试界面,后端是一个使用PLC采集两个温度计

http://gzxunhang.f3322.net:8084/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值