src.model.data.define.energy_def 源代码

# 数据标识DI(完整定义)
from typing import List
from ....model.types.data_type import DataItem, DataFormat
from . import DIMap

energy_di_list = [
    0x00800000,
    0x00810000,
    0x00820000,
    0x00830000,
    0x00840000,
    0x00850000,
    0x00860000,
    0x00150000,
    0x00160000,
    0x00170000,
    0x00180000,
    0x00190000,
    0x001A0000,
    0x001B0000,
    0x001C0000,
    0x001D0000,
    0x001E0000,
    0x00940000,
    0x00950000,
    0x00960000,
    0x00970000,
    0x00980000,
    0x00990000,
    0x009A0000,
    0x00290000,
    0x002A0000,
    0x002B0000,
    0x002C0000,
    0x002D0000,
    0x002E0000,
    0x002F0000,
    0x00300000,
    0x00310000,
    0x00320000,
    0x00A80000,
    0x00A90000,
    0x00AA0000,
    0x00AB0000,
    0x00AC0000,
    0x00AD0000,
    0x00AE0000,
    0x003D0000,
    0x003E0000,
    0x003F0000,
    0x00400000,
    0x00410000,
    0x00420000,
    0x00430000,
    0x00440000,
    0x00450000,
    0x00460000,
    0x00BC0000,
    0x00BD0000,
    0x00BE0000,
    0x00BF0000,
    0x00C00000,
    0x00C10000,
    0x00C20000,
]


[文档] def init_energy_def(energy_types: List[DataItem]): """初始化电能定义 Args: energy_types: 电能类型列表,包含正向有功电能、反向有功电能等类型 """ di3 = 0 # 数据类型 di2 = 0 # 电能类型 di1 = 0 # 同一类型电能里的不同项 di0 = 0 # 结算日 for i in range(64): for j in range(13): if j == 0: name_prefix = "(当前)" else: name_prefix = f"(上{j}结算日)" # 组合有功费率电能 DIMap[(di3 << 24) | (di2 << 16) | ((di1 + i) << 8) | (di0 + j)] = DataItem( di=(di3 << 24) | (di2 << 16) | ((di1 + i) << 8) | (di0 + j), name=name_prefix + energy_types[i].name, data_format=DataFormat.XXXXXX_XX.value, unit=energy_types[i].unit, ) # 正向有功费率电能 DIMap[(di3 << 24) | ((di2 + 1) << 16) | ((di1 + i) << 8) | (di0 + j)] = ( DataItem( di=(di3 << 24) | ((di2 + 1) << 16) | ((di1 + i) << 8) | (di0 + j), name=name_prefix + energy_types[64 + i].name, data_format=DataFormat.XXXXXX_XX.value, unit=energy_types[64 + i].unit, ) ) # 反向有功费率电能 DIMap[(di3 << 24) | ((di2 + 2) << 16) | ((di1 + i) << 8) | (di0 + j)] = ( DataItem( di=(di3 << 24) | ((di2 + 2) << 16) | ((di1 + i) << 8) | (di0 + j), name=name_prefix + energy_types[64 * 2 + i].name, data_format=DataFormat.XXXXXX_XX.value, unit=energy_types[64 * 2 + i].unit, ) ) # 组合无功1费率电能 DIMap[(di3 << 24) | ((di2 + 3) << 16) | ((di1 + i) << 8) | (di0 + j)] = ( DataItem( di=(di3 << 24) | ((di2 + 3) << 16) | ((di1 + i) << 8) | (di0 + j), name=name_prefix + energy_types[64 * 3 + i].name, data_format=DataFormat.XXXXXX_XX.value, unit=energy_types[64 * 3 + i].unit, ) ) # 组合无功2费率电能地址 DIMap[(di3 << 24) | ((di2 + 4) << 16) | ((di1 + i) << 8) | (di0 + j)] = ( DataItem( di=(di3 << 24) | ((di2 + 4) << 16) | ((di1 + i) << 8) | (di0 + j), name=name_prefix + energy_types[64 * 4 + i].name, data_format=DataFormat.XXXXXX_XX.value, unit=energy_types[64 * 4 + i].unit, ) ) # 第一象限无功电能 DIMap[(di3 << 24) | ((di2 + 5) << 16) | ((di1 + i) << 8) | (di0 + j)] = ( DataItem( di=(di3 << 24) | ((di2 + 5) << 16) | ((di1 + i) << 8) | (di0 + j), name=name_prefix + energy_types[64 * 5 + i].name, data_format=DataFormat.XXXXXX_XX.value, unit=energy_types[64 * 5 + i].unit, ) ) # 第二象限无功电能 DIMap[(di3 << 24) | ((di2 + 6) << 16) | ((di1 + i) << 8) | (di0 + j)] = ( DataItem( di=(di3 << 24) | ((di2 + 6) << 16) | ((di1 + i) << 8) | (di0 + j), name=name_prefix + energy_types[64 * 6 + i].name, data_format=DataFormat.XXXXXX_XX.value, unit=energy_types[64 * 6 + i].unit, ) ) # 第三象限无功电能 DIMap[(di3 << 24) | ((di2 + 7) << 16) | ((di1 + i) << 8) | (di0 + j)] = ( DataItem( di=(di3 << 24) | ((di2 + 7) << 16) | ((di1 + i) << 8) | (di0 + j), name=name_prefix + energy_types[64 * 7 + i].name, data_format=DataFormat.XXXXXX_XX.value, unit=energy_types[64 * 7 + i].unit, ) ) # 第四象限无功电能 DIMap[(di3 << 24) | ((di2 + 8) << 16) | ((di1 + i) << 8) | (di0 + j)] = ( DataItem( di=(di3 << 24) | ((di2 + 8) << 16) | ((di1 + i) << 8) | (di0 + j), name=name_prefix + energy_types[64 * 8 + i].name, data_format=DataFormat.XXXXXX_XX.value, unit=energy_types[64 * 8 + i].unit, ) ) # 正向视在电能 DIMap[(di3 << 24) | ((di2 + 9) << 16) | ((di1 + i) << 8) | (di0 + j)] = ( DataItem( di=(di3 << 24) | ((di2 + 9) << 16) | ((di1 + i) << 8) | (di0 + j), name=name_prefix + energy_types[64 * 9 + i].name, data_format=DataFormat.XXXXXX_XX.value, unit=energy_types[64 * 9 + i].unit, ) ) # 反向视在电能 DIMap[(di3 << 24) | ((di2 + 10) << 16) | ((di1 + i) << 8) | (di0 + j)] = ( DataItem( di=(di3 << 24) | ((di2 + 10) << 16) | ((di1 + i) << 8) | (di0 + j), name=name_prefix + energy_types[64 * 10 + i].name, data_format=DataFormat.XXXXXX_XX.value, unit=energy_types[64 * 10 + i].unit, ) ) # 最后几个数据特殊处理 for k in range(len(energy_di_list)): value = (energy_di_list[k] & 0xFFFFFF00) | ( di0 + j ) # 提取energyDiList中的前24位,然后添加结算日信息(最后8位) DIMap[value] = DataItem( di=value, name=name_prefix + energy_types[64 * 11 + k].name, data_format=DataFormat.XXXXXX_XX.value, unit=energy_types[64 * 11 + k].unit, )