MyEMS开源能源管理系统适用于建筑、工厂、商场、医院、园区的电、水、气等能源数据采集、分析、报表,还有光伏、储能、充电桩、微电网、设备控制、故障诊断、工单管理、人工智能优化等可选功能。资深专业团队开发维护,保障长期支持。用开源助力企业集团、产业园区、能源运营商低碳发展! 官网:myems.io MyEMS开源社区版下载:gitee.com/myems/myems 本期解读: 虚拟点计算方法:myems/myems-normalization/virtualpoint.py 源代码链接:gitee.com/myems/myems… 这段代码是一个用于计算和更新虚拟点(virtual points)值的Python脚本。虚拟点是指那些不直接对应于物理传感器读数的数据点,而是通过计算或转换其他数据点得到的。这个脚本的核心功能包括从数据库查询虚拟点信息、并行处理每个虚拟点的计算,并将计算结果保存回数据库。下面是对代码的详细解析:
概要
1.连接数据库: 脚本首先尝试连接到系统数据库(cnx_system_db),以获取虚拟点的列表。 2.查询虚拟点: 从系统数据库中查询所有标记为虚拟的点(is_virtual = 1)。 3.多进程处理: 使用Python的multiprocessing库创建进程池,以并行方式处理每个虚拟点的计算。 4.虚拟点计算: 对于每个虚拟点,脚本执行以下步骤:
- 连接到历史数据库(cnx_historical_db)。
- 获取虚拟点的起始和结束时间。
- 解析虚拟点的表达式和替换规则。
- 从系统数据库查询相关点的类型。
- 从历史数据库查询相关点的值。
- 使用SymPy库计算虚拟点的值。
- 将计算结果保存回历史数据库。
解析
1.数据库连接与错误处理: 脚本使用mysql.connector连接MySQL数据库,并在连接失败时进行重试。 2.查询虚拟点: 通过SQL查询获取所有虚拟点的信息,包括ID、名称、数据源ID、对象类型、高低限和地址。 3.多进程并行计算:
- 使用Pool创建进程池,并行调用worker函数处理每个虚拟点。
- worker函数负责单个虚拟点的计算逻辑。
4.虚拟点计算流程:
- 步骤1: 确定计算的起始和结束时间。
- 步骤2: 解析虚拟点的表达式和替换规则。
- 步骤3: 查询相关点的类型。
- 步骤4: 查询相关点在指定时间范围内的值。
- 步骤5: 使用SymPy计算表达式的值。
5.结果保存: 将计算得到的虚拟点值保存回历史数据库,并更新最新值表。
代码特点
- 健壮性: 脚本包含错误处理和数据库重连机制,确保稳定运行。
- 效率: 通过多进程并行处理提高计算效率。
- 灵活性: 支持通过配置文件(config模块)调整数据库连接和其他参数。
- 可扩展性: 代码结构清晰,易于扩展和维护。
注意事项
- 数据库配置: 需要正确配置数据库连接信息。
- 依赖库: 脚本依赖于mysql.connector和sympy等Python库。
- 并发控制: 在高并发环境下,需要注意数据库的连接数和性能问题。
- 错误处理: 脚本中的错误处理主要用于日志记录和重试机制,实际应用中可能需要更详细的异常处理策略。