MyEMS开源能源管理系统核心代码解读006
**本期解读: **
虚拟表计算方法:myems/myems-normalization/virtualmeter.py
源代码请点击https://gitee.com/myems/myems/blob/master/myems-normalization/virtualmeter.py?sessionid=-677049640
这段代码是一个用于计算虚拟表每小时能耗的Python脚本,主要用于能源管理系统。它通过数据库查询、数据处理和数学计算来实现这一功能。下面是对代码的详细解析:
** 总体流程 **
查询所有虚拟表:从系统数据库中获取所有虚拟表的信息。
并行处理:使用多进程池并行处理每个虚拟表的计算任务。
**calculate_hourly 函数 **
这个函数是主要的入口点,它执行以下步骤:
连接数据库:尝试连接到系统数据库。如果连接失败,则重试。
查询虚拟表列表:从系统数据库中查询所有虚拟表的ID、名称和计算公式。
随机化处理顺序:为了避免每次都按照相同的顺序处理,将虚拟表列表随机打乱。
并行计算:创建一个进程池,将每个虚拟表的计算任务分配给不同的进程并行处理。
错误处理:记录任何在计算过程中出现的错误。
休眠与重试:完成一轮计算后,程序休眠一段时间后再次执行。
worker 函数
这个函数负责计算单个虚拟表的能耗。它执行以下步骤:
连接数据库:连接到能源数据库。
获取时间范围:确定需要计算的时间范围。
解析表达式:解析虚拟表的计算公式,并获取相关的物理表、虚拟表和离线表。
查询能耗数据:从能源数据库中查询相关电表在指定时间范围内的能耗数据。
计算虚拟表能耗:使用SymPy库解析和计算虚拟表的能耗公式。
保存结果:将计算结果保存到能源数据库的虚拟表能耗表中。
关键技术点
• 数据库操作:使用mysql.connector进行数据库连接和操作。
• 多进程并行处理:使用multiprocessing.Pool实现并行计算,提高效率。
• 数学表达式解析:使用sympy.sympify解析和计算数学表达式。
• 时间处理:使用datetime模块处理时间和日期。
总结
这段代码是一个复杂的数据处理脚本,它结合了数据库操作、多进程并行计算和数学表达式解析,用于实时计算和更新虚拟表的能耗数据。通过这种方式,能源管理系统可以有效地监控和分析能耗数据,从而实现更精准的能源管理和优化。
MyEMS开源能源管理系统适用于建筑、工厂、商场、医院、园区的电、水、气等能源数据采集、分析、报表,还有光伏、储能、充电桩、微电网、设备控制、故障诊断、工单管理、人工智能优化等可选功能。资深专业团队开发维护,保障长期支持。用开源助力企业集团、产业园区、能源运营商低碳发展!
MyEMS开源能源管理系统核心代码解读006的更多相关文章
- 优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案
简介 本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发 ...
- Hybrid----优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案-备
本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge. 它优雅地实现了在使用UIWebView时JS与ios 的ObjC nativecode之间的互调,支持消息发送.接 ...
- itest 开源测试管理项目中封装的下拉列表小组件:实现下拉列表使用者前后端0行代码
导读: 主要从4个方面来阐述,1:背景:2:思路:3:代码实现:4:使用 一:封装背景 像easy ui 之类的纯前端组件,也有下拉列表组件,但是使用的时候,每个下拉列表,要配一个URL ...
- 腾讯开源的 Paxos库 PhxPaxos 代码解读---Accept阶段(一)
腾讯开源的 Paxos库 PhxPaxos 代码解读---Accept阶段(一) 在看Accept阶段代码之前, 我们再回想一下 Basic Paxos算法; 1. Basic Paxos 算法是为 ...
- Android MVP模式 谷歌官方代码解读
Google官方MVP Sample代码解读 关于Android程序的构架, 当前(2016.10)最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo ...
- msysGit管理GitHub代码
msysGit管理GitHub代码 代码的管理,在日常开发中是很重要的环节,程序员的修炼三部曲——版本控制,单元测试,项目自动化. 本篇就简单的说说通过msysGit来管理GitHub中的代码,实 ...
- C/C++ 开源库及示例代码
C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...
- Google免费的SVN服务器管理VS2010代码
原文:Google免费的SVN服务器管理VS2010代码 前言 Google免费为我们提供了代码管理的SVN服务器.首先我这里用的Win7 64的电脑系统,用VS2010进行的代码开发.这里管理代码需 ...
- spring JdbcTemplate 在itest 开源测试管理项目中的浅层(5个使用场景)封装
导读: 主要从4个方面来阐述,1:背景:2:思路:3:代码实现:4:使用 一:封装背景, 在做项目的时候,用的JPA ,有些复杂查询,比如报表用原生的JdbcTemplate ,很不方便;传参也不方便 ...
- weex官方demo weex-hackernews代码解读(上)
一.介绍 weex 是阿里出品的一个类似RN的框架,可以使用前端技术来开发移动应用,实现一份代码支持H5,IOS和Android.最新版本的weex已默认将vue.js作为前端框架,而weex-hac ...
随机推荐
- 中国象棋小游戏(C版)
中国象棋小游戏(C版) 说明: #include<graphics.h> 一个在 C/C++ 中用于图形编程的头文件,主要用于创建和操作图形界面.具有绘制图形.设置颜色.鼠标和键盘时间处理 ...
- Spring注解之@Autowired:Setter 方法上使用@Autowired注解
可以在 JavaBean中的 setter 方法中使用 @Autowired 注解.当 Spring遇到一个在 setter 方法中使用的 @Autowired 注解时,它会在方法中按照类型自动装配参 ...
- 如何用Leangoo破解需求隔离与频繁变更的协作困局?
作为一位经历过"需求文档满天飞.系统各自为战"的研发负责人,我深知团队在需求频繁变更时面临的痛点--信息割裂导致响应滞后.优先级混乱引发返工.协作低效拖慢交付节奏. 近期,我深度测 ...
- ArkUI-X构建Android平台AAR及使用
本教程主要讲述如何利用ArkUI-X SDK完成Android AAR开发,实现基于ArkTS的声明式开发范式在android平台显示.包括: 1.跨平台Library工程开发介绍 2.AAR在And ...
- 低版本.net ueditor结合cshtml getshell
ueditor版本.net 1.3.x,不是.net 1.4.3的getshell 上传页面是这样的需要开启flash,添加照片抓包.先正常上传 改后缀提示不允许的文件类型 注意到fileNameFo ...
- Luogu P8479 「GLR-R3」谷雨
题传 upd on 2023.10.03 补充了代码以及一些实现细节. 自己写的关于这类剖分方法的 \(blog\) 题意简述 称一条链和与其有连边的点 构成的点集 为 "毛毛虫" ...
- C# 遍历Enum( 枚举)
Type enumType = typeof(Domain.Models.Entitys.PermissionEntity.PermissionTypeEnum); ...
- 窗口小部件基础编写V1.0----没有Service
实现窗口小部件,访问手机储存卡指定目录中的图片文件,然后随机选择一张在窗口的小部件中显示.图片路径使用List存储,适合初级Android学习者参考.本系统无服务,不能保证进程长存. 新建一个空的布局 ...
- macOS Monterey系统安装 CocoaPods详细教程
更新ruby 系统默认的应该是老旧的 v2.6.10,我们要更新到3.x以上,不然可能会和其它较新插件(如3.x的gem)冲突. 安装rbenv brew install rbenv # 对于 mac ...
- Educational Codeforces Round 96 ABCDE 题解(详解)
A. Number of Apartments 题意:用3.5.7凑数,若能凑出给出方案,不能则输出-1. 思路:观察发现除了1 2 4凑不到以外其他都凑得到.那么关于方案的话,既然其他数都凑得到,我 ...