diff --git a/bin/Release/EES.exe b/bin/Release/EES.exe deleted file mode 100644 index 6208d1e..0000000 Binary files a/bin/Release/EES.exe and /dev/null differ diff --git a/bin/Release/ESS.exe b/bin/Release/ESS.exe new file mode 100644 index 0000000..cfe7f54 Binary files /dev/null and b/bin/Release/ESS.exe differ diff --git a/bin/Release/assets/config/BCU电池簇遥信.txt b/bin/Release/assets/config/BCU电池簇遥信.txt new file mode 100644 index 0000000..a798b1e --- /dev/null +++ b/bin/Release/assets/config/BCU电池簇遥信.txt @@ -0,0 +1,114 @@ +所属通道号 R uint16 1~4 0xA001 +所属BCU号 R uint16 1~40 0xA002 +蓄电池充放电状态 R uint16 "0x11开路 +0x22待机 +0x33充电 +0x44放电" 0xA003 +电池组运行状态 R uint16 "0x11跳机 +0x22待机 +0x33放空 +0x44充满 +0x55预警 +0x66正常" 0xA004 +簇DO1状态 R uint16 1:断开 2:闭合 0xA005 +簇DO2状态 R uint16 1:断开 2:闭合 0xA006 +继电器总正 R uint16 0:断开 1:闭合 2:粘连 0xA007 +继电器总负 R uint16 0:断开 1:闭合 2:粘连 0xA008 +继电器预充 R uint16 0:断开 1:闭合 2:粘连 0xA009 +继电器bmu供电 R uint16 0:断开 1:闭合 2:粘连 0xA00A +整簇总电压过高告警 R uint16 0:正常 1:告警 0xA00B +整簇总电压过低告警 R uint16 0:正常 1:告警 0xA00C +整簇中单体电压过高告警 R uint16 0:正常 1:告警 0xA00D +整簇中单体电压过低告警 R uint16 0:正常 1:告警 0xA00E +整簇中单体电压偏差过大告警 R uint16 0:正常 1:告警 0xA00F +整簇中单体温度偏差过大告警 R uint16 0:正常 1:告警 0xA010 +整簇中单体温度过高告警 R uint16 0:正常 1:告警 0xA011 +整簇中单体温度过低告警 R uint16 0:正常 1:告警 0xA012 +整簇总充电电流过高告警 R uint16 0:正常 1:告警 0xA013 +整簇总放电电流过高告警 R uint16 0:正常 1:告警 0xA014 +整簇总SOC过高告警 R uint16 0:正常 1:告警 0xA015 +整簇总SOC过低告警 R uint16 0:正常 1:告警 0xA016 +高压盒主正接触器粘连告警 R uint16 0:正常 1:告警 0xA017 +高压盒主正接触器不能吸合告警 R uint16 0:正常 1:告警 0xA018 +高压盒主负接触器粘连告警 R uint16 0:正常 1:告警 0xA019 +高压盒主负接触器不能吸合告警 R uint16 0:正常 1:告警 0xA01A +高压盒预充接触器粘连告警 R uint16 0:正常 1:告警 0xA01B +高压盒预充接触器不能吸合告警 R uint16 0:正常 1:告警 0xA01C +预充失败告警 R uint16 0:正常 1:告警 0xA01D +BCU电压检测模块出现问题告警 R uint16 0:正常 1:告警 0xA01E +BCU温度检测模块出现问题告警 R uint16 0:正常 1:告警 0xA01F +BCU电流检测模块出现问题告警 R uint16 0:正常 1:告警 0xA020 +BCU绝缘检测模块出现问题告警 R uint16 0:正常 1:告警 0xA021 +高压盒内总压检测模块出现问题告警 R uint16 0:正常 1:告警 0xA022 +高压盒外总压检测模块出现问题告警 R uint16 0:正常 1:告警 0xA023 +PCS-CAN通信故障告警 R uint16 0:正常 1:告警 0xA024 +高压盒供电电压过高告警 R uint16 0:正常 1:告警 0xA025 +绝缘正极故障告警 R uint16 0:正常 1:告警 0xA026 +绝缘负极故障告警 R uint16 0:正常 1:告警 0xA027 +绝缘中间侧故障告警 R uint16 0:正常 1:告警 0xA028 +绝缘故障告警 R uint16 0:正常 1:告警 0xA029 +BMU中电压采样线开路告警 R uint16 0:正常 1:告警 0xA02A +BMU中NTC采样线短开路告警 R uint16 0:正常 1:告警 0xA02B +BMU中采样芯片故障告警 R uint16 0:正常 1:告警 0xA02C +BMU中电池温度升高过快告警 R uint16 0:正常 1:告警 0xA02D +BMU中电池内部短路告警 R uint16 0:正常 1:告警 0xA02E +BMU充电均衡模块出现故障告警 R uint16 0:正常 1:告警 0xA02F +BMU放电均衡模块出现故障告警 R uint16 0:正常 1:告警 0xA030 +BMU通信故障告警 R uint16 0:正常 1:告警 0xA031 +单体内阻过大告警 R uint16 0:正常 1:告警 0xA032 +单体内阻过小告警 R uint16 0:正常 1:告警 0xA033 +单体内阻阻差过大告警 R uint16 0:正常 1:告警 0xA034 +簇内阻过大告警 R uint16 0:正常 1:告警 0xA035 +簇内阻过小告警 R uint16 0:正常 1:告警 0xA036 +SOC初始化无效告警 R uint16 0:正常 1:告警 0xA037 +充电时soc降低故障告警 R uint16 0:正常 1:告警 0xA038 +放电时soc升高告警 R uint16 0:正常 1:告警 0xA039 +静止时SOC跳变告警 R uint16 0:正常 1:告警 0xA03A +整簇总电压过高保护 R uint16 0:正常 1:保护 0xA03B +整簇总电压过低保护 R uint16 0:正常 1:保护 0xA03C +整簇中单体电压过高保护 R uint16 0:正常 1:保护 0xA03D +整簇中单体电压过低保护 R uint16 0:正常 1:保护 0xA03E +整簇中单体电压偏差过大保护 R uint16 0:正常 1:保护 0xA03F +整簇中单体温度偏差过大保护 R uint16 0:正常 1:保护 0xA040 +整簇中单体温度过高保护 R uint16 0:正常 1:保护 0xA041 +整簇中单体温度过低保护 R uint16 0:正常 1:保护 0xA042 +整簇总充电电流过高保护 R uint16 0:正常 1:保护 0xA043 +整簇总放电电流过高保护 R uint16 0:正常 1:保护 0xA044 +整簇总SOC过高保护 R uint16 0:正常 1:保护 0xA045 +整簇总SOC过低保护 R uint16 0:正常 1:保护 0xA046 +高压盒主正接触器粘连保护 R uint16 0:正常 1:保护 0xA047 +高压盒主正接触器不能吸合保护 R uint16 0:正常 1:保护 0xA048 +高压盒主负接触器粘连保护 R uint16 0:正常 1:保护 0xA049 +高压盒主负接触器不能吸合保护 R uint16 0:正常 1:保护 0xA04A +高压盒预充接触器粘连保护 R uint16 0:正常 1:保护 0xA04B +高压盒预充接触器不能吸合保护 R uint16 0:正常 1:保护 0xA04C +预充失败保护 R uint16 0:正常 1:保护 0xA04D +BCU电压检测模块出现问题保护 R uint16 0:正常 1:保护 0xA04E +BCU温度检测模块出现问题保护 R uint16 0:正常 1:保护 0xA04F +BCU电流检测模块出现问题保护 R uint16 0:正常 1:保护 0xA050 +BCU绝缘检测模块出现问题保护 R uint16 0:正常 1:保护 0xA051 +高压盒内总压检测模块出现问题保护 R uint16 0:正常 1:保护 0xA052 +高压盒外总压检测模块出现问题保护 R uint16 0:正常 1:保护 0xA053 +PCS-CAN通信故障保护 R uint16 0:正常 1:保护 0xA054 +高压盒供电电压过高保护 R uint16 0:正常 1:保护 0xA055 +绝缘正极故障保护 R uint16 0:正常 1:保护 0xA056 +绝缘负极故障保护 R uint16 0:正常 1:保护 0xA057 +绝缘中间侧故障保护 R uint16 0:正常 1:保护 0xA058 +绝缘故障保护 R uint16 0:正常 1:保护 0xA059 +BMU中电压采样线开路保护 R uint16 0:正常 1:保护 0xA05A +BMU中NTC采样线短开路保护 R uint16 0:正常 1:保护 0xA05B +BMU中采样芯片故障保护 R uint16 0:正常 1:保护 0xA05C +BMU中电池温度升高过快保护 R uint16 0:正常 1:保护 0xA05D +BMU中电池内部短路保护 R uint16 0:正常 1:保护 0xA05E +BMU充电均衡模块出现故障保护 R uint16 0:正常 1:保护 0xA05F +BMU放电均衡模块出现故障保护 R uint16 0:正常 1:保护 0xA060 +BMU通信故障保护 R uint16 0:正常 1:保护 0xA061 +单体内阻过大保护 R uint16 0:正常 1:保护 0xA062 +单体内阻过小保护 R uint16 0:正常 1:保护 0xA063 +单体内阻阻差过大保护 R uint16 0:正常 1:保护 0xA064 +簇内阻过大保护 R uint16 0:正常 1:保护 0xA065 +簇内阻过小保护 R uint16 0:正常 1:保护 0xA066 +SOC初始化无效保护 R uint16 0:正常 1:保护 0xA067 +充电时soc降低故障保护 R uint16 0:正常 1:保护 0xA068 +放电时soc升高保护 R uint16 0:正常 1:保护 0xA069 +静止时SOC跳变保护 R uint16 0:正常 1:保护 0xA06A \ No newline at end of file diff --git a/bin/Release/assets/config/BCU电池簇遥测.txt b/bin/Release/assets/config/BCU电池簇遥测.txt new file mode 100644 index 0000000..717d0d5 --- /dev/null +++ b/bin/Release/assets/config/BCU电池簇遥测.txt @@ -0,0 +1,65 @@ +所属通道号 R uint16 1~4 0x0001 +所属BCU号 R uint16 1~40 0x0002 +簇电压 R uint32 0.1V 0x0003 +簇电流 R int32 0.1A 0x0005 +簇温度 R int32 0.1℃ 0x0007 +簇电阻 R uint32 1mΩ 0x0009 +簇SOC R uint16 0.1 0x000B +簇SOH R uint16 0.1 0x000C +簇正绝缘电阻 R uint32 1kΩ 0x000D +簇负绝缘电阻 R uint32 1kΩ 0x000F +簇允许最大充电电流 R int32 0.1A 0x0011 +簇允许最大放电电流 R int32 0.1A 0x0013 +簇允许最大充电功率 R uint32 1kW 0x0015 +簇允许最大放电功率 R uint32 1kW 0x0017 +簇可充容量 R uint32 0.1Ah 0x0019 +簇可放容量 R uint32 0.1Ah 0x001B +簇单次累计充容量 R uint32 0.1Ah 0x001D +簇单次累计放容量 R uint32 0.1Ah 0x001F +簇总累计充容量 R uint32 0.1Ah 0x0021 +簇总累计放容量 R uint32 0.1Ah 0x0023 +簇可充电量 R uint32 1kWh 0x0025 +簇可放电量 R uint32 1kWh 0x0027 +簇单次充电量 R uint32 1kWh 0x0029 +簇单次放电量 R uint32 1kWh 0x002B +簇累计充电量 R uint32 1kWh 0x002D +簇累计放电量 R uint32 1kWh 0x002F +pack累计簇总压 R uint32 0.1V 0x0031 +簇与pack压差 R uint32 0.1V 0x0033 +簇与PCS压差 R uint32 0.1V 0x0035 +簇中BMU个数 R uint16 0x0037 +簇中BMU中单体个数 R uint16 0x0038 +簇中BMU中温度个数 R uint16 0x0039 +簇中单体个数 R uint16 0x003A +簇中温度个数 R uint16 0x003B +单体最高SOC节号 R uint16 0x003C +单体最高SOC R uint16 0.1 0x003D +单体最低SOC节号 R uint16 0x003E +单体最低SOC R uint16 0.1 0x003F +单体最高SOH节号 R uint16 0x0040 +单体最高SOH R uint16 0.1 0x0041 +单体最低SOH节号 R uint16 0x0042 +单体最低SOH R uint16 0.1 0x0043 +单体最高电压节号 R uint16 0x0044 +单体最高电压 R uint16 mV 0x0045 +单体最低电压节号 R uint16 0x0046 +单体最低电压 R uint16 mV 0x0047 +单体电压差 R uint16 mV 0x0048 +单体平均电压 R uint16 mV 0x0049 +单体最高温度节号 R uint16 0x004A +单体最高温度 R int16 0.1℃ 0x004B +单体最低温度节号 R uint16 0x004C +单体最低温度 R int16 0.1℃ 0x004D +单体温度差 R int16 0.1℃ 0x004E +单体平均温度 R int16 0.1℃ 0x004F +单体最高内阻节号 R uint16 0x0050 +单体最高内阻 R uint16 mΩ 0x0051 +单体最低内阻节号 R uint16 0x0052 +单体最低内阻 R uint16 mΩ 0x0053 +单体内阻差 R uint16 mΩ 0x0054 +单体平均内阻 R uint16 mΩ 0x0055 +单体SOC R uint16[1000] 0.1 0x0056~0x043D +单体SOH R uint16[1000] 0.1 0x043E~0x0825 +单体电压 R uint16[1000] mV 0x0826~0x0C0D +单体温度 R int16[1000] 0.01℃ 0x0C0E~0x0FF5 +单体内阻 R uint16[1000] mΩ 0x0FF6~0x13DD \ No newline at end of file diff --git a/bin/Release/assets/config/BMS电池堆遥测.txt b/bin/Release/assets/config/BMS电池堆遥测.txt new file mode 100644 index 0000000..4621f17 --- /dev/null +++ b/bin/Release/assets/config/BMS电池堆遥测.txt @@ -0,0 +1,63 @@ +SOC R uint16 0.1 0x0001 +SOH R uint16 0.1 0x0002 +电压 R uint32 0.1V 0x0003 +电流 R int32 0.1A 0x0005 +可充电量 R uint32 1kWh 0x0007 +可放电量 R uint32 1kWh 0x0009 +单次可充电量 R uint32 1kWh 0x000B +单次可放电量 R uint32 1kWh 0x000D +堆功率 R int32 1kW 0x000F +充电量累加 R uint32 1kWh 0x0011 +放电量累加 R uint32 1kWh 0x0013 +簇最大SOC R uint16 0.1 0x0015 +簇最小SOC R uint16 0.1 0x0016 +簇最大SOC号 R uint16 0x0017 +簇最小SOC号 R uint16 0x0018 +簇SOC差值 R uint16 0.1 0x0019 +簇最大电压 R uint16 0.1V 0x001A +簇最小电压 R uint16 0.1V 0x001B +簇最大电压号 R uint16 0x001C +簇最小电压号 R uint16 0x001D +簇电压差值 R uint16 0.1V 0x001E +单体最大电压簇号 R uint16 0x001F +单体最大电压节号 R uint16 0x0020 +单体最大电压 R uint16 mV 0x0021 +单体最小电压簇号 R uint16 0x0022 +单体最小电压节号 R uint16 0x0023 +单体最小电压 R uint16 mV 0x0024 +单体平均电压 R uint16 mV 0x0025 +单体电压差 R uint16 mV 0x0026 +单体最大温度簇号 R uint16 0x0027 +单体最大温度节号 R uint16 0x0028 +单体最大温度 R int16 0.1℃ 0x0029 +单体最小温度簇号 R uint16 0x002A +单体最小温度节号 R uint16 0x002B +单体最小温度 R int16 0.1℃ 0x002C +单体平均温度 R int16 0.1℃ 0x002D +单体温度差 R int16 0.1℃ 0x002E +最大内阻簇号 R uint16 0x002F +最大内阻节号 R uint16 0x0030 +最大内阻 R uint16 mΩ 0x0031 +最小内阻簇号 R uint16 0x0032 +最小内阻节号 R uint16 0x0033 +最小内阻 R uint16 mΩ 0x0034 +单体平均内阻 R uint16 mΩ 0x0035 +单体内阻差 R uint16 mΩ 0x0036 +单体最大SOH簇号 R uint16 0x0037 +单体最大SOH节号 R uint16 0x0038 +单体最大SOH R uint16 0.10% 0x0039 +单体最小SOH簇号 R uint16 0x003A +单体最小SOH节号 R uint16 0x003B +单体最小SOH R uint16 0.10% 0x003C +单体最大SOc簇号 R uint16 0x003D +单体最大SOc节号 R uint16 0x003E +单体最大Soc R uint16 0.10% 0x0040 +单体最小SOc簇号 R uint16 0x0041 +单体最小SOc节号 R uint16 0x0042 +单体最小SOc R uint16 0.10% 0x0043 +系统剩余最大可充电功率 R uint32 1KW 0x0043 +系统剩余最大可放电功率 R uint32 1KW 0x0045 +可充电状态 R uint16 1:可充电;0:不可充电 0x0047 +可放电状态 R uint16 1:可放电;0:不可放电 0x0048 +运行状态 R uint16 运行状态 0-正常 1-告警 2-保护 0x0049 +充放电状态 R uint16 0-待机 1-充电 2-放电 0x004A \ No newline at end of file diff --git a/bin/Release/assets/config/EMS遥信.txt b/bin/Release/assets/config/EMS遥信.txt new file mode 100644 index 0000000..52773f8 --- /dev/null +++ b/bin/Release/assets/config/EMS遥信.txt @@ -0,0 +1,44 @@ +BMS(电池堆)通信状态 R uint16 "0:正常 +1:故障" bit位从低到高分别对应1~16 0x2001 +BCU(电池簇)通信状态 R uint64 "0:正常 +1:故障" bit位从低到高分别对应1~64 0x2002 +PCU(主控)通信状态 R uint16 "0:正常 +1:故障" bit位从低到高分别对应1~16 0x2006 +PCS(模块)通信状态 R uint64 "0:正常 +1:故障" bit位从低到高分别对应1~64 0x2007 +电表总接点通信状态 R uint16 "0:正常 +1:故障" bit位从低到高分别对应1~16 0x200B +电表通信状态 R uint32 "0:正常 +1:故障" bit位从低到高分别对应1~32 0x200C +消防通信状态 R uint16 "0:正常 +1:故障" bit位从低到高分别对应1~16 0x200E +UPS通信状态 R uint16 "0:正常 +1:故障" bit位从低到高分别对应1~16 0x200F +温湿度总接点通信状态 R uint16 "0:正常 +1:故障" bit位从低到高分别对应1~16 0x2010 +温湿度通信状态 R uint32 "0:正常 +1:故障" bit位从低到高分别对应1~32 0x2011 +空调总接点通信状态 R uint16 "0:正常 +1:故障" bit位从低到高分别对应1~16 0x2013 +空调通信状态 R uint32 "0:正常 +1:故障" bit位从低到高分别对应1~32 0x2014 +控制干接点(配电系统)状态 R uint16 "0:开路 +1:闭合" bit位从低到高分别对应1~16 0x2016 +状态干接点(配电系统)状态 R uint16 "0:开路 +1:闭合" bit位从低到高分别对应1~16 0x2017 +BCU总通信状态 R uint16 0:正常 1:告警 2:故障 0x2018 +PCU总通信状态 R uint16 0:正常 1:告警 2:故障 0x2019 +电表总通信状态 R uint16 0:正常 1:告警 2:故障 0x201A +消防总通信状态 R uint16 0:正常 1:告警 2:故障 0x201B +UPS总通信状态 R uint16 0:正常 1:告警 2:故障 0x201C +温湿度总通信状态 R uint16 0:正常 1:告警 2:故障 0x201D +空调总通信状态 R uint16 0:正常 1:告警 2:故障 0x201E +EMU通信状态 R uint16 0:正常 1:告警 2:故障 0x201F +冷机总通信状态 R uint16 0:正常 1:告警 2:故障 0x2020 +冷机总接点通信状态 R uint16 "0:正常 +1:故障" bit位从低到高分别对应1~16 0x2021 +冷机通信状态 R uint16 "0:正常 +1:故障" bit位从低到高分别对应1~16 0x2022 +预留 0x2023~0x2079 +预留 +判断总表的三相总有功 < -5.0fkW 充电 >5.0fkW放电 否则停机 R uint16 0:充电 1:放电 2:停机 储能状态 0x207A \ No newline at end of file diff --git a/bin/Release/assets/config/EMS遥测.txt b/bin/Release/assets/config/EMS遥测.txt new file mode 100644 index 0000000..ce7fdc0 --- /dev/null +++ b/bin/Release/assets/config/EMS遥测.txt @@ -0,0 +1,111 @@ +BMS(电池堆)个数 R uint16 1 0x1001 +BCU通道个数 R uint16 1~2 0x1002 +BCU(电池簇)个数 R uint16 1~40 0x1003 +PCU(主控)个数 R uint16 1~4 0x1004 +PCU通道个数 R uint16 1~4 0x1005 +PCS(模块)个数 R uint16 1~40 0x1006 +电表通道个数 R uint16 1 0x1007 +电表个数 R uint16 1~10 0x1008 +消防通道个数 R uint16 1~10 0x1009 +消防个数 R uint16 1~10 0x100A +UPS通道个数 R uint16 1~10 0x100B +UPS个数 R uint16 1~10 0x100C +温湿度通道个数 R uint16 1 0x100D +温湿度个数 R uint16 1~10 0x100E +空调通道个数 R uint16 1 0x100F +空调个数 R uint16 1~10 0x1010 +控制干接点(配电系统)个数 R uint16 16 0x1011 +状态干接点(配电系统)个数 R uint16 16 0x1012 +预留 0x1013~0x1071 +预留 +预留 +预留 +预留 +预留 +预留 +预留 +预留 +系统最大可充电功率 R uint32 1KW Pcu数据 0x1072 +系统最大可放电功率 R uint32 1KW 0x1074 +储能母线电压 R uint32 0.1V 堆数据 0x1076 +储能母线电流 R int32 0.1A 0x1078 +储能系统SOC R uint16 0.1 0x107A +储能系统SOH R uint16 0.1 0x107B +电流变比 R uint16 电表总表数据 0x107C +电压变比 R uint16 0x107D +A相电压 R uint32 1V 0x107E +B相电压 R uint32 1V 0x1080 +C相电压 R uint32 1V 0x1082 +A相电流 R int32 1A 0x1084 +B相电流 R int32 1A 0x1086 +C相电流 R int32 1A 0x1088 +AB相电压 R uint32 1V 0x108A +BC相电压 R uint32 1V 0x108C +CA相电压 R uint32 1V 0x108E +A相有功功率 R int32 1kW 0x1090 +B相有功功率 R int32 1kW 0x1092 +C相有功功率 R int32 1kW 0x1094 +三相总有功功率 R int32 1kW 0x1096 +当前控制功率 R int32 0.1kW 堆数据 0x1098 +负荷率 R uint32 1% 台区控制策略数据 0不拿 大于0 默认拿第一个 0x109A +三相不平衡度  R uint32 1% 0x109C + 功率因素比率  R uint32 1% 0x109E +进线开关柜功率 R int32 1kW 并网口电表 0x10A0 +用户关口表功率 R int32 1kW 并网口电表 0x10A2 +预留 0x10A4~0x1103 +预留 +正向总有功总需量 R int32 1kW 0x1104 +尖段电价 R uint32 1RMB 0x1106 +峰段电价 R uint32 1RMB 0x1108 +平段电价 R uint32 1RMB 0x110A +谷段电价 R uint32 1RMB 0x110C +日充电电量 R uint32 1kWh 0x110E +日放电电量 R uint32 1kWh 0x1110 +日充电费用 R uint32 1RMB 0x1112 +日放电费用 R uint32 1RMB 0x1114 +日收益 R int32 1RMB 0x1116 +日正向尖有功电能 R uint32 1kWh 0x1118 +日正向峰有功电能 R uint32 1kWh 0x111A +日正向平有功电能 R uint32 1kWh 0x111C +日正向谷有功电能 R uint32 1kWh 0x111E +日正向总有功电能 R uint32 1kWh 0x1120 +日反向尖有功电能 R uint32 1kWh 0x1122 +日反向峰有功电能 R uint32 1kWh 0x1124 +日反向平有功电能 R uint32 1kWh 0x1126 +日反向谷有功电能 R uint32 1kWh 0x1128 +日反向总有功电能 R uint32 1kWh 0x112A +总充电电量 R uint32 1kWh 0x112C +总放电电量 R uint32 1kWh 0x112E +总充电费用 R uint32 1RMB 0x1130 +总放电费用 R uint32 1RMB 0x1132 +总收益 R int32 1RMB 0x1134 +总正向尖有功电能 R uint32 1kWh 0x1136 +总正向峰有功电能 R uint32 1kWh 0x1138 +总正向平有功电能 R uint32 1kWh 0x113A +总正向谷有功电能 R uint32 1kWh 0x113C +总正向总有功电能 R uint32 1kWh 0x113E +总反向尖有功电能 R uint32 1kWh 0x1140 +总反向峰有功电能 R uint32 1kWh 0x1142 +总反向平有功电能 R uint32 1kWh 0x1144 +总反向谷有功电能 R uint32 1kWh 0x1146 +总反向总有功电能 R uint32 1kWh 0x1148 +预留 0x114A~0x11AD +预留 +预留 +交流A相电压 R int16 1V 0x11AE +交流B相电压 R int16 1V 0x11AF +交流C相电压 R int16 1V 0x11B0 +交流A相频率 R int16 1Hz 0x11B1 +交流B相频率 R int16 1Hz 0x11B2 +交流C相频率 R int16 1Hz 0x11B3 +总直流功率 R int32 1kW 0x11B4 +总直流电压 R uint32 0.1V 0x11B6 +总直流电流 R int32 0.1A 0x11B8 +预留 0x11B9~0x121A +预留 +预留 +储能系统温度 R int16 0.1℃ 堆里面单体温度最高 0x121B +储能充放电时段hh R uint16 时 0x01 0x121C +储能充放电时段mm R uint16 分 0x01 0x121D +储能充放电时段ss R uint16 秒 0x01 0x121E +储能系统各时段功率 R int16 1kW 0x01 0x121F \ No newline at end of file diff --git a/bin/Release/assets/config/EMS遥调.txt b/bin/Release/assets/config/EMS遥调.txt new file mode 100644 index 0000000..65f34c7 --- /dev/null +++ b/bin/Release/assets/config/EMS遥调.txt @@ -0,0 +1,53 @@ +EMS工作模式 RW uint16 - "0:无效 +1:本地控制模式, EMS不接受平台调控 +2:平台控制模式, EMS接收平台调控指令" 0x0001 +有功功率 RW int16 kW "并网恒功率模式下交流侧功率值: +<0: 充电功率 +0: 静置 +>0: 放电功率" 0x0002 +PCS开关机 RW uint16 - "0: 关机 +1: 开机" 软件开关机 0x0003 +主控对象 RW uint16 "储能遥控对象: +0:无效 +1:华云 +2:轻舟" 0x0004 +A相有功功率 RW int16 1kW 0x0005 +B相有功功率 RW int16 1kW 0x0006 +C相有功功率 RW int16 1kW 0x0007 +三相总有功功率 RW int16 1kW 0x0008 +A相无功功率 RW int16 1kVar 0x0009 +B相无功功率 RW int16 1kVar 0x000A +C相无功功率 RW int16 1kVar 0x000B +三相总无功功率 RW int16 1kVar 0x000C +A相电流 RW int16 0.01A 在使用的时候除以100转float 0x000D +B相电流 RW int16 0.01A 0x000E +C相电流 RW int16 0.01A 0x000F +A相电压 RW uint16 1V 0x0010 +B相电压 RW uint16 1V 0x0011 +C相电压 RW uint16 1V 0x0012 +A相交流功率因数 RW int16 0.01 在使用的时候除以100转float 0x0013 +B相交流功率因数 RW int16 0.01 0x0014 +C相交流功率因数 RW int16 0.01 0x0015 +A相视在功率 RW int16 1kVA 0x0016 +B相视在功率 RW int16 1kVA 0x0017 +C相视在功率 RW int16 1kVA 0x0018 +正向总有功总需量 RW int16 1kW 0x0019 +数据有效性 RW int16 0无效 1有效 0x001A +EMS工作模式 RW uint16 - "0:无效 +1:本地控制模式, EMS不接受平台调控 +2:平台控制模式, EMS接收平台调控指令" 2413项目需求 0x001B +有功功率 RW uint16 kW "并网恒功率模式下交流侧功率值: +功率绝对值 没有正负" 2413项目需求 0x001C +充放电类型 RW uint16 - "0: 关机 +1: 充电 +2:放电 +3:待机" "2413项目需求 +充放电类型" 0x001D +最大SOC RW uint16 2413项目需求 0x001E +最小SOC RW uint16 2413项目需求 0x001F +自动并离网 RW uint16 "0:手动 +1:自动" "2332项目需求 +(若为自动,则通过主控进行并离网切换)" 0x0020 +并网离网 RW uint16 "0:并网 +1:离网" "2332项目需求 +(该下发参数的前提为手动模式下)" 0x0021 \ No newline at end of file diff --git a/bin/Release/assets/config/EMU对外通信点表最终修改1版_v9.xlsx b/bin/Release/assets/config/EMU对外通信点表最终修改1版_v9.xlsx new file mode 100644 index 0000000..17dafac Binary files /dev/null and b/bin/Release/assets/config/EMU对外通信点表最终修改1版_v9.xlsx differ diff --git a/bin/Release/assets/config/PCS遥信.txt b/bin/Release/assets/config/PCS遥信.txt new file mode 100644 index 0000000..df3b360 --- /dev/null +++ b/bin/Release/assets/config/PCS遥信.txt @@ -0,0 +1,99 @@ +所属主控号 R uint16 1~4 0x1001 +所属PCS号 R uint16 1~40 0x1002 +故障状态 R uint16 1故障,0正常 0x1003 +告警状态 R uint16 1告警,0正常 0x1004 +设备在线 R uint16 1在线,0无效 0x1005 +禁止充电 R uint16 1禁止,0无效 0x1006 +禁止放电 R uint16 1禁止,0无效 0x1007 +运行状态 R uint16 1开机,0关机 0x1008 +充放状态 R uint16 0:待机,1:充电,2:放电,3:搁置 0x1009 +电网状态 R uint16 1离网,0并网 0x100A +逆变供电 R uint16 0禁止,1使能 0x100B +缓启动完成 R uint16 0禁止,1使能 0x100C +主机标志 R uint16 0禁止,1使能 0x100D +并离网状态 R uint16 0:并网, 1:离网 0x100E +同步请求标志 R uint16 0:无效;1:动作 0x100F +绝缘故障 R uint16 1:故障,0正常 0x1010 +漏电保护 R uint16 1:故障,0正常 0x1011 +直流过压 R uint16 1:故障,0正常 0x1012 +市电幅值异常 R uint16 1:故障,0正常 0x1013 +市电相序异常 R uint16 1:故障,0正常 0x1014 +温度开关异常 R uint16 1:故障,0正常 0x1015 +市电频率异常 R uint16 1:故障,0正常 0x1016 +IGBT过温 R uint16 1:故障,0正常 0x1017 +交流接地故障 R uint16 1:故障,0正常 0x1018 +逆变过流异常 R uint16 1:故障,0正常 0x1019 +直流缓起故障 R uint16 1:故障,0正常 0x101A +直流主继电器故障 R uint16 1:故障,0正常 0x101B +风机异常 R uint16 1:故障,0正常 0x101C +主接触器异常 R uint16 1:故障,0正常 0x101D +均浮充切换超时 R uint16 1:故障,0正常 0x101E +硬件故障 R uint16 1:故障,0正常 0x101F +机内过温 R uint16 1:故障,0正常 0x1020 +软启动故障 R uint16 1:故障,0正常 0x1021 +触摸屏通讯故障 R uint16 1:故障,0正常 0x1022 +防雷器故障 R uint16 1:故障,0正常 0x1023 +急停故障 R uint16 1:故障,0正常 0x1024 +BMS系统故障 R uint16 1:故障,0正常 0x1025 +BMS通讯故障 R uint16 1:故障,0正常 0x1026 +BMS干接点通讯故障 R uint16 1:故障,0正常 0x1027 +远程通讯故障 R uint16 1:故障,0正常 0x1028 +门禁告警 R uint16 1:故障,0正常 0x1029 +锁相异常 R uint16 1:故障,0正常 0x102A +IGBT过温告警 R uint16 1:故障,0正常 0x102B +硬件过流保护 R uint16 1:故障,0正常 0x102C +驱动故障 R uint16 1:故障,0正常 0x102D +ID冲突 R uint16 1:故障,0正常 0x102E +电池过压 R uint16 1:故障,0正常 0x102F +电池欠压 R uint16 1:故障,0正常 0x1030 +直流过流保护 R uint16 1:故障,0正常 0x1031 +输出电压异常 R uint16 1:故障,0正常 0x1032 +离网输出电压不符合 R uint16 1:故障,0正常 0x1033 +输出过载保护 R uint16 1:故障,0正常 0x1034 +输出短路保护 R uint16 1:故障,0正常 0x1035 +并机通信异常 R uint16 1:故障,0正常 0x1036 +电池保险异常 R uint16 1:故障,0正常 0x1037 +电池重载低压 R uint16 1:故障,0正常 0x1038 +电池低压告警 R uint16 1:故障,0正常 0x1039 +一拖二压差过大 R uint16 1:故障,0正常 0x103A +电池反接故障 R uint16 1:故障,0正常 0x103B +电池电压异常 R uint16 1:故障,0正常 0x103C +过载告警 R uint16 1:故障,0正常 0x103D +外部接触器异常 R uint16 1:故障,0正常 0x103E +IGBT温度传感器异常 R uint16 1:故障,0正常 0x103F +整机温度传感器异常 R uint16 1:故障,0正常 0x1040 +市电CT异常 R uint16 1:故障,0正常 0x1041 +逆变电流三相不平衡 R uint16 1:故障,0正常 0x1042 +逆变电流直流分量异常 R uint16 1:故障,0正常 0x1043 +母线不平衡 R uint16 1:故障,0正常 0x1044 +逆变电压直流分量异常 R uint16 1:故障,0正常 0x1045 +主接触器控制异常 R uint16 1:故障,0正常 0x1046 +逆变电压控制异常 R uint16 1:故障,0正常 0x1047 +直流霍尔异常 R uint16 1:故障,0正常 0x1048 +电池单体过压 R uint16 1:故障,0正常 0x1049 +电池单体欠压 R uint16 1:故障,0正常 0x104A +电网过压 R uint16 1:故障,0正常 0x104B +电网欠压 R uint16 1:故障,0正常 0x104C +电网过频 R uint16 1:故障,0正常 0x104D +电网欠频 R uint16 1:故障,0正常 0x104E +市电不平衡 R uint16 1:故障,0正常 0x104F +参数设置不匹配 R uint16 1:故障,0正常 0x1050 +SPI通信异常 R uint16 1:故障,0正常 0x1051 +SCI通信异常 R uint16 1:故障,0正常 0x1052 +IIC通信异常 R uint16 1:故障,0正常 0x1053 +Xintf通信异常 R uint16 1:故障,0正常 0x1054 +零偏校准异常 R uint16 1:故障,0正常 0x1055 +烟雾告警 R uint16 1:故障,0正常 0x1056 +无电池组故障 R uint16 1异常,0正常 0x1057 +环温降频 R uint16 1异常,0正常 0x1058 +交流过载 R uint16 1异常,0正常 0x1059 +采样异常 R uint16 1异常,0正常 0x105A +24V辅源故障 R uint16 1异常,0正常 0x105B +直流欠压异常 R uint16 1异常,0正常 0x105C +散热器过温 R uint16 1异常,0正常 0x105D +CAN配置故障 R uint16 1异常,0正常 0x105E +3.3V辅源故障 R uint16 1异常,0正常 0x105F +环境过温 R uint16 1异常,0正常 0x1060 +A相IGBT逆变过流 R uint16 1异常,0正常 0x1061 +B相IGBT逆变过流 R uint16 1异常,0正常 0x1062 +C相IGBT逆变过流 R uint16 1异常,0正常 0x1063 \ No newline at end of file diff --git a/bin/Release/assets/config/PCS遥测.txt b/bin/Release/assets/config/PCS遥测.txt new file mode 100644 index 0000000..2eea459 --- /dev/null +++ b/bin/Release/assets/config/PCS遥测.txt @@ -0,0 +1,78 @@ +所属主控号 R uint16 1~4 0x0001 +所属PCS号 R uint16 1~40 0x0002 +总充电量 R uint32 1kWh 0x0003 +总放电量 R uint32 1kWh 0x0005 +散热器温度 R int16 1℃ 0x0007 +内部温度 R int16 1℃ 0x0008 +最大允许充电功率 R int16 0.1kW 0x0009 +最大允许放电功率 R int16 0.1kW 0x000A +有功功率期望 R int16 1kWh 0x000B +无功功率期望 R int16 1kVar 0x000C +AB线电压 R int16 1V 0x000D +BC线电压 R int16 1V 0x000E +CA线电压 R int16 1V 0x000F +A相电压 R int16 1V 0x0010 +B相电压 R int16 1V 0x0011 +C相电压 R int16 1V 0x0012 +A相频率 R int16 1Hz 0x0013 +B相频率 R int16 1Hz 0x0014 +C相频率 R int16 1Hz 0x0015 +A相功率因数 R int16 1 0x0016 +B相功率因数 R int16 1 0x0017 +C相功率因数 R int16 1 0x0018 +A相电流 R int16 1A 0x0019 +B相电流 R int16 1A 0x001A +C相电流 R int16 1A 0x001B +A相有功功率 R int16 1kW 0x001C +B相有功功率 R int16 1kW 0x001D +C相有功功率 R int16 1kW 0x001E +A相无功功率 R int16 1kVar 0x001F +B相无功功率 R int16 1kVar 0x0020 +C相无功功率 R int16 1kVar 0x0021 +A相视在功率 R int16 1kVA 0x0022 +B相视在功率 R int16 1kVA 0x0023 +C相视在功率 R int16 1kVA 0x0024 +三相总有功功率 R int16 1kW 0x0025 +三相总无功功率 R int16 1kVar 0x0026 +三相总视在功率 R int16 1kVA 0x0027 +三相总功率因数 R int16 1 0x0028 +直流功率 R int16 1kW 0x0029 +直流电压 R int16 1V 0x002A +直流电流 R int16 1A 0x002B +充电功率 R int16 1kW 0x002C +放电功率 R int16 1kW 0x002D +PF值 R int16 1 0x002E +UV线/U相电网计量线电压 R int16 1V 0x002F +VW线/V相电网计量线电压 R int16 1V 0x0030 +WU线/W相电网计量线电压 R int16 1V 0x0031 +U相电网计量电流 R int16 1A 0x0032 +V相电网计量电流 R int16 1A 0x0033 +W相电网计量电流 R int16 1A 0x0034 +正母线电压 R int16 1V 0x0035 +可用功率 R int16 1kVA 0x0036 +负母线电压 R int16 1V 0x0037 +A相IGBT温度 R int16 1℃ 0x0038 +B相IGBT温度 R int16 1℃ 0x0039 +C相IGBT温度 R int16 1℃ 0x003A +逆变侧AB线电压 R int16 1V 0x003B +逆变侧BC线电压 R int16 1V 0x003C +逆变侧CA线电压 R int16 1V 0x003D +逆变侧A相电压 R int16 1V 0x003E +逆变侧B相电压 R int16 1V 0x003F +逆变侧C相电压 R int16 1V 0x0040 +逆变侧A相电流 R int16 1A 0x0041 +逆变侧B相电流 R int16 1A 0x0042 +逆变侧C相电流 R int16 1A 0x0043 +逆变侧A相电流直流分量 R int16 1A 0x0044 +逆变侧B相电流直流分量 R int16 1A 0x0045 +逆变侧C相电流直流分量 R int16 1A 0x0046 +离网频率 R int16 1Hz 0x0047 +A相负载量 R int16 1 0x0048 +B相负载量 R int16 1 0x0049 +C相负载量 R int16 1 0x004A +总负载量 R int16 1 0x004B +逆变侧AB线电压直流分量 R int16 1A 0x004C +逆变侧BC线电压直流分量 R int16 1A 0x004D +逆变侧CA线电压直流分量 R int16 1A 0x004E +在线数量 R int16 0x004F +逆变数量 R int16 0x0050 \ No newline at end of file diff --git a/bin/Release/assets/config/PCU遥信.txt b/bin/Release/assets/config/PCU遥信.txt new file mode 100644 index 0000000..4f371d9 --- /dev/null +++ b/bin/Release/assets/config/PCU遥信.txt @@ -0,0 +1,59 @@ +所属通道号 R uint16 1~4 0x1001 +故障状态 R uint16 1故障,0正常 0x1002 +告警状态 R uint16 1告警,0正常 0x1003 +设备在线 R uint16 1在线,0无效 0x1004 +本地远程 R uint16 1本地,0远程 0x1005 +启停状态 R uint16 1开机,0关机 0x1006 +电网状态 R uint16 1离网,0并网 0x1007 +模块状态 R uint16 1开机,0待机 0x1008 +EPO急停 R uint16 1故障,0正常 0x1009 +防雷器异常 R uint16 1告警,0正常 0x100A +负载电压反序 R uint16 1故障,0正常 0x100B +市电电压反序 R uint16 1故障,0正常 0x100C +输出相反序 R uint16 1故障,0正常 0x100D +过载告警 R uint16 1告警,0正常 0x100E +过载超时 R uint16 1故障,0正常 0x100F +交流过流保护 R uint16 1故障,0正常 0x1010 +逆变电压异常 R uint16 1故障,0正常 0x1011 +内部串口异常 R uint16 1故障,0正常 0x1012 +485通信故障 R uint16 1故障,0正常 0x1013 +CAN通信故障 R uint16 1故障,0正常 0x1014 +E2PROM故障 R uint16 1故障,0正常 0x1015 +电网过压 R uint16 1故障,0正常 0x1016 +电网欠压 R uint16 1故障,0正常 0x1017 +电网过频 R uint16 1故障,0正常 0x1018 +电网欠频 R uint16 1故障,0正常 0x1019 +电网快检综合异常 R uint16 1故障,0正常 0x101A +电网幅值快检异常 R uint16 1故障,0正常 0x101B +电网拖尾异常 R uint16 1故障,0正常 0x101C +消防输入信号NO R uint16 1闭合,0断开 0x101D +急停按钮信号NC R uint16 1急停,0正常 0x101E +避雷器NC R uint16 1故障,0正常 0x101F +避雷器断路器NC R uint16 1故障,0正常 0x1020 +PCS总断路器NC R uint16 1闭合,0断开 0x1021 +电操状态NO R uint16 1闭合,0断开 0x1022 +远程关机NO R uint16 1开机,0无效 0x1023 +远程开机NO R uint16 1开机,0无效 0x1024 +BA故障信号NO R uint16 1故障,0正常 0x1025 +PCS_01状态 R uint16 1在线,0掉线 0x1026 +PCS_02状态 R uint16 1在线,0掉线 0x1027 +PCS_03状态 R uint16 1在线,0掉线 0x1028 +PCS_04状态 R uint16 1在线,0掉线 0x1029 +PCS_05状态 R uint16 1在线,0掉线 0x102A +PCS_06状态 R uint16 1在线,0掉线 0x102B +PCS_07状态 R uint16 1在线,0掉线 0x102C +PCS_09状态 R uint16 1在线,0掉线 0x102D +PCS_10状态 R uint16 1在线,0掉线 0x102E +PCS_01下发设置 R uint16 1故障,0正常 0x102F +PCS_02下发设置 R uint16 1故障,0正常 0x1030 +PCS_03下发设置 R uint16 1故障,0正常 0x1031 +PCS_04下发设置 R uint16 1故障,0正常 0x1032 +PCS_05下发设置 R uint16 1故障,0正常 0x1033 +PCS_06下发设置 R uint16 1故障,0正常 0x1034 +PCS_07下发设置 R uint16 1故障,0正常 0x1035 +PCS_08下发设置 R uint16 1故障,0正常 0x1036 +PCS_09下发设置 R uint16 1故障,0正常 0x1037 +PCS_10下发设置 R uint16 1:故障,0正常 0x1038 +内部DSP通信故障 R uint16 1:故障,0正常 0x1039 +BMS CAN通信故障 R uint16 1:故障,0正常 0x103A +下发设置失败 R uint16 1:故障,0正常 0x103B \ No newline at end of file diff --git a/bin/Release/assets/config/PCU遥测.txt b/bin/Release/assets/config/PCU遥测.txt new file mode 100644 index 0000000..a2de26c --- /dev/null +++ b/bin/Release/assets/config/PCU遥测.txt @@ -0,0 +1,72 @@ +所属通道号 R uint16 1~4 0x0001 +充电功率最大许可 R uint32 1KW 0x0002 +放电功率最大许可 R uint32 1KW 0x0004 +交流日总充电量 R uint32 1KWh 0x0006 +交流日总放电量 R uint32 1KWh 0x0008 +交流总充电量 R uint32 1KWh 0x000A +交流总放电量 R uint32 1KWh 0x000C +有功功率期望值 R int16 1KW 0x000E +无功功率期望值 R int16 1kVar 0x000F +PCS侧线电压VAB R int16 1v 0x0010 +PCS侧线电压VBC R int16 1v 0x0011 +PCS侧线电压VCA R int16 1v 0x0012 +PCS侧线A相电压 R int16 1v 0x0013 +PCS侧线B相电压 R int16 1v 0x0014 +PCS侧线C相电压 R int16 1v 0x0015 +PCS侧A相频率 R int16 1Hz 0x0016 +PCS侧B相频率 R int16 1Hz 0x0017 +PCS侧C相频率 R int16 1Hz 0x0018 +PCS侧功率因数A R int16 1 0x0019 +PCS侧功率因数B R int16 1 0x001A +PCS侧功率因数C R int16 1 0x001B +PCS侧相电流A R int16 1A 0x001C +PCS侧相电流B R int16 1A 0x001D +PCS侧相电流C R int16 1A 0x001E +PCS侧有功功率A R int16 1kW 0x001F +PCS侧有功功率B R int16 1kW 0x0020 +PCS侧有功功率C R int16 1kW 0x0021 +PCS侧无功功率A R int16 1kVar 0x0022 +PCS侧无功功率B R int16 1kVar 0x0023 +PCS侧无功功率C R int16 1kVar 0x0024 +PCS侧视在功率A R int16 1kVar 0x0025 +PCS侧视在功率B R int16 1kVar 0x0026 +PCS侧视在功率C R int16 1kVar 0x0027 +PCS侧三相总有功功率 R int16 1kW 0x0028 +PCS侧三相总无功功率 R int16 1kVar 0x0029 + PCS侧三相总视在功率 R int16 1kVA 0x002A +PCS侧三相总功率因数 R int16 1 0x002B +PCU模块温度 R int16 1℃ 0x002C +外部温度NTC1 R int16 1℃ 0x002D +外部温度NTC2 R int16 1℃ 0x002E +外部温度NTC3 R int16 1℃ 0x002F +台区负载侧A相电流 R int16 1A 0x0030 +台区负载侧B相电流 R int16 1A 0x0031 +台区负载侧C相电流 R int16 1A 0x0032 +台区负载侧A相有功功率 R int16 1kW 0x0033 +台区负载侧B相有功功率 R int16 1kW 0x0034 +台区负载侧C相有功功率 R int16 1kW 0x0035 +台区负载侧总有功功率 R int16 1kW 0x0036 +台区负载侧A相无功功率 R int16 1kVar 0x0037 +台区负载侧B相无功功率 R int16 1kVar 0x0038 +台区负载侧C相无功功率 R int16 1kVar 0x0039 +台区负载侧总无功功率 R int16 1kVar 0x003A +台区负载侧A相视在功率 R int16 1kVA 0x003B +台区负载侧B相视在功率 R int16 1kVA 0x003C +台区负载侧C相视在功率 R int16 1kVA 0x003D +台区负载侧总视在功率 R int16 1kVA 0x003E +台区负载侧A相功率因数 R int16 1 0x003F +台区负载侧B相功率因数 R int16 1 0x0040 +台区负载侧C相功率因数 R int16 1 0x0041 +台区负载侧总功率因数 R int16 1 0x0042 +负载侧线电压AB R int16 1V 0x0043 +负载侧线电压BC R int16 1V 0x0044 +负载侧线电压CA R int16 1V 0x0045 +负载侧相电压AN R int16 1V 0x0046 +负载侧相电压BN R int16 1V 0x0047 +负载侧相电压CN R int16 1V 0x0048 +负载侧A功率因素 R int16 1 0x0049 +负载侧B功率因素 R int16 1 0x004A +负载侧C功率因素 R int16 1 0x004B +负载侧A视在功率 R int16 1kVA 0x004C +负载侧B视在功率 R int16 1kVA 0x004D +负载侧C视在功率 R int16 1kVA 0x004E \ No newline at end of file diff --git a/bin/Release/assets/config/registeraddr.json b/bin/Release/assets/config/registeraddr.json new file mode 100644 index 0000000..253467e --- /dev/null +++ b/bin/Release/assets/config/registeraddr.json @@ -0,0 +1,848 @@ +{ + "EMSYT": [ + {"key": "0x0001", "datatype": "int16", "remark": "EMS工作模式 RW u - 0:无效1:本地控制模式, EMS不接受平台调控2:平台控制模式, EMS接收平台调控指令"}, + {"key": "0x0002", "datatype": "int16", "remark": "有功功率 RW kW 并网恒功率模式下交流侧功率值:<0: 充电功率0: 静置>0: 放电功率"}, + {"key": "0x0003", "datatype": "int16", "remark": "PCS开关机 RW u - 0: 关机1: 开机 软件开关机"}, + {"key": "0x0004", "datatype": "int16", "remark": "主控对象 RW u 储能遥控对象:0:无效1:华云2:轻舟"}, + {"key": "0x0005", "datatype": "int16", "remark": "A相有功功率 RW 1kW"}, + {"key": "0x0006", "datatype": "int16", "remark": "B相有功功率 RW 1kW"}, + {"key": "0x0007", "datatype": "int16", "remark": "C相有功功率 RW 1kW"}, + {"key": "0x0008", "datatype": "int16", "remark": "三相总有功功率 RW 1kW"}, + {"key": "0x0009", "datatype": "int16", "remark": "A相无功功率 RW 1kVar"}, + {"key": "0x000A", "datatype": "int16", "remark": "B相无功功率 RW 1kVar"}, + {"key": "0x000B", "datatype": "int16", "remark": "C相无功功率 RW 1kVar"}, + {"key": "0x000C", "datatype": "int16", "remark": "三相总无功功率 RW 1kVar"}, + {"key": "0x000D", "datatype": "int16", "remark": "A相电流 RW 0.01A 在使用的时候除以100转float"}, + {"key": "0x000E", "datatype": "int16", "remark": "B相电流 RW 0.01A"}, + {"key": "0x000F", "datatype": "int16", "remark": "C相电流 RW 0.01A"}, + {"key": "0x0010", "datatype": "int16", "remark": "A相电压 RW u 1V"}, + {"key": "0x0011", "datatype": "int16", "remark": "B相电压 RW u 1V"}, + {"key": "0x0012", "datatype": "int16", "remark": "C相电压 RW u 1V"}, + {"key": "0x0013", "datatype": "int16", "remark": "A相交流功率因数 RW 0.01 在使用的时候除以100转float"}, + {"key": "0x0014", "datatype": "int16", "remark": "B相交流功率因数 RW 0.01"}, + {"key": "0x0015", "datatype": "int16", "remark": "C相交流功率因数 RW 0.01"}, + {"key": "0x0016", "datatype": "int16", "remark": "A相视在功率 RW 1kVA"}, + {"key": "0x0017", "datatype": "int16", "remark": "B相视在功率 RW 1kVA"}, + {"key": "0x0018", "datatype": "int16", "remark": "C相视在功率 RW 1kVA"}, + {"key": "0x0019", "datatype": "int16", "remark": "正向总有功总需量 RW 1kW"}, + {"key": "0x001A", "datatype": "int16", "remark": "数据有效性 RW 0无效 1有效"}, + {"key": "0x001B", "datatype": "int16", "remark": "EMS工作模式 RW u - 0:无效1:本地控制模式, EMS不接受平台调控2:平台控制模式, EMS接收平台调控指令 2413项目需求"}, + {"key": "0x001C", "datatype": "int16", "remark": "有功功率 RW u kW 并网恒功率模式下交流侧功率值:功率绝对值 没有正负 2413项目需求"}, + {"key": "0x001D", "datatype": "int16", "remark": "充放电类型 RW u - 0: 关机1: 充电2:放电3:待机 2413项目需求充放电类型"}, + {"key": "0x001E", "datatype": "int16", "remark": "最大SOC RW u 2413项目需求"}, + {"key": "0x001F", "datatype": "int16", "remark": "最小SOC RW u 2413项目需求"}, + {"key": "0x0020", "datatype": "int16", "remark": "自动并离网 RW u 0:手动1:自动 2332项目需求(若为自动,则通过主控进行并离网切换)"}, + {"key": "0x0021", "datatype": "int16", "remark": "并网离网 RW u 0:并网1:离网 2332项目需求(该下发参数的前提为手动模式下)"} + ], + "BCUYX": [ + {"key": "0xA001", "datatype": "int16", "remark": "所属通道号 R u 1~4"}, + {"key": "0xA002", "datatype": "int16", "remark": "所属BCU号 R u 1~40"}, + {"key": "0xA003", "datatype": "int16", "remark": "蓄电池充放电状态 R u 0x11开路0x22待机0x33充电0x44放电"}, + {"key": "0xA004", "datatype": "int16", "remark": "电池组运行状态 R u 0x11跳机0x22待机0x33放空0x44充满0x55预警0x66正常"}, + {"key": "0xA005", "datatype": "int16", "remark": "簇DO1状态 R u 1:断开 2:闭合"}, + {"key": "0xA006", "datatype": "int16", "remark": "簇DO2状态 R u 1:断开 2:闭合"}, + {"key": "0xA007", "datatype": "int16", "remark": "继电器总正 R u 0:断开 1:闭合 2:粘连"}, + {"key": "0xA008", "datatype": "int16", "remark": "继电器总负 R u 0:断开 1:闭合 2:粘连"}, + {"key": "0xA009", "datatype": "int16", "remark": "继电器预充 R u 0:断开 1:闭合 2:粘连"}, + {"key": "0xA00A", "datatype": "int16", "remark": "继电器bmu供电 R u 0:断开 1:闭合 2:粘连"}, + {"key": "0xA00B", "datatype": "int16", "remark": "整簇总电压过高告警 R u 0:正常 1:告警"}, + {"key": "0xA00C", "datatype": "int16", "remark": "整簇总电压过低告警 R u 0:正常 1:告警"}, + {"key": "0xA00D", "datatype": "int16", "remark": "整簇中单体电压过高告警 R u 0:正常 1:告警"}, + {"key": "0xA00E", "datatype": "int16", "remark": "整簇中单体电压过低告警 R u 0:正常 1:告警"}, + {"key": "0xA00F", "datatype": "int16", "remark": "整簇中单体电压偏差过大告警 R u 0:正常 1:告警"}, + {"key": "0xA010", "datatype": "int16", "remark": "整簇中单体温度偏差过大告警 R u 0:正常 1:告警"}, + {"key": "0xA011", "datatype": "int16", "remark": "整簇中单体温度过高告警 R u 0:正常 1:告警"}, + {"key": "0xA012", "datatype": "int16", "remark": "整簇中单体温度过低告警 R u 0:正常 1:告警"}, + {"key": "0xA013", "datatype": "int16", "remark": "整簇总充电电流过高告警 R u 0:正常 1:告警"}, + {"key": "0xA014", "datatype": "int16", "remark": "整簇总放电电流过高告警 R u 0:正常 1:告警"}, + {"key": "0xA015", "datatype": "int16", "remark": "整簇总SOC过高告警 R u 0:正常 1:告警"}, + {"key": "0xA016", "datatype": "int16", "remark": "整簇总SOC过低告警 R u 0:正常 1:告警"}, + {"key": "0xA017", "datatype": "int16", "remark": "高压盒主正接触器粘连告警 R u 0:正常 1:告警"}, + {"key": "0xA018", "datatype": "int16", "remark": "高压盒主正接触器不能吸合告警 R u 0:正常 1:告警"}, + {"key": "0xA019", "datatype": "int16", "remark": "高压盒主负接触器粘连告警 R u 0:正常 1:告警"}, + {"key": "0xA01A", "datatype": "int16", "remark": "高压盒主负接触器不能吸合告警 R u 0:正常 1:告警"}, + {"key": "0xA01B", "datatype": "int16", "remark": "高压盒预充接触器粘连告警 R u 0:正常 1:告警"}, + {"key": "0xA01C", "datatype": "int16", "remark": "高压盒预充接触器不能吸合告警 R u 0:正常 1:告警"}, + {"key": "0xA01D", "datatype": "int16", "remark": "预充失败告警 R u 0:正常 1:告警"}, + {"key": "0xA01E", "datatype": "int16", "remark": "BCU电压检测模块出现问题告警 R u 0:正常 1:告警"}, + {"key": "0xA01F", "datatype": "int16", "remark": "BCU温度检测模块出现问题告警 R u 0:正常 1:告警"}, + {"key": "0xA020", "datatype": "int16", "remark": "BCU电流检测模块出现问题告警 R u 0:正常 1:告警"}, + {"key": "0xA021", "datatype": "int16", "remark": "BCU绝缘检测模块出现问题告警 R u 0:正常 1:告警"}, + {"key": "0xA022", "datatype": "int16", "remark": "高压盒内总压检测模块出现问题告警 R u 0:正常 1:告警"}, + {"key": "0xA023", "datatype": "int16", "remark": "高压盒外总压检测模块出现问题告警 R u 0:正常 1:告警"}, + {"key": "0xA024", "datatype": "int16", "remark": "PCS-CAN通信故障告警 R u 0:正常 1:告警"}, + {"key": "0xA025", "datatype": "int16", "remark": "高压盒供电电压过高告警 R u 0:正常 1:告警"}, + {"key": "0xA026", "datatype": "int16", "remark": "绝缘正极故障告警 R u 0:正常 1:告警"}, + {"key": "0xA027", "datatype": "int16", "remark": "绝缘负极故障告警 R u 0:正常 1:告警"}, + {"key": "0xA028", "datatype": "int16", "remark": "绝缘中间侧故障告警 R u 0:正常 1:告警"}, + {"key": "0xA029", "datatype": "int16", "remark": "绝缘故障告警 R u 0:正常 1:告警"}, + {"key": "0xA02A", "datatype": "int16", "remark": "BMU中电压采样线开路告警 R u 0:正常 1:告警"}, + {"key": "0xA02B", "datatype": "int16", "remark": "BMU中NTC采样线短开路告警 R u 0:正常 1:告警"}, + {"key": "0xA02C", "datatype": "int16", "remark": "BMU中采样芯片故障告警 R u 0:正常 1:告警"}, + {"key": "0xA02D", "datatype": "int16", "remark": "BMU中电池温度升高过快告警 R u 0:正常 1:告警"}, + {"key": "0xA02E", "datatype": "int16", "remark": "BMU中电池内部短路告警 R u 0:正常 1:告警"}, + {"key": "0xA02F", "datatype": "int16", "remark": "BMU充电均衡模块出现故障告警 R u 0:正常 1:告警"}, + {"key": "0xA030", "datatype": "int16", "remark": "BMU放电均衡模块出现故障告警 R u 0:正常 1:告警"}, + {"key": "0xA031", "datatype": "int16", "remark": "BMU通信故障告警 R u 0:正常 1:告警"}, + {"key": "0xA032", "datatype": "int16", "remark": "单体内阻过大告警 R u 0:正常 1:告警"}, + {"key": "0xA033", "datatype": "int16", "remark": "单体内阻过小告警 R u 0:正常 1:告警"}, + {"key": "0xA034", "datatype": "int16", "remark": "单体内阻阻差过大告警 R u 0:正常 1:告警"}, + {"key": "0xA035", "datatype": "int16", "remark": "簇内阻过大告警 R u 0:正常 1:告警"}, + {"key": "0xA036", "datatype": "int16", "remark": "簇内阻过小告警 R u 0:正常 1:告警"}, + {"key": "0xA037", "datatype": "int16", "remark": "SOC初始化无效告警 R u 0:正常 1:告警"}, + {"key": "0xA038", "datatype": "int16", "remark": "充电时soc降低故障告警 R u 0:正常 1:告警"}, + {"key": "0xA039", "datatype": "int16", "remark": "放电时soc升高告警 R u 0:正常 1:告警"}, + {"key": "0xA03A", "datatype": "int16", "remark": "静止时SOC跳变告警 R u 0:正常 1:告警"}, + {"key": "0xA03B", "datatype": "int16", "remark": "整簇总电压过高保护 R u 0:正常 1:保护"}, + {"key": "0xA03C", "datatype": "int16", "remark": "整簇总电压过低保护 R u 0:正常 1:保护"}, + {"key": "0xA03D", "datatype": "int16", "remark": "整簇中单体电压过高保护 R u 0:正常 1:保护"}, + {"key": "0xA03E", "datatype": "int16", "remark": "整簇中单体电压过低保护 R u 0:正常 1:保护"}, + {"key": "0xA03F", "datatype": "int16", "remark": "整簇中单体电压偏差过大保护 R u 0:正常 1:保护"}, + {"key": "0xA040", "datatype": "int16", "remark": "整簇中单体温度偏差过大保护 R u 0:正常 1:保护"}, + {"key": "0xA041", "datatype": "int16", "remark": "整簇中单体温度过高保护 R u 0:正常 1:保护"}, + {"key": "0xA042", "datatype": "int16", "remark": "整簇中单体温度过低保护 R u 0:正常 1:保护"}, + {"key": "0xA043", "datatype": "int16", "remark": "整簇总充电电流过高保护 R u 0:正常 1:保护"}, + {"key": "0xA044", "datatype": "int16", "remark": "整簇总放电电流过高保护 R u 0:正常 1:保护"}, + {"key": "0xA045", "datatype": "int16", "remark": "整簇总SOC过高保护 R u 0:正常 1:保护"}, + {"key": "0xA046", "datatype": "int16", "remark": "整簇总SOC过低保护 R u 0:正常 1:保护"}, + {"key": "0xA047", "datatype": "int16", "remark": "高压盒主正接触器粘连保护 R u 0:正常 1:保护"}, + {"key": "0xA048", "datatype": "int16", "remark": "高压盒主正接触器不能吸合保护 R u 0:正常 1:保护"}, + {"key": "0xA049", "datatype": "int16", "remark": "高压盒主负接触器粘连保护 R u 0:正常 1:保护"}, + {"key": "0xA04A", "datatype": "int16", "remark": "高压盒主负接触器不能吸合保护 R u 0:正常 1:保护"}, + {"key": "0xA04B", "datatype": "int16", "remark": "高压盒预充接触器粘连保护 R u 0:正常 1:保护"}, + {"key": "0xA04C", "datatype": "int16", "remark": "高压盒预充接触器不能吸合保护 R u 0:正常 1:保护"}, + {"key": "0xA04D", "datatype": "int16", "remark": "预充失败保护 R u 0:正常 1:保护"}, + {"key": "0xA04E", "datatype": "int16", "remark": "BCU电压检测模块出现问题保护 R u 0:正常 1:保护"}, + {"key": "0xA04F", "datatype": "int16", "remark": "BCU温度检测模块出现问题保护 R u 0:正常 1:保护"}, + {"key": "0xA050", "datatype": "int16", "remark": "BCU电流检测模块出现问题保护 R u 0:正常 1:保护"}, + {"key": "0xA051", "datatype": "int16", "remark": "BCU绝缘检测模块出现问题保护 R u 0:正常 1:保护"}, + {"key": "0xA052", "datatype": "int16", "remark": "高压盒内总压检测模块出现问题保护 R u 0:正常 1:保护"}, + {"key": "0xA053", "datatype": "int16", "remark": "高压盒外总压检测模块出现问题保护 R u 0:正常 1:保护"}, + {"key": "0xA054", "datatype": "int16", "remark": "PCS-CAN通信故障保护 R u 0:正常 1:保护"}, + {"key": "0xA055", "datatype": "int16", "remark": "高压盒供电电压过高保护 R u 0:正常 1:保护"}, + {"key": "0xA056", "datatype": "int16", "remark": "绝缘正极故障保护 R u 0:正常 1:保护"}, + {"key": "0xA057", "datatype": "int16", "remark": "绝缘负极故障保护 R u 0:正常 1:保护"}, + {"key": "0xA058", "datatype": "int16", "remark": "绝缘中间侧故障保护 R u 0:正常 1:保护"}, + {"key": "0xA059", "datatype": "int16", "remark": "绝缘故障保护 R u 0:正常 1:保护"}, + {"key": "0xA05A", "datatype": "int16", "remark": "BMU中电压采样线开路保护 R u 0:正常 1:保护"}, + {"key": "0xA05B", "datatype": "int16", "remark": "BMU中NTC采样线短开路保护 R u 0:正常 1:保护"}, + {"key": "0xA05C", "datatype": "int16", "remark": "BMU中采样芯片故障保护 R u 0:正常 1:保护"}, + {"key": "0xA05D", "datatype": "int16", "remark": "BMU中电池温度升高过快保护 R u 0:正常 1:保护"}, + {"key": "0xA05E", "datatype": "int16", "remark": "BMU中电池内部短路保护 R u 0:正常 1:保护"}, + {"key": "0xA05F", "datatype": "int16", "remark": "BMU充电均衡模块出现故障保护 R u 0:正常 1:保护"}, + {"key": "0xA060", "datatype": "int16", "remark": "BMU放电均衡模块出现故障保护 R u 0:正常 1:保护"}, + {"key": "0xA061", "datatype": "int16", "remark": "BMU通信故障保护 R u 0:正常 1:保护"}, + {"key": "0xA062", "datatype": "int16", "remark": "单体内阻过大保护 R u 0:正常 1:保护"}, + {"key": "0xA063", "datatype": "int16", "remark": "单体内阻过小保护 R u 0:正常 1:保护"}, + {"key": "0xA064", "datatype": "int16", "remark": "单体内阻阻差过大保护 R u 0:正常 1:保护"}, + {"key": "0xA065", "datatype": "int16", "remark": "簇内阻过大保护 R u 0:正常 1:保护"}, + {"key": "0xA066", "datatype": "int16", "remark": "簇内阻过小保护 R u 0:正常 1:保护"}, + {"key": "0xA067", "datatype": "int16", "remark": "SOC初始化无效保护 R u 0:正常 1:保护"}, + {"key": "0xA068", "datatype": "int16", "remark": "充电时soc降低故障保护 R u 0:正常 1:保护"}, + {"key": "0xA069", "datatype": "int16", "remark": "放电时soc升高保护 R u 0:正常 1:保护"}, + {"key": "0xA06A", "datatype": "int16", "remark": "静止时SOC跳变保护 R u 0:正常 1:保护"} + ], + "BCUYC": [ + {"key": "0x0001", "datatype": "int16", "remark": "所属通道号 R u 1~4"}, + {"key": "0x0002", "datatype": "int16", "remark": "所属BCU号 R u 1~40"}, + {"key": "0x0003", "datatype": "int32", "remark": "簇电压 R u 0.1V"}, + {"key": "0x0005", "datatype": "int32", "remark": "簇电流 R 0.1A"}, + {"key": "0x0007", "datatype": "int32", "remark": "簇温度 R 0.1℃"}, + {"key": "0x0009", "datatype": "int32", "remark": "簇电阻 R u 1mΩ"}, + {"key": "0x000B", "datatype": "int16", "remark": "簇SOC R u 0.1"}, + {"key": "0x000C", "datatype": "int16", "remark": "簇SOH R u 0.1"}, + {"key": "0x000D", "datatype": "int32", "remark": "簇正绝缘电阻 R u 1kΩ"}, + {"key": "0x000F", "datatype": "int32", "remark": "簇负绝缘电阻 R u 1kΩ"}, + {"key": "0x0011", "datatype": "int32", "remark": "簇允许最大充电电流 R 0.1A"}, + {"key": "0x0013", "datatype": "int32", "remark": "簇允许最大放电电流 R 0.1A"}, + {"key": "0x0015", "datatype": "int32", "remark": "簇允许最大充电功率 R u 1kW"}, + {"key": "0x0017", "datatype": "int32", "remark": "簇允许最大放电功率 R u 1kW"}, + {"key": "0x0019", "datatype": "int32", "remark": "簇可充容量 R u 0.1Ah"}, + {"key": "0x001B", "datatype": "int32", "remark": "簇可放容量 R u 0.1Ah"}, + {"key": "0x001D", "datatype": "int32", "remark": "簇单次累计充容量 R u 0.1Ah"}, + {"key": "0x001F", "datatype": "int32", "remark": "簇单次累计放容量 R u 0.1Ah"}, + {"key": "0x0021", "datatype": "int32", "remark": "簇总累计充容量 R u 0.1Ah"}, + {"key": "0x0023", "datatype": "int32", "remark": "簇总累计放容量 R u 0.1Ah"}, + {"key": "0x0025", "datatype": "int32", "remark": "簇可充电量 R u 1kWh"}, + {"key": "0x0027", "datatype": "int32", "remark": "簇可放电量 R u 1kWh"}, + {"key": "0x0029", "datatype": "int32", "remark": "簇单次充电量 R u 1kWh"}, + {"key": "0x002B", "datatype": "int32", "remark": "簇单次放电量 R u 1kWh"}, + {"key": "0x002D", "datatype": "int32", "remark": "簇累计充电量 R u 1kWh"}, + {"key": "0x002F", "datatype": "int32", "remark": "簇累计放电量 R u 1kWh"}, + {"key": "0x0031", "datatype": "int32", "remark": "pack累计簇总压 R u 0.1V"}, + {"key": "0x0033", "datatype": "int32", "remark": "簇与pack压差 R u 0.1V"}, + {"key": "0x0035", "datatype": "int32", "remark": "簇与PCS压差 R u 0.1V"}, + {"key": "0x0037", "datatype": "int16", "remark": "簇中BMU个数 R u"}, + {"key": "0x0038", "datatype": "int16", "remark": "簇中BMU中单体个数 R u"}, + {"key": "0x0039", "datatype": "int16", "remark": "簇中BMU中温度个数 R u"}, + {"key": "0x003A", "datatype": "int16", "remark": "簇中单体个数 R u"}, + {"key": "0x003B", "datatype": "int16", "remark": "簇中温度个数 R u"}, + {"key": "0x003C", "datatype": "int16", "remark": "单体最高SOC节号 R u"}, + {"key": "0x003D", "datatype": "int16", "remark": "单体最高SOC R u 0.1"}, + {"key": "0x003E", "datatype": "int16", "remark": "单体最低SOC节号 R u"}, + {"key": "0x003F", "datatype": "int16", "remark": "单体最低SOC R u 0.1"}, + {"key": "0x0040", "datatype": "int16", "remark": "单体最高SOH节号 R u"}, + {"key": "0x0041", "datatype": "int16", "remark": "单体最高SOH R u 0.1"}, + {"key": "0x0042", "datatype": "int16", "remark": "单体最低SOH节号 R u"}, + {"key": "0x0043", "datatype": "int16", "remark": "单体最低SOH R u 0.1"}, + {"key": "0x0044", "datatype": "int16", "remark": "单体最高电压节号 R u"}, + {"key": "0x0045", "datatype": "int16", "remark": "单体最高电压 R u mV"}, + {"key": "0x0046", "datatype": "int16", "remark": "单体最低电压节号 R u"}, + {"key": "0x0047", "datatype": "int16", "remark": "单体最低电压 R u mV"}, + {"key": "0x0048", "datatype": "int16", "remark": "单体电压差 R u mV"}, + {"key": "0x0049", "datatype": "int16", "remark": "单体平均电压 R u mV"}, + {"key": "0x004A", "datatype": "int16", "remark": "单体最高温度节号 R u"}, + {"key": "0x004B", "datatype": "int16", "remark": "单体最高温度 R 0.1℃"}, + {"key": "0x004C", "datatype": "int16", "remark": "单体最低温度节号 R u"}, + {"key": "0x004D", "datatype": "int16", "remark": "单体最低温度 R 0.1℃"}, + {"key": "0x004E", "datatype": "int16", "remark": "单体温度差 R 0.1℃"}, + {"key": "0x004F", "datatype": "int16", "remark": "单体平均温度 R 0.1℃"}, + {"key": "0x0050", "datatype": "int16", "remark": "单体最高内阻节号 R u"}, + {"key": "0x0051", "datatype": "int16", "remark": "单体最高内阻 R u mΩ"}, + {"key": "0x0052", "datatype": "int16", "remark": "单体最低内阻节号 R u"}, + {"key": "0x0053", "datatype": "int16", "remark": "单体最低内阻 R u mΩ"}, + {"key": "0x0054", "datatype": "int16", "remark": "单体内阻差 R u mΩ"}, + {"key": "0x0055", "datatype": "int16", "remark": "单体平均内阻 R u mΩ"}, + {"key": "0x0056", "datatype": "int16", "remark": "单体SOC R u[1000] 0.1"}, + {"key": "0x043E", "datatype": "int16", "remark": "单体SOH R u[1000] 0.1"}, + {"key": "0x0826", "datatype": "int16", "remark": "单体电压 R u[1000] mV"}, + {"key": "0x0C0E", "datatype": "int16", "remark": "单体温度 R [1000] 0.01℃"}, + {"key": "0x0FF6", "datatype": "int16", "remark": "单体内阻 R u[1000] mΩ"} + ], + "BMSYC": [ + {"key": "0x0001", "datatype": "int16", "remark": "SOC R u 0.1"}, + {"key": "0x0002", "datatype": "int16", "remark": "SOH R u 0.1"}, + {"key": "0x0003", "datatype": "int32", "remark": "电压 R u 0.1V"}, + {"key": "0x0005", "datatype": "int32", "remark": "电流 R 0.1A"}, + {"key": "0x0007", "datatype": "int32", "remark": "可充电量 R u 1kWh"}, + {"key": "0x0009", "datatype": "int32", "remark": "可放电量 R u 1kWh"}, + {"key": "0x000B", "datatype": "int32", "remark": "单次可充电量 R u 1kWh"}, + {"key": "0x000D", "datatype": "int32", "remark": "单次可放电量 R u 1kWh"}, + {"key": "0x000F", "datatype": "int32", "remark": "堆功率 R 1kW"}, + {"key": "0x0011", "datatype": "int32", "remark": "充电量累加 R u 1kWh"}, + {"key": "0x0013", "datatype": "int32", "remark": "放电量累加 R u 1kWh"}, + {"key": "0x0015", "datatype": "int16", "remark": "簇最大SOC R u 0.1"}, + {"key": "0x0016", "datatype": "int16", "remark": "簇最小SOC R u 0.1"}, + {"key": "0x0017", "datatype": "int16", "remark": "簇最大SOC号 R u"}, + {"key": "0x0018", "datatype": "int16", "remark": "簇最小SOC号 R u"}, + {"key": "0x0019", "datatype": "int16", "remark": "簇SOC差值 R u 0.1"}, + {"key": "0x001A", "datatype": "int16", "remark": "簇最大电压 R u 0.1V"}, + {"key": "0x001B", "datatype": "int16", "remark": "簇最小电压 R u 0.1V"}, + {"key": "0x001C", "datatype": "int16", "remark": "簇最大电压号 R u"}, + {"key": "0x001D", "datatype": "int16", "remark": "簇最小电压号 R u"}, + {"key": "0x001E", "datatype": "int16", "remark": "簇电压差值 R u 0.1V"}, + {"key": "0x001F", "datatype": "int16", "remark": "单体最大电压簇号 R u"}, + {"key": "0x0020", "datatype": "int16", "remark": "单体最大电压节号 R u"}, + {"key": "0x0021", "datatype": "int16", "remark": "单体最大电压 R u mV"}, + {"key": "0x0022", "datatype": "int16", "remark": "单体最小电压簇号 R u"}, + {"key": "0x0023", "datatype": "int16", "remark": "单体最小电压节号 R u"}, + {"key": "0x0024", "datatype": "int16", "remark": "单体最小电压 R u mV"}, + {"key": "0x0025", "datatype": "int16", "remark": "单体平均电压 R u mV"}, + {"key": "0x0026", "datatype": "int16", "remark": "单体电压差 R u mV"}, + {"key": "0x0027", "datatype": "int16", "remark": "单体最大温度簇号 R u"}, + {"key": "0x0028", "datatype": "int16", "remark": "单体最大温度节号 R u"}, + {"key": "0x0029", "datatype": "int16", "remark": "单体最大温度 R 0.1℃"}, + {"key": "0x002A", "datatype": "int16", "remark": "单体最小温度簇号 R u"}, + {"key": "0x002B", "datatype": "int16", "remark": "单体最小温度节号 R u"}, + {"key": "0x002C", "datatype": "int16", "remark": "单体最小温度 R 0.1℃"}, + {"key": "0x002D", "datatype": "int16", "remark": "单体平均温度 R 0.1℃"}, + {"key": "0x002E", "datatype": "int16", "remark": "单体温度差 R 0.1℃"}, + {"key": "0x002F", "datatype": "int16", "remark": "最大内阻簇号 R u"}, + {"key": "0x0030", "datatype": "int16", "remark": "最大内阻节号 R u"}, + {"key": "0x0031", "datatype": "int16", "remark": "最大内阻 R u mΩ"}, + {"key": "0x0032", "datatype": "int16", "remark": "最小内阻簇号 R u"}, + {"key": "0x0033", "datatype": "int16", "remark": "最小内阻节号 R u"}, + {"key": "0x0034", "datatype": "int16", "remark": "最小内阻 R u mΩ"}, + {"key": "0x0035", "datatype": "int16", "remark": "单体平均内阻 R u mΩ"}, + {"key": "0x0036", "datatype": "int16", "remark": "单体内阻差 R u mΩ"}, + {"key": "0x0037", "datatype": "int16", "remark": "单体最大SOH簇号 R u"}, + {"key": "0x0038", "datatype": "int16", "remark": "单体最大SOH节号 R u"}, + {"key": "0x0039", "datatype": "int16", "remark": "单体最大SOH R u 0.10%"}, + {"key": "0x003A", "datatype": "int16", "remark": "单体最小SOH簇号 R u"}, + {"key": "0x003B", "datatype": "int16", "remark": "单体最小SOH节号 R u"}, + {"key": "0x003C", "datatype": "int16", "remark": "单体最小SOH R u 0.10%"}, + {"key": "0x003D", "datatype": "int16", "remark": "单体最大SOc簇号 R u"}, + {"key": "0x003E", "datatype": "int16", "remark": "单体最大SOc节号 R u"}, + {"key": "0x0040", "datatype": "int16", "remark": "单体最大Soc R u 0.10%"}, + {"key": "0x0041", "datatype": "int16", "remark": "单体最小SOc簇号 R u"}, + {"key": "0x0042", "datatype": "int16", "remark": "单体最小SOc节号 R u"}, + {"key": "0x0043", "datatype": "int16", "remark": "单体最小SOc R u 0.10%"}, + {"key": "0x0043", "datatype": "int32", "remark": "系统剩余最大可充电功率 R u 1KW"}, + {"key": "0x0045", "datatype": "int32", "remark": "系统剩余最大可放电功率 R u 1KW"}, + {"key": "0x0047", "datatype": "int16", "remark": "可充电状态 R u 1:可充电;0:不可充电"}, + {"key": "0x0048", "datatype": "int16", "remark": "可放电状态 R u 1:可放电;0:不可放电"}, + {"key": "0x0049", "datatype": "int16", "remark": "运行状态 R u 运行状态 0-正常 1-告警 2-保护"}, + {"key": "0x004A", "datatype": "int16", "remark": "充放电状态 R u 0-待机 1-充电 2-放电"} + ], + "EMSYX": [ + {"key": "0x2001", "datatype": "int16", "remark": "BMS(电池堆)通信状态 R u 0:正常1:故障 bit位从低到高分别对应1~16"}, + {"key": "0x2002", "datatype": "int64", "remark": "BCU(电池簇)通信状态 R u 0:正常1:故障 bit位从低到高分别对应1~64"}, + {"key": "0x2006", "datatype": "int16", "remark": "PCU(主控)通信状态 R u 0:正常1:故障 bit位从低到高分别对应1~16"}, + {"key": "0x2007", "datatype": "int64", "remark": "PCS(模块)通信状态 R u 0:正常1:故障 bit位从低到高分别对应1~64"}, + {"key": "0x200B", "datatype": "int16", "remark": "电表总接点通信状态 R u 0:正常1:故障 bit位从低到高分别对应1~16"}, + {"key": "0x200C", "datatype": "int32", "remark": "电表通信状态 R u 0:正常1:故障 bit位从低到高分别对应1~32"}, + {"key": "0x200E", "datatype": "int16", "remark": "消防通信状态 R u 0:正常1:故障 bit位从低到高分别对应1~16"}, + {"key": "0x200F", "datatype": "int16", "remark": "UPS通信状态 R u 0:正常1:故障 bit位从低到高分别对应1~16"}, + {"key": "0x2010", "datatype": "int16", "remark": "温湿度总接点通信状态 R u 0:正常1:故障 bit位从低到高分别对应1~16"}, + {"key": "0x2011", "datatype": "int32", "remark": "温湿度通信状态 R u 0:正常1:故障 bit位从低到高分别对应1~32"}, + {"key": "0x2013", "datatype": "int16", "remark": "空调总接点通信状态 R u 0:正常1:故障 bit位从低到高分别对应1~16"}, + {"key": "0x2014", "datatype": "int32", "remark": "空调通信状态 R u 0:正常1:故障 bit位从低到高分别对应1~32"}, + {"key": "0x2016", "datatype": "int16", "remark": "控制干接点(配电系统)状态 R u 0:开路1:闭合 bit位从低到高分别对应1~16"}, + {"key": "0x2017", "datatype": "int16", "remark": "状态干接点(配电系统)状态 R u 0:开路1:闭合 bit位从低到高分别对应1~16"}, + {"key": "0x2018", "datatype": "int16", "remark": "BCU总通信状态 R u 0:正常 1:告警 2:故障"}, + {"key": "0x2019", "datatype": "int16", "remark": "PCU总通信状态 R u 0:正常 1:告警 2:故障"}, + {"key": "0x201A", "datatype": "int16", "remark": "电表总通信状态 R u 0:正常 1:告警 2:故障"}, + {"key": "0x201B", "datatype": "int16", "remark": "消防总通信状态 R u 0:正常 1:告警 2:故障"}, + {"key": "0x201C", "datatype": "int16", "remark": "UPS总通信状态 R u 0:正常 1:告警 2:故障"}, + {"key": "0x201D", "datatype": "int16", "remark": "温湿度总通信状态 R u 0:正常 1:告警 2:故障"}, + {"key": "0x201E", "datatype": "int16", "remark": "空调总通信状态 R u 0:正常 1:告警 2:故障"}, + {"key": "0x201F", "datatype": "int16", "remark": "EMU通信状态 R u 0:正常 1:告警 2:故障"}, + {"key": "0x2020", "datatype": "int16", "remark": "冷机总通信状态 R u 0:正常 1:告警 2:故障"}, + {"key": "0x2021", "datatype": "int16", "remark": "冷机总接点通信状态 R u 0:正常1:故障 bit位从低到高分别对应1~16"}, + {"key": "0x2022", "datatype": "int16", "remark": "冷机通信状态 R u 0:正常1:故障 bit位从低到高分别对应1~16"}, + {"key": "0x2023", "datatype": "", "remark": "预留"}, + {"key": "0x207A", "datatype": "int16", "remark": "预留判断总表的三相总有功 < -5.0fkW 充电 >5.0fkW放电 否则停机 R u 0:充电 1:放电 2:停机 储能状态"} + ], + "EMSYC": [ + {"key": "0x1001", "datatype": "int16", "remark": "BMS(电池堆)个数 R u 1"}, + {"key": "0x1002", "datatype": "int16", "remark": "BCU通道个数 R u 1~2"}, + {"key": "0x1003", "datatype": "int16", "remark": "BCU(电池簇)个数 R u 1~40"}, + {"key": "0x1004", "datatype": "int16", "remark": "PCU(主控)个数 R u 1~4"}, + {"key": "0x1005", "datatype": "int16", "remark": "PCU通道个数 R u 1~4"}, + {"key": "0x1006", "datatype": "int16", "remark": "PCS(模块)个数 R u 1~40"}, + {"key": "0x1007", "datatype": "int16", "remark": "电表通道个数 R u 1"}, + {"key": "0x1008", "datatype": "int16", "remark": "电表个数 R u 1~10"}, + {"key": "0x1009", "datatype": "int16", "remark": "消防通道个数 R u 1~10"}, + {"key": "0x100A", "datatype": "int16", "remark": "消防个数 R u 1~10"}, + {"key": "0x100B", "datatype": "int16", "remark": "UPS通道个数 R u 1~10"}, + {"key": "0x100C", "datatype": "int16", "remark": "UPS个数 R u 1~10"}, + {"key": "0x100D", "datatype": "int16", "remark": "温湿度通道个数 R u 1"}, + {"key": "0x100E", "datatype": "int16", "remark": "温湿度个数 R u 1~10"}, + {"key": "0x100F", "datatype": "int16", "remark": "空调通道个数 R u 1"}, + {"key": "0x1010", "datatype": "int16", "remark": "空调个数 R u 1~10"}, + {"key": "0x1011", "datatype": "int16", "remark": "控制干接点(配电系统)个数 R u 16"}, + {"key": "0x1012", "datatype": "int16", "remark": "状态干接点(配电系统)个数 R u 16"}, + {"key": "0x1013", "datatype": "", "remark": "预留"}, + {"key": "0x1072", "datatype": "int32", "remark": "预留预留预留预留预留预留预留预留系统最大可充电功率 R u 1KW Pcu数据"}, + {"key": "0x1074", "datatype": "int32", "remark": "系统最大可放电功率 R u 1KW"}, + {"key": "0x1076", "datatype": "int32", "remark": "储能母线电压 R u 0.1V 堆数据"}, + {"key": "0x1078", "datatype": "int32", "remark": "储能母线电流 R 0.1A"}, + {"key": "0x107A", "datatype": "int16", "remark": "储能系统SOC R u 0.1"}, + {"key": "0x107B", "datatype": "int16", "remark": "储能系统SOH R u 0.1"}, + {"key": "0x107C", "datatype": "int16", "remark": "电流变比 R u 电表总表数据"}, + {"key": "0x107D", "datatype": "int16", "remark": "电压变比 R u"}, + {"key": "0x107E", "datatype": "int32", "remark": "A相电压 R u 1V"}, + {"key": "0x1080", "datatype": "int32", "remark": "B相电压 R u 1V"}, + {"key": "0x1082", "datatype": "int32", "remark": "C相电压 R u 1V"}, + {"key": "0x1084", "datatype": "int32", "remark": "A相电流 R 1A"}, + {"key": "0x1086", "datatype": "int32", "remark": "B相电流 R 1A"}, + {"key": "0x1088", "datatype": "int32", "remark": "C相电流 R 1A"}, + {"key": "0x108A", "datatype": "int32", "remark": "AB相电压 R u 1V"}, + {"key": "0x108C", "datatype": "int32", "remark": "BC相电压 R u 1V"}, + {"key": "0x108E", "datatype": "int32", "remark": "CA相电压 R u 1V"}, + {"key": "0x1090", "datatype": "int32", "remark": "A相有功功率 R 1kW"}, + {"key": "0x1092", "datatype": "int32", "remark": "B相有功功率 R 1kW"}, + {"key": "0x1094", "datatype": "int32", "remark": "C相有功功率 R 1kW"}, + {"key": "0x1096", "datatype": "int32", "remark": "三相总有功功率 R 1kW"}, + {"key": "0x1098", "datatype": "int32", "remark": "当前控制功率 R 0.1kW 堆数据"}, + {"key": "0x109A", "datatype": "int32", "remark": "负荷率 R u 1% 台区控制策略数据 0不拿 大于0 默认拿第一个"}, + {"key": "0x109C", "datatype": "int32", "remark": "三相不平衡度  R u 1%"}, + {"key": "0x109E", "datatype": "int32", "remark": "功率因素比率  R u 1%"}, + {"key": "0x10A0", "datatype": "int32", "remark": "进线开关柜功率 R 1kW 并网口电表"}, + {"key": "0x10A2", "datatype": "int32", "remark": "用户关口表功率 R 1kW 并网口电表"}, + {"key": "0x10A4", "datatype": "", "remark": "预留"}, + {"key": "0x1104", "datatype": "int32", "remark": "预留正向总有功总需量 R 1kW"}, + {"key": "0x1106", "datatype": "int32", "remark": "尖段电价 R u 1RMB"}, + {"key": "0x1108", "datatype": "int32", "remark": "峰段电价 R u 1RMB"}, + {"key": "0x110A", "datatype": "int32", "remark": "平段电价 R u 1RMB"}, + {"key": "0x110C", "datatype": "int32", "remark": "谷段电价 R u 1RMB"}, + {"key": "0x110E", "datatype": "int32", "remark": "日充电电量 R u 1kWh"}, + {"key": "0x1110", "datatype": "int32", "remark": "日放电电量 R u 1kWh"}, + {"key": "0x1112", "datatype": "int32", "remark": "日充电费用 R u 1RMB"}, + {"key": "0x1114", "datatype": "int32", "remark": "日放电费用 R u 1RMB"}, + {"key": "0x1116", "datatype": "int32", "remark": "日收益 R 1RMB"}, + {"key": "0x1118", "datatype": "int32", "remark": "日正向尖有功电能 R u 1kWh"}, + {"key": "0x111A", "datatype": "int32", "remark": "日正向峰有功电能 R u 1kWh"}, + {"key": "0x111C", "datatype": "int32", "remark": "日正向平有功电能 R u 1kWh"}, + {"key": "0x111E", "datatype": "int32", "remark": "日正向谷有功电能 R u 1kWh"}, + {"key": "0x1120", "datatype": "int32", "remark": "日正向总有功电能 R u 1kWh"}, + {"key": "0x1122", "datatype": "int32", "remark": "日反向尖有功电能 R u 1kWh"}, + {"key": "0x1124", "datatype": "int32", "remark": "日反向峰有功电能 R u 1kWh"}, + {"key": "0x1126", "datatype": "int32", "remark": "日反向平有功电能 R u 1kWh"}, + {"key": "0x1128", "datatype": "int32", "remark": "日反向谷有功电能 R u 1kWh"}, + {"key": "0x112A", "datatype": "int32", "remark": "日反向总有功电能 R u 1kWh"}, + {"key": "0x112C", "datatype": "int32", "remark": "总充电电量 R u 1kWh"}, + {"key": "0x112E", "datatype": "int32", "remark": "总放电电量 R u 1kWh"}, + {"key": "0x1130", "datatype": "int32", "remark": "总充电费用 R u 1RMB"}, + {"key": "0x1132", "datatype": "int32", "remark": "总放电费用 R u 1RMB"}, + {"key": "0x1134", "datatype": "int32", "remark": "总收益 R 1RMB"}, + {"key": "0x1136", "datatype": "int32", "remark": "总正向尖有功电能 R u 1kWh"}, + {"key": "0x1138", "datatype": "int32", "remark": "总正向峰有功电能 R u 1kWh"}, + {"key": "0x113A", "datatype": "int32", "remark": "总正向平有功电能 R u 1kWh"}, + {"key": "0x113C", "datatype": "int32", "remark": "总正向谷有功电能 R u 1kWh"}, + {"key": "0x113E", "datatype": "int32", "remark": "总正向总有功电能 R u 1kWh"}, + {"key": "0x1140", "datatype": "int32", "remark": "总反向尖有功电能 R u 1kWh"}, + {"key": "0x1142", "datatype": "int32", "remark": "总反向峰有功电能 R u 1kWh"}, + {"key": "0x1144", "datatype": "int32", "remark": "总反向平有功电能 R u 1kWh"}, + {"key": "0x1146", "datatype": "int32", "remark": "总反向谷有功电能 R u 1kWh"}, + {"key": "0x1148", "datatype": "int32", "remark": "总反向总有功电能 R u 1kWh"}, + {"key": "0x114A", "datatype": "", "remark": "预留"}, + {"key": "0x11AE", "datatype": "int16", "remark": "预留预留交流A相电压 R 1V"}, + {"key": "0x11AF", "datatype": "int16", "remark": "交流B相电压 R 1V"}, + {"key": "0x11B0", "datatype": "int16", "remark": "交流C相电压 R 1V"}, + {"key": "0x11B1", "datatype": "int16", "remark": "交流A相频率 R 1Hz"}, + {"key": "0x11B2", "datatype": "int16", "remark": "交流B相频率 R 1Hz"}, + {"key": "0x11B3", "datatype": "int16", "remark": "交流C相频率 R 1Hz"}, + {"key": "0x11B4", "datatype": "int32", "remark": "总直流功率 R 1kW"}, + {"key": "0x11B6", "datatype": "int32", "remark": "总直流电压 R u 0.1V"}, + {"key": "0x11B8", "datatype": "int32", "remark": "总直流电流 R 0.1A"}, + {"key": "0x11B9", "datatype": "", "remark": "预留"}, + {"key": "0x121B", "datatype": "int16", "remark": "预留预留储能系统温度 R 0.1℃ 堆里面单体温度最高"}, + {"key": "0x121C", "datatype": "int16", "remark": "储能充放电时段hh R u 时 0x01"}, + {"key": "0x121D", "datatype": "int16", "remark": "储能充放电时段mm R u 分 0x01"}, + {"key": "0x121E", "datatype": "int16", "remark": "储能充放电时段ss R u 秒 0x01"}, + {"key": "0x121F", "datatype": "int16", "remark": "储能系统各时段功率 R 1kW 0x01"} + ], + "PCSYX": [ + {"key": "0x1001", "datatype": "int16", "remark": "所属主控号 R u 1~4"}, + {"key": "0x1002", "datatype": "int16", "remark": "所属PCS号 R u 1~40"}, + {"key": "0x1003", "datatype": "int16", "remark": "故障状态 R u 1故障,0正常"}, + {"key": "0x1004", "datatype": "int16", "remark": "告警状态 R u 1告警,0正常"}, + {"key": "0x1005", "datatype": "int16", "remark": "设备在线 R u 1在线,0无效"}, + {"key": "0x1006", "datatype": "int16", "remark": "禁止充电 R u 1禁止,0无效"}, + {"key": "0x1007", "datatype": "int16", "remark": "禁止放电 R u 1禁止,0无效"}, + {"key": "0x1008", "datatype": "int16", "remark": "运行状态 R u 1开机,0关机"}, + {"key": "0x1009", "datatype": "int16", "remark": "充放状态 R u 0:待机,1:充电,2:放电,3:搁置"}, + {"key": "0x100A", "datatype": "int16", "remark": "电网状态 R u 1离网,0并网"}, + {"key": "0x100B", "datatype": "int16", "remark": "逆变供电 R u 0禁止,1使能"}, + {"key": "0x100C", "datatype": "int16", "remark": "缓启动完成 R u 0禁止,1使能"}, + {"key": "0x100D", "datatype": "int16", "remark": "主机标志 R u 0禁止,1使能"}, + {"key": "0x100E", "datatype": "int16", "remark": "并离网状态 R u 0:并网, 1:离网"}, + {"key": "0x100F", "datatype": "int16", "remark": "同步请求标志 R u 0:无效;1:动作"}, + {"key": "0x1010", "datatype": "int16", "remark": "绝缘故障 R u 1:故障,0正常"}, + {"key": "0x1011", "datatype": "int16", "remark": "漏电保护 R u 1:故障,0正常"}, + {"key": "0x1012", "datatype": "int16", "remark": "直流过压 R u 1:故障,0正常"}, + {"key": "0x1013", "datatype": "int16", "remark": "市电幅值异常 R u 1:故障,0正常"}, + {"key": "0x1014", "datatype": "int16", "remark": "市电相序异常 R u 1:故障,0正常"}, + {"key": "0x1015", "datatype": "int16", "remark": "温度开关异常 R u 1:故障,0正常"}, + {"key": "0x1016", "datatype": "int16", "remark": "市电频率异常 R u 1:故障,0正常"}, + {"key": "0x1017", "datatype": "int16", "remark": "IGBT过温 R u 1:故障,0正常"}, + {"key": "0x1018", "datatype": "int16", "remark": "交流接地故障 R u 1:故障,0正常"}, + {"key": "0x1019", "datatype": "int16", "remark": "逆变过流异常 R u 1:故障,0正常"}, + {"key": "0x101A", "datatype": "int16", "remark": "直流缓起故障 R u 1:故障,0正常"}, + {"key": "0x101B", "datatype": "int16", "remark": "直流主继电器故障 R u 1:故障,0正常"}, + {"key": "0x101C", "datatype": "int16", "remark": "风机异常 R u 1:故障,0正常"}, + {"key": "0x101D", "datatype": "int16", "remark": "主接触器异常 R u 1:故障,0正常"}, + {"key": "0x101E", "datatype": "int16", "remark": "均浮充切换超时 R u 1:故障,0正常"}, + {"key": "0x101F", "datatype": "int16", "remark": "硬件故障 R u 1:故障,0正常"}, + {"key": "0x1020", "datatype": "int16", "remark": "机内过温 R u 1:故障,0正常"}, + {"key": "0x1021", "datatype": "int16", "remark": "软启动故障 R u 1:故障,0正常"}, + {"key": "0x1022", "datatype": "int16", "remark": "触摸屏通讯故障 R u 1:故障,0正常"}, + {"key": "0x1023", "datatype": "int16", "remark": "防雷器故障 R u 1:故障,0正常"}, + {"key": "0x1024", "datatype": "int16", "remark": "急停故障 R u 1:故障,0正常"}, + {"key": "0x1025", "datatype": "int16", "remark": "BMS系统故障 R u 1:故障,0正常"}, + {"key": "0x1026", "datatype": "int16", "remark": "BMS通讯故障 R u 1:故障,0正常"}, + {"key": "0x1027", "datatype": "int16", "remark": "BMS干接点通讯故障 R u 1:故障,0正常"}, + {"key": "0x1028", "datatype": "int16", "remark": "远程通讯故障 R u 1:故障,0正常"}, + {"key": "0x1029", "datatype": "int16", "remark": "门禁告警 R u 1:故障,0正常"}, + {"key": "0x102A", "datatype": "int16", "remark": "锁相异常 R u 1:故障,0正常"}, + {"key": "0x102B", "datatype": "int16", "remark": "IGBT过温告警 R u 1:故障,0正常"}, + {"key": "0x102C", "datatype": "int16", "remark": "硬件过流保护 R u 1:故障,0正常"}, + {"key": "0x102D", "datatype": "int16", "remark": "驱动故障 R u 1:故障,0正常"}, + {"key": "0x102E", "datatype": "int16", "remark": "ID冲突 R u 1:故障,0正常"}, + {"key": "0x102F", "datatype": "int16", "remark": "电池过压 R u 1:故障,0正常"}, + {"key": "0x1030", "datatype": "int16", "remark": "电池欠压 R u 1:故障,0正常"}, + {"key": "0x1031", "datatype": "int16", "remark": "直流过流保护 R u 1:故障,0正常"}, + {"key": "0x1032", "datatype": "int16", "remark": "输出电压异常 R u 1:故障,0正常"}, + {"key": "0x1033", "datatype": "int16", "remark": "离网输出电压不符合 R u 1:故障,0正常"}, + {"key": "0x1034", "datatype": "int16", "remark": "输出过载保护 R u 1:故障,0正常"}, + {"key": "0x1035", "datatype": "int16", "remark": "输出短路保护 R u 1:故障,0正常"}, + {"key": "0x1036", "datatype": "int16", "remark": "并机通信异常 R u 1:故障,0正常"}, + {"key": "0x1037", "datatype": "int16", "remark": "电池保险异常 R u 1:故障,0正常"}, + {"key": "0x1038", "datatype": "int16", "remark": "电池重载低压 R u 1:故障,0正常"}, + {"key": "0x1039", "datatype": "int16", "remark": "电池低压告警 R u 1:故障,0正常"}, + {"key": "0x103A", "datatype": "int16", "remark": "一拖二压差过大 R u 1:故障,0正常"}, + {"key": "0x103B", "datatype": "int16", "remark": "电池反接故障 R u 1:故障,0正常"}, + {"key": "0x103C", "datatype": "int16", "remark": "电池电压异常 R u 1:故障,0正常"}, + {"key": "0x103D", "datatype": "int16", "remark": "过载告警 R u 1:故障,0正常"}, + {"key": "0x103E", "datatype": "int16", "remark": "外部接触器异常 R u 1:故障,0正常"}, + {"key": "0x103F", "datatype": "int16", "remark": "IGBT温度传感器异常 R u 1:故障,0正常"}, + {"key": "0x1040", "datatype": "int16", "remark": "整机温度传感器异常 R u 1:故障,0正常"}, + {"key": "0x1041", "datatype": "int16", "remark": "市电CT异常 R u 1:故障,0正常"}, + {"key": "0x1042", "datatype": "int16", "remark": "逆变电流三相不平衡 R u 1:故障,0正常"}, + {"key": "0x1043", "datatype": "int16", "remark": "逆变电流直流分量异常 R u 1:故障,0正常"}, + {"key": "0x1044", "datatype": "int16", "remark": "母线不平衡 R u 1:故障,0正常"}, + {"key": "0x1045", "datatype": "int16", "remark": "逆变电压直流分量异常 R u 1:故障,0正常"}, + {"key": "0x1046", "datatype": "int16", "remark": "主接触器控制异常 R u 1:故障,0正常"}, + {"key": "0x1047", "datatype": "int16", "remark": "逆变电压控制异常 R u 1:故障,0正常"}, + {"key": "0x1048", "datatype": "int16", "remark": "直流霍尔异常 R u 1:故障,0正常"}, + {"key": "0x1049", "datatype": "int16", "remark": "电池单体过压 R u 1:故障,0正常"}, + {"key": "0x104A", "datatype": "int16", "remark": "电池单体欠压 R u 1:故障,0正常"}, + {"key": "0x104B", "datatype": "int16", "remark": "电网过压 R u 1:故障,0正常"}, + {"key": "0x104C", "datatype": "int16", "remark": "电网欠压 R u 1:故障,0正常"}, + {"key": "0x104D", "datatype": "int16", "remark": "电网过频 R u 1:故障,0正常"}, + {"key": "0x104E", "datatype": "int16", "remark": "电网欠频 R u 1:故障,0正常"}, + {"key": "0x104F", "datatype": "int16", "remark": "市电不平衡 R u 1:故障,0正常"}, + {"key": "0x1050", "datatype": "int16", "remark": "参数设置不匹配 R u 1:故障,0正常"}, + {"key": "0x1051", "datatype": "int16", "remark": "SPI通信异常 R u 1:故障,0正常"}, + {"key": "0x1052", "datatype": "int16", "remark": "SCI通信异常 R u 1:故障,0正常"}, + {"key": "0x1053", "datatype": "int16", "remark": "IIC通信异常 R u 1:故障,0正常"}, + {"key": "0x1054", "datatype": "int16", "remark": "Xintf通信异常 R u 1:故障,0正常"}, + {"key": "0x1055", "datatype": "int16", "remark": "零偏校准异常 R u 1:故障,0正常"}, + {"key": "0x1056", "datatype": "int16", "remark": "烟雾告警 R u 1:故障,0正常"}, + {"key": "0x1057", "datatype": "int16", "remark": "无电池组故障 R u 1异常,0正常"}, + {"key": "0x1058", "datatype": "int16", "remark": "环温降频 R u 1异常,0正常"}, + {"key": "0x1059", "datatype": "int16", "remark": "交流过载 R u 1异常,0正常"}, + {"key": "0x105A", "datatype": "int16", "remark": "采样异常 R u 1异常,0正常"}, + {"key": "0x105B", "datatype": "int16", "remark": "24V辅源故障 R u 1异常,0正常"}, + {"key": "0x105C", "datatype": "int16", "remark": "直流欠压异常 R u 1异常,0正常"}, + {"key": "0x105D", "datatype": "int16", "remark": "散热器过温 R u 1异常,0正常"}, + {"key": "0x105E", "datatype": "int16", "remark": "CAN配置故障 R u 1异常,0正常"}, + {"key": "0x105F", "datatype": "int16", "remark": "3.3V辅源故障 R u 1异常,0正常"}, + {"key": "0x1060", "datatype": "int16", "remark": "环境过温 R u 1异常,0正常"}, + {"key": "0x1061", "datatype": "int16", "remark": "A相IGBT逆变过流 R u 1异常,0正常"}, + {"key": "0x1062", "datatype": "int16", "remark": "B相IGBT逆变过流 R u 1异常,0正常"}, + {"key": "0x1063", "datatype": "int16", "remark": "C相IGBT逆变过流 R u 1异常,0正常"} + ], + "PCSYC": [ + {"key": "0x0001", "datatype": "int16", "remark": "所属主控号 R u 1~4"}, + {"key": "0x0002", "datatype": "int16", "remark": "所属PCS号 R u 1~40"}, + {"key": "0x0003", "datatype": "int32", "remark": "总充电量 R u 1kWh"}, + {"key": "0x0005", "datatype": "int32", "remark": "总放电量 R u 1kWh"}, + {"key": "0x0007", "datatype": "int16", "remark": "散热器温度 R 1℃"}, + {"key": "0x0008", "datatype": "int16", "remark": "内部温度 R 1℃"}, + {"key": "0x0009", "datatype": "int16", "remark": "最大允许充电功率 R 0.1kW"}, + {"key": "0x000A", "datatype": "int16", "remark": "最大允许放电功率 R 0.1kW"}, + {"key": "0x000B", "datatype": "int16", "remark": "有功功率期望 R 1kWh"}, + {"key": "0x000C", "datatype": "int16", "remark": "无功功率期望 R 1kVar"}, + {"key": "0x000D", "datatype": "int16", "remark": "AB线电压 R 1V"}, + {"key": "0x000E", "datatype": "int16", "remark": "BC线电压 R 1V"}, + {"key": "0x000F", "datatype": "int16", "remark": "CA线电压 R 1V"}, + {"key": "0x0010", "datatype": "int16", "remark": "A相电压 R 1V"}, + {"key": "0x0011", "datatype": "int16", "remark": "B相电压 R 1V"}, + {"key": "0x0012", "datatype": "int16", "remark": "C相电压 R 1V"}, + {"key": "0x0013", "datatype": "int16", "remark": "A相频率 R 1Hz"}, + {"key": "0x0014", "datatype": "int16", "remark": "B相频率 R 1Hz"}, + {"key": "0x0015", "datatype": "int16", "remark": "C相频率 R 1Hz"}, + {"key": "0x0016", "datatype": "int16", "remark": "A相功率因数 R 1"}, + {"key": "0x0017", "datatype": "int16", "remark": "B相功率因数 R 1"}, + {"key": "0x0018", "datatype": "int16", "remark": "C相功率因数 R 1"}, + {"key": "0x0019", "datatype": "int16", "remark": "A相电流 R 1A"}, + {"key": "0x001A", "datatype": "int16", "remark": "B相电流 R 1A"}, + {"key": "0x001B", "datatype": "int16", "remark": "C相电流 R 1A"}, + {"key": "0x001C", "datatype": "int16", "remark": "A相有功功率 R 1kW"}, + {"key": "0x001D", "datatype": "int16", "remark": "B相有功功率 R 1kW"}, + {"key": "0x001E", "datatype": "int16", "remark": "C相有功功率 R 1kW"}, + {"key": "0x001F", "datatype": "int16", "remark": "A相无功功率 R 1kVar"}, + {"key": "0x0020", "datatype": "int16", "remark": "B相无功功率 R 1kVar"}, + {"key": "0x0021", "datatype": "int16", "remark": "C相无功功率 R 1kVar"}, + {"key": "0x0022", "datatype": "int16", "remark": "A相视在功率 R 1kVA"}, + {"key": "0x0023", "datatype": "int16", "remark": "B相视在功率 R 1kVA"}, + {"key": "0x0024", "datatype": "int16", "remark": "C相视在功率 R 1kVA"}, + {"key": "0x0025", "datatype": "int16", "remark": "三相总有功功率 R 1kW"}, + {"key": "0x0026", "datatype": "int16", "remark": "三相总无功功率 R 1kVar"}, + {"key": "0x0027", "datatype": "int16", "remark": "三相总视在功率 R 1kVA"}, + {"key": "0x0028", "datatype": "int16", "remark": "三相总功率因数 R 1"}, + {"key": "0x0029", "datatype": "int16", "remark": "直流功率 R 1kW"}, + {"key": "0x002A", "datatype": "int16", "remark": "直流电压 R 1V"}, + {"key": "0x002B", "datatype": "int16", "remark": "直流电流 R 1A"}, + {"key": "0x002C", "datatype": "int16", "remark": "充电功率 R 1kW"}, + {"key": "0x002D", "datatype": "int16", "remark": "放电功率 R 1kW"}, + {"key": "0x002E", "datatype": "int16", "remark": "PF值 R 1"}, + {"key": "0x002F", "datatype": "int16", "remark": "UV线/U相电网计量线电压 R 1V"}, + {"key": "0x0030", "datatype": "int16", "remark": "VW线/V相电网计量线电压 R 1V"}, + {"key": "0x0031", "datatype": "int16", "remark": "WU线/W相电网计量线电压 R 1V"}, + {"key": "0x0032", "datatype": "int16", "remark": "U相电网计量电流 R 1A"}, + {"key": "0x0033", "datatype": "int16", "remark": "V相电网计量电流 R 1A"}, + {"key": "0x0034", "datatype": "int16", "remark": "W相电网计量电流 R 1A"}, + {"key": "0x0035", "datatype": "int16", "remark": "正母线电压 R 1V"}, + {"key": "0x0036", "datatype": "int16", "remark": "可用功率 R 1kVA"}, + {"key": "0x0037", "datatype": "int16", "remark": "负母线电压 R 1V"}, + {"key": "0x0038", "datatype": "int16", "remark": "A相IGBT温度 R 1℃"}, + {"key": "0x0039", "datatype": "int16", "remark": "B相IGBT温度 R 1℃"}, + {"key": "0x003A", "datatype": "int16", "remark": "C相IGBT温度 R 1℃"}, + {"key": "0x003B", "datatype": "int16", "remark": "逆变侧AB线电压 R 1V"}, + {"key": "0x003C", "datatype": "int16", "remark": "逆变侧BC线电压 R 1V"}, + {"key": "0x003D", "datatype": "int16", "remark": "逆变侧CA线电压 R 1V"}, + {"key": "0x003E", "datatype": "int16", "remark": "逆变侧A相电压 R 1V"}, + {"key": "0x003F", "datatype": "int16", "remark": "逆变侧B相电压 R 1V"}, + {"key": "0x0040", "datatype": "int16", "remark": "逆变侧C相电压 R 1V"}, + {"key": "0x0041", "datatype": "int16", "remark": "逆变侧A相电流 R 1A"}, + {"key": "0x0042", "datatype": "int16", "remark": "逆变侧B相电流 R 1A"}, + {"key": "0x0043", "datatype": "int16", "remark": "逆变侧C相电流 R 1A"}, + {"key": "0x0044", "datatype": "int16", "remark": "逆变侧A相电流直流分量 R 1A"}, + {"key": "0x0045", "datatype": "int16", "remark": "逆变侧B相电流直流分量 R 1A"}, + {"key": "0x0046", "datatype": "int16", "remark": "逆变侧C相电流直流分量 R 1A"}, + {"key": "0x0047", "datatype": "int16", "remark": "离网频率 R 1Hz"}, + {"key": "0x0048", "datatype": "int16", "remark": "A相负载量 R 1"}, + {"key": "0x0049", "datatype": "int16", "remark": "B相负载量 R 1"}, + {"key": "0x004A", "datatype": "int16", "remark": "C相负载量 R 1"}, + {"key": "0x004B", "datatype": "int16", "remark": "总负载量 R 1"}, + {"key": "0x004C", "datatype": "int16", "remark": "逆变侧AB线电压直流分量 R 1A"}, + {"key": "0x004D", "datatype": "int16", "remark": "逆变侧BC线电压直流分量 R 1A"}, + {"key": "0x004E", "datatype": "int16", "remark": "逆变侧CA线电压直流分量 R 1A"}, + {"key": "0x004F", "datatype": "int16", "remark": "在线数量 R "}, + {"key": "0x0050", "datatype": "int16", "remark": "逆变数量 R "} + ], + "PCUYX": [ + {"key": "0x1001", "datatype": "int16", "remark": "所属通道号 R u 1~4"}, + {"key": "0x1002", "datatype": "int16", "remark": "故障状态 R u 1故障,0正常"}, + {"key": "0x1003", "datatype": "int16", "remark": "告警状态 R u 1告警,0正常"}, + {"key": "0x1004", "datatype": "int16", "remark": "设备在线 R u 1在线,0无效"}, + {"key": "0x1005", "datatype": "int16", "remark": "本地远程 R u 1本地,0远程"}, + {"key": "0x1006", "datatype": "int16", "remark": "启停状态 R u 1开机,0关机"}, + {"key": "0x1007", "datatype": "int16", "remark": "电网状态 R u 1离网,0并网"}, + {"key": "0x1008", "datatype": "int16", "remark": "模块状态 R u 1开机,0待机"}, + {"key": "0x1009", "datatype": "int16", "remark": "EPO急停 R u 1故障,0正常"}, + {"key": "0x100A", "datatype": "int16", "remark": "防雷器异常 R u 1告警,0正常"}, + {"key": "0x100B", "datatype": "int16", "remark": "负载电压反序 R u 1故障,0正常"}, + {"key": "0x100C", "datatype": "int16", "remark": "市电电压反序 R u 1故障,0正常"}, + {"key": "0x100D", "datatype": "int16", "remark": "输出相反序 R u 1故障,0正常"}, + {"key": "0x100E", "datatype": "int16", "remark": "过载告警 R u 1告警,0正常"}, + {"key": "0x100F", "datatype": "int16", "remark": "过载超时 R u 1故障,0正常"}, + {"key": "0x1010", "datatype": "int16", "remark": "交流过流保护 R u 1故障,0正常"}, + {"key": "0x1011", "datatype": "int16", "remark": "逆变电压异常 R u 1故障,0正常"}, + {"key": "0x1012", "datatype": "int16", "remark": "内部串口异常 R u 1故障,0正常"}, + {"key": "0x1013", "datatype": "int16", "remark": "485通信故障 R u 1故障,0正常"}, + {"key": "0x1014", "datatype": "int16", "remark": "CAN通信故障 R u 1故障,0正常"}, + {"key": "0x1015", "datatype": "int16", "remark": "E2PROM故障 R u 1故障,0正常"}, + {"key": "0x1016", "datatype": "int16", "remark": "电网过压 R u 1故障,0正常"}, + {"key": "0x1017", "datatype": "int16", "remark": "电网欠压 R u 1故障,0正常"}, + {"key": "0x1018", "datatype": "int16", "remark": "电网过频 R u 1故障,0正常"}, + {"key": "0x1019", "datatype": "int16", "remark": "电网欠频 R u 1故障,0正常"}, + {"key": "0x101A", "datatype": "int16", "remark": "电网快检综合异常 R u 1故障,0正常"}, + {"key": "0x101B", "datatype": "int16", "remark": "电网幅值快检异常 R u 1故障,0正常"}, + {"key": "0x101C", "datatype": "int16", "remark": "电网拖尾异常 R u 1故障,0正常"}, + {"key": "0x101D", "datatype": "int16", "remark": "消防输入信号NO R u 1闭合,0断开"}, + {"key": "0x101E", "datatype": "int16", "remark": "急停按钮信号NC R u 1急停,0正常"}, + {"key": "0x101F", "datatype": "int16", "remark": "避雷器NC R u 1故障,0正常"}, + {"key": "0x1020", "datatype": "int16", "remark": "避雷器断路器NC R u 1故障,0正常"}, + {"key": "0x1021", "datatype": "int16", "remark": "PCS总断路器NC R u 1闭合,0断开"}, + {"key": "0x1022", "datatype": "int16", "remark": "电操状态NO R u 1闭合,0断开"}, + {"key": "0x1023", "datatype": "int16", "remark": "远程关机NO R u 1开机,0无效"}, + {"key": "0x1024", "datatype": "int16", "remark": "远程开机NO R u 1开机,0无效"}, + {"key": "0x1025", "datatype": "int16", "remark": "BA故障信号NO R u 1故障,0正常"}, + {"key": "0x1026", "datatype": "int16", "remark": "PCS_01状态 R u 1在线,0掉线"}, + {"key": "0x1027", "datatype": "int16", "remark": "PCS_02状态 R u 1在线,0掉线"}, + {"key": "0x1028", "datatype": "int16", "remark": "PCS_03状态 R u 1在线,0掉线"}, + {"key": "0x1029", "datatype": "int16", "remark": "PCS_04状态 R u 1在线,0掉线"}, + {"key": "0x102A", "datatype": "int16", "remark": "PCS_05状态 R u 1在线,0掉线"}, + {"key": "0x102B", "datatype": "int16", "remark": "PCS_06状态 R u 1在线,0掉线"}, + {"key": "0x102C", "datatype": "int16", "remark": "PCS_07状态 R u 1在线,0掉线"}, + {"key": "0x102D", "datatype": "int16", "remark": "PCS_09状态 R u 1在线,0掉线"}, + {"key": "0x102E", "datatype": "int16", "remark": "PCS_10状态 R u 1在线,0掉线"}, + {"key": "0x102F", "datatype": "int16", "remark": "PCS_01下发设置 R u 1故障,0正常"}, + {"key": "0x1030", "datatype": "int16", "remark": "PCS_02下发设置 R u 1故障,0正常"}, + {"key": "0x1031", "datatype": "int16", "remark": "PCS_03下发设置 R u 1故障,0正常"}, + {"key": "0x1032", "datatype": "int16", "remark": "PCS_04下发设置 R u 1故障,0正常"}, + {"key": "0x1033", "datatype": "int16", "remark": "PCS_05下发设置 R u 1故障,0正常"}, + {"key": "0x1034", "datatype": "int16", "remark": "PCS_06下发设置 R u 1故障,0正常"}, + {"key": "0x1035", "datatype": "int16", "remark": "PCS_07下发设置 R u 1故障,0正常"}, + {"key": "0x1036", "datatype": "int16", "remark": "PCS_08下发设置 R u 1故障,0正常"}, + {"key": "0x1037", "datatype": "int16", "remark": "PCS_09下发设置 R u 1故障,0正常"}, + {"key": "0x1038", "datatype": "int16", "remark": "PCS_10下发设置 R u 1:故障,0正常"}, + {"key": "0x1039", "datatype": "int16", "remark": "内部DSP通信故障 R u 1:故障,0正常"}, + {"key": "0x103A", "datatype": "int16", "remark": "BMS CAN通信故障 R u 1:故障,0正常"}, + {"key": "0x103B", "datatype": "int16", "remark": "下发设置失败 R u 1:故障,0正常"} + ], + "PCUYC": [ + {"key": "0x0001", "datatype": "int16", "remark": "所属通道号 R u 1~4"}, + {"key": "0x0002", "datatype": "int32", "remark": "充电功率最大许可 R u 1KW"}, + {"key": "0x0004", "datatype": "int32", "remark": "放电功率最大许可 R u 1KW"}, + {"key": "0x0006", "datatype": "int32", "remark": "交流日总充电量 R u 1KWh"}, + {"key": "0x0008", "datatype": "int32", "remark": "交流日总放电量 R u 1KWh"}, + {"key": "0x000A", "datatype": "int32", "remark": "交流总充电量 R u 1KWh"}, + {"key": "0x000C", "datatype": "int32", "remark": "交流总放电量 R u 1KWh"}, + {"key": "0x000E", "datatype": "int16", "remark": "有功功率期望值 R 1KW"}, + {"key": "0x000F", "datatype": "int16", "remark": "无功功率期望值 R 1kVar"}, + {"key": "0x0010", "datatype": "int16", "remark": "PCS侧线电压VAB R 1v"}, + {"key": "0x0011", "datatype": "int16", "remark": "PCS侧线电压VBC R 1v"}, + {"key": "0x0012", "datatype": "int16", "remark": "PCS侧线电压VCA R 1v"}, + {"key": "0x0013", "datatype": "int16", "remark": "PCS侧线A相电压 R 1v"}, + {"key": "0x0014", "datatype": "int16", "remark": "PCS侧线B相电压 R 1v"}, + {"key": "0x0015", "datatype": "int16", "remark": "PCS侧线C相电压 R 1v"}, + {"key": "0x0016", "datatype": "int16", "remark": "PCS侧A相频率 R 1Hz"}, + {"key": "0x0017", "datatype": "int16", "remark": "PCS侧B相频率 R 1Hz"}, + {"key": "0x0018", "datatype": "int16", "remark": "PCS侧C相频率 R 1Hz"}, + {"key": "0x0019", "datatype": "int16", "remark": "PCS侧功率因数A R 1"}, + {"key": "0x001A", "datatype": "int16", "remark": "PCS侧功率因数B R 1"}, + {"key": "0x001B", "datatype": "int16", "remark": "PCS侧功率因数C R 1"}, + {"key": "0x001C", "datatype": "int16", "remark": "PCS侧相电流A R 1A"}, + {"key": "0x001D", "datatype": "int16", "remark": "PCS侧相电流B R 1A"}, + {"key": "0x001E", "datatype": "int16", "remark": "PCS侧相电流C R 1A"}, + {"key": "0x001F", "datatype": "int16", "remark": "PCS侧有功功率A R 1kW"}, + {"key": "0x0020", "datatype": "int16", "remark": "PCS侧有功功率B R 1kW"}, + {"key": "0x0021", "datatype": "int16", "remark": "PCS侧有功功率C R 1kW"}, + {"key": "0x0022", "datatype": "int16", "remark": "PCS侧无功功率A R 1kVar"}, + {"key": "0x0023", "datatype": "int16", "remark": "PCS侧无功功率B R 1kVar"}, + {"key": "0x0024", "datatype": "int16", "remark": "PCS侧无功功率C R 1kVar"}, + {"key": "0x0025", "datatype": "int16", "remark": "PCS侧视在功率A R 1kVar"}, + {"key": "0x0026", "datatype": "int16", "remark": "PCS侧视在功率B R 1kVar"}, + {"key": "0x0027", "datatype": "int16", "remark": "PCS侧视在功率C R 1kVar"}, + {"key": "0x0028", "datatype": "int16", "remark": "PCS侧三相总有功功率 R 1kW"}, + {"key": "0x0029", "datatype": "int16", "remark": "PCS侧三相总无功功率 R 1kVar"}, + {"key": "0x002A", "datatype": "int16", "remark": "PCS侧三相总视在功率 R 1kVA"}, + {"key": "0x002B", "datatype": "int16", "remark": "PCS侧三相总功率因数 R 1"}, + {"key": "0x002C", "datatype": "int16", "remark": "PCU模块温度 R 1℃"}, + {"key": "0x002D", "datatype": "int16", "remark": "外部温度NTC1 R 1℃"}, + {"key": "0x002E", "datatype": "int16", "remark": "外部温度NTC2 R 1℃"}, + {"key": "0x002F", "datatype": "int16", "remark": "外部温度NTC3 R 1℃"}, + {"key": "0x0030", "datatype": "int16", "remark": "台区负载侧A相电流 R 1A"}, + {"key": "0x0031", "datatype": "int16", "remark": "台区负载侧B相电流 R 1A"}, + {"key": "0x0032", "datatype": "int16", "remark": "台区负载侧C相电流 R 1A"}, + {"key": "0x0033", "datatype": "int16", "remark": "台区负载侧A相有功功率 R 1kW"}, + {"key": "0x0034", "datatype": "int16", "remark": "台区负载侧B相有功功率 R 1kW"}, + {"key": "0x0035", "datatype": "int16", "remark": "台区负载侧C相有功功率 R 1kW"}, + {"key": "0x0036", "datatype": "int16", "remark": "台区负载侧总有功功率 R 1kW"}, + {"key": "0x0037", "datatype": "int16", "remark": "台区负载侧A相无功功率 R 1kVar"}, + {"key": "0x0038", "datatype": "int16", "remark": "台区负载侧B相无功功率 R 1kVar"}, + {"key": "0x0039", "datatype": "int16", "remark": "台区负载侧C相无功功率 R 1kVar"}, + {"key": "0x003A", "datatype": "int16", "remark": "台区负载侧总无功功率 R 1kVar"}, + {"key": "0x003B", "datatype": "int16", "remark": "台区负载侧A相视在功率 R 1kVA"}, + {"key": "0x003C", "datatype": "int16", "remark": "台区负载侧B相视在功率 R 1kVA"}, + {"key": "0x003D", "datatype": "int16", "remark": "台区负载侧C相视在功率 R 1kVA"}, + {"key": "0x003E", "datatype": "int16", "remark": "台区负载侧总视在功率 R 1kVA"}, + {"key": "0x003F", "datatype": "int16", "remark": "台区负载侧A相功率因数 R 1"}, + {"key": "0x0040", "datatype": "int16", "remark": "台区负载侧B相功率因数 R 1"}, + {"key": "0x0041", "datatype": "int16", "remark": "台区负载侧C相功率因数 R 1"}, + {"key": "0x0042", "datatype": "int16", "remark": "台区负载侧总功率因数 R 1"}, + {"key": "0x0043", "datatype": "int16", "remark": "负载侧线电压AB R 1V"}, + {"key": "0x0044", "datatype": "int16", "remark": "负载侧线电压BC R 1V"}, + {"key": "0x0045", "datatype": "int16", "remark": "负载侧线电压CA R 1V"}, + {"key": "0x0046", "datatype": "int16", "remark": "负载侧相电压AN R 1V"}, + {"key": "0x0047", "datatype": "int16", "remark": "负载侧相电压BN R 1V"}, + {"key": "0x0048", "datatype": "int16", "remark": "负载侧相电压CN R 1V"}, + {"key": "0x0049", "datatype": "int16", "remark": "负载侧A功率因素 R 1"}, + {"key": "0x004A", "datatype": "int16", "remark": "负载侧B功率因素 R 1"}, + {"key": "0x004B", "datatype": "int16", "remark": "负载侧C功率因素 R 1"}, + {"key": "0x004C", "datatype": "int16", "remark": "负载侧A视在功率 R 1kVA"}, + {"key": "0x004D", "datatype": "int16", "remark": "负载侧B视在功率 R 1kVA"}, + {"key": "0x004E", "datatype": "int16", "remark": "负载侧C视在功率 R 1kVA"} + ], + "MEMYC": [ + {"key": "0x0001", "datatype": "int16", "remark": "所属通道号 R u 1"}, + {"key": "0x0002", "datatype": "int16", "remark": "电表地址 R u[6]"}, + {"key": "0x0008", "datatype": "int16", "remark": "电表类型 R u 0:储能站总表1:逆变前侧电表2:逆变后侧电表3:配电柜电表4:并网口电表"}, + {"key": "0x0009", "datatype": "int16", "remark": "电流变比 R u"}, + {"key": "0x000A", "datatype": "int16", "remark": "电压变比 R u"}, + {"key": "0x000B", "datatype": "int32", "remark": "A相电压 R u 1V"}, + {"key": "0x000D", "datatype": "int32", "remark": "B相电压 R u 1V"}, + {"key": "0x000F", "datatype": "int32", "remark": "C相电压 R u 1V"}, + {"key": "0x0011", "datatype": "int32", "remark": "A相电流 R 1A"}, + {"key": "0x0013", "datatype": "int32", "remark": "B相电流 R 1A"}, + {"key": "0x0015", "datatype": "int32", "remark": "C相电流 R 1A"}, + {"key": "0x0017", "datatype": "int32", "remark": "AB相电压 R u 1V"}, + {"key": "0x0019", "datatype": "int32", "remark": "BC相电压 R u 1V"}, + {"key": "0x001B", "datatype": "int32", "remark": "CA相电压 R u 1V"}, + {"key": "0x001D", "datatype": "int32", "remark": "A相有功 R 1kW"}, + {"key": "0x001F", "datatype": "int32", "remark": "B相有功 R 1kW"}, + {"key": "0x0021", "datatype": "int32", "remark": "C相有功 R 1kW"}, + {"key": "0x0023", "datatype": "int32", "remark": "三相总有功 R 1kW"}, + {"key": "0x0025", "datatype": "int32", "remark": "正向总有功总需量 R 1kW"}, + {"key": "0x0027", "datatype": "int32", "remark": "尖段电价 R u 1RMB"}, + {"key": "0x0029", "datatype": "int32", "remark": "峰段电价 R u 1RMB"}, + {"key": "0x002B", "datatype": "int32", "remark": "平段电价 R u 1RMB"}, + {"key": "0x002D", "datatype": "int32", "remark": "谷段电价 R u 1RMB"}, + {"key": "0x002F", "datatype": "int32", "remark": "日充电电量 R u 1kWh"}, + {"key": "0x0031", "datatype": "int32", "remark": "日放电电量 R u 1kWh"}, + {"key": "0x0033", "datatype": "int32", "remark": "日充电费用 R u 1RMB"}, + {"key": "0x0035", "datatype": "int32", "remark": "日放电费用 R u 1RMB"}, + {"key": "0x0037", "datatype": "int32", "remark": "日收益 R 1RMB"}, + {"key": "0x0039", "datatype": "int32", "remark": "日正向尖有功电能 R u 1kWh"}, + {"key": "0x003B", "datatype": "int32", "remark": "日正向峰有功电能 R u 1kWh"}, + {"key": "0x003D", "datatype": "int32", "remark": "日正向平有功电能 R u 1kWh"}, + {"key": "0x003F", "datatype": "int32", "remark": "日正向谷有功电能 R u 1kWh"}, + {"key": "0x0041", "datatype": "int32", "remark": "日正向总有功电能 R u 1kWh"}, + {"key": "0x0043", "datatype": "int32", "remark": "日反向尖有功电能 R u 1kWh"}, + {"key": "0x0045", "datatype": "int32", "remark": "日反向峰有功电能 R u 1kWh"}, + {"key": "0x0047", "datatype": "int32", "remark": "日反向平有功电能 R u 1kWh"}, + {"key": "0x0049", "datatype": "int32", "remark": "日反向谷有功电能 R u 1kWh"}, + {"key": "0x004B", "datatype": "int32", "remark": "日反向总有功电能 R u 1kWh"}, + {"key": "0x004D", "datatype": "int32", "remark": "总充电电量 R u 1kWh"}, + {"key": "0x004F", "datatype": "int32", "remark": "总放电电量 R u 1kWh"}, + {"key": "0x0051", "datatype": "int32", "remark": "总充电费用 R u 1RMB"}, + {"key": "0x0053", "datatype": "int32", "remark": "总放电费用 R u 1RMB"}, + {"key": "0x0055", "datatype": "int32", "remark": "总收益 R 1RMB"}, + {"key": "0x0057", "datatype": "int32", "remark": "总正向尖有功电能 R u 1kWh"}, + {"key": "0x0059", "datatype": "int32", "remark": "总正向峰有功电能 R u 1kWh"}, + {"key": "0x005B", "datatype": "int32", "remark": "总正向平有功电能 R u 1kWh"}, + {"key": "0x005D", "datatype": "int32", "remark": "总正向谷有功电能 R u 1kWh"}, + {"key": "0x005F", "datatype": "int32", "remark": "总正向总有功电能 R u 1kWh"}, + {"key": "0x0061", "datatype": "int32", "remark": "总反向尖有功电能 R u 1kWh"}, + {"key": "0x0063", "datatype": "int32", "remark": "总反向峰有功电能 R u 1kWh"}, + {"key": "0x0065", "datatype": "int32", "remark": "总反向平有功电能 R u 1kWh"}, + {"key": "0x0067", "datatype": "int32", "remark": "总反向谷有功电能 R u 1kWh"}, + {"key": "0x0069", "datatype": "int32", "remark": "总反向总有功电能 R u 1kWh"} + ], + "THYC": [ + {"key": "0x0001", "datatype": "int16", "remark": "所属通道号 R u 1"}, + {"key": "0x0002", "datatype": "int16", "remark": "所属温湿度号 R u 1~10"}, + {"key": "0x0003", "datatype": "int16", "remark": "温度 R 0.1℃"}, + {"key": "0x0004", "datatype": "int16", "remark": "湿度 R 0.1℃"} + ], + "Fire40YX": [ + {"key": "0x0001", "datatype": "int16", "remark": "所属通道号 R u 1~10"}, + {"key": "0x0002", "datatype": "int16", "remark": "主控数量 R u 1"}, + {"key": "0x0003", "datatype": "int16", "remark": "主控ID R u 1"}, + {"key": "0x0004", "datatype": "int16", "remark": "主控状态 R u 0:正常 1:预警 2:火警"}, + {"key": "0x0005", "datatype": "int16", "remark": "主控硬件版本 R u[2] 主控硬件版本"}, + {"key": "0x0007", "datatype": "int16", "remark": "主控软件版本 R u[2] 主控软件版本"}, + {"key": "0x0009", "datatype": "int16", "remark": "主电状态 R u 0:使用市电 1:使用备电"}, + {"key": "0x000A", "datatype": "int32", "remark": "备电电流 R u 0.1A"}, + {"key": "0x000C", "datatype": "int32", "remark": "备电电压 R u 0.1V"}, + {"key": "0x000E", "datatype": "int32", "remark": "可用容量 R u 0.01Ah"}, + {"key": "0x0010", "datatype": "int32", "remark": "可充放容量 R u 0.01Ah"}, + {"key": "0x0012", "datatype": "int16", "remark": "警铃是否使用 R u"}, + {"key": "0x0013", "datatype": "int16", "remark": "警铃状态 R u 0:无效 1:掉线 2:正常 3:启动"}, + {"key": "0x0014", "datatype": "int16", "remark": "瓶头阀是否使用 R u"}, + {"key": "0x0015", "datatype": "int16", "remark": "瓶头阀状态 R u 0:无效 1:掉线 2:正常 3:启动"}, + {"key": "0x0016", "datatype": "int16", "remark": "手报是否使用 R u"}, + {"key": "0x0017", "datatype": "int16", "remark": "手报状态 R u 0:无效 1:掉线 2:正常 3:启动"}, + {"key": "0x0018", "datatype": "int16", "remark": "簇控制器数量 R u"}, + {"key": "0x0019", "datatype": "int16", "remark": "复合探测器总数量 R u"}, + {"key": "0x001A", "datatype": "int16", "remark": "烟雾探测器总数量 R u"}, + {"key": "0x001B", "datatype": "int16", "remark": "压力探测器总数量 R u"}, + {"key": "0x001C", "datatype": "int16", "remark": "吸气式探测器总数量 R u"}, + {"key": "0x001D", "datatype": "int16", "remark": "PACK探测器总数量 R u"}, + {"key": "0x001E", "datatype": "int16", "remark": "电池总数量 R u"} + ], + "CoolingYX": [ + {"key": "0x1001", "datatype": "int16", "remark": "所属通道号 R u 1"}, + {"key": "0x1002", "datatype": "int16", "remark": "所属冷机号 R u 1~10"}, + {"key": "0x1003", "datatype": "int16", "remark": "开关 R u 0:关机,1:开机"}, + {"key": "0x1004", "datatype": "int16", "remark": "采样模式 R u 0-出水温度 1-电芯温度"}, + {"key": "0x1005", "datatype": "int16", "remark": "制冷状态 R u 0:关闭,1:启动"}, + {"key": "0x1006", "datatype": "int16", "remark": "制热状态 R u 0:关闭,1:启动"}, + {"key": "0x1007", "datatype": "int16", "remark": "高温告警 R u 0:正常,1:告警"}, + {"key": "0x1008", "datatype": "int16", "remark": "低温告警 R u 0:正常,1:告警"}, + {"key": "0x1009", "datatype": "int16", "remark": "高压告警 R u 0:正常,1:告警"}, + {"key": "0x100A", "datatype": "int16", "remark": "低压告警 R u 0:正常,1:告警"}, + {"key": "0x100B", "datatype": "int16", "remark": "进水温度传感器 R u 0:正常,1:告警"}, + {"key": "0x100C", "datatype": "int16", "remark": "出水温度传感器 R u 0:正常,1:告警"}, + {"key": "0x100D", "datatype": "int16", "remark": "进水压力传感器 R u 0:正常,1:告警"}, + {"key": "0x100E", "datatype": "int16", "remark": "出水压力传感器 R u 0:正常,1:告警"} + ], + "CoolingYC": [ + {"key": "0x0001", "datatype": "int16", "remark": "所属通道号 R u 1"}, + {"key": "0x0002", "datatype": "int16", "remark": "所属冷机号 R u 1~10"}, + {"key": "0x0003", "datatype": "int16", "remark": "制冷点 R 0.1℃"}, + {"key": "0x0004", "datatype": "int16", "remark": "制冷偏差 R 0.1℃"}, + {"key": "0x0005", "datatype": "int16", "remark": "高温告警值 R 0.1℃"}, + {"key": "0x0006", "datatype": "int16", "remark": "低温告警值 R 0.1℃"}, + {"key": "0x0007", "datatype": "int16", "remark": "制热点 R 0.1℃"}, + {"key": "0x0008", "datatype": "int16", "remark": "制热偏差 R 0.1℃"}, + {"key": "0x0009", "datatype": "int16", "remark": "电芯温度 R 0.1℃"}, + {"key": "0x000A", "datatype": "int16", "remark": "环境湿度 R 0.1℃"}, + {"key": "0x000B", "datatype": "int16", "remark": "吸气温度 R 0.1℃"}, + {"key": "0x000C", "datatype": "int16", "remark": "排气温度 R 0.1℃"}, + {"key": "0x000D", "datatype": "int16", "remark": "进水温度/供液温度 R 0.1℃"}, + {"key": "0x000E", "datatype": "int16", "remark": "出水温度/回液温度 R 0.1℃"}, + {"key": "0x000F", "datatype": "int16", "remark": "进水压力/供液压力 R 0.1"}, + {"key": "0x0010", "datatype": "int16", "remark": "出水压力/回液压力 R 0.1"}, + {"key": "0x0011", "datatype": "int16", "remark": "高压压力 R 0.1"}, + {"key": "0x0012", "datatype": "int16", "remark": "低压压力 R 0.1"}, + {"key": "0x0013", "datatype": "int16", "remark": "循环水泵转速 R "}, + {"key": "0x0014", "datatype": "int16", "remark": "压缩机频率 R "}, + {"key": "0x0015", "datatype": "int16", "remark": "室外风机转速 R "} + ] +} \ No newline at end of file diff --git a/bin/Release/assets/config/registeraddrs.py b/bin/Release/assets/config/registeraddrs.py new file mode 100644 index 0000000..89ed0a0 --- /dev/null +++ b/bin/Release/assets/config/registeraddrs.py @@ -0,0 +1,76 @@ +import re +import json + +def parse_datatype(text): + datatypes = ["int16", "uint16", "int32", "uint32", "int64", "uint64"] + for index, datatype in enumerate(datatypes): + left, separator, right = text.partition(datatype) + if len(separator) != 0: + return datatype, left + right + return "", text + + +def parse_from_file(filename): + data = "" + with open(filename, "r", encoding='utf-8') as f: # 打开文件 + linedata = "" + for line in f: # 行遍历 + line = line.strip() + #linedata = f.readline() # 读取文件的一行 + flag = bool(re.search(r'0x[0-9A-Fa-f]{4}', line)) + linedata += line.strip() + if flag: + # print(linedata) + # left, separator, right = linedata.partition("0x") + parts = re.split(r'(0x[0-9A-Fa-f]{4})', linedata) + linedata = "" + + key = parts[1] + datatype, remark = parse_datatype(parts[0].strip()) + remark = remark.replace("\t", " ").replace("\"", "") + + item = {} + item["key"] = key + item["datatype"] = datatype + item["remark"] = remark + + if len(data) > 0: + data += ",\n" + data += ("\t\t" + json.dumps(item, ensure_ascii=False)) + return data + + +addritems = {} +addritems["EMSYT"] = "EMS遥调.txt" +addritems["BCUYX"] = "BCU电池簇遥信.txt" +addritems["BCUYC"] = "BCU电池簇遥测.txt" +addritems["BMSYC"] = "BMS电池堆遥测.txt" +addritems["EMSYX"] = "EMS遥信.txt" +addritems["EMSYC"] = "EMS遥测.txt" +addritems["EMSYT"] = "EMS遥调.txt" +addritems["PCSYX"] = "PCS遥信.txt" +addritems["PCSYC"] = "PCS遥测.txt" +addritems["PCUYX"] = "PCU遥信.txt" +addritems["PCUYC"] = "PCU遥测.txt" +addritems["MEMYC"] = "多功能电表遥测.txt" +addritems["THYC"] = "温湿度状态遥测.txt" +addritems["Fire40YX"] = "消防4.0遥信.txt" +addritems["CoolingYX"] = "冷机遥信.txt" +addritems["CoolingYC"] = "冷机遥测.txt" + + +with open('registeraddr.json', 'w', encoding='utf-8') as f: + f.write("{") + count = 0 + for key in addritems: + filename = addritems[key] + print("parse: ", key, filename) + data = parse_from_file(filename) + if len(data) > 0: + data = "\n" + data + "\n\t" + if count != 0: + f.write(",") + f.write("\n\t\"" + key + "\": [" + data + "]") + count+=1 + f.write("\n}") + diff --git a/bin/Release/assets/config/冷机遥信.txt b/bin/Release/assets/config/冷机遥信.txt new file mode 100644 index 0000000..f9416d2 --- /dev/null +++ b/bin/Release/assets/config/冷机遥信.txt @@ -0,0 +1,14 @@ +所属通道号 R uint16 1 0x1001 +所属冷机号 R uint16 1~10 0x1002 +开关 R uint16 0:关机,1:开机 0x1003 +采样模式 R uint16 0-出水温度 1-电芯温度 0x1004 +制冷状态 R uint16 0:关闭,1:启动 0x1005 +制热状态 R uint16 0:关闭,1:启动 0x1006 +高温告警 R uint16 0:正常,1:告警 0x1007 +低温告警 R uint16 0:正常,1:告警 0x1008 +高压告警 R uint16 0:正常,1:告警 0x1009 +低压告警 R uint16 0:正常,1:告警 0x100A +进水温度传感器 R uint16 0:正常,1:告警 0x100B +出水温度传感器 R uint16 0:正常,1:告警 0x100C +进水压力传感器 R uint16 0:正常,1:告警 0x100D +出水压力传感器 R uint16 0:正常,1:告警 0x100E \ No newline at end of file diff --git a/bin/Release/assets/config/冷机遥测.txt b/bin/Release/assets/config/冷机遥测.txt new file mode 100644 index 0000000..f01c347 --- /dev/null +++ b/bin/Release/assets/config/冷机遥测.txt @@ -0,0 +1,21 @@ +所属通道号 R uint16 1 0x0001 +所属冷机号 R uint16 1~10 0x0002 +制冷点 R int16 0.1℃ 0x0003 +制冷偏差 R int16 0.1℃ 0x0004 +高温告警值 R int16 0.1℃ 0x0005 +低温告警值 R int16 0.1℃ 0x0006 +制热点 R int16 0.1℃ 0x0007 +制热偏差 R int16 0.1℃ 0x0008 +电芯温度 R int16 0.1℃ 0x0009 +环境湿度 R int16 0.1℃ 0x000A +吸气温度 R int16 0.1℃ 0x000B +排气温度 R int16 0.1℃ 0x000C +进水温度/供液温度 R int16 0.1℃ 0x000D +出水温度/回液温度 R int16 0.1℃ 0x000E +进水压力/供液压力 R int16 0.1 0x000F +出水压力/回液压力 R int16 0.1 0x0010 +高压压力 R int16 0.1 0x0011 +低压压力 R int16 0.1 0x0012 +循环水泵转速 R int16 0x0013 +压缩机频率 R int16 0x0014 +室外风机转速 R int16 0x0015 \ No newline at end of file diff --git a/bin/Release/assets/config/多功能电表遥测.txt b/bin/Release/assets/config/多功能电表遥测.txt new file mode 100644 index 0000000..0e8242b --- /dev/null +++ b/bin/Release/assets/config/多功能电表遥测.txt @@ -0,0 +1,57 @@ +所属通道号 R uint16 1 0x0001 +电表地址 R uint16[6] 0x0002~0x0007 +电表类型 R uint16 "0:储能站总表 +1:逆变前侧电表 +2:逆变后侧电表 +3:配电柜电表 +4:并网口电表" 0x0008 +电流变比 R uint16 0x0009 +电压变比 R uint16 0x000A +A相电压 R uint32 1V 0x000B +B相电压 R uint32 1V 0x000D +C相电压 R uint32 1V 0x000F +A相电流 R int32 1A 0x0011 +B相电流 R int32 1A 0x0013 +C相电流 R int32 1A 0x0015 +AB相电压 R uint32 1V 0x0017 +BC相电压 R uint32 1V 0x0019 +CA相电压 R uint32 1V 0x001B +A相有功 R int32 1kW 0x001D +B相有功 R int32 1kW 0x001F +C相有功 R int32 1kW 0x0021 +三相总有功 R int32 1kW 0x0023 +正向总有功总需量 R int32 1kW 0x0025 +尖段电价 R uint32 1RMB 0x0027 +峰段电价 R uint32 1RMB 0x0029 +平段电价 R uint32 1RMB 0x002B +谷段电价 R uint32 1RMB 0x002D +日充电电量 R uint32 1kWh 0x002F +日放电电量 R uint32 1kWh 0x0031 +日充电费用 R uint32 1RMB 0x0033 +日放电费用 R uint32 1RMB 0x0035 +日收益 R int32 1RMB 0x0037 +日正向尖有功电能 R uint32 1kWh 0x0039 +日正向峰有功电能 R uint32 1kWh 0x003B +日正向平有功电能 R uint32 1kWh 0x003D +日正向谷有功电能 R uint32 1kWh 0x003F +日正向总有功电能 R uint32 1kWh 0x0041 +日反向尖有功电能 R uint32 1kWh 0x0043 +日反向峰有功电能 R uint32 1kWh 0x0045 +日反向平有功电能 R uint32 1kWh 0x0047 +日反向谷有功电能 R uint32 1kWh 0x0049 +日反向总有功电能 R uint32 1kWh 0x004B +总充电电量 R uint32 1kWh 0x004D +总放电电量 R uint32 1kWh 0x004F +总充电费用 R uint32 1RMB 0x0051 +总放电费用 R uint32 1RMB 0x0053 +总收益 R int32 1RMB 0x0055 +总正向尖有功电能 R uint32 1kWh 0x0057 +总正向峰有功电能 R uint32 1kWh 0x0059 +总正向平有功电能 R uint32 1kWh 0x005B +总正向谷有功电能 R uint32 1kWh 0x005D +总正向总有功电能 R uint32 1kWh 0x005F +总反向尖有功电能 R uint32 1kWh 0x0061 +总反向峰有功电能 R uint32 1kWh 0x0063 +总反向平有功电能 R uint32 1kWh 0x0065 +总反向谷有功电能 R uint32 1kWh 0x0067 +总反向总有功电能 R uint32 1kWh 0x0069 \ No newline at end of file diff --git a/bin/Release/assets/config/消防4.0遥信.txt b/bin/Release/assets/config/消防4.0遥信.txt new file mode 100644 index 0000000..4748a53 --- /dev/null +++ b/bin/Release/assets/config/消防4.0遥信.txt @@ -0,0 +1,24 @@ +所属通道号 R uint16 1~10 0x0001 +主控数量 R uint16 1 0x0002 +主控ID R uint16 1 0x0003 +主控状态 R uint16 0:正常 1:预警 2:火警 0x0004 +主控硬件版本 R uint16[2] 主控硬件版本 0x0005~0x0006 +主控软件版本 R uint16[2] 主控软件版本 0x0007~0x0008 +主电状态 R uint16 0:使用市电 1:使用备电 0x0009 +备电电流 R uint32 0.1A 0x000A +备电电压 R uint32 0.1V 0x000C +可用容量 R uint32 0.01Ah 0x000E +可充放容量 R uint32 0.01Ah 0x0010 +警铃是否使用 R uint16 0x0012 +警铃状态 R uint16 0:无效 1:掉线 2:正常 3:启动 0x0013 +瓶头阀是否使用 R uint16 0x0014 +瓶头阀状态 R uint16 0:无效 1:掉线 2:正常 3:启动 0x0015 +手报是否使用 R uint16 0x0016 +手报状态 R uint16 0:无效 1:掉线 2:正常 3:启动 0x0017 +簇控制器数量 R uint16 0x0018 +复合探测器总数量 R uint16 0x0019 +烟雾探测器总数量 R uint16 0x001A +压力探测器总数量 R uint16 0x001B +吸气式探测器总数量 R uint16 0x001C +PACK探测器总数量 R uint16 0x001D +电池总数量 R uint16 0x001E \ No newline at end of file diff --git a/bin/Release/assets/config/温湿度状态遥测.txt b/bin/Release/assets/config/温湿度状态遥测.txt new file mode 100644 index 0000000..5ac203a --- /dev/null +++ b/bin/Release/assets/config/温湿度状态遥测.txt @@ -0,0 +1,4 @@ +所属通道号 R uint16 1 0x0001 +所属温湿度号 R uint16 1~10 0x0002 +温度 R int16 0.1℃ 0x0003 +湿度 R int16 0.1℃ 0x0004 \ No newline at end of file diff --git a/bin/Release/assets/config/空调遥信.txt b/bin/Release/assets/config/空调遥信.txt new file mode 100644 index 0000000..650f094 --- /dev/null +++ b/bin/Release/assets/config/空调遥信.txt @@ -0,0 +1,12 @@ +所属通道号 R uint16 1 0x1001 +所属空调号 R uint16 1~10 0x1002 +开关 R uint16 0:关机,1:开机 0x1003 +启动制冷指令 R uint16 0:关闭,1:启动 0x1004 +启动送风指令 R uint16 0:关闭,1:启动 0x1005 +启动待机指令 R uint16 0:关闭,1:启动 0x1006 +启动加热指令 R uint16 0:关闭,1:启动 0x1007 +传感器故障 R uint16 0:正常,1:告警 0x1008 +高低电压告警 R uint16 0:正常,1:告警 0x1009 +高低温告警 R uint16 0:正常,1:告警 0x100A +高低压告警 R uint16 0:正常,1:告警 0x100B +压缩机告警 R uint16 0:正常,1:告警 0x100C \ No newline at end of file diff --git a/bin/Release/assets/config/空调遥测.txt b/bin/Release/assets/config/空调遥测.txt new file mode 100644 index 0000000..4ca7e1c --- /dev/null +++ b/bin/Release/assets/config/空调遥测.txt @@ -0,0 +1,14 @@ +所属通道号 R uint16 1 0x0001 +所属空调号 R uint16 1~10 0x0002 +制冷点 R int16 0.1℃ 0x0003 +制冷偏差 R int16 0.1℃ 0x0004 +高温告警值 R int16 0.1℃ 0x0005 +低温告警值 R int16 0.1℃ 0x0006 +制热点 R int16 0.1℃ 0x0007 +制热偏差 R int16 0.1℃ 0x0008 +当前温度 R int16 0.1℃ 0x0009 +当前湿度 R int16 0.1℃ 0x000A +除湿开启温度 R int16 0.1℃ 0x000B +除湿停止温度 R int16 0.1℃ 0x000C +除湿开启湿度 R int16 0.1℃ 0x000D +除湿停止湿度 R int16 0.1℃ 0x000E \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1955f0d..37b8794 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -18,7 +18,7 @@ macro(ADD_SOURCE_GROUP srcpath) endmacro(ADD_SOURCE_GROUP) ############################################################################### -set(PROJECT_NAME EES) +set(PROJECT_NAME ESS) project(${PROJECT_NAME}) set(CMAKE_CXX_STANDARD 17) diff --git a/src/app/AppData.cpp b/src/app/AppData.cpp index df908d1..e2e265f 100644 --- a/src/app/AppData.cpp +++ b/src/app/AppData.cpp @@ -40,7 +40,7 @@ void AppData::initFromDB() auto dao = DaoEntity::create(""); if (!dao->isConnected()) { - spdlog::info("Database connected error."); + spdlog::error("Init app data failed, database connected error."); return; } diff --git a/src/app/Application.cpp b/src/app/Application.cpp index 87358b2..db55822 100644 --- a/src/app/Application.cpp +++ b/src/app/Application.cpp @@ -16,6 +16,9 @@ void Application::init() // 初始化系统配置,读取配置文件 Config::init("assets/config/app.json"); + // MQTT 数据结构 + MqttClient::loadDataStruct("assets/config/registeraddr.json"); + // 设置数据库配置 DaoEntity::setOption(Config::option.database.host, Config::option.database.port, diff --git a/src/app/DataStruct.h b/src/app/DataStruct.h index 1da35a6..2818bdf 100644 --- a/src/app/DataStruct.h +++ b/src/app/DataStruct.h @@ -3,12 +3,6 @@ #include #include "common/JsonN.h" -struct REGInfo -{ - std::string name; - int byte; - std::string remark; -}; // EMS遥信 struct EMSYX @@ -43,7 +37,7 @@ struct EMSYX uint16_t energyStatus; //判断总表的三相总有功 < -5.0fkW 充电 >5.0fkW放电 否则停机 R uint16 0:充电 1 : 放电 2 : 停机 储能状态 void fromJson(const std::string& str); - void toJson(); + std::string toJson(); }; // EMS遥测 diff --git a/src/app/errcode.h b/src/app/errcode.h index 32e9721..07f756f 100644 --- a/src/app/errcode.h +++ b/src/app/errcode.h @@ -4,22 +4,21 @@ enum class Errcode { - OK = 0, - ERR = 1, - ERR_TOKEN, // TOKEN错误 - ERR_PARAM, // 参数错误 - ERR_PARAM_NUL, // 缺少参数 - ERR_DATA_NUL, // 数据不存在 + OK = 0, // 成功 + ERR = 1, // 系统错误 + ERR_TOKEN = 2, // TOKEN错误 + ERR_PARAM = 3, // 参数错误 + ERR_PARAM_NUL = 4, // 缺少参数 + ERR_DATA_NUL = 5, // 数据不存在 ERR_USER = 100, - ERR_LOGIN_USER_NOTEXIST, // 登入错误,用户不存在 - ERR_LOGIN_PASSWD, // 登入错误,密码不正确 + ERR_LOGIN_USER_NOTEXIST = 101, // 登入错误,用户不存在 + ERR_LOGIN_PASSWD = 102, // 登入错误,密码不正确 ERR_DEVICE = 200, - ERR_DB_CONN = 1001, // 数据库连接错误 - + ERR_DB_CONN = 1001, // 数据库连接错误 ERR_DB_DUPLICATE = 1062, // Duplicate entry for key ERR_DB_SQL = 1064, // 数据库查询SQL错误 ERR_DB_VAL = 1366, // 1366,Incorrect decimal value,通常为参数值错误,例如空值、值类型错误 diff --git a/src/database/Dao.cpp b/src/database/Dao.cpp index 46bf095..a6716be 100644 --- a/src/database/Dao.cpp +++ b/src/database/Dao.cpp @@ -143,19 +143,21 @@ Errcode DAO::insertUser(Fields& params) params.set(DMUser::USER_ID, Snowflake::instance().getIdStr()); params.set(DMUser::CREATETIME, createTime); params.set(DMUser::PASSWD, "123456"); + std::string userRoleId = params.remove(DMRole::ROLE_ID); ret = dao->insertFields(params); if (ret != 0) { return Errcode(ret); } - std::string userRoleId = params.remove(DMRole::ROLE_ID); + if (!userRoleId.empty()) { Fields paramsUserRole; paramsUserRole.set(DMUser::USER_ID, params.value(DMUser::USER_ID)); paramsUserRole.set(DMRole::ROLE_ID, userRoleId); paramsUserRole.set(DMUser::UPDATETIME, createTime); + dao->setTableName(DMUserRole::TABLENAME); ret = dao->duplicateUpdate(paramsUserRole, {DMUser::USER_ID}); } return Errcode::OK; @@ -211,19 +213,20 @@ Errcode DAO::login(std::shared_ptr dao, std::string account, std::str Errcode DAO::queryRolePermission(std::shared_ptr dao, int roleId, vector& result) { - std::string sql = "SELECT rp.role_id, rp.permission_id, p.name FROM role_permission rp" - " LEFT JOIN permission p ON p.permission_id = rp.permission_id" - " WHERE rp.is_open='1' AND rp.role_id ='" + std::to_string(roleId) + "';"; + std::string sql = R"(SELECT rp.role_id, p.permission_id, p.parent_id, p.route, p.name, rp.is_view, rp.is_add, rp.is_edit, rp.is_del + FROM role_permission rp + LEFT JOIN permission p ON p.permission_id = rp.permission_id + WHERE rp.is_open='1' AND rp.role_id =')" + std::to_string(roleId) + "';"; return DAO::exec(dao, sql, result); } Errcode DAO::queryRolePermission(std::shared_ptr dao, vector& result) { // 查询 role 的 permission - std::string sql = "SELECT rp.role_id, rp.permission_id, rp.is_open, r.name role_name, p.name permission_name FROM role_permission rp" - " LEFT JOIN `role` r ON r.role_id = rp.role_id" - " LEFT JOIN permission p ON p.permission_id = rp.permission_id" - " WHERE rp.is_open='1';"; + std::string sql = R"(SELECT rp.role_id, r.name role_name, rp.permission_id, p.parent_id, p.route, p.name, rp.is_view, rp.is_add, rp.is_edit, rp.is_del FROM role_permission rp + LEFT JOIN `role` r ON r.role_id = rp.role_id + LEFT JOIN permission p ON p.permission_id = rp.permission_id + WHERE rp.is_open='1';)"; return DAO::exec(dao, sql, result); } @@ -317,29 +320,14 @@ Errcode DAO::queryRoleList(PageInfo& pageInfo, vector& result) return QueryPagination("*", sqlCondition, pageInfo, result); } -Errcode DAO::updateRolePermission(std::shared_ptr dao, std::string roleId, std::string permission) +Errcode DAO::updateRolePermission(std::shared_ptr dao, std::string roleId, vector& vecFields) { - NJsonNode jnode; - NJson::parse(permission, jnode); - std::vector vec; - for (auto& item: jnode) - { - std::string permissionId; - if (item.is_number()) { permissionId = std::to_string(item.get()); } - if (item.is_string()) { permissionId = item.get(); } - if (!permissionId.empty()) - { - Fields field; - field.set("role_id", roleId); - field.set("permission_id", permissionId); - vec.emplace_back(field); - } - } + if (!dao) dao = DaoEntity::create(""); dao->setTableName(DMRolePermission::TABLENAME); std::string sqlDel = "DELETE from " + DMRolePermission::TABLENAME + " WHERE role_id='" + roleId + "';"; int ret = dao->exec(sqlDel); if (ret != 0 ){ return Errcode(ret); }; - ret = dao->insertFields(vec); + ret = dao->insertFields(vecFields); if (ret != 0) { return Errcode(ret); }; return Errcode::OK; } @@ -360,29 +348,31 @@ Errcode DAO::insertRole(Fields& params) err = DAO::exec(dao, sql, res); if (err == Errcode::OK && res.size() > 0) { - std::string roleId = res[0].value("role_id"); - err = DAO::updateRolePermission(dao, roleId, permission); + //std::string roleId = res[0].value("role_id"); + //err = DAO::updateRolePermission(dao, roleId, permission); } } return err; } // 更新角色 -Errcode DAO::updateRoleById(Fields& params) +Errcode DAO::updateRoleById(std::shared_ptr dao, Fields& params) { + if (!dao) dao = DaoEntity::create(""); + dao->setTableName(DMRole::TABLENAME); + auto roleId = params.value(DMRole::ROLE_ID); if (roleId.empty()) { return Errcode::ERR_DB_SQL; } auto permission = params.remove("permission"); - - auto dao = DaoEntity::create(DMRole::TABLENAME); + auto err = DAO::update(dao, DMRole::TABLENAME, params, DMRole::ROLE_ID); - if (err == Errcode::OK && !permission.empty()) - { - err = DAO::updateRolePermission(dao, roleId, permission); - } + //if (err == Errcode::OK && !permission.empty()) + //{ + // err = DAO::updateRolePermission(dao, roleId, permission); + //} return err; } diff --git a/src/database/Dao.h b/src/database/Dao.h index e8ecfd0..48e24f4 100644 --- a/src/database/Dao.h +++ b/src/database/Dao.h @@ -44,7 +44,7 @@ public: static Errcode deletePermissionById(std::string userId); - static Errcode updateRolePermission(std::shared_ptr dao, std::string roleId, std::string permission); + static Errcode updateRolePermission(std::shared_ptr dao, std::string roleId, vector& vecFields); // 查询角色列表(分页) static Errcode queryRoleList(PageInfo& pageInfo, vector& result); @@ -54,7 +54,7 @@ public: // 新增角色 static Errcode insertRole(Fields& params); // 更新角色 - static Errcode updateRoleById(Fields& params); + static Errcode updateRoleById(std::shared_ptr dao, Fields& params); // 删除角色 static Errcode deleteRoleById(std::string userId); diff --git a/src/main.cpp b/src/main.cpp index ffa931a..6c52932 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -128,6 +128,8 @@ int main(int argc, char** argv) Spdlogger::init(spdlog::level::debug, ""); spdlog::info("[main] start ... ======================================================================"); + spdlog::info(""); + std::cout << Snowflake::instance().getId() << std::endl; for (int i = 0; i<=10; ++i) { std::cout << Snowflake::instance().getId() << std::endl; diff --git a/src/protocol/HttpEntity.cpp b/src/protocol/HttpEntity.cpp index f93f148..c1c3034 100644 --- a/src/protocol/HttpEntity.cpp +++ b/src/protocol/HttpEntity.cpp @@ -15,6 +15,40 @@ static void FieldsToJson(Fields& fields, NJsonNode& json) json[item.first] = item.second; } } +static void JsonToFields(NJsonNode& json, std::vector vecKeys, Fields& fields) +{ + if (vecKeys.empty()) + { + for (auto& item: json.items()) + { + auto key = item.key(); + auto& val = json[key]; + } + } + + for (auto& key : vecKeys) + { + if (json.contains(key)) { + + switch (json[key].type()) + { + case NJsonNode::value_t::string: { fields.set(key, json[key].get()); } break; + case NJsonNode::value_t::boolean: { fields.set(key, json[key].get()); } break; + case NJsonNode::value_t::number_integer: { fields.set(key, json[key].get()); } break; + case NJsonNode::value_t::number_unsigned: { fields.set(key, json[key].get()); } break; + case NJsonNode::value_t::number_float: { fields.set(key, json[key].get()); } break; + case NJsonNode::value_t::null: {} break; + case NJsonNode::value_t::object: {} break; + case NJsonNode::value_t::array: {} break; + case NJsonNode::value_t::binary: {} break; + case NJsonNode::value_t::discarded: {} break; + default: + break; + } + + } + } +} static NJsonNode FieldsToJsonArray(std::vector& vecFields) { @@ -33,7 +67,6 @@ static NJsonNode FieldsToJsonArray(std::vector& vecFields) static void GetRequestParam(const httplib::Request& req, const std::vector& vecKeys, Fields& fields) { - if (req.method == "GET") { for (auto& key : vecKeys) @@ -48,30 +81,8 @@ static void GetRequestParam(const httplib::Request& req, const std::vector()); } break; - case NJsonNode::value_t::boolean: { fields.set(key, json[key].get()); } break; - case NJsonNode::value_t::number_integer: { fields.set(key, json[key].get()); } break; - case NJsonNode::value_t::number_unsigned: { fields.set(key, json[key].get()); } break; - case NJsonNode::value_t::number_float: { fields.set(key, json[key].get()); } break; - case NJsonNode::value_t::null: {} break; - case NJsonNode::value_t::object: {} break; - case NJsonNode::value_t::array: {} break; - case NJsonNode::value_t::binary: {} break; - case NJsonNode::value_t::discarded: {} break; - default: - break; - } - - } - } + } - } class HttpHelper @@ -82,7 +93,16 @@ public: errmsg = ""; for (auto& key : vecKeys) { - if (!req.has_param(key)) + bool hasParam = false; + if (req.method == "GET") + { + hasParam = req.has_param(key); + } + else + { + hasParam = (req.body.find("\"" + key + "\"") != std::string::npos); + } + if (!hasParam) { if (!errmsg.empty()) { errmsg += ","; } errmsg += "缺少参数[" + key + "]"; @@ -103,20 +123,7 @@ public: } }; -using HandlerFunc = Errcode(HttpEntity::*)(const httplib::Request& req, httplib::Response& resp, NJsonNode& jnode); -struct HandlerOptions -{ - HandlerFunc func; - std::vector requiredKeys; - std::vector keys; - - - HandlerOptions(HandlerFunc func, const std::vector& requiredKeys) - : func(func), requiredKeys(requiredKeys) - { - } -}; static std::map g_mapHttpHandlerGet = { @@ -134,7 +141,7 @@ static std::map g_mapHttpHandlerGet = {"/deleteStation", HandlerOptions(&HttpEntity::deleteStation, { DMStation::STATION_ID})}, {"/queryStationInfo", HandlerOptions(&HttpEntity::queryStationInfo, { DMStation::STATION_ID})}, - {"/queryStationRuntime", HandlerOptions(&HttpEntity::queryStationRuntime, { DMStation::STATION_ID})}, + {"/queryStationData", HandlerOptions(&HttpEntity::queryStationData, { DMStation::STATION_ID})}, {"/queryDeviceList", HandlerOptions(&HttpEntity::queryDeviceList, {})}, {"/deleteDevice", HandlerOptions(&HttpEntity::deleteDevice, { DMDevice::DEVICE_ID})}, @@ -142,7 +149,6 @@ static std::map g_mapHttpHandlerGet = {"/queryPolicyList", HandlerOptions(&HttpEntity::queryPolicyList, {})}, - {"/deletePolicy", HandlerOptions(&HttpEntity::deletePolicy, { DMPolicy::POLICY_ID})}, {"/querySystemLogList", HandlerOptions(&HttpEntity::querySystemLogList, {})}, @@ -202,70 +208,22 @@ bool CheckHttpToken(const httplib::Request& req) HttpEntity::HttpEntity() { - bool useToken = Config::option.http.useToken; for (auto& item : g_mapHttpHandlerGet) { std::string name = item.first; HandlerOptions& handler = item.second; this->httpsvr.Get(name, [=, &handler](const httplib::Request& req, httplib::Response& resp) { - spdlog::info("[http] request: {}", name); - Errcode errcode = Errcode::OK; - if (name != "/login" && useToken) - { - bool ret = CheckHttpToken(req); - errcode = ret ? Errcode::OK : Errcode::ERR_TOKEN; - } - - NJsonNode json; - std::string errmsg; - if (errcode == Errcode::OK) - { - if (!HttpHelper::CheckRequestParam(req, resp, handler.requiredKeys, errmsg)) - { - errcode = Errcode::ERR_PARAM; - } - else - { - errcode = (this->*(handler.func))(req, resp, json); - } - } - json["errcode"] = errcode; - json["errmsg"] = ErrcodeStr(errcode) + (errmsg.empty() ? "" : (":"+errmsg)); - resp.set_content(json.dump(), "text/plain; charset=utf-8"); - resp.status = 200; + this->runHandler(name, handler, req, resp); }); } - for (auto& item : g_mapHttpHandlerPost) { std::string name = item.first; HandlerOptions& handler = item.second; this->httpsvr.Post(name, [=](const httplib::Request& req, httplib::Response& resp) { - Errcode errcode = Errcode::OK; - std::string errmsg; - if (name != "/login" && useToken) - { - bool ret = CheckHttpToken(req); - errcode = ret ? Errcode::OK : Errcode::ERR_TOKEN; - } - - if (errcode == Errcode::OK) - { - NJsonNode jsonparam; - bool ret = NJson::parse(req.body, jsonparam); - if (ret) - { - errcode = (this->*(handler.func))(req, resp, jsonparam); - } - } - - NJsonNode json; - json["errcode"] = errcode; - json["errmsg"] = ErrcodeStr(errcode) + (errmsg.empty() ? "" : (":"+errmsg)); - resp.set_content(json.dump(), "text/plain; charset=utf-8"); - resp.status = 200; + this->runHandler(name, handler, req, resp); }); } } @@ -277,6 +235,37 @@ void HttpEntity::listen(std::string addr, int port) httpsvr.listen(addr, port); // 阻塞 } +void HttpEntity::runHandler(std::string name, const HandlerOptions& handler, const httplib::Request& req, httplib::Response& resp) +{ + spdlog::info("[http] request: {}", name); + bool useToken = Config::option.http.useToken; + Errcode errcode = Errcode::OK; + std::string errmsg; + + if (name != "/login" && useToken) + { + bool ret = CheckHttpToken(req); + errcode = ret ? Errcode::OK : Errcode::ERR_TOKEN; + } + + NJsonNode jsonresp; + if (errcode == Errcode::OK) + { + if (!HttpHelper::CheckRequestParam(req, resp, handler.requiredKeys, errmsg)) + { + errcode = Errcode::ERR_PARAM; + } + else + { + errcode = (this->*(handler.func))(req, resp, jsonresp); + } + } + jsonresp["errcode"] = errcode; + jsonresp["errmsg"] = ErrcodeStr(errcode) + (errmsg.empty() ? "" : (":"+errmsg)); + resp.set_content(jsonresp.dump(), "text/plain; charset=utf-8"); + resp.status = 200; +} + void HttpEntity::registGet(std::string name, void (HttpEntity::* func)(const httplib::Request& req, httplib::Response& resp)) { this->httpsvr.Get(name, std::bind(func, this, std::placeholders::_1, std::placeholders::_2)); @@ -302,9 +291,14 @@ Errcode HttpEntity::login(const httplib::Request& req, httplib::Response& resp, int roleId = fields.get(DMRole::ROLE_ID); DAO::queryRolePermission(dao, roleId, vecPermission); - NJsonNode jnode = NJsonNode::array(); - for (auto& item : vecPermission) { jnode.push_back(item.value("name")); } - json["permission"] = jnode; + NJsonNode nodePermission = NJsonNode::array(); + for (auto& item : vecPermission) + { + NJsonNode node; + FieldsToJson(item, node); + nodePermission.push_back(node); + } + json["permission"] = nodePermission; } DAO::insertSystemLogUser(token, "用户登录:" + ErrcodeStr(err), (err==Errcode::OK) ? 0: 1); @@ -338,7 +332,7 @@ Errcode HttpEntity::insertUser(const httplib::Request& req, httplib::Response& r Errcode HttpEntity::updateUser(const httplib::Request& req, httplib::Response& resp, NJsonNode& json) { Fields params; - GetRequestParam(req, {"user_id", "name", "gender", "age", "phone", "email", "role_id"}, params); + GetRequestParam(req, {"user_id", "account", "name", "gender", "age", "phone", "email", "role_id"}, params); return DAO::updateUserById(params); } @@ -401,14 +395,13 @@ Errcode HttpEntity::queryRoleList(const httplib::Request& req, httplib::Response } std::map> mapPermission; - for (auto& item: vecPermission) + for (auto& fields: vecPermission) { - std::string roleId = item.value("role_id"); + std::string roleId = fields.value("role_id"); auto& v = mapPermission[roleId]; - NJsonNode jnode; - jnode["id"] = item.value("permission_id"); - jnode["name"] = item.value("permission_name"); - v.push_back(jnode); + NJsonNode node; + FieldsToJson(fields, node); + v.push_back(node); } HttpHelper::setPagination(pageinfo, result, json); @@ -433,8 +426,38 @@ Errcode HttpEntity::insertRole(const httplib::Request& req, httplib::Response& r Errcode HttpEntity::updateRole(const httplib::Request& req, httplib::Response& resp, NJsonNode& json) { Fields params; - GetRequestParam(req, {"role_id", "name", "describe", "is_open", "permission"}, params); - return DAO::updateRoleById(params); + //GetRequestParam(req, {"role_id", "name", "describe", "is_open", "permission"}, params); + + NJsonNode jsonparam; + if (!NJson::parse(req.body, jsonparam)) + { + return Errcode::ERR_PARAM; + } + JsonToFields(jsonparam, {"role_id", "name", "describe", "is_open"}, params); + + auto roleId = params.value("role_id"); + + auto dao = DaoEntity::create(""); + auto err = DAO::updateRoleById(dao, params); + if (err == Errcode::OK && jsonparam.contains("permission")) + { + if (jsonparam["permission"].is_array()) + { + + auto& jsonPermission = jsonparam["permission"]; + std::vector vecFields(jsonPermission.size()); + int i = 0; + for (auto& item: jsonPermission) + { + auto& fields = vecFields[i]; + i++; + JsonToFields(item, {"permission_id", "is_add", "is_del", "is_edit", "is_view"}, fields); + fields.set("role_id", roleId); + } + err = DAO::updateRolePermission(dao, roleId, vecFields); + } + } + return err; }; Errcode HttpEntity::deleteRole(const httplib::Request& req, httplib::Response& resp, NJsonNode& json) { @@ -594,7 +617,9 @@ Errcode HttpEntity::updatePolicy(const httplib::Request& req, httplib::Response& }; Errcode HttpEntity::deletePolicy(const httplib::Request& req, httplib::Response& resp, NJsonNode& json) { - return DAO::deletePolicyById(req.get_param_value("prolicy_id")); + Fields params; + GetRequestParam(req, {"policy_id"}, params); + return DAO::deletePolicyById(params.value("policy_id")); }; Errcode HttpEntity::querySystemLogList(const httplib::Request& req, httplib::Response& resp, NJsonNode& json) @@ -695,8 +720,8 @@ Errcode HttpEntity::queryStatTotal(const httplib::Request& req, httplib::Respons jsondata["charge_elect"] = "123.123"; //充电设备充电电量(kWh),精度:0.001 jsondata["charge_num"] = "1"; //充电设备充电次数 jsondata["charge_num_err"] = "1"; //充电设备故障次数 - jsondata["income_elect"] = "123.123"; //发电收益(元),精度:0.01 - jsondata["income_charge"] = "123.123"; //充电收益(元),精度:0.01 + jsondata["income_elect"] = "123.123"; //发电收益(元),精度:0.01 + jsondata["income_charge"] = "123.123"; //充电收益(元),精度:0.01 json["data"] = jsondata; return Errcode::OK; diff --git a/src/protocol/HttpEntity.h b/src/protocol/HttpEntity.h index 1f8dd44..86ab1bc 100644 --- a/src/protocol/HttpEntity.h +++ b/src/protocol/HttpEntity.h @@ -1,6 +1,22 @@ -#include "httplib.h" +#include "httplib.h" #include "common/JsonN.h" #include "errcode.h" +#include + +class HttpEntity; +using HandlerFunc = Errcode(HttpEntity::*)(const httplib::Request& req, httplib::Response& resp, NJsonNode& jnode); + +struct HandlerOptions +{ + HandlerFunc func; + std::vector requiredKeys; + std::vector keys; + + HandlerOptions(HandlerFunc func, const std::vector& requiredKeys) + : func(func), requiredKeys(requiredKeys) + { + } +}; class HttpEntity { @@ -8,6 +24,7 @@ public: httplib::Server httpsvr; HttpEntity(); void listen(std::string addr, int port); + void runHandler(std::string name, const HandlerOptions& handler, const httplib::Request& req, httplib::Response& resp); void registGet(std::string name, void (HttpEntity::* func)(const httplib::Request& req, httplib::Response& resp)); //void onGet(const httplib::Request& req, httplib::Response& resp); diff --git a/src/protocol/MqttEntity.cpp b/src/protocol/MqttEntity.cpp index 9fefcbe..506dbff 100644 --- a/src/protocol/MqttEntity.cpp +++ b/src/protocol/MqttEntity.cpp @@ -1,9 +1,31 @@ #include "MqttEntity.h" #include "common/Spdlogger.h" #include "common/JsonN.h" +#include "common/Utils.h" #define TIMEOUT 10000L + +static std::map> g_mapRegInfo; + +void MqttClient::loadDataStruct(std::string filename) +{ + NJsonNode json; + NJson::load(filename, json); + + // 遍历 JSON 对象 + for (auto& jsonitem : json.items()) + { + auto& mapItem = g_mapRegInfo[jsonitem.key()]; + + for (auto& itemaddrs : jsonitem.value().items()) + { + auto& jsonreg = itemaddrs.value(); + mapItem[jsonreg["key"]] = REGInfo(jsonreg["key"], jsonreg["datatype"], jsonreg["remark"]); + } + } +} + int MqttClient::init(string addr, string clientId, string username, string password) { this->addr = addr; @@ -28,7 +50,8 @@ int MqttClient::init(string addr, string clientId, string username, string passw int rc {0}; // "tcp://localhost:1883" - rc = MQTTAsync_create(&client, addr.c_str(), clientId.c_str(), MQTTCLIENT_PERSISTENCE_NONE, NULL); + std::string str = "ESS-" + std::to_string(Utils::random(1000, 9999)) + "-" +clientId; + rc = MQTTAsync_create(&client, addr.c_str(), str.c_str(), MQTTCLIENT_PERSISTENCE_NONE, NULL); if (rc != MQTTASYNC_SUCCESS) { spdlog::error("[mqtt] MQTTAsync_create error: {}", rc); @@ -87,10 +110,10 @@ int MqttClient::init(string addr, string clientId, string username, string passw void MqttClient::destory() { + return; if (client) { MQTTAsync_destroy(&client); - client = nullptr; } } @@ -154,7 +177,7 @@ int MqttClient::publish(string topic, string text) void MqttClient::onConnectionLost(char* cause) { this->isConnected = false; - this->destory(); + //this->destory(); spdlog::error("MQTT connection lost, cause={}", cause); } @@ -184,10 +207,47 @@ int MqttClient::onMessageArrived(char* topic, int topicLen, MQTTAsync_message* m std::string command = GetSubStr("/", topicStr); std::string deviceCode = GetSubStr("/", topicStr); - if (command == "EMS_YX") {} - else if (command == "EMS_YC") {} + + //EMS遥信 + //EMS遥测 + //EMS遥调 + //PCU遥信 + //PCU遥测 + //PCS遥信 + //PCS遥测 + //BMS遥测 + //BCU遥信 + //BCU遥测 + //电表遥测 + //温湿度遥测 + //消防遥信4.0 + //冷机遥信 + //冷机遥测 + //充电桩遥测 + //网关遥信 + //网关遥测 + //网关遥调 + //台区 + + if (command == "EMS_YX") { this->parseEMS_YX(payload); } + else if (command == "EMS_YC") { this->parseEMS_YC(payload); } else if (command == "PCU_YX") { this->parsePCU_YX(payload); } - else if (command == "PCU_YC") {} + else if (command == "PCU_YC") { this->parsePCU_YC(payload); } + else if (command == "PCS_YX") { this->parsePCS_YX(payload); } + else if (command == "PCS_YC") { this->parsePCS_YC(payload); } + else if (command == "BMS_YC") { this->parseBMS_YC(payload); } + else if (command == "BCU_YX") { this->parseBCU_YX(payload); } + else if (command == "BCU_YC") { this->parseBCU_YC(payload); } + else if (command == "MEM_YC") { this->parseMEM_YC(payload); } + else if (command == "TH_YC") { this->parseTH_YC(payload); } + else if (command == "Fire40_YX") { this->parseFire40_YX(payload); } + else if (command == "Cooling_YX") { this->parseCooling_YX(payload); } + else if (command == "Cooling_YC") { this->parseCooling_YC(payload); } + else if (command == "Charger_YC") { this->parseCharger_YC(payload); } + else if (command == "Gateway_YX") { this->parseGateway_YX(payload); } + else if (command == "Gateway_YC") { this->parseGateway_YC(payload); } + else if (command == "Gateway_YT") { this->parseGateway_YT(payload); } + else if (command == "TQ") { this->parseTQ(payload); } // 必须释放消息内存! MQTTAsync_freeMessage(&msg); @@ -205,7 +265,7 @@ void MqttClient::onDeliveryComplete(MQTTAsync_token token) void MqttClient::onConnectSuccess( MQTTAsync_successData* resp) { - spdlog::info("[mqtt] connect to {} success.", addr); + spdlog::info("[mqtt] connect to {} success, clientId={}.", addr, clientId); this->isConnected = true; this->subscribe(); //MQTTAsync_responseOptions options = MQTTAsync_responseOptions_initializer; @@ -234,20 +294,30 @@ void MqttClient::onConnectSuccess( MQTTAsync_successData* resp) } void MqttClient::onConnectFaiure(MQTTAsync_failureData* resp) { - spdlog::error("[mqtt] connect to {} error.", addr); + spdlog::error("[mqtt] connect to {} error, clientId={}.", addr, clientId); this->isConnected = false; this->destory(); } - -void MqttClient::parseEMS_YC(std::string& text) -{ - -} -void MqttClient::parsePCU_YX(std::string& text) -{ -} - +void MqttClient::parseEMS_YX(std::string& text){} +void MqttClient::parseEMS_YC(std::string& text) {}; +void MqttClient::parsePCU_YX(std::string& text) {}; +void MqttClient::parsePCU_YC(std::string& text) {}; +void MqttClient::parsePCS_YX(std::string& text) {}; +void MqttClient::parsePCS_YC(std::string& text) {}; +void MqttClient::parseBMS_YC(std::string& text) {}; +void MqttClient::parseBCU_YX(std::string& text) {}; +void MqttClient::parseBCU_YC(std::string& text) {}; +void MqttClient::parseMEM_YC(std::string& text) {}; +void MqttClient::parseTH_YC(std::string& text) {}; +void MqttClient::parseFire40_YX(std::string& text) {}; +void MqttClient::parseCooling_YX(std::string& text) {}; +void MqttClient::parseCooling_YC(std::string& text) {}; +void MqttClient::parseCharger_YC(std::string& text) {}; +void MqttClient::parseGateway_YX(std::string& text) {}; +void MqttClient::parseGateway_YC(std::string& text) {}; +void MqttClient::parseGateway_YT(std::string& text) {}; +void MqttClient::parseTQ(std::string& text) {}; string MQTT::packEquipmentInfo() { diff --git a/src/protocol/MqttEntity.h b/src/protocol/MqttEntity.h index f709a06..75bbc69 100644 --- a/src/protocol/MqttEntity.h +++ b/src/protocol/MqttEntity.h @@ -5,11 +5,29 @@ #include #include "MQTTAsync.h" +struct REGInfo +{ + std::string key; + std::string datatype; + int bytes {0}; + std::string remark; + + REGInfo() {} + REGInfo(std::string key, std::string datatype, std::string remark) + : key(key), datatype(datatype), remark(remark) + { + if (datatype == "uint16" || datatype == "int16") { bytes = 1; } + else if (datatype == "uint32" || datatype == "int32") { bytes = 2; } + } +}; + using namespace std; class MqttClient { public: + static void loadDataStruct(std::string filename); + int init(string addr, string clientId, string username, string password); void destory(); @@ -23,8 +41,25 @@ public: void onConnectSuccess(MQTTAsync_successData* resp); void onConnectFaiure(MQTTAsync_failureData* resp); + void parseEMS_YX(std::string& text); void parseEMS_YC(std::string& text); void parsePCU_YX(std::string& text); + void parsePCU_YC(std::string& text); + void parsePCS_YX(std::string& text); + void parsePCS_YC(std::string& text); + void parseBMS_YC(std::string& text); + void parseBCU_YX(std::string& text); + void parseBCU_YC(std::string& text); + void parseMEM_YC(std::string& text); + void parseTH_YC(std::string& text); + void parseFire40_YX(std::string& text); + void parseCooling_YX(std::string& text); + void parseCooling_YC(std::string& text); + void parseCharger_YC(std::string& text); + void parseGateway_YX(std::string& text); + void parseGateway_YC(std::string& text); + void parseGateway_YT(std::string& text); + void parseTQ(std::string& text); public: std::string clientId;