电池报文

master
smartwyy 6 months ago
parent 16cb9fa789
commit 6a2dcfdf89

@ -36,7 +36,7 @@ public class ExportDb
private readonly SqlSugarClient Db = new(new ConnectionConfig
{
ConnectionString =
"server=106.12.36.89;Database=chassis_track_swap0;Uid=remote_user;Pwd=Rszn123;Charset=utf8;",
"server=180.76.133.253;Port=16306;Database=huanneng_dev;Uid=root;Pwd=Rszn123;Charset=utf8;",
DbType = DbType.MySql,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute
@ -54,5 +54,30 @@ public class ExportDb
foreach (var columnInfo in columnInfos)
Log.Info($" {columnInfo.DbColumnName}:{columnInfo.ColumnDescription}");
}
Db.DbFirst
.Where(it => it.Contains("charge_order"))
.IsCreateAttribute() //创建sqlsugar自带特性
.FormatFileName(ToPascalCase) //格式化文件名(文件名和表名不一样情况)
.FormatClassName(ToPascalCase) //格式化类名 (类名和表名不一样的情况)
.FormatPropertyName(ToPascalCase) //格式化属性名 (属性名和字段名不一样情况)
.CreateClassFile("D:\\vsproject\\hn_back_charger\\Entity\\DbModel\\Station",
"Entity.DbModel.Station");
}
static string ToPascalCase(string input)
{
if (string.IsNullOrEmpty(input))
return input;
string[] strings = input.Split("_");
string res = "";
foreach (var s in strings)
{
string first = s.First().ToString().ToUpper();
string te = first + s.Substring(1);
res += te;
}
return res;
}
}

@ -63,6 +63,22 @@ namespace Entity.DbModel.Station
[SugarColumn(ColumnName="charger_gun_no")]
public string ChargerGunNo {get;set;}
/// <summary>
/// Desc:0站内充电 1站外充电
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="charge_mode")]
public int? ChargeMode {get;set;}
/// <summary>
/// Desc:1站控启动 2本地启动
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="start_mode")]
public int? StartMode {get;set;}
/// <summary>
/// Desc:充电开始时间
/// Default:
@ -111,6 +127,14 @@ namespace Entity.DbModel.Station
[SugarColumn(ColumnName="elec_count")]
public decimal? ElecCount {get;set;}
/// <summary>
/// Desc:交流电表量
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="ac_elec_count")]
public decimal? AcElecCount {get;set;}
/// <summary>
/// Desc:充电开始交流表电量
/// Default:
@ -183,6 +207,38 @@ namespace Entity.DbModel.Station
[SugarColumn(ColumnName="valley_elec_count")]
public decimal? ValleyElecCount {get;set;}
/// <summary>
/// Desc:尖时段交流电量
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="ac_sharp_elec_count")]
public decimal? AcSharpElecCount {get;set;}
/// <summary>
/// Desc:峰时段交流电量
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="ac_peak_elec_count")]
public decimal? AcPeakElecCount {get;set;}
/// <summary>
/// Desc:平时段交流电量
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="ac_flat_elec_count")]
public decimal? AcFlatElecCount {get;set;}
/// <summary>
/// Desc:谷时段交流电量
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="ac_valley_elec_count")]
public decimal? AcValleyElecCount {get;set;}
/// <summary>
/// Desc:电价版本号
/// Default:

@ -90,8 +90,10 @@ public class ChargerClient : TcpClient<IBaseHandler, Decoder, Encoder>
/// 心跳-桩状态
/// </summary>
public byte PileState { get; set; }
/// <summary>
/// 电池编码
/// </summary>
public string BatterSn { get; set; }
#region 发送指令

@ -116,13 +116,14 @@ public class Decoder : ByteToMessageDecoder
10 => ModelConvert.Decode<AuxiliaryPowerRes>(bytes),
11 => ModelConvert.Decode<Login>(bytes),
13 => ModelConvert.Decode<HeartBeat>(bytes),
21 => ModelConvert.Decode<AdjustChargeRateRes>(bytes),
25 => ModelConvert.Decode<AuthRes>(bytes),
//40 => ModelConvert.Decode<ValidationFailedResult>(bytes),
//41 => ModelConvert.Decode<UploadVinResult>(bytes),
44 => ModelConvert.Decode<OfflineStopChargingRes>(bytes),
//46 => ModelConvert.Decode<ChargingSOC>(bytes),
48 => ModelConvert.Decode<ResponseSetting>(bytes),
50 => ModelConvert.Decode<SdUpPkFtValSet>(bytes),
48 => ModelConvert.Decode<SetPeakVallyTimeRes>(bytes),
50 => ModelConvert.Decode<ChangeChargeModeRes>(bytes),
75 => ModelConvert.Decode<UploadModuleStatus>(bytes),
82 => ModelConvert.Decode<BatteryPackData>(bytes),
@ -202,6 +203,7 @@ public class Decoder : ByteToMessageDecoder
57 => ModelConvert.Decode<CscSumVolt>(bytes),
58 => ModelConvert.Decode<CscSumTemp>(bytes),
59 => ModelConvert.Decode<TimingInfo>(bytes),
81 => ModelConvert.Decode<QueryBatterySnRes>(bytes),
142 => ModelConvert.Decode<BattenergyInfo1>(bytes),
143 => ModelConvert.Decode<BattenergyInfo2>(bytes),
144 => ModelConvert.Decode<BattenergyInfo3>(bytes),
@ -213,7 +215,7 @@ public class Decoder : ByteToMessageDecoder
},
#endregion
42 => ModelConvert.Decode<RecordCharg>(bytes),
42 => ModelConvert.Decode<RecordCharge>(bytes),
11 => ModelConvert.Decode<UploadTelemetryData>(bytes),
49 => ModelConvert.Decode<RemoteStartChargingRes>(bytes),
50 => ModelConvert.Decode<RemoteStopChargingRes>(bytes),

@ -4,6 +4,7 @@ namespace Service.Charger.Common;
public static class ChargerConst
{
public static readonly AttributeKey<string> ChargerSn = AttributeKey<string>.ValueOf("charger_sn");
public static readonly AttributeKey<string> EqmTypeNo = AttributeKey<string>.ValueOf("eqm_type_no");
public static readonly AttributeKey<string> EqmCode = AttributeKey<string>.ValueOf("eqm_code");
@ -12,6 +13,10 @@ public static class ChargerConst
public static readonly byte[] StartChar = { 0x68 /* ,0xEE*/ };
public static readonly string AuthCode = "szhckj01";
public static readonly byte[] BatteryBasicInfo2 = { 0x00, 0xF8, 0x02 };
public static readonly byte[] BatteryNo = { 0x00, 0xF8, 0x81 };
public static readonly byte[] BatteryBasicInfo = { 0x00, 0xF8, 0x82 };
}
/// <summary>

@ -0,0 +1,28 @@
using DotNetty.Transport.Channels;
using HybirdFrameworkCore.Autofac.Attribute;
using log4net;
using Service.Charger.Client;
using Service.Charger.Msg.Charger.Resp;
namespace Service.Charger.Handler
{
/// <summary>
/// 3.4.4 充放电机应答辅助控制
/// <code>
/// 1保存日志到log
/// </code>
/// </summary>
[Order(8)]
[Scope("InstancePerDependency")]
public class AdjustChargeRateResHandler : SimpleChannelInboundHandler<AdjustChargeRateRes>, IBaseHandler
{
private static readonly ILog Log = LogManager.GetLogger(typeof(AdjustChargeRateResHandler));
protected override void ChannelRead0(IChannelHandlerContext ctx, AdjustChargeRateRes msg)
{
if (ClientMgr.TryGetClient(ctx.Channel, out var sn, out var client))
{
Log.Info($"receive {msg} from {sn}");
}
}
}
}

@ -0,0 +1,29 @@
using DotNetty.Transport.Channels;
using HybirdFrameworkCore.Autofac.Attribute;
using log4net;
using Service.Charger.Client;
using Service.Charger.Msg.Charger.Resp;
namespace Service.Charger.Handler
{
/// <summary>
/// 3.4.4 充放电机应答辅助控制
/// <code>
/// 1保存日志到log
/// </code>
/// </summary>
[Order(8)]
[Scope("InstancePerDependency")]
public class ChangeChargeModeResHandler : SimpleChannelInboundHandler<ChangeChargeModeRes>, IBaseHandler
{
private static readonly ILog Log = LogManager.GetLogger(typeof(ChangeChargeModeResHandler));
protected override void ChannelRead0(IChannelHandlerContext ctx, ChangeChargeModeRes msg)
{
if (ClientMgr.TryGetClient(ctx.Channel, out var sn, out var client))
{
Log.Info($"receive {msg} from {sn}");
}
}
}
}

