diff --git a/Entity/Constant/InfoEnum.cs b/Entity/Constant/InfoEnum.cs
index 5621a4b..166dc2e 100644
--- a/Entity/Constant/InfoEnum.cs
+++ b/Entity/Constant/InfoEnum.cs
@@ -15,7 +15,8 @@ public class InfoEnum
[Info("车辆连接失败", "车辆连接失败,请联系站务人员")] ErrorTBoxConn ,
[Info("云端校验失败", "云端校验失败,请联系站务人员")] ErrorCloudCheck ,
[Info("车辆已到位", "车辆已到位")] InfoCarInPosition ,
- [Info("车辆到位超时", "车辆到位超时")] ErrorCarInPositionTimeout,
+ //TODO:: 录音内容已改
+ [Info("请熄火挂空挡拉手刹", "请熄火挂空挡拉手刹")] ErrorCarInPositionTimeout,
[Info("云平台下发换电失败", "云平台下发换电超时")] CloudSendSwapError ,
diff --git a/Entity/Constant/StationParamConst.cs b/Entity/Constant/StationParamConst.cs
index 342f75f..5a5b106 100644
--- a/Entity/Constant/StationParamConst.cs
+++ b/Entity/Constant/StationParamConst.cs
@@ -65,7 +65,6 @@ public class StationParamConst
public static readonly string Sevstatus = "Station.Sevstatus";
-
///
/// 投放时间
///
@@ -179,13 +178,11 @@ public class StationParamConst
#endregion 换电站基础信息
#region 系统管理-基础设置
+
//提交灯光日间时间
public static readonly string SetLightDayStartTime = "Station.LightDayStartTime";
public static readonly string SetLightDayEndTime = "Station.LightDayEndTime";
-
-
-
#endregion 系统管理-基础设置
//选包策略中最后结束充电时间需要>此值
@@ -198,9 +195,12 @@ public class StationParamConst
public static readonly string ChargeSoc = "Station.ChargeSoc";
public static readonly string ChargePower = "Station.ChargePower";
public static readonly string AutoChargeEnabled = "Station.AutoChargeEnabled";
+
public static readonly string Eid = "Station.Eid";
+
//运营模型
public static readonly string Oid = "Station.Oid";
+
//电价模型
public static readonly string Ceid = "Station.Ceid";
@@ -208,6 +208,44 @@ public class StationParamConst
public static readonly string StationWay = "Station.StationWay";
public static readonly string StationModel = "Station.StationModel";
+ #region Tbox
+
+ //Tbox是否需要连接
+ public static readonly string TboxStateConnect = "Tbox.State.Connect";
+
+ //Tbox是否需要检测熄火
+ public static readonly string TboxStateFlameout = "Tbox.State.Flameout";
+ //Tbox是否需要检测N挡
+ public static readonly string TboxStateN = "Tbox.State.TboxStateN";
+ //Tbox是否需要检测手刹
+ public static readonly string TboxStateBreak = "Tbox.State.Handbrake";
+ //Tbox是否需要断连
+ public static readonly string TboxStateDisConnect = "Tbox.State.DisConnect";
+
+ //Tbox是否需要连接
+ public static readonly string TboxUrlConnect = "Tbox.Url.Connect";
+
+
+ //Tbox 断连url
+ public static readonly string TboxUrlDisConnect = "Tbox.Url.DisConnect";
+
+ //Tbox解锁url
+ public static readonly string TboxUrlUnLock = "Tbox.Url.UnLock";
+
+ //Tbox上锁url
+ public static readonly string TboxUrlLock = "Tbox.Url.Lock";
+
+ //Tbox获取车辆信息url
+ public static readonly string TboxUrlCarInfo = "Tbox.Url.CarInfo";
+
+ //Tbox 清除url
+ public static readonly string TboxUrlClear = "Tbox.Url.Clear";
+
+ //Tbox 获取所有车辆url
+ public static readonly string TboxUrlCarInfoList = "Tbox.Url.CarInfoList";
+
+ #endregion
+
#region cloud param
public static readonly string CloudServerMqttVersion = "Cloud.CloudServerMqttVersion";
@@ -220,4 +258,4 @@ public class StationParamConst
public static readonly string CloudPubTopic = "Cloud.CloudPubTopic";
#endregion
-}
+}
\ No newline at end of file
diff --git a/Service/Execute/Api/CloudApi.cs b/Service/Execute/Api/CloudApi.cs
index b95194a..d36fdff 100644
--- a/Service/Execute/Api/CloudApi.cs
+++ b/Service/Execute/Api/CloudApi.cs
@@ -7,6 +7,7 @@ using Service.Cloud.Msg.Cloud.Req;
using Service.Cloud.Msg.Cloud.Resp;
using Service.Cloud.Msg.Host.Req;
using Service.Execute.Model;
+using Service.Execute.Model.Tbox;
using Service.Init;
namespace Service.Execute.Api;
diff --git a/Service/Execute/Api/TboxApi.cs b/Service/Execute/Api/TboxApi.cs
index 05148b2..69d5f69 100644
--- a/Service/Execute/Api/TboxApi.cs
+++ b/Service/Execute/Api/TboxApi.cs
@@ -2,6 +2,9 @@ using log4net;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Service.Execute.Model;
+using Service.Execute.Model.Tbox;
+using Service.Init;
+using TboxCarInfoModel = Service.Execute.Model.Tbox.TboxCarInfoModel;
namespace Service.Execute.Api;
@@ -19,20 +22,27 @@ public class TBoxApi
Timeout = TimeSpan.FromSeconds(60)
};
+ ///
+ /// /Car/getCarInfo/
+ ///
+ ///
+ ///
public static async Task GetCarInfo(string carNo)
{
Log.Info($" TBoxApi GetCarInfo carNo={carNo}");
- string url = BASE_URL + "/getCarInfo/" + carNo;
+ string url = BASE_URL + StaticStationInfo.TboxUrlCarInfo + carNo;
try
{
string s = await _httpClient.GetStringAsync(url);
- TboxCarInfoModel? tboxCarInfoModel = null;
+ Log.Info($"TBoxApi GetCarInfo resp = {s}");
+
+ TboxCarInfoModel tboxCarInfoModel = null;
+
if (!String.IsNullOrWhiteSpace(s))
{
tboxCarInfoModel = JsonConvert.DeserializeObject(s);
}
- Log.Info($"TBoxApi GetCarInfo resp = {JsonConvert.SerializeObject(tboxCarInfoModel)}");
return tboxCarInfoModel;
}
catch (Exception e)
@@ -42,10 +52,15 @@ public class TBoxApi
}
}
+ ///
+ /// /Car/Clear
+ ///
+ ///
+ ///
public static async Task Reset(string carNo)
{
Log.Info(" TBoxApi Reset");
- string url = BASE_URL + "/Clear/" + carNo;
+ string url = BASE_URL + StaticStationInfo.TboxUrlClear + carNo;
try
{
string s = await _httpClient.GetStringAsync(url);
@@ -63,25 +78,10 @@ public class TBoxApi
public static async Task IsConnected(string carNo)
{
Log.Info($"IsConnected carNo={carNo}");
- string url = BASE_URL + "/getCarInfo/"+carNo;
- try
- {
- string s = await _httpClient.GetStringAsync(url);
- TboxCarInfoModel? tboxCarInfoModel = null;
- if (!String.IsNullOrWhiteSpace(s))
- {
- tboxCarInfoModel = JsonConvert.DeserializeObject(s);
- Log.Info($"IsConnected resp={JsonConvert.SerializeObject(tboxCarInfoModel)}");
- }
+ TboxCarInfoModel tboxCarInfoModel = await GetCarInfo(carNo);
+ Log.Info($"IsConnected resp={JsonConvert.SerializeObject(tboxCarInfoModel)}");
- Log.Info($"GetCarInfo resp = {JsonConvert.SerializeObject(tboxCarInfoModel)}");
- return tboxCarInfoModel.Connected;
- }
- catch (Exception e)
- {
- Log.Error($"IsConnected e = {e}");
- return false;
- }
+ return tboxCarInfoModel == null ? false : tboxCarInfoModel.Connected;
}
@@ -99,7 +99,9 @@ public class TBoxApi
bools.Add(unLockCar);
}
}
- Log.Info($" TBoxApi end UnLockCarManyTimes carNo={carNo} times={_times} resp={JsonConvert.SerializeObject(bools)}");
+
+ Log.Info(
+ $" TBoxApi end UnLockCarManyTimes carNo={carNo} times={_times} resp={JsonConvert.SerializeObject(bools)}");
return bools.Select(i => i).Count() > _successTimes;
}
@@ -117,19 +119,22 @@ public class TBoxApi
bools.Add(unLockCar);
}
}
- Log.Info($" TBoxApi end LockCarManyTimes carNo={carNo} times={_times} resp={JsonConvert.SerializeObject(bools)}");
+
+ Log.Info(
+ $" TBoxApi end LockCarManyTimes carNo={carNo} times={_times} resp={JsonConvert.SerializeObject(bools)}");
return bools.Select(i => i).Count() > _successTimes;
}
///
/// 车辆解锁
+ /// /Car/unLock/
///
///
public static async Task UnLockCar(string carNo)
{
Log.Info("UnLockCar");
- string url = BASE_URL + "/unLock/" + carNo;
+ string url = BASE_URL + StaticStationInfo.TboxUrlUnLock + carNo;
try
{
string s = await _httpClient.GetStringAsync(url);
@@ -144,11 +149,63 @@ public class TBoxApi
return false;
}
}
+
+ ///
+ /// Tbox连接
+ /// /Car/unLock/
+ ///
+ ///
+ public static async Task Connect(string carNo)
+ {
+ Log.Info("TboxConnect");
+ string url = BASE_URL + StaticStationInfo.TboxUrlConnect + carNo;
+ try
+ {
+ string s = await _httpClient.GetStringAsync(url);
+
+ Log.Info($"TboxConnect resp = {s}");
+ return bool.Parse(s);
+ }
+ catch (Exception e)
+ {
+ Log.Error($"TboxConnect e = {e}");
+ return false;
+ }
+ }
+
+ ///
+ /// Tbox断连
+ /// /Car/unLock/
+ ///
+ ///
+ public static async Task DisConnect(string carNo)
+ {
+ Log.Info("TboxDisConnect");
+ string url = BASE_URL + StaticStationInfo.TboxUrlDisConnect + carNo;
+ try
+ {
+ string s = await _httpClient.GetStringAsync(url);
+
+
+ Log.Info($"TboxDisConnect resp = {s}");
+ return bool.Parse(s);
+ }
+ catch (Exception e)
+ {
+ Log.Error($"TboxDisConnect e = {e}");
+ return false;
+ }
+ }
+
+ ///
+ /// /Car/getCarInfoList
+ ///
+ ///
public static async Task> GetCarInfoList()
{
Log.Info(" TBoxApi GetCarInfoList start ");
- string url = BASE_URL + "/getCarInfoList" ;
+ string url = BASE_URL + StaticStationInfo.TboxUrlCarInfoList;
try
{
string s = await _httpClient.GetStringAsync(url);
@@ -175,7 +232,7 @@ public class TBoxApi
public static async Task LockCar(string carNo)
{
Log.Info("LockCar");
- string url = BASE_URL + "/lock/" + carNo;
+ string url = BASE_URL +StaticStationInfo.TboxUrlLock + carNo;
try
{
string s = await _httpClient.GetStringAsync(url);
@@ -190,4 +247,4 @@ public class TBoxApi
return false;
}
}
-}
+}
\ No newline at end of file
diff --git a/Service/Execute/Mgr/CommonMgr.cs b/Service/Execute/Mgr/CommonMgr.cs
index 5c1e9b7..d0ada65 100644
--- a/Service/Execute/Mgr/CommonMgr.cs
+++ b/Service/Execute/Mgr/CommonMgr.cs
@@ -58,18 +58,22 @@ public class CommonMgr
public void SaveSwapBattery(SwappingStateMachine machine)
{
- BinInfo UpBin = machine.SwapOrderBatteryInfo.UpBinInfo;
- BinInfo InBin = machine.SwapOrderBatteryInfo.InBinInfo;
+ BinInfo upBin = machine.SwapOrderBatteryInfo.UpBinInfo;
+ BinInfo inBin = machine.SwapOrderBatteryInfo.InBinInfo;
SwapOrderBattery swapOrderBattery = new SwapOrderBattery()
{
SwapOrderSn = machine.SwapOrder.Sn,
- UpBatterySoc = UpBin.Soc,
- UpBatteryNo = UpBin.BatteryNo,
- UpBatterySoe = UpBin.Soe,
- UpBatteryBinNo = int.Parse(UpBin.No),
- DownBatteryBinNo = int.Parse(InBin.No),
+ UpBatterySoc = upBin.Soc,
+ UpBatteryNo = upBin.BatteryNo,
+ UpBatterySoe = upBin.Soe,
+ UpBatteryBinNo = int.Parse(upBin.No),
+ DownBatteryBinNo = int.Parse(inBin.No),
+ DownBatteryNo = inBin.BatteryNo,
+ DownBatterySoc = inBin.Soc,
+ DownBatterySoe = inBin.Soe,
};
- swapOrderBattery = _swapOrderBatteryRepository.Insert(swapOrderBattery);
+
+ _swapOrderBatteryRepository.Insert(swapOrderBattery);
}
///
@@ -112,7 +116,7 @@ public class CommonMgr
.TotalMinutes > StaticStationInfo.SwapFinishChargeTime
&& i.Soc > StaticStationInfo.Soc
*/
- public SwapOrderBatteryInfo SelectPackNotArm()
+ public SwapOrderBatteryInfo SelectPackNotArm(SwappingStateMachine machine)
{
SwapOrderBatteryInfo orderBatteryInfo = new SwapOrderBatteryInfo();
UpBin(orderBatteryInfo);
@@ -121,12 +125,12 @@ public class CommonMgr
return orderBatteryInfo;
}
- InBin(orderBatteryInfo);
+ InBin(orderBatteryInfo, machine);
return orderBatteryInfo;
}
- public SwapOrderBatteryInfo SelectPackArm(SwapAmtOrder swapAmtOrder)
+ public SwapOrderBatteryInfo SelectPackArm(SwapAmtOrder swapAmtOrder, SwappingStateMachine machine)
{
SwapOrderBatteryInfo orderBatteryInfo = new SwapOrderBatteryInfo();
orderBatteryInfo.swapAmtOrder = swapAmtOrder;
@@ -146,7 +150,7 @@ public class CommonMgr
}
orderBatteryInfo.UpBinInfo = UpBin;
- InBin(orderBatteryInfo);
+ InBin(orderBatteryInfo, machine);
return orderBatteryInfo;
}
@@ -167,7 +171,7 @@ public class CommonMgr
/// 放电池判断:取出来的电池仓位能不能放
///
///
- public void InBin(SwapOrderBatteryInfo orderBatteryInfo)
+ public void InBin(SwapOrderBatteryInfo orderBatteryInfo, SwappingStateMachine machine)
{
List list =
_binInfoRepository.QueryListByClause(i =>
@@ -182,6 +186,19 @@ public class CommonMgr
}
orderBatteryInfo.InBinInfo = list[0];
+ orderBatteryInfo.InBinInfo.BatteryNo = "-1";
+ orderBatteryInfo.InBinInfo.Soc = -1;
+ orderBatteryInfo.InBinInfo.Soe = -1;
+ orderBatteryInfo.InBinInfo.Soh =-1;
+ var carInfoBatteryInfos = machine.BoxCarInfoModel?.CarInfo?.BatteryInfos;
+ if (carInfoBatteryInfos != null && carInfoBatteryInfos.Count > 0)
+ {
+ orderBatteryInfo.InBinInfo.BatteryNo = carInfoBatteryInfos[0].BatteryNo;
+ orderBatteryInfo.InBinInfo.Soc = carInfoBatteryInfos[0].Soc;
+ orderBatteryInfo.InBinInfo.Soe = carInfoBatteryInfos[0].Soe;
+ orderBatteryInfo.InBinInfo.Soh = carInfoBatteryInfos[0].Soh;
+ }
+
orderBatteryInfo.CanSwap = InfoEnum.SelectBinStatusInfo.Success;
}
@@ -228,17 +245,12 @@ public class CommonMgr
if (machineSwapOrderBatteryInfo != null)
{
var inBinInfo = machineSwapOrderBatteryInfo.InBinInfo;
- inBinInfo.Soc = -1;
- inBinInfo.Soe = -1;
- inBinInfo.BatteryNo = "-1";
//修改入仓顺序
BinInfo binInfo = _binInfoRepository
.QueryListByClause(i => i.BatteryEnterSeq != null, "battery_enter_seq desc").First();
inBinInfo.BatteryEnterSeq = binInfo.BatteryEnterSeq + 1;
inBinInfo.InTime = DateTime.Now;
_binInfoRepository.Update(inBinInfo);
-
-
var upBinInfo = machineSwapOrderBatteryInfo.UpBinInfo;
upBinInfo.Soc = -1;
upBinInfo.Soe = -1;
diff --git a/Service/Execute/Model/Tbox/BatteryInfo.cs b/Service/Execute/Model/Tbox/BatteryInfo.cs
new file mode 100644
index 0000000..eb89db9
--- /dev/null
+++ b/Service/Execute/Model/Tbox/BatteryInfo.cs
@@ -0,0 +1,23 @@
+namespace Service.Execute.Model.Tbox
+{
+ public class BatteryInfo
+ {
+ public string? BatteryNo { get; set; }
+
+ ///
+ /// 电池类型
+ ///
+ public int? BatteryType { get; set; }
+
+ ///
+ /// 电池包型号
+ ///
+ public int? BatteryPackageModel { get; set; }
+
+ public decimal? Soe { get; set; }
+
+ public decimal? Soc { get; set; }
+
+ public decimal? Soh { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Service/Execute/Model/Tbox/CarInfo.cs b/Service/Execute/Model/Tbox/CarInfo.cs
new file mode 100644
index 0000000..f827311
--- /dev/null
+++ b/Service/Execute/Model/Tbox/CarInfo.cs
@@ -0,0 +1,26 @@
+namespace Service.Execute.Model.Tbox;
+
+public class CarInfo
+{
+ public string CarNo { get; set; }
+
+
+ public string CarVin { get; set; }
+
+
+ ///
+ /// 车型数据 "0:无效值1:牵引车 2:搅拌车 3:自卸车"
+ ///
+ public byte? CarType { get; set; }
+
+ ///
+ /// 电池数
+ ///
+ public int BatteryNum { get; set; }
+
+
+ ///
+ /// 车辆电池数据
+ ///
+ public List? BatteryInfos { get; set; }
+}
\ No newline at end of file
diff --git a/Service/Execute/Model/Tbox/CarStatus.cs b/Service/Execute/Model/Tbox/CarStatus.cs
new file mode 100644
index 0000000..23d9977
--- /dev/null
+++ b/Service/Execute/Model/Tbox/CarStatus.cs
@@ -0,0 +1,28 @@
+namespace Service.Execute.Model.Tbox;
+
+public class CarStatus
+{
+ ///
+ /// 车辆档位 最小值:-1,最大值 14 ,0x0F表示无效,-1 代表倒档 R;0 代表空挡 N;大于 0 代表前进档 D;
+ ///
+ public byte? Gear { get; set; }
+
+ ///
+ /// 刹车状态 "0:未拉手刹1:已拉手刹 其它值无效"
+ ///
+ public byte? Break { get; set; }
+
+ ///
+ /// 钥匙状态 "0:OFF1:ACC ON 2:IG ON 其它值无效"
+ ///
+ public byte? Keys { get; set; }
+
+
+ ///
+ /// 0:未解锁未上锁
+ /// 1:解锁成功
+ /// 2:上锁成功
+ /// 3:无效数据
+ ///
+ public byte? LockStatus { get; set; }
+}
\ No newline at end of file
diff --git a/Service/Execute/Model/TboxElecMsg.cs b/Service/Execute/Model/Tbox/ElecMsg.cs
similarity index 69%
rename from Service/Execute/Model/TboxElecMsg.cs
rename to Service/Execute/Model/Tbox/ElecMsg.cs
index 42dbd10..69ec785 100644
--- a/Service/Execute/Model/TboxElecMsg.cs
+++ b/Service/Execute/Model/Tbox/ElecMsg.cs
@@ -1,84 +1,79 @@
-using HybirdFrameworkCore.Autofac.Attribute;
+namespace Service.Execute.Model.Tbox;
-namespace Service.Execute.Model;
-
-public class TboxElecMsg
+public class ElecMsg
{
+ ///
+ /// 小计里程 0~16777215
+ ///
+ public double? SubMile { get; set; }
+
+ ///
+ /// 车辆总里程 0~16777215
+ ///
+ public double? TotalMile { get; set; }
+
///
/// 车辆累计放电量
///
- [Property(248, 24, scale: 0.01, round: 2)]
public double AccDischargeCount { get; set; }
///
/// 车辆累计回馈电量
///
- [Property(272, 24, scale: 0.01, round: 2)]
public double AccFallbackCount { get; set; }
///
/// 车辆累计插枪充电量
///
- [Property(296, 24, scale: 0.01, round: 2)]
public double AccChargeCount { get; set; }
///
/// 5 车辆累计综合能耗
///
- [Property(320, 24, scale: 0.01, round: 2)]
public double AccKgce { get; set; }
///
/// 6 本次实时放电量
///
- [Property(344, 24, scale: 0.01, round: 2)]
public double ThisTimeRealDischarge { get; set; }
///
/// 7 上一次结算放电量
///
- [Property(368, 24, scale: 0.01, round: 2)]
public double LastTimeBalanceDischarge { get; set; }
///
/// 8 本次实时回馈电量
///
- [Property(392, 24, scale: 0.01, round: 2)]
public double ThisTimeRealFeedbackPower { get; set; }
///
/// 9 上一次结算回馈电量
///
- [Property(416, 24, scale: 0.01, round: 2)]
public double LastTimeBalanceFeedbackPower { get; set; }
///
/// 10 本次实时插枪充电量
///
- [Property(440, 24, scale: 0.01, round: 2)]
public double ThisTimeRealChargeCount { get; set; }
///
/// 11 上一次结算插枪充电量
///
- [Property(464, 24, scale: 0.01, round: 2)]
public double LastTimeBalanceChargeCount { get; set; }
///
/// 12 本次实时综合能耗
///
- [Property(488, 24, scale: 0.01, round: 2)]
public double ThisTimeRealKgce { get; set; }
///
/// 13 上一次结算综合能耗
///
- [Property(512, 24, scale: 0.01, round: 2)]
public double LastTimeBalanceKgce { get; set; }
///
/// 14 待结算电费电量
///
- [Property(536, 24, scale: 0.01, round: 2)]
public double ElectricityToBeSettled { get; set; }
}
\ No newline at end of file
diff --git a/Service/Execute/Model/Tbox/TboxCarInfoModel.cs b/Service/Execute/Model/Tbox/TboxCarInfoModel.cs
new file mode 100644
index 0000000..01d9e60
--- /dev/null
+++ b/Service/Execute/Model/Tbox/TboxCarInfoModel.cs
@@ -0,0 +1,27 @@
+namespace Service.Execute.Model.Tbox;
+
+///
+/// 车辆返回
+///
+public class TboxCarInfoModel
+{
+ public bool Connected { get; set; }
+
+ public string CarNo { get; set; }
+
+ ///
+ /// 度电数据
+ ///
+ ///
+ public ElecMsg? ElecMsg { get; set; }
+
+ ///
+ /// 车辆信息
+ ///
+ public CarInfo? CarInfo { get; set; }
+
+ ///
+ /// 车辆状态信息
+ ///
+ public CarStatus? CarStatus { get; set; }
+}
\ No newline at end of file
diff --git a/Service/Execute/Model/TboxCarInfoModel.cs b/Service/Execute/Model/TboxCarInfoModel.cs
deleted file mode 100644
index 0c45e60..0000000
--- a/Service/Execute/Model/TboxCarInfoModel.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-namespace Service.Execute.Model;
-
-///
-/// 车辆数据
-///
-public class TboxCarInfoModel
-{
- ///
- /// 连接状态
- ///
- public bool Connected { get; set; }
-
- ///
- /// 车牌号
- ///
- public string? CarNo { get; set; }
-
- ///
- /// 度电数据
- ///
- public TboxElecMsg? ElecMsg { get; set; }
-
- ///
- /// 状态数据
- ///
- public TboxHeartBeatMsg? HeartBeatMsg { get; set; }
-}
\ No newline at end of file
diff --git a/Service/Execute/Step/CarCtrlState.cs b/Service/Execute/Step/CarCtrlState.cs
index 780971b..02f4424 100644
--- a/Service/Execute/Step/CarCtrlState.cs
+++ b/Service/Execute/Step/CarCtrlState.cs
@@ -5,6 +5,7 @@ using HybirdFrameworkCore.Autofac;
using log4net;
using Service.Execute.Api;
using Service.Execute.Model;
+using Service.Execute.Model.Tbox;
using Service.Execute.StaticTools;
using Service.Execute.SwapException;
using Service.Execute.Utils;
@@ -19,6 +20,8 @@ public class CarCtrlState : IState
public StateResult Handle(SwappingStateMachine machine)
{
+
+
//解锁车辆
InvokeStatus unLockCar = UnLockCar(machine);
if (unLockCar != InvokeStatus.Done)
@@ -57,9 +60,10 @@ public class CarCtrlState : IState
{
//查询车辆锁止状态
Task carInfo = TBoxApi.GetCarInfo(machine.RfidReadModel.VelVin);
- var resultHeartBeatMsg = carInfo.Result.HeartBeatMsg;
- if (resultHeartBeatMsg.LockStatus == 1 || resultHeartBeatMsg.LockStatus==0)
+ var resultHeartBeatMsg = carInfo.Result.CarStatus;
+ if (resultHeartBeatMsg?.LockStatus == 1)
{
+ machine.BoxCarInfoModel = carInfo.Result;
machine.VelUnlockFlag = true;
_CommonMgr.InsertStep(InfoEnum.BusinessSwappingStep.VelUnlockFlag,
machine);
diff --git a/Service/Execute/Step/CarPrepareState.cs b/Service/Execute/Step/CarPrepareState.cs
index 1e95169..df0f0fd 100644
--- a/Service/Execute/Step/CarPrepareState.cs
+++ b/Service/Execute/Step/CarPrepareState.cs
@@ -10,6 +10,7 @@ using Repository.Station;
using Service.Cloud.Msg.Cloud.Resp;
using Service.Execute.Api;
using Service.Execute.Model;
+using Service.Execute.Model.Tbox;
using Service.Execute.StaticTools;
using Service.Execute.SwapException;
using Service.Execute.Utils;
@@ -47,6 +48,16 @@ public class CarPrepareState : IState
return SwappingStateMachine.ReturnWithInvokeErr(cloudCheckVel, ExceptionReason.None);
}
+ //TBox连接
+ if (StaticStationInfo.TboxStateConnect)
+ {
+ InvokeStatus tboxConnect = CheckTBoxConnectFlag(machine);
+ if (tboxConnect != InvokeStatus.Done)
+ {
+ return SwappingStateMachine.ReturnWithInvokeErr(tboxConnect, ExceptionReason.None);
+ }
+ }
+
//检查tbox链接状态
InvokeStatus checkTBoxConnect = CheckTBoxConnectFlag(machine);
if (checkTBoxConnect != InvokeStatus.Done)
@@ -78,6 +89,7 @@ public class CarPrepareState : IState
return SwappingStateMachine.ReturnWithInvokeErr(selectPack, ExceptionReason.None);
}
+
//车辆到位
InvokeStatus carInPosition = CarInPosition(machine);
if (carInPosition != InvokeStatus.Done)
@@ -98,13 +110,52 @@ public class CarPrepareState : IState
///
public InvokeStatus CarInPosition(SwappingStateMachine machine)
{
- return Invoker.Invoke("check CarInPosition", 500, 50, machine.IsCanceled,
+ return Invoker.Invoke("check CarInPosition", 500, 5, machine.IsCanceled,
() => machine.VehiclesInPlaceFlag, () =>
{
var result = TBoxApi.GetCarInfo(machine.RfidReadModel.VelVin);
+ bool keyStatus = false;
+ bool breakStatus = false;
+ bool nStatus = false;
TboxCarInfoModel tboxCarInfoModel = result.Result;
+ if (StaticStationInfo.TboxStateFlameout ||
+ StaticStationInfo.TboxStateBreak ||
+ StaticStationInfo.TboxStateN)
+ {
+ var status = tboxCarInfoModel?.CarStatus;
+
+ if (StaticStationInfo.TboxStateFlameout)
+ {
+ if (status?.Keys == 0)
+ {
+ keyStatus = true;
+ }
+ }
- if (tboxCarInfoModel.HeartBeatMsg.KeyStatus == 0)
+ if (StaticStationInfo.TboxStateBreak)
+ {
+ if (status?.Break == 1)
+ {
+ breakStatus = true;
+ }
+ }
+
+ if (StaticStationInfo.TboxStateN)
+ {
+ if (status?.Gear == 0)
+ {
+ nStatus = true;
+ }
+ }
+ }
+ else
+ {
+ keyStatus = true;
+ breakStatus = true;
+ nStatus = true;
+ }
+
+ if (keyStatus && breakStatus && nStatus)
{
machine.VehiclesInPlaceFlag = true;
//写入口等 :红灯
@@ -123,6 +174,7 @@ public class CarPrepareState : IState
_CommonMgr.InsertStep(InfoEnum.BusinessSwappingStep.CarInPositionFlag,
machine);
+ machine.BoxCarInfoModel = tboxCarInfoModel;
}
}
}, () =>
@@ -131,7 +183,7 @@ public class CarPrepareState : IState
// machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrorCarInPositionTimeout.GetLed());
SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorCarInPositionTimeout);
}, false, () => { }
- , 20, InvokeStatus.None);
+ , 10, InvokeStatus.None);
}
@@ -148,9 +200,10 @@ public class CarPrepareState : IState
BaseEnumExtensions.GetEnumByCode(
StaticStationInfo.StationModel))
{
- VehicleCertificationResp? vehicleCertificationResp = CloudApi.VehicleCheck(machine.RfidReadModel, machine.SwapOrder);
+ VehicleCertificationResp? vehicleCertificationResp =
+ CloudApi.VehicleCheck(machine.RfidReadModel, machine.SwapOrder);
- if (vehicleCertificationResp==null || vehicleCertificationResp.re!=0)
+ if (vehicleCertificationResp == null || vehicleCertificationResp.re != 0)
{
_log.Info("cloud check vehicle error");
// machine.LedTool?.WriteProgramContent("换电准备中:云平台车辆验证完成");
@@ -208,6 +261,44 @@ public class CarPrepareState : IState
}
+ ///
+ /// 连接TBox
+ ///
+ public InvokeStatus TboxConnect(SwappingStateMachine machine)
+ {
+ return Invoker.Invoke("TBox connect", 1000, 10, machine.IsCanceled,
+ () => machine.BoxConnectFlag, () =>
+ {
+ Task result = TBoxApi.Connect(machine.RfidReadModel.VelVin);
+ bool isConnect = result.Result;
+ if (isConnect)
+ {
+ //读取车辆carNo=carVin
+ Task carInfoResult = TBoxApi.GetCarInfo(machine.RfidReadModel.VelVin);
+ var tboxCarInfoModel = carInfoResult.Result;
+ var carInfo = tboxCarInfoModel?.CarInfo;
+ if (carInfo != null)
+ {
+ if (carInfo.CarNo.Equals(carInfo.CarVin))
+ {
+ machine.BoxConnectFlag = true;
+ }
+ }
+ }
+ }, () =>
+ {
+ machine.ExceptionReason = ExceptionReason.ConnTBoxError;
+ SoundApi.PlayOneSound((int)InfoEnum.SwapInfo.ErrorTBoxConn);
+ }, false, () =>
+ {
+ machine.ExceptionReason = ExceptionReason.ConnTBoxError;
+ // machine.LedTool?.WriteProgramContent(InfoEnum.SwapInfo.ErrorTBoxConn.GetLed());
+ }
+ , 20, InvokeStatus.None);
+ }
+
+
///
/// 车辆本地验证:车牌校验
///
@@ -285,11 +376,11 @@ public class CarPrepareState : IState
SwapOrderBatteryInfo orderBatteryInfo = null;
if (swapAmtOrder != null)
{
- orderBatteryInfo = _CommonMgr.SelectPackArm(swapAmtOrder);
+ orderBatteryInfo = _CommonMgr.SelectPackArm(swapAmtOrder,machine);
}
else
{
- orderBatteryInfo = _CommonMgr.SelectPackNotArm();
+ orderBatteryInfo = _CommonMgr.SelectPackNotArm(machine);
}
if (orderBatteryInfo.CanSwap != InfoEnum.SelectBinStatusInfo.Success)
diff --git a/Service/Execute/Step/DoSwappingState.cs b/Service/Execute/Step/DoSwappingState.cs
index 82bbde8..3fab8ec 100644
--- a/Service/Execute/Step/DoSwappingState.cs
+++ b/Service/Execute/Step/DoSwappingState.cs
@@ -6,9 +6,11 @@ using log4net;
using Repository.Station;
using Service.Execute.Api;
using Service.Execute.Model;
+using Service.Execute.Model.Tbox;
using Service.Execute.StaticTools;
using Service.Execute.SwapException;
using Service.Execute.Utils;
+using Service.Init;
using Service.Station;
namespace Service.Execute.Step;
@@ -414,7 +416,48 @@ public class DoSwappingState : IState
var result = TBoxApi.GetCarInfo(machine.RfidReadModel.VelVin);
TboxCarInfoModel tboxCarInfoModel = result.Result;
- if (tboxCarInfoModel.HeartBeatMsg.KeyStatus == 0)
+ bool keyStatus = false;
+ bool breakStatus = false;
+ bool nStatus = false;
+ if (StaticStationInfo.TboxStateFlameout ||
+ StaticStationInfo.TboxStateBreak ||
+ StaticStationInfo.TboxStateN)
+ {
+ var status = tboxCarInfoModel?.CarStatus;
+
+ if (StaticStationInfo.TboxStateFlameout)
+ {
+ if (status?.Keys == 0)
+ {
+ keyStatus = true;
+ }
+ }
+
+ if (StaticStationInfo.TboxStateBreak)
+ {
+ if (status?.Break == 1)
+ {
+ breakStatus = true;
+ }
+ }
+
+ if (StaticStationInfo.TboxStateN)
+ {
+ if (status?.Gear == 0)
+ {
+ nStatus = true;
+ }
+ }
+ }
+ else
+ {
+ keyStatus = true;
+ breakStatus = true;
+ nStatus = true;
+ }
+
+
+ if (keyStatus && breakStatus && nStatus)
{
machine.VehiclesInPlace2Flag = true;
}
diff --git a/Service/Execute/Step/SwapDoneState.cs b/Service/Execute/Step/SwapDoneState.cs
index 4ce8bb4..d6081f1 100644
--- a/Service/Execute/Step/SwapDoneState.cs
+++ b/Service/Execute/Step/SwapDoneState.cs
@@ -6,9 +6,11 @@ using log4net;
using Repository.Station;
using Service.Execute.Api;
using Service.Execute.Model;
+using Service.Execute.Model.Tbox;
using Service.Execute.StaticTools;
using Service.Execute.SwapException;
using Service.Execute.Utils;
+using Service.Init;
using Service.Station;
namespace Service.Execute.Step;
@@ -101,8 +103,9 @@ public class SwapDoneState : IState
{
//查询车辆锁止状态
Task carInfo = TBoxApi.GetCarInfo(machine.RfidReadModel.VelVin);
- if (carInfo.Result.HeartBeatMsg!.LockStatus == 2)
+ if (carInfo.Result?.CarStatus?.LockStatus == 2)
{
+ machine.BoxCarInfoModel = carInfo.Result;
//设置出口的是绿灯
if (PlcApi.WriteExistLamp(1000))
{
@@ -114,7 +117,11 @@ public class SwapDoneState : IState
? (int)InfoEnum.SwapInfo.InfoCarLeave
: (int)InfoEnum.SwapInfo.ErrInfoCarLeave);
machine.VelLockFlag = true;
-
+ //断连Tbox
+ if (StaticStationInfo.TboxStateDisConnect)
+ {
+ TBoxApi.DisConnect(machine.BoxCarInfoModel.CarNo);
+ }
_CommonMgr.InsertStep(InfoEnum.BusinessSwappingStep.VelLockFlag,
machine);
diff --git a/Service/Execute/SwappingStateMachine.cs b/Service/Execute/SwappingStateMachine.cs
index 49d0ded..c0f5aeb 100644
--- a/Service/Execute/SwappingStateMachine.cs
+++ b/Service/Execute/SwappingStateMachine.cs
@@ -8,6 +8,7 @@ using Newtonsoft.Json;
using Repository.Station;
using Service.Execute.Api;
using Service.Execute.Model;
+using Service.Execute.Model.Tbox;
using Service.Execute.StaticTools;
using Service.Execute.Step;
using Service.Execute.SwapException;
@@ -28,9 +29,9 @@ public class SwappingStateMachine : IDisposable
public bool StopFlag { get; set; } = false;
public bool PlcSwapFlag { get; set; } = false;
-
+
//手动确认换电成功
- public bool ManualSwapSuccFlag { get; set; }=false;
+ public bool ManualSwapSuccFlag { get; set; } = false;
public OperateModel OperateModel = null;
@@ -227,7 +228,7 @@ public class SwappingStateMachine : IDisposable
{
return CancelFlag;
}
-
+
public bool IsManualSwapSucc()
{
return ManualSwapSuccFlag;
@@ -245,7 +246,7 @@ public class SwappingStateMachine : IDisposable
{
Log.Info("reset data");
ResetOrderAmtStatus();
- if (RfidReadModel != null && RfidReadModel.VelNo != null)
+ if (RfidReadModel != null)
{
//wifi数据重置
TBoxApi.Reset(RfidReadModel.VelVin);
diff --git a/Service/Init/StaticStationInfo.cs b/Service/Init/StaticStationInfo.cs
index 3642b80..cda1cfc 100644
--- a/Service/Init/StaticStationInfo.cs
+++ b/Service/Init/StaticStationInfo.cs
@@ -72,6 +72,84 @@ public class StaticStationInfo
set => Set(StationParamConst.SwapSoc, value);
}
+ #region Tbox
+
+ public static bool TboxStateConnect
+ {
+ get => bool.Parse(Resolve(StationParamConst.TboxStateConnect));
+ set => Set(StationParamConst.TboxStateConnect, value);
+ }
+
+ public static bool TboxStateFlameout
+ {
+ get => bool.Parse(Resolve(StationParamConst.TboxStateFlameout));
+ set => Set(StationParamConst.TboxStateFlameout, value);
+ }
+ public static bool TboxStateN
+ {
+ get => bool.Parse(Resolve(StationParamConst.TboxStateN));
+ set => Set(StationParamConst.TboxStateN, value);
+ }
+
+ public static bool TboxStateBreak
+ {
+ get => bool.Parse(Resolve(StationParamConst.TboxStateBreak));
+ set => Set(StationParamConst.TboxStateBreak, value);
+ }
+
+
+ public static bool TboxStateDisConnect
+ {
+ get => bool.Parse(Resolve(StationParamConst.TboxStateDisConnect));
+ set => Set(StationParamConst.TboxStateDisConnect, value);
+ }
+
+ public static string TboxUrlDisConnect
+ {
+ get => Resolve(StationParamConst.TboxUrlDisConnect);
+ set => Set(StationParamConst.TboxUrlDisConnect, value);
+ }
+
+
+
+ public static string TboxUrlConnect
+ {
+ get => Resolve(StationParamConst.TboxUrlConnect);
+ set => Set(StationParamConst.TboxUrlConnect, value);
+ }
+
+ public static string TboxUrlLock
+ {
+ get => Resolve(StationParamConst.TboxUrlLock);
+ set => Set(StationParamConst.TboxUrlLock, value);
+ }
+
+ public static string TboxUrlUnLock
+ {
+ get => Resolve(StationParamConst.TboxUrlUnLock);
+ set => Set(StationParamConst.TboxUrlUnLock, value);
+ }
+
+ public static string TboxUrlCarInfoList
+ {
+ get => Resolve(StationParamConst.TboxUrlCarInfoList);
+ set => Set(StationParamConst.TboxUrlCarInfoList, value);
+ }
+
+ public static string TboxUrlCarInfo
+ {
+ get => Resolve(StationParamConst.TboxUrlCarInfo);
+ set => Set(StationParamConst.TboxUrlUnLock, value);
+ }
+
+ public static string TboxUrlClear
+ {
+ get => Resolve(StationParamConst.TboxUrlClear);
+ set => Set(StationParamConst.TboxUrlClear, value);
+ }
+
+ #endregion
+
#region 充电相关
public static int Eid
@@ -145,6 +223,7 @@ public class StaticStationInfo
get => Resolve(StationParamConst.CloudServerMqttVersion, "4.0.0");
set => Set(StationParamConst.CloudServerMqttVersion, value);
}
+
public static string CloudClientId
{
get => Resolve(StationParamConst.CloudClientId);
@@ -208,4 +287,4 @@ public class StaticStationInfo
}
#endregion
-}
+}
\ No newline at end of file
diff --git a/Service/Station/MonitorService.cs b/Service/Station/MonitorService.cs
index 818fff7..5403e50 100644
--- a/Service/Station/MonitorService.cs
+++ b/Service/Station/MonitorService.cs
@@ -56,8 +56,8 @@ public class MonitorService
VelMac = StationSoftMgr.SwappingStateMachine.RfidReadModel != null
? StationSoftMgr.SwappingStateMachine.RfidReadModel.VelMac
: null,
- LockStatus = tboxCarInfoModel != null ? tboxCarInfoModel.HeartBeatMsg.LockStatus : null,
- KeyStatus = tboxCarInfoModel != null ? tboxCarInfoModel.HeartBeatMsg.KeyStatus : null,
+ LockStatus = tboxCarInfoModel != null ? tboxCarInfoModel.CarStatus.LockStatus : null,
+ KeyStatus = tboxCarInfoModel != null ? tboxCarInfoModel.CarStatus.Keys : null,
VelNo = StationSoftMgr.SwappingStateMachine.RfidReadModel != null
? StationSoftMgr.SwappingStateMachine.RfidReadModel.VelNo
: null,
diff --git a/WebStarter/Controllers/SwapMonitorController.cs b/WebStarter/Controllers/SwapMonitorController.cs
index 0771f9b..9da9f6b 100644
--- a/WebStarter/Controllers/SwapMonitorController.cs
+++ b/WebStarter/Controllers/SwapMonitorController.cs
@@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Mvc;
using Service.Execute;
using Service.Execute.Api;
using Service.Execute.Model;
+using Service.Execute.Model.Tbox;
using Service.Init;
using Service.Plc.Client;
using Service.Station;