diff --git a/Service/Execute/Model/FireProtectionRelocation.cs b/Service/Execute/Model/FireProtectionRelocation.cs new file mode 100644 index 0000000..e483229 --- /dev/null +++ b/Service/Execute/Model/FireProtectionRelocation.cs @@ -0,0 +1,29 @@ +namespace Service.Execute.Model; +/// +/// 消防移仓 +/// +public class FireProtectionRelocation +{ + /// + /// 任务类型 + /// 0.无任务 + /// 1.换电任务 + /// 2.移舱任务 + /// 3.移出任务 + /// 4.移入任务 + /// 5.消防任务 + /// + public ushort TaskType { get; set; } + /// + /// 入仓位选择 + /// + public ushort EntrySelection { get; set; } + /// + /// 出仓位选择 + /// + public ushort ExitSelection { get; set; } + /// + /// 电池包类型 + /// + public ushort BatteryPackType { get; set; } +} \ No newline at end of file diff --git a/Service/Plc/Client/PlcMgr.cs b/Service/Plc/Client/PlcMgr.cs index bb84015..19434d0 100644 --- a/Service/Plc/Client/PlcMgr.cs +++ b/Service/Plc/Client/PlcMgr.cs @@ -1,4 +1,5 @@ using Autofac; +using log4net; using HslCommunication; using HybirdFrameworkCore.Autofac; using HybirdFrameworkCore.Utils; @@ -346,7 +347,7 @@ public class PlcMgr } return bResult; } - + private static readonly ILog Log = LogManager.GetLogger(typeof(FireProtectionRelocation)); /// /// 消防移仓 /// @@ -354,22 +355,42 @@ public class PlcMgr /// public static bool FireProtectionRelocation(ushort entrySelection) { + //TODO:: bool bResult = false; if (PlcClient != null) { - HostToPlc writeHostToPlc = new HostToPlc(); - writeHostToPlc.TaskType.Value = 5; - writeHostToPlc.EntrySelection.Value = entrySelection; - writeHostToPlc.ExitSelection.Value = 5; - writeHostToPlc.BatteryPackType.Value = 0; - //TODO:: 连续写多个寄存器 是否影响速度 - bool bResultTaskType = PlcClient.WriteValue(writeHostToPlc.TaskType); - bool bResultEntrySelection = PlcClient.WriteValue(writeHostToPlc.EntrySelection); - bool bResultExitSelection = PlcClient.WriteValue(writeHostToPlc.ExitSelection); - bool bResultBatteryPackType = PlcClient.WriteValue(writeHostToPlc.BatteryPackType); - if (bResultTaskType && bResultEntrySelection && bResultExitSelection && bResultBatteryPackType) + FireProtectionRelocation distributeTask = new() + { + TaskType = 5, + EntrySelection = entrySelection, + ExitSelection = 5, + BatteryPackType = 0 + }; + byte[] encode = ModelConvert.Encode(distributeTask); + //TODO::現在手動處理encode + for (int i = 0; i < encode.Length; i++) + { + if (i % 2 == 0) + { + var temp = encode[i + 1]; + encode[i + 1] = encode[i]; + encode[i] = temp; + } + } + //需要将数据转换成byte数组 + OperateResult operateResult = PlcClient.Write("x=16;111",encode); + + //查询人物状态 + if (operateResult.IsSuccess) { - bResult = true; + bool readPlcTaskStatus9000 = false; + while (!readPlcTaskStatus9000) + { + Thread.Sleep(1000); + readPlcTaskStatus9000 = PlcMgr.ReadPlcTaskStatus() == 9000; + } + + Log.Info($"execute FireProtectionRelocation success from EntrySelection ={distributeTask.EntrySelection}"); } } return bResult;