@ -0,0 +1,29 @@
using DotNetty.Transport.Channels;
using HybirdFrameworkCore.Autofac.Attribute;
using log4net;
using Service.Charger.Client;
using Service.Charger.Msg.Charger.Resp;
namespace Service.Charger.Handler
{
/// <summary>
/// 充放电机应答监控平台掉线停止充电
/// <code>
/// 1保存日志到log
/// </code>
/// </summary>
[Order(8)]
[Scope("InstancePerDependency")]
public class OfflineStopChargingResHandler : SimpleChannelInboundHandler<OfflineStopChargingRes>, IBaseHandler
{
private static readonly ILog Log = LogManager.GetLogger(typeof(OfflineStopChargingResHandler));
protected override void ChannelRead0(IChannelHandlerContext ctx, OfflineStopChargingRes msg)
{
if (ClientMgr.TryGetClient(ctx.Channel, out var sn, out var client))
{
Log.Info($"receive {msg} from {sn}");
}
}
}
}

@ -0,0 +1,38 @@
using System.Text;
using DotNetty.Transport.Channels;
using HybirdFrameworkCore.Autofac.Attribute;
using log4net;
using Service.Charger.Client;
using Service.Charger.Msg.Charger.Resp;
namespace Service.Charger.Handler
{
/// <summary>
/// 3.4.4 充放电机应答辅助控制
/// <code>
/// 1保存日志到log
/// </code>
/// </summary>
[Order(8)]
[Scope("InstancePerDependency")]
public class QueryBatteryBasicInfo2ResHandler : SimpleChannelInboundHandler<QueryBatterySnRes>, IBaseHandler
{
private static readonly ILog Log = LogManager.GetLogger(typeof(QueryBatteryBasicInfo2ResHandler));
protected override void ChannelRead0(IChannelHandlerContext ctx, QueryBatterySnRes msg)
{
if (ClientMgr.TryGetClient(ctx.Channel, out var sn, out var client))
{
StringBuilder sb = new StringBuilder(27);
foreach (var b in msg.BatterSnBytes)
{
sb.Append(Convert.ToChar(b));
}
client.BatterSn = sb.ToString();
Log.Info($"receive {msg} from {sn}");
}
}
}
}

@ -0,0 +1,60 @@
using Autofac;
using DotNetty.Transport.Channels;
using HybirdFrameworkCore.Autofac;
using HybirdFrameworkCore.Autofac.Attribute;
using HybirdFrameworkCore.Redis;
using log4net;
using Service.Charger.Msg.Charger.Req;
namespace Service.Charger.Handler
{
/// <summary>
/// 主动上送充电记录
/// <code>
/// 1保存到Redis-7
/// 2保存日志到log
/// 3回复主动上送充电记录
/// 4保存充电记录日志
/// 5保存 充电记录保存到云平台记录标识
/// </code>
/// </summary>
[Order(8)]
[Scope("InstancePerDependency")]
public class RecordChargeHandler : SimpleChannelInboundHandler<RecordCharge>, IBaseHandler
{
private static readonly ILog Log = LogManager.GetLogger(typeof(RecordChargeHandler));
protected override void ChannelRead0(IChannelHandlerContext ctx, RecordCharge? msg)
{
msg.StartTime = (msg.StartYear+1900) + "-" + msg.StartMonth + "-" + msg.StartDay + " " + msg.StartHour + ":" + msg.StartMinute + ":" + msg.StartSecond;
msg.EndTime = (msg.EndYear+1900) + "-" + msg.EndMonth + "-" + msg.EndDay + " " + msg.EndHour + ":" + msg.EndMinute + ":" + msg.EndSecond;
float[] powersPeriods = new float[4] { 0, 0, 0, 0 }; //元素索引顺序代表值1234
if (msg.FlagOfTime1 >= 1 && msg.FlagOfTime1 <= 4){powersPeriods[msg.FlagOfTime1 - 1] += msg.ChargingPowerOfTime1;}
if (msg.FlagOfTime2 >= 1 && msg.FlagOfTime2 <= 4){powersPeriods[msg.FlagOfTime2 - 1] += msg.ChargingPowerOfTime2;}
if (msg.FlagOfTime3 >= 1 && msg.FlagOfTime3 <= 4){powersPeriods[msg.FlagOfTime3 - 1] += msg.ChargingPowerOfTime3;}
if (msg.FlagOfTime4 >= 1 && msg.FlagOfTime4 <= 4){powersPeriods[msg.FlagOfTime4 - 1] += msg.ChargingPowerOfTime4;}
if (msg.FlagOfTime5 >= 1 && msg.FlagOfTime5 <= 4){powersPeriods[msg.FlagOfTime5 - 1] += msg.ChargingPowerOfTime5;}
if (msg.FlagOfTime6 >= 1 && msg.FlagOfTime6 <= 4){powersPeriods[msg.FlagOfTime6 - 1] += msg.ChargingPowerOfTime6;}
if (msg.FlagOfTime7 >= 1 && msg.FlagOfTime7 <= 4){powersPeriods[msg.FlagOfTime7 - 1] += msg.ChargingPowerOfTime7;}
if (msg.FlagOfTime8 >= 1 && msg.FlagOfTime8 <= 4){powersPeriods[msg.FlagOfTime8 - 1] += msg.ChargingPowerOfTime8;}
float[] acPowersPeriods = new float[4] { 0, 0, 0, 0 }; //元素索引顺序代表值1234
if (msg.AcFlagOfTime1 >= 1 && msg.AcFlagOfTime1 <= 4){acPowersPeriods[msg.AcFlagOfTime1 - 1] += msg.AcChargingPowerOfTime1;}
if (msg.AcFlagOfTime2 >= 1 && msg.AcFlagOfTime2 <= 4){acPowersPeriods[msg.AcFlagOfTime2 - 1] += msg.AcChargingPowerOfTime2;}
if (msg.AcFlagOfTime3 >= 1 && msg.AcFlagOfTime3 <= 4){acPowersPeriods[msg.AcFlagOfTime3 - 1] += msg.AcChargingPowerOfTime3;}
if (msg.AcFlagOfTime4 >= 1 && msg.AcFlagOfTime4 <= 4){acPowersPeriods[msg.AcFlagOfTime4 - 1] += msg.AcChargingPowerOfTime4;}
if (msg.AcFlagOfTime5 >= 1 && msg.AcFlagOfTime5 <= 4){acPowersPeriods[msg.AcFlagOfTime5 - 1] += msg.AcChargingPowerOfTime5;}
if (msg.AcFlagOfTime6 >= 1 && msg.AcFlagOfTime6 <= 4){acPowersPeriods[msg.AcFlagOfTime6 - 1] += msg.AcChargingPowerOfTime6;}
if (msg.AcFlagOfTime7 >= 1 && msg.AcFlagOfTime7 <= 4){acPowersPeriods[msg.AcFlagOfTime7 - 1] += msg.AcChargingPowerOfTime7;}
if (msg.AcFlagOfTime8 >= 1 && msg.AcFlagOfTime8 <= 4){acPowersPeriods[msg.AcFlagOfTime8 - 1] += msg.AcChargingPowerOfTime8;}
RedisHelper redisHelper = AppInfo.Container.Resolve<RedisHelper>();
var hlpChannelARedis = redisHelper.GetDatabase(7);
}
}
}

@ -0,0 +1,29 @@
using DotNetty.Transport.Channels;
using HybirdFrameworkCore.Autofac.Attribute;
using log4net;
using Service.Charger.Client;
using Service.Charger.Msg.Charger.Resp;
namespace Service.Charger.Handler
{
/// <summary>
/// 充放电机应答监控平台掉线停止充电
/// <code>
/// 1保存日志到log
/// </code>
/// </summary>
[Order(8)]
[Scope("InstancePerDependency")]
public class SetPeakVallyTimeResHandler : SimpleChannelInboundHandler<SetPeakVallyTimeRes>, IBaseHandler
{
private static readonly ILog Log = LogManager.GetLogger(typeof(SetPeakVallyTimeResHandler));
protected override void ChannelRead0(IChannelHandlerContext ctx, SetPeakVallyTimeRes msg)
{
if (ClientMgr.TryGetClient(ctx.Channel, out var sn, out var client))
{
Log.Info($"receive {msg} from {sn}");
}
}
}
}

