当前位置: 首页 > article >正文

EMS(energy managment system)从0到1

EMS从0到1

    • 写在前面
    • 准备
    • 目录&导航
    • 设计
      • 是什么?
      • 做什么?
      • 怎么做?
      • 我准备怎么做
    • 写在结尾

写在前面

最近几年因为新能源产业的迅速升温,不仅导致我国能源结构的重新分配,也导致新能源相关产业蓬勃发展。我能接触到的就是EMS( energy managment system)能量管理系统,这篇文章以及后续几篇文章,我会向大家讲解作为一个C#开发工程师从0到1开发EMS的全过程,请注意听讲。

准备

  1. 开发环境:作为一个C#开发工程师,我选择使用VS作为我的开发工具。如果你使用的是VS code,rider,MomoDevelop(mac)也不影响你阅读后续内容。
  2. 技术栈:面向对象的设计思路,C#基础知识,WebAPI基础知识,核心通讯协议(Modbus,Mqtt),存储介质(mysql,sqlite,mongoDB)。ps:你应该都会吧~
  3. 管理工具:github。ps:在讲解项目的过程中,我也会穿插的讲解一些github的使用技巧和管理模式

目录&导航

这里会放我后续文章的的导航,敬请期待!
入门篇: 万事开头难
实战篇1: 采集服务
实战篇2: 清洗服务
实战篇3: 存储服务

设计

是什么?

EMS(Energy Management System,能源管理系统)是一种用于监控、控制和优化建筑物或工业设施中能源使用的软件系统。它通过集成各种硬件设备和传感器来收集数据,并利用这些数据进行分析,以帮助用户理解能源使用模式,识别节能机会,最终实现降低能耗和成本的目标。

做什么?

  1. 实时监控与数据采集
    能耗监测:实时跟踪电力、水、天然气等资源的消耗情况。
    环境参数监测:监控温度、湿度、光照强度等环境因素,确保舒适度的同时优化能源使用。
    多源数据整合:能够从不同类型的传感器、仪表和其他控制系统获取数据。
  2. 数据分析与可视化
    历史数据分析:对过去的数据进行深度分析,找出趋势和异常。
    可视化报表:提供直观的图表和报告,使管理者可以轻松理解复杂的能源使用信息。
    预测性分析:基于历史数据预测未来的能源需求,提前做好规划。
  3. 自动化控制与优化
    自动调节:根据预设规则或算法自动调整设备运行状态,如空调温度、照明亮度等。
    负载管理:智能分配电力负荷,避免高峰时段过载,减少电费开支。
    故障检测与诊断:及时发现设备异常并预警,防止因设备问题导致的能源浪费。
  4. 安全性和可靠性
    数据保护:确保所有传输的数据都经过加密处理,保障信息安全。
    高可用性架构:构建冗余和容错机制,保证系统的持续稳定运行。
    硬件兼容性:确保现有设备可以与新系统无缝对接,或者确定需要更新哪些硬件。

怎么做?

  1. 项目:考虑到我的技术栈和硬件兼容性,决定使用WebAPI作为启动项,如果你对跨平台的需求不高也可以使用WPF,特别是现在资源过剩的情况下,使用windows系统来作为EMS的运行环境,不管在成本上还是在性能上都是可行的。
  2. 架构:这里因为我们准备使用WebAPI作为启动项,所以使用的是MVC软件架构,在此基础上我们会借鉴一些微服务的设计思路,用一个或多个线程来作为服务,使用资源的推送和回调来作为服务之间的桥梁,以API作为对外的窗口,这样服务之前就能做到最大化的解耦。同时
  3. 服务:根据“EMS做什么?”中的功能,我大致将EMS分为如下几个服务:数据采集服务,数据清洗服务,数据存储服务,策略服务。

我准备怎么做

我做项目风格比较偏敏捷开发,我会先完成项目的主要部分,同时我也不会考虑太多安全性,可维护性,可拓展性,所以一般第一版项目完成后,会比较粗糙,但是我会在项目期限内完成对项目的多次迭代和优化,来不断靠近我的目标。所以这个系列的文章可能不适合所有人,如果你也认同我的观念或者你在开发中也是这样做的,我想这会是一次不错的阅读体验。

ps:上述的内容只是阐述了我对EMS的大概理解和设计,不同人对同一个事物会有自己的理解,所以针对EMS你如果有跟我不一样的理解和设计欢迎讨论

写在结尾

作为EMS系列的第一篇文章,我希望能跟读者达成一些共识,比如开发习惯和设计思路,这样就不会浪费大家的时间了,同时也希望这个系列的文章不会烂尾,天道酬勤,与君共勉!


http://www.kler.cn/a/452512.html

相关文章:

  • flink-1.16 table sql 消费 kafka 数据,指定时间戳位置消费数据报错:Invalid negative offset 问题解决
  • 低代码开发中 DDD 领域驱动的页面权限控制
  • Websocket客户端从Openai Realtime api Sever只收到部分数据问题分析
  • Logback日志框架中的继承机制详解
  • 【踩坑记录】C编程变量未初始化导致的程序异常
  • dify的ChatFlow自定义上传图片并通过HTTP请求到SpringBoot后端
  • 软考架构师笔记-计算机系统组成-1
  • 10. zynq应用开发--camke编译
  • 【每日学点鸿蒙知识】Charles抓包、lock文件处理、WebView组件、NFC相关、CallMethod失败等
  • Spring源码_05_IOC容器启动细节
  • Oracle 备份与恢复 (Docker部署版)
  • 单机服务和微服务
  • 模型的量化(Quantization)
  • 一篇梳理清楚JavaScript ES6中的Promise
  • [WASAPI]音频API:从Qt MultipleMedia走到WASAPI,相似与不同
  • 钢材缺陷识别分割数据集labelme格式693张4类别
  • leetcode hot100 将有序数组转化为二叉搜索树
  • 微服务: 06-rabbitmq设置延时队列,场景与使用(springboot)
  • 图神经网络_图嵌入_SDNE
  • 【Rust自学】6.4. 简单的控制流-if let
  • 【每日学点鸿蒙知识】指纹识别隐藏背面、数组内部值变化刷新UI、键盘输入类型、跨组件路由、C++20特性支持
  • 智谱BigModel研习社|搭建 AI 搜索引擎 - 使用免费的Web-Search-Pro+脑图Agent智能体
  • Gmsh有限元网格剖分(Python)---点、直线、平面的移动
  • STL 六大组件
  • 私域电商逆袭密码:AI 智能名片小程序与商城系统如何梦幻联动
  • 数据结构--堆的向上调整和向下调整