From 66d4f682542d851354372a461529fb3324f158a6 Mon Sep 17 00:00:00 2001 From: ydh <2248787524@qq.com> Date: Tue, 3 Sep 2024 17:32:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E6=9C=80=E6=96=B0=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E4=BF=AE=E6=94=B9msg=E5=8F=8Ahandler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ConsoleStarter/ExportDb.cs | 3 +- Service/Car/Codec/Decoder.cs | 3 +- Service/Car/Handler/ElecBaseMsgHandler.cs | 37 ++++++++ Service/Car/Handler/ElecMsgHandler.cs | 12 +-- Service/Car/Msg/Car/Req/ElecBaseMsg.cs | 43 ++++++++++ Service/Car/Msg/Car/Req/ElecMsg.cs | 86 +++++++++---------- Service/Car/Msg/Car/Req/HeartBeatMsg.cs | 2 +- Service/Car/Msg/Car/Resp/LockMsgResp.cs | 2 +- Service/Car/Msg/Car/Resp/UnLockMsgResp.cs | 2 +- Service/Car/Msg/Host/Resp/HeartBeatMsgResp.cs | 2 +- Service/TBox/MyTask/VinTask.cs | 9 +- WebStarter/Controllers/CarController.cs | 13 ++- WebStarter/Dto/Resp/CarInfoResp.cs | 7 +- WebStarter/appsettings.dev.json | 2 +- 14 files changed, 162 insertions(+), 61 deletions(-) create mode 100644 Service/Car/Handler/ElecBaseMsgHandler.cs create mode 100644 Service/Car/Msg/Car/Req/ElecBaseMsg.cs diff --git a/ConsoleStarter/ExportDb.cs b/ConsoleStarter/ExportDb.cs index ea1fe73..e0ae2cd 100644 --- a/ConsoleStarter/ExportDb.cs +++ b/ConsoleStarter/ExportDb.cs @@ -36,7 +36,8 @@ 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=106.12.36.89;Database=chassis_track_swap0;Uid=remote_user;Pwd=Rszn123;Charset=utf8;", + "server=127.0.0.1;Port=3306;Database=nhagv_dev;Uid=root;Pwd=123456;Charset=utf8;", DbType = DbType.MySql, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute diff --git a/Service/Car/Codec/Decoder.cs b/Service/Car/Codec/Decoder.cs index 66b6896..a3e85d5 100644 --- a/Service/Car/Codec/Decoder.cs +++ b/Service/Car/Codec/Decoder.cs @@ -64,12 +64,13 @@ public class Decoder : ByteToMessageDecoder BaseMsg msg = data[5] switch { - 0x01 => ModelConvert.Decode(data), 0x03 => ModelConvert.Decode(data), 0x06 => ModelConvert.Decode(data), 0x08 => ModelConvert.Decode(data), 0x10 => ModelConvert.Decode(data), 0x12 => ModelConvert.Decode(data), + 0x51 => ModelConvert.Decode(data), + 0x52 => ModelConvert.Decode(data), _ => new BaseMsg() }; Log.Info($"receive original ={BitUtls.BytesToHexStr(data)} , data={JsonConvert.SerializeObject(msg)}"); diff --git a/Service/Car/Handler/ElecBaseMsgHandler.cs b/Service/Car/Handler/ElecBaseMsgHandler.cs new file mode 100644 index 0000000..c0615bf --- /dev/null +++ b/Service/Car/Handler/ElecBaseMsgHandler.cs @@ -0,0 +1,37 @@ +using DotNetty.Transport.Channels; +using HybirdFrameworkCore.Autofac.Attribute; +using HybirdFrameworkDriver.Session; +using log4net; +using Newtonsoft.Json; +using Service.Car.Msg.Car.Req; +using Service.Car.Msg.Host.Resp; +using Service.Car.Server; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Service.Car.Handler +{ + [Order(8)] + [Scope("InstancePerDependency")] + public class ElecBaseMsgHandler : SimpleChannelInboundHandler, IBaseHandler + { + private static readonly ILog Log = LogManager.GetLogger(typeof(ElecBaseMsgHandler)); + /// + /// + /// + /// + /// + /// + protected override void ChannelRead0(IChannelHandlerContext ctx, ElecBaseMsg msg) + { + Log.Info($"receive ElecBaseMsg = {JsonConvert.SerializeObject(msg)}"); + IoSession? ioSession = CarServerMgr.CarServer?.SessionMgr.GetSession(msg.CarNo); + + ioSession?.BusinessMap.AddOrUpdate("ElecBaseMsg", msg, ((s, o) => msg)); + ioSession?.BusinessMap.AddOrUpdate("Connected", true, ((s, o) => true)); + } + } +} diff --git a/Service/Car/Handler/ElecMsgHandler.cs b/Service/Car/Handler/ElecMsgHandler.cs index 8840539..cab9bcf 100644 --- a/Service/Car/Handler/ElecMsgHandler.cs +++ b/Service/Car/Handler/ElecMsgHandler.cs @@ -31,11 +31,11 @@ public class ElecMsgHandler : SimpleChannelInboundHandler, IBaseHandler ioSession?.BusinessMap.AddOrUpdate("ElecMsg", msg, ((s, o) => msg)); ioSession?.BusinessMap.AddOrUpdate("Connected", true, ((s, o) => true)); - ElecMsgResp resp = new ElecMsgResp(0) - { - CarNo = msg.CarNo - }; - resp.InitCurrentTime(); - ctx.Channel.WriteAndFlushAsync(resp); + //ElecMsgResp resp = new ElecMsgResp(0) + //{ + // CarNo = msg.CarNo + //}; + //resp.InitCurrentTime(); + //ctx.Channel.WriteAndFlushAsync(resp); } } diff --git a/Service/Car/Msg/Car/Req/ElecBaseMsg.cs b/Service/Car/Msg/Car/Req/ElecBaseMsg.cs new file mode 100644 index 0000000..ca9caad --- /dev/null +++ b/Service/Car/Msg/Car/Req/ElecBaseMsg.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HybirdFrameworkCore.Autofac.Attribute; + +namespace Service.Car.Msg.Car.Req +{ + public class ElecBaseMsg : BaseMsg + { + /// + /// 电池编码 + /// + [Property(248, 192)] + public string BatteryCode { get; set; } + /// + /// 电池编码 + /// + [Property(340, 8)] + public byte BatteryManufacturer { get; set; } + /// + /// 电池类型 + /// + [Property(348, 8)] + public byte BatteryType { get; set; } + /// + /// 额定能量 + /// + [Property(356, 16)] + public byte RatedEnergy { get; set; } + /// + /// 额定容量 + /// + [Property(372, 16)] + public byte RatedCapacity { get; set; } + /// + /// 额定电压 + /// + [Property(388, 16)] + public byte RatedVoltage { get; set; } + } +} diff --git a/Service/Car/Msg/Car/Req/ElecMsg.cs b/Service/Car/Msg/Car/Req/ElecMsg.cs index 89e8d5a..7acd048 100644 --- a/Service/Car/Msg/Car/Req/ElecMsg.cs +++ b/Service/Car/Msg/Car/Req/ElecMsg.cs @@ -5,80 +5,80 @@ namespace Service.Car.Msg.Car.Req; public class ElecMsg : BaseMsg { /// - /// 车辆累计放电量 + /// 电池 SOC /// - [Property(248, 24, scale: 0.01, round: 2)] - public double AccDischargeCount { get; set; } + [Property(248, 8)] + public byte SOC { get; set; } /// - /// 车辆累计回馈电量 + /// 电池 SOH /// - [Property(272, 24, scale: 0.01, round: 2)] - public double AccFallbackCount { get; set; } + [Property(256, 8)] + public byte SOH { get; set; } /// - /// 车辆累计插枪充电量 + /// BMS 当前状态 /// - [Property(296, 24, scale: 0.01, round: 2)] - public double AccChargeCount { get; set; } + [Property(264, 8)] + public byte BMSStates { get; set; } /// - /// 5 车辆累计综合能耗 + /// 电芯温度平均值 /// - [Property(320, 24, scale: 0.01, round: 2)] - public double AccKgce { get; set; } + [Property(272, 8)] + public byte ElectricCoreTemValue { get; set; } /// - /// 6 本次实时放电量 + /// 电流 /// - [Property(344, 24, scale: 0.01, round: 2)] - public double ThisTimeRealDischarge { get; set; } + [Property(280, 16)] + public short Current { get; set; } /// - /// 7 上一次结算放电量 + /// 电压 /// - [Property(368, 24, scale: 0.01, round: 2)] - public double LastTimeBalanceDischarge { get; set; } + [Property(296, 16)] + public short Voltage { get; set; } /// - /// 8 本次实时回馈电量 + /// 车速 /// - [Property(392, 24, scale: 0.01, round: 2)] - public double ThisTimeRealFeedbackPower { get; set; } + [Property(312, 16)] + public short Speed { get; set; } /// - /// 9 上一次结算回馈电量 + /// 电芯电压平均值 /// - [Property(416, 24, scale: 0.01, round: 2)] - public double LastTimeBalanceFeedbackPower { get; set; } + [Property(328, 16)] + public short VoltageAverage { get; set; } /// - /// 10 本次实时插枪充电量 + /// 单次充电量 /// - [Property(440, 24, scale: 0.01, round: 2)] - public double ThisTimeRealChargeCount { get; set; } + [Property(344, 16)] + public short SingleCharge { get; set; } /// - /// 11 上一次结算插枪充电量 + /// 累计充电量 /// - [Property(464, 24, scale: 0.01, round: 2)] - public double LastTimeBalanceChargeCount { get; set; } + [Property(360, 32)] + public float CumulativeCharge { get; set; } /// - /// 12 本次实时综合能耗 + /// 累计放电量 /// - [Property(488, 24, scale: 0.01, round: 2)] - public double ThisTimeRealKgce { get; set; } + [Property(392, 32)] + public float CumulativeDischarge { get; set; } - /// - /// 13 上一次结算综合能耗 - /// - [Property(512, 24, scale: 0.01, round: 2)] - public double LastTimeBalanceKgce { get; set; } + ///// + ///// 13 上一次结算综合能耗 + ///// + //[Property(512, 8)] + //public double LastTimeBalanceKgce { get; set; } - /// - /// 14 待结算电费电量 - /// - [Property(536, 24, scale: 0.01, round: 2)] - public double ElectricityToBeSettled { get; set; } + ///// + ///// 14 待结算电费电量 + ///// + //[Property(536, 8)] + //public double ElectricityToBeSettled { get; set; } } \ No newline at end of file diff --git a/Service/Car/Msg/Car/Req/HeartBeatMsg.cs b/Service/Car/Msg/Car/Req/HeartBeatMsg.cs index 0be6a80..e1355dc 100644 --- a/Service/Car/Msg/Car/Req/HeartBeatMsg.cs +++ b/Service/Car/Msg/Car/Req/HeartBeatMsg.cs @@ -5,7 +5,7 @@ namespace Service.Car.Msg.Car.Req; public class HeartBeatMsg: BaseMsg { /// - /// 锁止状态 1 解锁状态 2 上锁状态 + /// 锁止状态 1 解锁状态 2 上锁状态 /// [Property(248, 8)] public byte LockStatus { get; set; } diff --git a/Service/Car/Msg/Car/Resp/LockMsgResp.cs b/Service/Car/Msg/Car/Resp/LockMsgResp.cs index 0a8ad11..0c98188 100644 --- a/Service/Car/Msg/Car/Resp/LockMsgResp.cs +++ b/Service/Car/Msg/Car/Resp/LockMsgResp.cs @@ -5,7 +5,7 @@ namespace Service.Car.Msg.Car.Resp; public class LockMsgResp : BaseMsg { /// - /// 0、加锁成功;1、加锁失败;2、车架号不匹配;FF、 异常 + /// 0、加锁成功;其他加锁失败 /// [Property(248, 8)] public byte Result { get; set; } diff --git a/Service/Car/Msg/Car/Resp/UnLockMsgResp.cs b/Service/Car/Msg/Car/Resp/UnLockMsgResp.cs index 86e2d6b..15e4b5c 100644 --- a/Service/Car/Msg/Car/Resp/UnLockMsgResp.cs +++ b/Service/Car/Msg/Car/Resp/UnLockMsgResp.cs @@ -5,7 +5,7 @@ namespace Service.Car.Msg.Car.Resp; public class UnLockMsgResp : BaseMsg { /// - /// 0、解锁成功;1、非 ACC OFF 状态;2、车架号不匹配;3、 解锁失败;FF、异常 + /// 0、解锁成功;其他解锁失败 /// [Property(248, 8)] public byte Result { get; set; } diff --git a/Service/Car/Msg/Host/Resp/HeartBeatMsgResp.cs b/Service/Car/Msg/Host/Resp/HeartBeatMsgResp.cs index 956e78d..1653a00 100644 --- a/Service/Car/Msg/Host/Resp/HeartBeatMsgResp.cs +++ b/Service/Car/Msg/Host/Resp/HeartBeatMsgResp.cs @@ -5,7 +5,7 @@ namespace Service.Car.Msg.Host.Resp; public class HeartBeatMsgResp : BaseMsg { /// - /// 锁止状态 1 待机 2 换电 + /// 后台状态 1 待机 2 换电 /// [Property(248, 8)] public byte HostStatus { get; set; } diff --git a/Service/TBox/MyTask/VinTask.cs b/Service/TBox/MyTask/VinTask.cs index b911e0e..863ae97 100644 --- a/Service/TBox/MyTask/VinTask.cs +++ b/Service/TBox/MyTask/VinTask.cs @@ -22,11 +22,14 @@ public class VinTask : ITask public void Handle() { - foreach (var vinMsg in TBoxServerMgr.Server?.SendVinMsg) + if (TBoxServerMgr.Server?.SendVinMsg != null) { - if (vinMsg != null) + foreach (var vinMsg in TBoxServerMgr.Server?.SendVinMsg) { - TBoxServerMgr.Server?.SessionMgr.Broadcast(vinMsg); + if (vinMsg != null) + { + TBoxServerMgr.Server?.SessionMgr.Broadcast(vinMsg); + } } } } diff --git a/WebStarter/Controllers/CarController.cs b/WebStarter/Controllers/CarController.cs index 3e72a15..5537cae 100644 --- a/WebStarter/Controllers/CarController.cs +++ b/WebStarter/Controllers/CarController.cs @@ -37,6 +37,12 @@ public class CarController : ControllerBase{ if (ObjUtils.IsNotNull(ioSession)) { + ioSession.BusinessMap.TryGetValue("ElecBaseMsg", out var elecBaseMsg); + if (elecBaseMsg != null) + { + carInfoResp.ElecBaseMsg = (ElecBaseMsg)elecBaseMsg; + } + ioSession.BusinessMap.TryGetValue("ElecMsg", out var elecMsg); if (elecMsg != null) { @@ -66,13 +72,18 @@ public class CarController : ControllerBase{ List sessionList = CarServerMgr.CarServer?.SessionMgr.GetSessionList(); foreach (var ioSession in sessionList) { - CarInfoResp carInfoResp = new CarInfoResp() { Connected = true, CarNo = ioSession.Key, }; + ioSession.BusinessMap.TryGetValue("ElecBaseMsg", out var elecBaseMsg); + if (elecBaseMsg != null) + { + carInfoResp.ElecBaseMsg = (ElecBaseMsg)elecBaseMsg; + } + ioSession.BusinessMap.TryGetValue("ElecMsg", out var elecMsg); if (elecMsg != null) { diff --git a/WebStarter/Dto/Resp/CarInfoResp.cs b/WebStarter/Dto/Resp/CarInfoResp.cs index b92b8d9..b5574a2 100644 --- a/WebStarter/Dto/Resp/CarInfoResp.cs +++ b/WebStarter/Dto/Resp/CarInfoResp.cs @@ -18,7 +18,12 @@ public class CarInfoResp public string? CarNo { get; set; } /// - /// 度电数据 + /// 电池基本信息 + /// + public ElecBaseMsg? ElecBaseMsg { get; set; } + + /// + /// 电池实时信息 /// public ElecMsg? ElecMsg { get; set; } diff --git a/WebStarter/appsettings.dev.json b/WebStarter/appsettings.dev.json index beec6a2..a177670 100644 --- a/WebStarter/appsettings.dev.json +++ b/WebStarter/appsettings.dev.json @@ -2,7 +2,7 @@ "ConnectionStrings": { "ConfigId": "master", "DbType": "MySql", - "SqlConnection": "server=192.168.2.2;Port=3306;Database=huanneng_dev;Uid=root;Pwd=Rszn123;Charset=utf8;" + "SqlConnection": "server=127.0.0.1;Port=3306;Database=nhagv_dev;Uid=root;Pwd=123456;Charset=utf8;" }, "Update": { "AutoUpdate": "false",