@ -1,802 +0,0 @@
using HybirdFrameworkCore.Autofac.Attribute;
namespace Service.Charger.Msg.Charger.Req
{
/// <summary>
/// 3.5.5 主动上送充电记录
/// </summary>
public class RecordCharg : ASDU
{
/// <summary>
/// 充电开始时间-秒
/// </summary>
[Property(0, 8)]
public byte StartSecond { get; set; }
/// <summary>
/// 充电开始时间-分
/// </summary>
[Property(8, 8)]
public byte StartMinute { get; set; }
/// <summary>
/// 充电开始时间-时
/// </summary>
[Property(16, 8)]
public byte StartHour { get; set; }
/// <summary>
/// 充电开始时间-日
/// </summary>
[Property(24, 8)]
public byte StartDay { get; set; }
/// <summary>
/// 充电开始时间-月
/// </summary>
[Property(32, 8)]
public byte StartMonth { get; set; }
/// <summary>
/// 充电开始时间-年
/// </summary>
[Property(40, 8)]
public byte StartYear { get; set; }
/// <summary>
/// 充电结束时间-秒
/// </summary>
[Property(48, 8)]
public byte EndSecond { get; set; }
/// <summary>
/// 充电结束时间-分
/// </summary>
[Property(56, 8)]
public byte EndMinute { get; set; }
/// <summary>
/// 充电结束时间-时
/// </summary>
[Property(64, 8)]
public byte EndHour { get; set; }
/// <summary>
/// 充电结束时间-日
/// </summary>
[Property(72, 8)]
public byte EndDay { get; set; }
/// <summary>
/// 充电结束时间-月
/// </summary>
[Property(80, 8)]
public byte EndMonth { get; set; }
/// <summary>
/// 充电结束时间-年
/// </summary>
[Property(88, 8)]
public byte EndYear { get; set; }
/// <summary>
/// 充电开始时间 秒-分-时-日-月-年
/// </summary>
public string StartTime { get; set; }
/// <summary>
/// 充电结束时间
/// </summary>
public string EndTime { get; set; }
/// <summary>
/// 1 枪充电前电能表数据
/// </summary>
[Property(96, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float FirstGunEnergyMeterDataBefore { get; set; }
/// <summary>
/// 1 枪充电后电能表数据
/// </summary>
[Property(128, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float FirstGunEnergyMeterDataAfter { get; set; }
/// <summary>
/// 2 枪充电前电能表数据
/// </summary>
[Property(160, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float SecondGunEnergyMeterDataBefore { get; set; }
/// <summary>
/// 2 枪充电后电能表数据
/// </summary>
[Property(192, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float SecondGunEnergyMeterDataAfter { get; set; }
/// <summary>
/// 充电电量
/// </summary>
[Property(224, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPower { get; set; }
/// <summary>
/// 充电前SOC
/// </summary>
[Property(256, 8)]
public byte SocBefore { get; set; }
/// <summary>
/// 充电后SOC
/// </summary>
[Property(264, 8)]
public byte SocAfter { get; set; }
/// <summary>
/// 充电时段数量
/// </summary>
[Property(272, 8)]
public byte ChargingTimeCount { get; set; }
/// <summary>
/// 时段1 开始时间 时
/// </summary>
[Property(280, 8)]
public byte StartTime1 { get; set; }
/// <summary>
/// 时段1 开始时间 分
/// </summary>
[Property(288, 8)]
public byte StartTimeMinute1 { get; set; }
/// <summary>
/// 时段1 电量
/// </summary>
[Property(296, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime1 { get; set; }
/// <summary>
/// 时段1 标识
/// </summary>
[Property(328, 8)]
public byte FlagOfTime1 { get; set; }
/// <summary>
/// 时段2 开始时间 时
/// </summary>
[Property(280 + 56, 8)]
public byte StartTime2 { get; set; }
/// <summary>
/// 时段2 开始时间 分
/// </summary>
[Property(288 + 56, 8)]
public byte StartTimeMinute2 { get; set; }
/// <summary>
/// 时段2 电量
/// </summary>
[Property(296 + 56, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime2 { get; set; }
/// <summary>
/// 时段2 标识
/// </summary>
[Property(328 + 56, 8)]
public byte FlagOfTime2 { get; set; }
/// <summary>
/// 时段3 开始时间 时
/// </summary>
[Property(280 + 56 * 2, 8)]
public byte StartTime3 { get; set; }
/// <summary>
/// 时段3 开始时间 分
/// </summary>
[Property(288 + 56 * 2, 8)]
public byte StartTimeMinute3 { get; set; }
/// <summary>
/// 时段3 电量
/// </summary>
[Property(296 + 56 * 2, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime3 { get; set; }
/// <summary>
/// 时段3 标识
/// </summary>
[Property(328 + 56 * 2, 8)]
public byte FlagOfTime3 { get; set; }
/// <summary>
/// 时段4 开始时间 时
/// </summary>
[Property(280 + 56 * 3, 8)]
public byte StartTime4 { get; set; }
/// <summary>
/// 时段4 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute4 { get; set; }
/// <summary>
/// 时段4 电量
/// </summary>
[Property(296 + 56 * 3, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime4 { get; set; }
/// <summary>
/// 时段4 标识
/// </summary>
[Property(328 + 56 * 3, 8)]
public byte FlagOfTime4 { get; set; }
/// <summary>
/// 时段5 开始时间 时
/// </summary>
[Property(280 + 56 * 4, 8)]
public byte StartTime5 { get; set; }
/// <summary>
/// 时段5 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute5 { get; set; }
/// <summary>
/// 时段5 电量
/// </summary>
[Property(296 + 56 * 4, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime5 { get; set; }
/// <summary>
/// 时段5 标识
/// </summary>
[Property(328 + 56 * 4, 8)]
public byte FlagOfTime5 { get; set; }
/// <summary>
/// 时段6 开始时间 时
/// </summary>
[Property(280 + 56 * 5, 8)]
public byte StartTime6 { get; set; }
/// <summary>
/// 时段6 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute6 { get; set; }
/// <summary>
/// 时段6 电量
/// </summary>
[Property(296 + 56 * 5, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime6 { get; set; }
/// <summary>
/// 时段6 标识
/// </summary>
[Property(328 + 56 * 5, 8)]
public byte FlagOfTime6 { get; set; }
/// <summary>
/// 时段7 开始时间 时
/// </summary>
[Property(280 + 56 * 6, 8)]
public byte StartTime7 { get; set; }
/// <summary>
/// 时段7 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute7 { get; set; }
/// <summary>
/// 时段7 电量
/// </summary>
[Property(296 + 56 * 6, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime7 { get; set; }
/// <summary>
/// 时段7 标识
/// </summary>
[Property(328 + 56 * 6, 8)]
public byte FlagOfTime7 { get; set; }
/// <summary>
/// 时段8 开始时间 时
/// </summary>
[Property(280 + 56 * 7, 8)]
public byte StartTime8 { get; set; }
/// <summary>
/// 时段8 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute8 { get; set; }
/// <summary>
/// 时段8 电量
/// </summary>
[Property(296 + 56 * 7, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime8 { get; set; }
/// <summary>
/// 时段8 标识
/// </summary>
[Property(328 + 56 * 7, 8)]
public byte FlagOfTime8 { get; set; }
/// <summary>
/// 时段9 开始时间 时
/// </summary>
[Property(280 + 56 * 8, 8)]
public byte StartTime9 { get; set; }
/// <summary>
/// 时段9 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute9 { get; set; }
/// <summary>
/// 时段9 电量
/// </summary>
[Property(296 + 56 * 8, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime9 { get; set; }
/// <summary>
/// 时段9 标识
/// </summary>
[Property(328 + 56 * 8, 8)]
public byte FlagOfTime9 { get; set; }
/// <summary>
/// 时段10 开始时间 时
/// </summary>
[Property(280 + 56 * 9, 8)]
public byte StartTime10 { get; set; }
/// <summary>
/// 时段10 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute10 { get; set; }
/// <summary>
/// 时段10 电量
/// </summary>
[Property(296 + 56 * 9, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime10 { get; set; }
/// <summary>
/// 时段10 标识
/// </summary>
[Property(328 + 56 * 9, 8)]
public byte FlagOfTime10 { get; set; }
/// <summary>
/// 时段11 开始时间 时
/// </summary>
[Property(280 + 56 * 10, 8)]
public byte StartTime11 { get; set; }
/// <summary>
/// 时段11 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute11 { get; set; }
/// <summary>
/// 时段11 电量
/// </summary>
[Property(296 + 56 * 10, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime11 { get; set; }
/// <summary>
/// 时段11 标识
/// </summary>
[Property(328 + 56 * 10, 8)]
public byte FlagOfTime11 { get; set; }
/// <summary>
/// 时段12 开始时间 时
/// </summary>
[Property(280 + 56 * 11, 8)]
public byte StartTime12 { get; set; }
/// <summary>
/// 时段12 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute12 { get; set; }
/// <summary>
/// 时段12 电量
/// </summary>
[Property(296 + 56 * 11, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime12 { get; set; }
/// <summary>
/// 时段12 标识
/// </summary>
[Property(328 + 56 * 11, 8)]
public byte FlagOfTime12 { get; set; }
/// <summary>
/// 时段13 开始时间 时
/// </summary>
[Property(280 + 56 * 12, 8)]
public byte StartTime13 { get; set; }
/// <summary>
/// 时段13 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute13 { get; set; }
/// <summary>
/// 时段13 电量
/// </summary>
[Property(296 + 56 * 12, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime13 { get; set; }
/// <summary>
/// 时段13 标识
/// </summary>
[Property(328 + 56 * 12, 8)]
public byte FlagOfTime13 { get; set; }
/// <summary>
/// 时段14 开始时间 时
/// </summary>
[Property(280 + 56 * 13, 8)]
public byte StartTime14 { get; set; }
/// <summary>
/// 时段14 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute14 { get; set; }
/// <summary>
/// 时段14 电量
/// </summary>
[Property(296 + 56 * 13, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime14 { get; set; }
/// <summary>
/// 时段14 标识
/// </summary>
[Property(328 + 56 * 13, 8)]
public byte FlagOfTime14 { get; set; }
/// <summary>
/// 时段15 开始时间 时
/// </summary>
[Property(280 + 56 * 14, 8)]
public byte StartTime15 { get; set; }
/// <summary>
/// 时段15 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute15 { get; set; }
/// <summary>
/// 时段15 电量
/// </summary>
[Property(296 + 56 * 14, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime15 { get; set; }
/// <summary>
/// 时段15 标识
/// </summary>
[Property(328 + 56 * 14, 8)]
public byte FlagOfTime15 { get; set; }
/// <summary>
/// 时段16 开始时间 时
/// </summary>
[Property(280 + 56 * 15, 8)]
public byte StartTime16 { get; set; }
/// <summary>
/// 时段16 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute16 { get; set; }
/// <summary>
/// 时段16 电量
/// </summary>
[Property(296 + 56 * 15, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime16 { get; set; }
/// <summary>
/// 时段16 标识
/// </summary>
[Property(328 + 56 * 15, 8)]
public byte FlagOfTime16 { get; set; }
/// <summary>
/// 时段17 开始时间 时
/// </summary>
[Property(280 + 56 * 16, 8)]
public byte StartTime17 { get; set; }
/// <summary>
/// 时段17 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute17 { get; set; }
/// <summary>
/// 时段17 电量
/// </summary>
[Property(296 + 56 * 16, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime17 { get; set; }
/// <summary>
/// 时段17 标识
/// </summary>
[Property(328 + 56 * 16, 8)]
public byte FlagOfTime17 { get; set; }
/// <summary>
/// 时段18 开始时间 时
/// </summary>
[Property(280 + 56 * 17, 8)]
public byte StartTime18 { get; set; }
/// <summary>
/// 时段18 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute18 { get; set; }
/// <summary>
/// 时段18 电量
/// </summary>
[Property(296 + 56 * 17, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime18 { get; set; }
/// <summary>
/// 时段18 标识
/// </summary>
[Property(328 + 56 * 17, 8)]
public byte FlagOfTime18 { get; set; }
/// <summary>
/// 时段19 开始时间 时
/// </summary>
[Property(280 + 56 * 18, 8)]
public byte StartTime19 { get; set; }
/// <summary>
/// 时段19 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute19 { get; set; }
/// <summary>
/// 时段19 电量
/// </summary>
[Property(296 + 56 * 18, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime19 { get; set; }
/// <summary>
/// 时段19 标识
/// </summary>
[Property(328 + 56 * 18, 8)]
public byte FlagOfTime19 { get; set; }
/// <summary>
/// 时段20 开始时间 时
/// </summary>
[Property(280 + 56 * 19, 8)]
public byte StartTime20 { get; set; }
/// <summary>
/// 时段20 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute20 { get; set; }
/// <summary>
/// 时段20 电量
/// </summary>
[Property(296 + 56 * 19, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime20 { get; set; }
/// <summary>
/// 时段20 标识
/// </summary>
[Property(328 + 56 * 19, 8)]
public byte FlagOfTime20 { get; set; }
/// <summary>
/// 时段21 开始时间 时
/// </summary>
[Property(280 + 56 * 20, 8)]
public byte StartTime21 { get; set; }
/// <summary>
/// 时段21 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute21 { get; set; }
/// <summary>
/// 时段21 电量
/// </summary>
[Property(296 + 56 * 20, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime21 { get; set; }
/// <summary>
/// 时段21 标识
/// </summary>
[Property(328 + 56 * 20, 8)]
public byte FlagOfTime21 { get; set; }
/// <summary>
/// 时段22 开始时间 时
/// </summary>
[Property(280 + 56 * 21, 8)]
public byte StartTime22 { get; set; }
/// <summary>
/// 时段22 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute22 { get; set; }
/// <summary>
/// 时段22 电量
/// </summary>
[Property(296 + 56 * 21, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime22 { get; set; }
/// <summary>
/// 时段22 标识
/// </summary>
[Property(328 + 56 * 21, 8)]
public byte FlagOfTime22 { get; set; }
/// <summary>
/// 时段23 开始时间 时
/// </summary>
[Property(280 + 56 * 22, 8)]
public byte StartTime23 { get; set; }
/// <summary>
/// 时段23 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute23 { get; set; }
/// <summary>
/// 时段23 电量
/// </summary>
[Property(296 + 56 * 22, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime23 { get; set; }
/// <summary>
/// 时段23 标识
/// </summary>
[Property(328 + 56 * 22, 8)]
public byte FlagOfTime23 { get; set; }
/// <summary>
/// 时段24 开始时间 时
/// </summary>
[Property(280 + 56 * 23, 8)]
public byte StartTime24 { get; set; }
/// <summary>
/// 时段24 开始时间 分
/// </summary>
[Property(288 + 56 * 3, 8)]
public byte StartTimeMinute24 { get; set; }
/// <summary>
/// 时段24 电量
/// </summary>
[Property(296 + 56 * 23, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime24 { get; set; }
/// <summary>
/// 时段24 标识
/// </summary>
[Property(328 + 56 * 23, 8)]
public byte FlagOfTime24 { get; set; }
/// <summary>
/// 充电前交流表值
/// </summary>
[Property(1624, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float AcMeterDataBefore { get; set; }
/// <summary>
/// 充电后交流表值
/// </summary>
[Property(1656, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float AcMeterDataAfter { get; set; }
/// <summary>
/// 启动模式
/// </summary>
[Property(1688, 8)]
public byte BootMode { get; set; }
/// <summary>
/// 充电流水号
/// </summary>
[Property(1696, 16, PropertyReadConstant.Byte)]
public byte[] ChargingWater { get; set; }
/// <summary>
/// 充电流水号
/// </summary>
public string ChargingSn { get; set; }
/// <summary>
/// 车辆 VIN
/// </summary>
[Property(1712, 17, PropertyReadConstant.Byte)]
public byte[] VehicleVIN { get; set; }
/// <summary>
/// 车辆 VIN
/// </summary>
public string VehicleVin { get; set; }
public string time01 { get; set; }
public string time02 { get; set; }
public string time03 { get; set; }
public string time04 { get; set; }
public string time05 { get; set; }
public string time06 { get; set; }
public string time07 { get; set; }
public string time08 { get; set; }
public string time09 { get; set; }
public string time10 { get; set; }
public string time11 { get; set; }
public string time12 { get; set; }
public string time13 { get; set; }
public string time14 { get; set; }
public string time15 { get; set; }
public string time16 { get; set; }
public string time17 { get; set; }
public string time18 { get; set; }
public string time19 { get; set; }
public string time20 { get; set; }
public string time21 { get; set; }
public string time22 { get; set; }
public string time23 { get; set; }
public string time24 { get; set; }
/// <summary>
/// 尖时间段电量
/// </summary>
public float SharpPeriodPower { get; set; }
/// <summary>
/// 峰时间段电量
/// </summary>
public float PeakPeriodPower { get; set; }
/// <summary>
/// 平时间段电量
/// </summary>
public float FlatPeriodPower { get; set; }
/// <summary>
/// 谷时间段电量
/// </summary>
public float ValleyPeriodPower { get; set; }
}
}

@ -0,0 +1,582 @@
using HybirdFrameworkCore.Autofac.Attribute;
namespace Service.Charger.Msg.Charger.Req
{
/// <summary>
/// 3.5.5 主动上送充电记录
/// </summary>
public class RecordCharge : ASDU
{
/// <summary>
/// 充电开始时间-秒
/// </summary>
[Property(0, 256, PropertyReadConstant.Byte)]
public string ChargerOrderNo { get; set; }
/// <summary>
/// 充电开始时间-秒
/// </summary>
[Property(256, 8)]
public byte StartSecond { get; set; }
/// <summary>
/// 充电开始时间-分
/// </summary>
[Property(264, 8)]
public byte StartMinute { get; set; }
/// <summary>
/// 充电开始时间-时
/// </summary>
[Property(272, 8)]
public byte StartHour { get; set; }
/// <summary>
/// 充电开始时间-日
/// </summary>
[Property(280, 8)]
public byte StartDay { get; set; }
/// <summary>
/// 充电开始时间-月
/// </summary>
[Property(288, 8)]
public byte StartMonth { get; set; }
/// <summary>
/// 充电开始时间-年
/// </summary>
[Property(296, 8)]
public byte StartYear { get; set; }
/// <summary>
/// 充电结束时间-秒
/// </summary>
[Property(304, 8)]
public byte EndSecond { get; set; }
/// <summary>
/// 充电结束时间-分
/// </summary>
[Property(312, 8)]
public byte EndMinute { get; set; }
/// <summary>
/// 充电结束时间-时
/// </summary>
[Property(320, 8)]
public byte EndHour { get; set; }
/// <summary>
/// 充电结束时间-日
/// </summary>
[Property(328, 8)]
public byte EndDay { get; set; }
/// <summary>
/// 充电结束时间-月
/// </summary>
[Property(336, 8)]
public byte EndMonth { get; set; }
/// <summary>
/// 充电结束时间-年
/// </summary>
[Property(344, 8)]
public byte EndYear { get; set; }
/// <summary>
/// 充电开始时间 秒-分-时-日-月-年
/// </summary>
public string StartTime { get; set; }
/// <summary>
/// 充电结束时间
/// </summary>
public string EndTime { get; set; }
/// <summary>
/// 1 枪充电前电能表数据
/// </summary>
[Property(352, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float FirstGunEnergyMeterDataBefore { get; set; }
/// <summary>
/// 1 枪充电后电能表数据
/// </summary>
[Property(384, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float FirstGunEnergyMeterDataAfter { get; set; }
/// <summary>
/// 2 枪充电前电能表数据
/// </summary>
[Property(416, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float SecondGunEnergyMeterDataBefore { get; set; }
/// <summary>
/// 2 枪充电后电能表数据
/// </summary>
[Property(448, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float SecondGunEnergyMeterDataAfter { get; set; }
/// <summary>
/// 充电电量
/// </summary>
[Property(480, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPower { get; set; }
/// <summary>
/// 充电前SOC
/// </summary>
[Property(512, 8)]
public byte SocBefore { get; set; }
/// <summary>
/// 充电后SOC
/// </summary>
[Property(520, 8)]
public byte SocAfter { get; set; }
/// <summary>
/// 充电时段数量
/// </summary>
[Property(528, 8)]
public byte ChargingTimeCount { get; set; }
#region 直流峰谷电
/// <summary>
/// 时段1 开始时间 时
/// </summary>
[Property(536, 8)]
public byte StartTime1 { get; set; }
/// <summary>
/// 时段1 开始时间 分
/// </summary>
[Property(544, 8)]
public byte StartTimeMinute1 { get; set; }
/// <summary>
/// 时段1 电量
/// </summary>
[Property(552, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime1 { get; set; }
/// <summary>
/// 时段1 标识
/// </summary>
[Property(584, 8)]
public byte FlagOfTime1 { get; set; }
/// <summary>
/// 时段2 开始时间 时
/// </summary>
[Property(536 + 56, 8)]
public byte StartTime2 { get; set; }
/// <summary>
/// 时段2 开始时间 分
/// </summary>
[Property(544 + 56, 8)]
public byte StartTimeMinute2 { get; set; }
/// <summary>
/// 时段2 电量
/// </summary>
[Property(552 + 56, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime2 { get; set; }
/// <summary>
/// 时段2 标识
/// </summary>
[Property(584 + 56, 8)]
public byte FlagOfTime2 { get; set; }
/// <summary>
/// 时段3 开始时间 时
/// </summary>
[Property(536 + 56 * 2, 8)]
public byte StartTime3 { get; set; }
/// <summary>
/// 时段3 开始时间 分
/// </summary>
[Property(544 + 56 * 2, 8)]
public byte StartTimeMinute3 { get; set; }
/// <summary>
/// 时段3 电量
/// </summary>
[Property(552 + 56 * 2, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime3 { get; set; }
/// <summary>
/// 时段3 标识
/// </summary>
[Property(584 + 56 * 2, 8)]
public byte FlagOfTime3 { get; set; }
/// <summary>
/// 时段4 开始时间 时
/// </summary>
[Property(536 + 56 * 3, 8)]
public byte StartTime4 { get; set; }
/// <summary>
/// 时段4 开始时间 分
/// </summary>
[Property(544 + 56 * 3, 8)]
public byte StartTimeMinute4 { get; set; }
/// <summary>
/// 时段4 电量
/// </summary>
[Property(552 + 56 * 3, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime4 { get; set; }
/// <summary>
/// 时段4 标识
/// </summary>
[Property(584 + 56 * 3, 8)]
public byte FlagOfTime4 { get; set; }
/// <summary>
/// 时段5 开始时间 时
/// </summary>
[Property(536 + 56 * 4, 8)]
public byte StartTime5 { get; set; }
/// <summary>
/// 时段5 开始时间 分
/// </summary>
[Property(544 + 56 * 4, 8)]
public byte StartTimeMinute5 { get; set; }
/// <summary>
/// 时段5 电量
/// </summary>
[Property(552 + 56 * 4, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime5 { get; set; }
/// <summary>
/// 时段5 标识
/// </summary>
[Property(584 + 56 * 4, 8)]
public byte FlagOfTime5 { get; set; }
/// <summary>
/// 时段6 开始时间 时
/// </summary>
[Property(536 + 56 * 5, 8)]
public byte StartTime6 { get; set; }
/// <summary>
/// 时段6 开始时间 分
/// </summary>
[Property(544 + 56 * 5, 8)]
public byte StartTimeMinute6 { get; set; }
/// <summary>
/// 时段6 电量
/// </summary>
[Property(552 + 56 * 5, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime6 { get; set; }
/// <summary>
/// 时段6 标识
/// </summary>
[Property(584 + 56 * 5, 8)]
public byte FlagOfTime6 { get; set; }
/// <summary>
/// 时段7 开始时间 时
/// </summary>
[Property(536 + 56 * 6, 8)]
public byte StartTime7 { get; set; }
/// <summary>
/// 时段7 开始时间 分
/// </summary>
[Property(544 + 56 * 6, 8)]
public byte StartTimeMinute7 { get; set; }
/// <summary>
/// 时段7 电量
/// </summary>
[Property(552 + 56 * 6, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime7 { get; set; }
/// <summary>
/// 时段7 标识
/// </summary>
[Property(584 + 56 * 6, 8)]
public byte FlagOfTime7 { get; set; }
/// <summary>
/// 时段8 开始时间 时
/// </summary>
[Property(536 + 56 * 7, 8)]
public byte StartTime8 { get; set; }
/// <summary>
/// 时段8 开始时间 分
/// </summary>
[Property(544 + 56 * 7, 8)]
public byte StartTimeMinute8 { get; set; }
/// <summary>
/// 时段8 电量
/// </summary>
[Property(552 + 56 * 7, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float ChargingPowerOfTime8 { get; set; }
/// <summary>
/// 时段8 标识
/// </summary>
[Property(584 + 56 * 7, 8)]
public byte FlagOfTime8 { get; set; }
#endregion
/// <summary>
/// 充电模式 0站内充电 1站外充电
/// </summary>
[Property(984, 8)]
public byte ChargeMode { get; set; }
/// <summary>
/// 启动模式 0: 站控启动 1本地启动
/// </summary>
[Property(992, 8)]
public byte StartMode { get; set; }
/// <summary>
/// 充电前直流表值
/// </summary>
[Property(1000, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float DcMeterDataBefore { get; set; }
/// <summary>
/// 充电后直流表值
/// </summary>
[Property(1032, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float DcMeterDataAfter { get; set; }
/// <summary>
/// 充电前交流表值
/// </summary>
[Property(1064, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float AcMeterDataBefore { get; set; }
/// <summary>
/// 充电后交流表值
/// </summary>
[Property(1096, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float AcMeterDataAfter { get; set; }
/// <summary>
/// 交流表充电量
/// </summary>
[Property(1128, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float AcMeterElecCount { get; set; }
#region 交流峰谷电
/// <summary>
/// 时段1 开始时间 时
/// </summary>
[Property(1160, 8)]
public byte AcStartTime1 { get; set; }
/// <summary>
/// 时段1 开始时间 分
/// </summary>
[Property(1168, 8)]
public byte AcStartTimeMinute1 { get; set; }
/// <summary>
/// 时段1 电量
/// </summary>
[Property(1176, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float AcChargingPowerOfTime1 { get; set; }
/// <summary>
/// 时段1 标识
/// </summary>
[Property(1208, 8)]
public byte AcFlagOfTime1 { get; set; }
/// <summary>
/// 时段2 开始时间 时
/// </summary>
[Property(1160 + 56, 8)]
public byte AcStartTime2 { get; set; }
/// <summary>
/// 时段2 开始时间 分
/// </summary>
[Property(1168 + 56, 8)]
public byte AcStartTimeMinute2 { get; set; }
/// <summary>
/// 时段2 电量
/// </summary>
[Property(1176 + 56, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float AcChargingPowerOfTime2 { get; set; }
/// <summary>
/// 时段2 标识
/// </summary>
[Property(1208 + 56, 8)]
public byte AcFlagOfTime2 { get; set; }
/// <summary>
/// 时段3 开始时间 时
/// </summary>
[Property(1160 + 56 * 2, 8)]
public byte AcStartTime3 { get; set; }
/// <summary>
/// 时段3 开始时间 分
/// </summary>
[Property(1168 + 56 * 2, 8)]
public byte AcStartTimeMinute3 { get; set; }
/// <summary>
/// 时段3 电量
/// </summary>
[Property(1176 + 56 * 2, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float AcChargingPowerOfTime3 { get; set; }
/// <summary>
/// 时段3 标识
/// </summary>
[Property(1208 + 56 * 2, 8)]
public byte AcFlagOfTime3 { get; set; }
/// <summary>
/// 时段4 开始时间 时
/// </summary>
[Property(1160 + 56 * 3, 8)]
public byte AcStartTime4 { get; set; }
/// <summary>
/// 时段4 开始时间 分
/// </summary>
[Property(1168 + 56 * 3, 8)]
public byte AcStartTimeMinute4 { get; set; }
/// <summary>
/// 时段4 电量
/// </summary>
[Property(1176 + 56 * 3, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float AcChargingPowerOfTime4 { get; set; }
/// <summary>
/// 时段4 标识
/// </summary>
[Property(1208 + 56 * 3, 8)]
public byte AcFlagOfTime4 { get; set; }
/// <summary>
/// 时段5 开始时间 时
/// </summary>
[Property(1160 + 56 * 4, 8)]
public byte AcStartTime5 { get; set; }
/// <summary>
/// 时段5 开始时间 分
/// </summary>
[Property(1168 + 56 * 4, 8)]
public byte AcStartTimeMinute5 { get; set; }
/// <summary>
/// 时段5 电量
/// </summary>
[Property(1176 + 56 * 4, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float AcChargingPowerOfTime5 { get; set; }
/// <summary>
/// 时段5 标识
/// </summary>
[Property(1208 + 56 * 4, 8)]
public byte AcFlagOfTime5 { get; set; }
/// <summary>
/// 时段6 开始时间 时
/// </summary>
[Property(1160 + 56 * 5, 8)]
public byte AcStartTime6 { get; set; }
/// <summary>
/// 时段6 开始时间 分
/// </summary>
[Property(1168 + 56 * 5, 8)]
public byte AcStartTimeMinute6 { get; set; }
/// <summary>
/// 时段6 电量
/// </summary>
[Property(1176 + 56 * 5, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float AcChargingPowerOfTime6 { get; set; }
/// <summary>
/// 时段6 标识
/// </summary>
[Property(1208 + 56 * 5, 8)]
public byte AcFlagOfTime6 { get; set; }
/// <summary>
/// 时段7 开始时间 时
/// </summary>
[Property(1160 + 56 * 6, 8)]
public byte AcStartTime7 { get; set; }
/// <summary>
/// 时段7 开始时间 分
/// </summary>
[Property(1168 + 56 * 6, 8)]
public byte AcStartTimeMinute7 { get; set; }
/// <summary>
/// 时段7 电量
/// </summary>
[Property(1176 + 56 * 6, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float AcChargingPowerOfTime7 { get; set; }
/// <summary>
/// 时段7 标识
/// </summary>
[Property(1208 + 56 * 6, 8)]
public byte AcFlagOfTime7 { get; set; }
/// <summary>
/// 时段8 开始时间 时
/// </summary>
[Property(1160 + 56 * 7, 8)]
public byte AcStartTime8 { get; set; }
/// <summary>
/// 时段8 开始时间 分
/// </summary>
[Property(1168 + 56 * 7, 8)]
public byte AcStartTimeMinute8 { get; set; }
/// <summary>
/// 时段8 电量
/// </summary>
[Property(1176 + 56 * 7, 32, PropertyReadConstant.Bit, 0.01, 2)]
public float AcChargingPowerOfTime8 { get; set; }
/// <summary>
/// 时段8 标识
/// </summary>
[Property(1208 + 56 * 7, 8)]
public byte AcFlagOfTime8 { get; set; }
#endregion
}
}

@ -0,0 +1,22 @@
using HybirdFrameworkCore.Autofac.Attribute;
namespace Service.Charger.Msg.Charger.Resp
{
/// <summary>
/// 3.4.4 充放电机应答辅助控制
/// </summary>
public class AdjustChargeRateRes : ASDU
{
/// <summary>
/// 记录类型
/// </summary>
[Property(0, 8)]
public byte RecordType { get; set; }
/// <summary>
///应答结果 0: 成功 1失败
/// </summary>
[Property(8, 8)]
public byte Result { get; set; }
}
}

@ -0,0 +1,29 @@
using HybirdFrameworkCore.Autofac.Attribute;
namespace Service.Charger.Msg.Charger.Resp
{
/// <summary>
/// 3.4.13 响应站控设备切换站内/站外充电
/// 帧类型 45 记录类型 50
/// </summary>
public class ChangeChargeModeRes : ASDU
{
/// <summary>
/// 记录类型
/// </summary>
[Property(0, 8)]
public byte RecordType { get; set; }
/// <summary>
///应答结果 0: 成功 1失败
/// </summary>
[Property(8, 8)]
public byte Result { get; set; }
/// <summary>
///失败原因 0正常1电池包/或者充电枪未连接 0xFF其他
/// </summary>
[Property(16, 16)]
public ushort FailReason { get; set; }
}
}

@ -3,14 +3,20 @@
namespace Service.Charger.Msg.Charger.Resp
{
/// <summary>
/// 3.4.6 充放电机应答监控平台掉线停止充电
/// 3.4.8 充放电机应答监控平台掉线停止充电
/// 帧类型 45 记录类型 44
/// </summary>
public class OfflineStopChargingRes : ASDU
{
/// <summary>
/// 应答结果
/// 记录类型
/// </summary>
[Property(0, 8)]
public byte RecordType { get; set; }
/// <summary>
/// 应答结果
/// </summary>
[Property(8, 8)]
public byte Result { get; set; }
}
}

@ -0,0 +1,46 @@
using HybirdFrameworkCore.Autofac.Attribute;
namespace Service.Charger.Msg.Charger.Resp;
/// <summary>
/// 3.6.2.2 充放电机回复电池基本参数 2PGN:0x00F802
/// </summary>
public class QueryBatterySnRes : ASDU
{
/// <summary>
/// 记录类型
/// </summary>
[Property(0, 8)]
public byte RecordType { get; set; }
[Property(8, 24)] public byte[] Pgn { get; set; }
/// <summary>
/// 电池编码 长度 0 "Do not transmit this Code"
/// </summary>
[Property(32, 1)]
public byte BatterSnLength { get; set; }
/// <summary>
/// 电池厂家
/// 1 "CATL" 2 "Li Shen" 3 "MGL"
/// 4 "SAMSUN" 5 "LG" 6"EVE",7"BYD"
/// </summary>
[Property(33, 1)]
public byte BatterFactory { get; set; }
/// <summary>
/// 电池编码 (SN)字符 (ASCII) 27Byte
/// 48 "0" 49 "1" 50 "2" 51 "3" 52 "4"
/// 53"5" 54 "6" 55 "7" 56 "8" 57 "9" 65
/// "A"66"B" 67 "C" 68"D" 69 "E" 70 "F"
/// 71 "G"
/// 72 "H" 73 "I" 74 "J" 75 "K" 76 "L"
/// 77"M" 78 "N" 79 "O" 80 "P" 81 "Q" 82
/// "R"83 "S" 84 "T" 85 "U" 86 "V" 87
/// "W"88 "X" 89 "Y" 90 "Z
/// </summary>
[Property(34, 27 * 8)]
public byte[] BatterSnBytes { get; set; }
}

@ -0,0 +1,23 @@
using HybirdFrameworkCore.Autofac.Attribute;
namespace Service.Charger.Msg.Charger.Resp
{
/// <summary>
/// 3.4.11 监控网关响应尖峰平谷设置
/// 帧类型 45 记录类型 48
/// </summary>
public class SetPeakVallyTimeRes : ASDU
{
/// <summary>
/// 记录类型
/// </summary>
[Property(0, 8)]
public byte RecordType { get; set; }
/// <summary>
/// 应答结果
/// </summary>
[Property(8, 8)]
public byte Result { get; set; }
}
}

@ -0,0 +1,34 @@
using HybirdFrameworkCore.Autofac.Attribute;
namespace Service.Charger.Msg.Host.Req
{
/// <summary>
/// 3.4.1 监控平台发送功率调节指令
/// </summary>
public class AdjustChargeRate : ASDU
{
/// <summary>
/// 记录类型
/// </summary>
[Property(0, 8)]
public byte RecordType { get; set; }
/// <summary>
///期望运行 功率
/// </summary>
[Property(8, 16, PropertyReadConstant.Bit, 0.1, 1)]
public float ChargeRate { get; set; }
public AdjustChargeRate(float chargeRate)
{
FrameTypeNo = 45;
MsgBodyCount = 1;
TransReason = 3;
PublicAddr = 0;
MsgBodyAddr = new byte[] { 0, 0, 0 };
RecordType = 20;
ChargeRate = chargeRate;
}
}
}

@ -21,6 +21,12 @@ namespace Service.Charger.Msg.Host.Req
public AdjustPower(ushort expectPower)
{
FrameTypeNo = 45;
MsgBodyCount = 1;
TransReason = 3;
PublicAddr = 0;
MsgBodyAddr = new byte[] { 0, 0, 0 };
RecordType = 5;
ExpectPower = expectPower;
}

@ -38,10 +38,6 @@ namespace Service.Charger.Msg.Host.Req
public Auth(ushort connseq, byte[] authcodes, byte authcodekey)
{
PackLen = 0;
CtlArea = 0;
SrcAddr = 0;
FrameTypeNo = 45;
MsgBodyCount = 1;
TransReason = 3;

@ -0,0 +1,40 @@
using HybirdFrameworkCore.Autofac.Attribute;
namespace Service.Charger.Msg.Host.Req.Bms
{
/// <summary>
/// 3.4.1 监控平台发送功率调节指令
/// </summary>
public class QueryBattery : ASDU
{
/// <summary>
/// 记录类型
/// </summary>
[Property(0, 8)]
public byte RecordType { get; set; }
/// <summary>
/// 记录类型
/// </summary>
[Property(8, 3, PropertyReadConstant.Byte)]
public byte[] Pgn { get; set; } = { 0x00, 0xf8, 0x2c };
/// <summary>
/// 记录类型
/// </summary>
[Property(32, 3, PropertyReadConstant.Byte)]
public byte[] QueryPgn { get; set; }
public QueryBattery(byte[] queryPgn)
{
FrameTypeNo = 46;
MsgBodyCount = 1;
TransReason = 3;
PublicAddr = 0;
MsgBodyAddr = new byte[] { 0, 0, 0 };
RecordType = 80;
QueryPgn = queryPgn;
}
}
}

@ -0,0 +1,34 @@
using HybirdFrameworkCore.Autofac.Attribute;
namespace Service.Charger.Msg.Host.Req
{
/// <summary>
/// 3.4.12 站控设备切换站内/站外充电切换
/// </summary>
public class ChangeChargeMode : ASDU
{
/// <summary>
/// 记录类型
/// </summary>
[Property(0, 8)]
public byte RecordType { get; set; }
/// <summary>
/// 00:无效 01:站内 02:站外
/// </summary>
[Property(8, 16)]
public byte ChargeMode { get; set; }
public ChangeChargeMode(byte chargeMode)
{
FrameTypeNo = 45;
MsgBodyCount = 1;
TransReason = 3;
PublicAddr = 0;
MsgBodyAddr = new byte[] { 0, 0, 0 };
RecordType = 49;
ChargeMode = chargeMode;
}
}
}

@ -3,20 +3,38 @@
namespace Service.Charger.Msg.Host.Req
{
/// <summary>
/// 3.4.5 监控平台下发掉线停止充电
/// 3.4.7 监控平台下发掉线停止充电 0不使能 1使能
/// </summary>
public class OfflineStopCharging : ASDU
{
/// <summary>
///应答结果 0不使能 1使能
/// 记录类型
/// </summary>
[Property(0, 8)]
public byte RecordType { get; set; }
/// <summary>
///应答结果 0不使能 1使能
/// </summary>
[Property(8, 8)]
public byte Result { get; set; }
/// <summary>
/// 保留
/// </summary>
[Property(8, 16)]
[Property(16, 16)]
public ushort Remark { get; set; }
public OfflineStopCharging(byte enabled)
{
FrameTypeNo = 45;
MsgBodyCount = 1;
TransReason = 3;
PublicAddr = 0;
MsgBodyAddr = new byte[] { 0, 0, 0 };
RecordType = 43;
Result = enabled;
}
}
}

@ -3,462 +3,177 @@
namespace Service.Charger.Msg.Host.Req
{
/// <summary>
/// 3.4.9 站控设置尖峰平谷时间段标识
/// 3.4.10 站控设置尖峰平谷时间段标识
/// </summary>
public class SetPeakValleyTime : ASDU
{
/// <summary>
/// 时段个数
/// 记录类型
/// </summary>
[Property(0, 8)]
public byte RecordType { get; set; }
/// <summary>
/// 时段个数
/// </summary>
[Property(8, 8)]
public byte NumberTime { get; set; }
/// <summary>
/// 时段1开始时间 时
/// </summary>
[Property(8, 8)]
[Property(16, 8)]
public byte StartHH1 { get; set; }
/// <summary>
/// 时段1开始时间 分
/// </summary>
[Property(16, 8)]
[Property(24, 8)]
public byte StartMM1 { get; set; }
/// <summary>
/// 时段1尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(40, 8)]
[Property(32, 8)]
public byte TimePeak1 { get; set; }
/// <summary>
/// 时段2开始时间 时
/// </summary>
[Property(48, 8)]
[Property(40, 8)]
public byte StartHH2 { get; set; }
/// <summary>
/// 时段2开始时间
/// </summary>
[Property(56, 8)]
[Property(48, 8)]
public byte StartMM2 { get; set; }
/// <summary>
/// 时段2尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(80, 8)]
[Property(56, 8)]
public byte TimePeak2 { get; set; }
/// <summary>
/// 时段3开始时间
/// </summary>
[Property(88, 8)]
[Property(64, 8)]
public byte StartHH3 { get; set; }
/// <summary>
/// 时段3开始时间
/// </summary>
[Property(96, 8)]
[Property(72, 8)]
public byte StartMM3 { get; set; }
/// <summary>
/// 时段3尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(120, 8)]
[Property(80, 8)]
public byte TimePeak3 { get; set; }
/// <summary>
/// 时段4开始时间
/// </summary>
[Property(128, 8)]
[Property(88, 8)]
public byte StartHH4 { get; set; }
/// <summary>
/// 时段4开始时间
/// </summary>
[Property(136, 8)]
[Property(96, 8)]
public byte StartMM4 { get; set; }
/// <summary>
/// 时段4尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(160, 8)]
[Property(104, 8)]
public byte TimePeak4 { get; set; }
/// <summary>
/// 时段5开始时间
/// </summary>
[Property(168, 8)]
[Property(112, 8)]
public byte StartHH5 { get; set; }
/// <summary>
/// 时段5开始时间
/// </summary>
[Property(176, 8)]
[Property(120, 8)]
public byte StartMM5 { get; set; }
/// <summary>
/// 时段5尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(200, 8)]
[Property(128, 8)]
public byte TimePeak5 { get; set; }
/// <summary>
/// 时段6开始时间
/// </summary>
[Property(208, 8)]
[Property(136, 8)]
public byte StartHH6 { get; set; }
/// <summary>
/// 时段6开始时间
/// </summary>
[Property(216, 8)]
[Property(144, 8)]
public byte StartMM6 { get; set; }
/// <summary>
/// 时段6尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(240, 8)]
[Property(152, 8)]
public byte TimePeak6 { get; set; }
/// <summary>
/// 时段7开始时间
/// </summary>
[Property(248, 8)]
[Property(160, 8)]
public byte StartHH7 { get; set; }
/// <summary>
/// 时段7开始时间
/// </summary>
[Property(256, 8)]
[Property(168, 8)]
public byte StartMM7 { get; set; }
/// <summary>
/// 时段7尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(280, 8)]
[Property(176, 8)]
public byte TimePeak7 { get; set; }
/// <summary>
/// 时段8开始时间
/// </summary>
[Property(288, 8)]
[Property(184, 8)]
public byte StartHH8 { get; set; }
/// <summary>
/// 时段8开始时间
/// </summary>
[Property(296, 8)]
[Property(192, 8)]
public byte StartMM8 { get; set; }
/// <summary>
/// 时段8尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(320, 8)]
[Property(200, 8)]
public byte TimePeak8 { get; set; }
public SetPeakValleyTime()
{
FrameTypeNo = 45;
MsgBodyCount = 1;
TransReason = 3;
PublicAddr = 0;
MsgBodyAddr = new byte[] { 0, 0, 0 };
/// <summary>
/// 时段9开始时间
/// </summary>
[Property(328, 8)]
public byte StartHH9 { get; set; }
/// <summary>
/// 时段9开始时间
/// </summary>
[Property(336, 8)]
public byte StartMM9 { get; set; }
/// <summary>
/// 时段9尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(360, 8)]
public byte TimePeak9 { get; set; }
/// <summary>
/// 时段10开始时间
/// </summary>
[Property(368, 8)]
public byte StartHH10 { get; set; }
/// <summary>
/// 时段10开始时间
/// </summary>
[Property(376, 8)]
public byte StartMM10 { get; set; }
/// <summary>
/// 时段10尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(400, 8)]
public byte TimePeak10 { get; set; }
/// <summary>
/// 时段11开始时间
/// </summary>
[Property(408, 8)]
public byte StartHH11 { get; set; }
/// <summary>
/// 时段11开始时间
/// </summary>
[Property(416, 8)]
public byte StartMM11 { get; set; }
/// <summary>
/// 时段11尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(440, 8)]
public byte TimePeak11 { get; set; }
/// <summary>
/// 时段12开始时间
/// </summary>
[Property(448, 8)]
public byte StartHH12 { get; set; }
/// <summary>
/// 时段12开始时间
/// </summary>
[Property(456, 8)]
public byte StartMM12 { get; set; }
/// <summary>
/// 时段12尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(480, 8)]
public byte TimePeak12 { get; set; }
/// <summary>
/// 时段13开始时间
/// </summary>
[Property(488, 8)]
public byte StartHH13 { get; set; }
/// <summary>
/// 时段13开始时间
/// </summary>
[Property(496, 8)]
public byte StartMM13 { get; set; }
/// <summary>
/// 时段13尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(520, 8)]
public byte TimePeak13 { get; set; }
/// <summary>
/// 时段14开始时间
/// </summary>
public byte StartHH14 { get; set; }
/// <summary>
/// 时段14开始时间
/// </summary>
[Property(528, 8)]
public byte StartMM14 { get; set; }
/// <summary>
/// 时段14尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(552, 8)]
public byte TimePeak14 { get; set; }
/// <summary>
/// 时段15开始时间
/// </summary>
[Property(560, 8)]
public byte StartHH15 { get; set; }
/// <summary>
/// 时段15开始时间
/// </summary>
[Property(568, 8)]
public byte StartMM15 { get; set; }
/// <summary>
/// 时段15尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(592, 8)]
public byte TimePeak15 { get; set; }
/// <summary>
/// 时段16开始时间
/// </summary>
[Property(600, 8)]
public byte StartHH16 { get; set; }
/// <summary>
/// 时段16开始时间
/// </summary>
[Property(608, 8)]
public byte StartMM16 { get; set; }
/// <summary>
/// 时段16尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(632, 8)]
public byte TimePeak16 { get; set; }
/// <summary>
/// 时段17开始时间
/// </summary>
[Property(640, 8)]
public byte StartHH17 { get; set; }
/// <summary>
/// 时段17开始时间
/// </summary>
[Property(648, 8)]
public byte StartMM17 { get; set; }
/// <summary>
/// 时段17尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(672, 8)]
public byte TimePeak17 { get; set; }
/// <summary>
/// 时段18开始时间
/// </summary>
[Property(680, 8)]
public byte StartHH18 { get; set; }
/// <summary>
/// 时段18开始时间
/// </summary>
[Property(688, 8)]
public byte StartMM18 { get; set; }
/// <summary>
/// 时段18尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(712, 8)]
public byte TimePeak18 { get; set; }
/// <summary>
/// 时段19开始时间
/// </summary>
[Property(720, 8)]
public byte StartHH19 { get; set; }
/// <summary>
/// 时段19开始时间
/// </summary>
[Property(728, 8)]
public byte StartMM19 { get; set; }
/// <summary>
/// 时段19尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(752, 8)]
public byte TimePeak19 { get; set; }
/// <summary>
/// 时段20开始时间
/// </summary>
[Property(760, 8)]
public byte StartHH20 { get; set; }
/// <summary>
/// 时段20开始时间
/// </summary>
[Property(768, 8)]
public byte StartMM20 { get; set; }
/// <summary>
/// 时段20尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(792, 8)]
public byte TimePeak20 { get; set; }
/// <summary>
/// 时段21开始时间
/// </summary>
[Property(800, 8)]
public byte StartHH21 { get; set; }
/// <summary>
/// 时段21开始时间
/// </summary>
[Property(808, 8)]
public byte StartMM21 { get; set; }
/// <summary>
/// 时段21尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(832, 8)]
public byte TimePeak21 { get; set; }
/// <summary>
/// 时段22开始时间
/// </summary>
[Property(840, 8)]
public byte StartHH22 { get; set; }
/// <summary>
/// 时段22开始时间
/// </summary>
[Property(848, 8)]
public byte StartMM22 { get; set; }
/// <summary>
/// 时段22尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(872, 8)]
public byte TimePeak22 { get; set; }
/// <summary>
/// 时段23开始时间
/// </summary>
[Property(880, 8)]
public byte StartHH23 { get; set; }
/// <summary>
/// 时段23开始时间
/// </summary>
[Property(888, 8)]
public byte StartMM23 { get; set; }
/// <summary>
/// 时段23尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(912, 8)]
public byte TimePeak23 { get; set; }
/// <summary>
/// 时段24开始时间
/// </summary>
[Property(920, 8)]
public byte StartHH24 { get; set; }
/// <summary>
/// 时段24开始时间
/// </summary>
[Property(928, 8)]
public byte StartMM24 { get; set; }
/// <summary>
/// 时段24尖峰标识 1尖 2峰 3平 4谷
/// </summary>
[Property(952, 8)]
public byte TimePeak24 { get; set; }
RecordType = 47;
}
}
}
Loading…
Cancel
Save