@@ -8,7 +8,7 @@ | |||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.ApolloClient" Version="1.0.12" /> | <PackageReference Include="BPA.ApolloClient" Version="1.0.12" /> | ||||
<PackageReference Include="BPA.Communication" Version="1.0.110" /> | |||||
<PackageReference Include="BPA.Communication" Version="1.0.112" /> | |||||
<PackageReference Include="BPA.Message" Version="1.0.86" /> | <PackageReference Include="BPA.Message" Version="1.0.86" /> | ||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" /> | <PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" /> | ||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="6.0.0" /> | <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="6.0.0" /> | ||||
@@ -463,7 +463,7 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.Helper" Version="1.0.71" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.73" /> | |||||
<PackageReference Include="BPA.Message" Version="1.0.86" /> | <PackageReference Include="BPA.Message" Version="1.0.86" /> | ||||
<PackageReference Include="MahApps.Metro.IconPacks.FontAwesome" Version="4.11.0" /> | <PackageReference Include="MahApps.Metro.IconPacks.FontAwesome" Version="4.11.0" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
@@ -162,7 +162,7 @@ namespace BPASmartClient.Device | |||||
/// <param name="info"></param> | /// <param name="info"></param> | ||||
public void DeviceProcessLogShow(string info) | public void DeviceProcessLogShow(string info) | ||||
{ | { | ||||
Log.Insert(0, new { Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Type = "流程", Text = info }); | |||||
Log.Insert(0, new { Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff"), Type = "流程", Text = info }); | |||||
MessageLog.GetInstance.DeviceProcessLogShow(DeviceId.ToString(), info); | MessageLog.GetInstance.DeviceProcessLogShow(DeviceId.ToString(), info); | ||||
if (Log.Count > 100) { Log.RemoveAt(Log.Count - 1); } | if (Log.Count > 100) { Log.RemoveAt(Log.Count - 1); } | ||||
} | } | ||||
@@ -16,7 +16,7 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.Helper" Version="1.0.71" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.73" /> | |||||
<PackageReference Include="BPA.Message" Version="1.0.86" /> | <PackageReference Include="BPA.Message" Version="1.0.86" /> | ||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> | <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
@@ -16,7 +16,7 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.Communication" Version="1.0.110" /> | |||||
<PackageReference Include="BPA.Communication" Version="1.0.112" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -17,8 +17,8 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.Communication" Version="1.0.110" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.71" /> | |||||
<PackageReference Include="BPA.Communication" Version="1.0.112" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.73" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -7,7 +7,7 @@ | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.Helper" Version="1.0.71" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.73" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
</Project> | </Project> |
@@ -5,7 +5,7 @@ | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.Helper" Version="1.0.71" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.73" /> | |||||
<PackageReference Include="NModbus" Version="3.0.72" /> | <PackageReference Include="NModbus" Version="3.0.72" /> | ||||
<PackageReference Include="System.IO.Ports" Version="6.0.0" /> | <PackageReference Include="System.IO.Ports" Version="6.0.0" /> | ||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" /> | <PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" /> | ||||
@@ -16,7 +16,7 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.Helper" Version="1.0.71" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.73" /> | |||||
<PackageReference Include="BPA.Message" Version="1.0.86" /> | <PackageReference Include="BPA.Message" Version="1.0.86" /> | ||||
<PackageReference Include="log4net" Version="2.0.15" /> | <PackageReference Include="log4net" Version="2.0.15" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
@@ -21,7 +21,7 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.Helper" Version="1.0.71" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.73" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
</Project> | </Project> |
@@ -7,7 +7,7 @@ | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.Helper" Version="1.0.71" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.73" /> | |||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> | <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> | ||||
<PackageReference Include="S7netplus" Version="0.14.0" /> | <PackageReference Include="S7netplus" Version="0.14.0" /> | ||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" /> | <PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" /> | ||||
@@ -24,7 +24,7 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.CustomResource" Version="1.0.23" /> | <PackageReference Include="BPA.CustomResource" Version="1.0.23" /> | ||||
<PackageReference Include="BPA.Helper" Version="1.0.71" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.73" /> | |||||
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.1418.22" /> | <PackageReference Include="Microsoft.Web.WebView2" Version="1.0.1418.22" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -5,7 +5,7 @@ | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.Helper" Version="1.0.67" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.73" /> | |||||
<PackageReference Include="System.IO.Ports" Version="6.0.0" /> | <PackageReference Include="System.IO.Ports" Version="6.0.0" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
@@ -21,7 +21,7 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.Communication" Version="1.0.110" /> | |||||
<PackageReference Include="BPA.Communication" Version="1.0.112" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -1,29 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.MorkCL | |||||
{ | |||||
/// <summary> | |||||
/// 地址转换类 | |||||
/// </summary> | |||||
internal static class AddConvert | |||||
{ | |||||
public static string ToModbusAdd(this string add) | |||||
{ | |||||
return ""; | |||||
} | |||||
/// <summary> | |||||
/// 煮面机器人地址转换 | |||||
/// </summary> | |||||
/// <param name="address"></param> | |||||
/// <returns></returns> | |||||
public static string AddressConvert(string address) | |||||
{ | |||||
return (Convert.ToInt32(address.Substring(1, address.Length - 1)) + 4096).ToString(); | |||||
} | |||||
} | |||||
} |
@@ -1,5 +1,7 @@ | |||||
using BPA.Message.Enum; | using BPA.Message.Enum; | ||||
using BPASmartClient.Device; | using BPASmartClient.Device; | ||||
using BPASmartClient.MorkCL.Server; | |||||
using SqlSugar; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Linq; | using System.Linq; | ||||
@@ -14,20 +16,134 @@ namespace BPASmartClient.MorkCL | |||||
GVL_MorkCL morkCL = new GVL_MorkCL(); | GVL_MorkCL morkCL = new GVL_MorkCL(); | ||||
Alarm alarm = new Alarm(); | Alarm alarm = new Alarm(); | ||||
/// <summary> | |||||
/// 设备信息集合 | |||||
/// </summary> | |||||
ConcurrentDictionary<EDeviceType, IModbus> devices { get; set; } = new(); | |||||
/// <summary> | |||||
/// 任务集合 | |||||
/// </summary> | |||||
ConcurrentDictionary<EDeviceType, TaskServer> TaskList { get; set; } = new(); | |||||
public override void DoMain() | public override void DoMain() | ||||
{ | { | ||||
MonitorViewModel.DeviceId = DeviceId; | MonitorViewModel.DeviceId = DeviceId; | ||||
//注册本地配方接收 | |||||
ActionManage.GetInstance.Register(new Action<object>(o => | |||||
{ | |||||
if (o != null && o is ControlData cd) morkCL.cds.Enqueue(cd); | |||||
}), NotifyTopic.FormulaDistribution); | |||||
//初始化通讯对象 | |||||
devices.TryAdd(EDeviceType.炒锅1, new FryingPanServer()); | |||||
devices.TryAdd(EDeviceType.炒锅2, new FryingPanServer()); | |||||
devices.TryAdd(EDeviceType.机器人, new RobotServer()); | |||||
devices.TryAdd(EDeviceType.压力锅, new PressureCookerServer()); | |||||
devices.TryAdd(EDeviceType.外部设备, new OtherServer()); | |||||
devices[EDeviceType.炒锅1].Init(ConnectPar.FryingPanIP1); | |||||
devices[EDeviceType.炒锅2].Init(ConnectPar.FryingPanIP2); | |||||
devices[EDeviceType.机器人].Init(ConnectPar.RobotIP); | |||||
devices[EDeviceType.压力锅].Init(ConnectPar.PressureCookerIP); | |||||
devices[EDeviceType.外部设备].Init(ConnectPar.PPortName); | |||||
} | } | ||||
public override void MainTask() | public override void MainTask() | ||||
{ | { | ||||
//throw new NotImplementedException(); | |||||
if (morkCL.cds.Count > 0 && !TaskList.ContainsKey(morkCL.cds.ElementAt(0).DeviceType)) | |||||
{ | |||||
if (morkCL.cds.TryDequeue(out ControlData cd)) | |||||
{ | |||||
TaskList.TryAdd(cd.DeviceType, new TaskServer()); | |||||
TaskList[cd.DeviceType].TaskName = $"{cd.DeviceType.ToString()}-{cd.Name}"; | |||||
TaskList[cd.DeviceType].RunTask = new Task(new Action(() => { FryingPanControl(cd.DeviceType, cd); })); | |||||
TaskList[cd.DeviceType].RunTask.Start(); | |||||
} | |||||
} | |||||
//检查到有任务完成后将对已完成的任务进行清理 | |||||
var res = TaskList.FirstOrDefault(p => p.Value.IsComplete).Key; | |||||
if (TaskList.ContainsKey(res)) TaskList.TryRemove(res, out _); | |||||
} | |||||
private void FryingPanControl(EDeviceType et, ControlData cd) | |||||
{ | |||||
DeviceProcessLogShow($"开始执行-{cd.Name} 任务"); | |||||
for (int i = 0; i < cd.ControlFuncs.Count; i++) | |||||
{ | |||||
if (TaskList.ContainsKey(et) && TaskList[et].Cts.IsCancellationRequested) return; | |||||
var device = (FryingPanServer)devices[et]; | |||||
var robot = (RobotServer)devices[EDeviceType.机器人]; | |||||
var keyValues = cd.ControlFuncs.ElementAt(i); | |||||
int index = (ushort)et - 1; | |||||
DeviceProcessLogShow($"{cd.Name}-任务执行-{keyValues.Key.ToString()}-步骤"); | |||||
switch (keyValues.Key) | |||||
{ | |||||
case EFunc.搅拌启动: | |||||
device.MixingFrequencySet(keyValues.Value[0].ParValue); | |||||
device.StirStartOrStop = true; | |||||
break; | |||||
case EFunc.搅拌停止: | |||||
device.StirStartOrStop = false; | |||||
break; | |||||
case EFunc.加热启动: | |||||
device.HeatingGearSet(keyValues.Value[0].ParValue); | |||||
device.HeatStartOrStop = true; | |||||
break; | |||||
case EFunc.加热停止: | |||||
device.HeatStartOrStop = false; | |||||
break; | |||||
case EFunc.添加调料: | |||||
var Seasoning = SqliteHelper.GetInstance.GetSeasoning().FirstOrDefault(p => p.Id == keyValues.Value[0].Id); | |||||
if (Seasoning != null) | |||||
{ | |||||
device.CuttingControl(Seasoning.Loc.ToString(), keyValues.Value[1].ParValue); | |||||
} | |||||
break; | |||||
case EFunc.添加主料: | |||||
case EFunc.添加辅料: | |||||
MaterialBase mb = new MaterialBase(); | |||||
if (keyValues.Key == EFunc.添加辅料) | |||||
mb = SqliteHelper.GetInstance.GetAccessories().FirstOrDefault(p => p.Id == keyValues.Value[0].Id); | |||||
else mb = SqliteHelper.GetInstance.GetIngredients().FirstOrDefault(p => p.Id == keyValues.Value[0].Id); | |||||
robot.RobotTaskControl(mb.Loc.ToString(), et); | |||||
device.FeedingLocFB.Wait(Cts: TaskList[et].Cts);//等待炒锅到投料位置 | |||||
robot.MaterialPouringRequest[index].Wait(Cts: TaskList[et].Cts); //等待机器人到投料位置 | |||||
robot.AllowPourVegetables(et);//允许机器人开始投料 | |||||
robot.MaterialPouringComplete[index].Wait(Cts: TaskList[et].Cts); //等待机器人投料完成 | |||||
break; | |||||
case EFunc.炒锅回原点位: | |||||
device.FryingPanHome = true; | |||||
break; | |||||
case EFunc.出餐启动: | |||||
robot.RobotTaskControl("1", et);//取空盆 | |||||
robot.DiningOutRequest[index].Wait(Cts: TaskList[et].Cts);//等待机器人到出菜位置 | |||||
device.DiningOutStart = true; | |||||
break; | |||||
case EFunc.炒锅清洗: | |||||
device.FryingPanClear = true; | |||||
break; | |||||
case EFunc.炒锅回投料位置: | |||||
device.FryingPanFeedingLoc = true; | |||||
break; | |||||
case EFunc.去指定炒制位: | |||||
device.SetStirFryingLoc(keyValues.Value[0].ParValue); | |||||
break; | |||||
case EFunc.炒制: | |||||
if (int.TryParse(keyValues.Value[0].ParValue, out int time)) | |||||
Task.Delay(time * 1000).Wait(TaskList[et].Cts.Token); | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
} | |||||
} | } | ||||
public override void ReadData() | public override void ReadData() | ||||
{ | { | ||||
//throw new NotImplementedException(); | |||||
} | } | ||||
public override void ResetProgram() | public override void ResetProgram() | ||||
@@ -0,0 +1,78 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Diagnostics; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.MorkCL | |||||
{ | |||||
/// <summary> | |||||
/// 地址转换类 | |||||
/// </summary> | |||||
internal static class ExtensionMethod | |||||
{ | |||||
/// <summary> | |||||
/// Modbus 地址转换 | |||||
/// </summary> | |||||
/// <param name="address"></param> | |||||
/// <returns></returns> | |||||
public static string ToModbusAdd(this string address) | |||||
{ | |||||
if (address == null) return ""; | |||||
if (address.Length > 0) | |||||
{ | |||||
address = address.Trim(); | |||||
if (address.ToUpper().Contains("GM") && address.Length >= 3) | |||||
{ | |||||
var res = address.Remove(0, 2); | |||||
if (res != null && res.Length > 0) return (int.Parse(res) + 4096).ToString(); | |||||
} | |||||
else if (address.ToUpper().Contains("M") && address.Length >= 4) | |||||
{ | |||||
var res = address.Substring(1).Split('.'); | |||||
if (res != null && res.Length == 2) | |||||
{ | |||||
if (int.TryParse(res[0], out int firstAddress) && int.TryParse(res[1], out int ExitAddress)) | |||||
{ | |||||
if (ExitAddress >= 0 && ExitAddress <= 7) | |||||
{ | |||||
return ((firstAddress * 8) + 320 + ExitAddress).ToString(); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
else if (address.ToUpper().Contains("GI") && address.Length >= 3) | |||||
{ | |||||
var res = address.Remove(0, 2); | |||||
if (res != null && res.Length > 0) return res; | |||||
} | |||||
else if (address.ToUpper().Contains("LB") && address.Length >= 3) | |||||
{ | |||||
var res = address.Substring(2); | |||||
if (res != null && res.Length > 0) | |||||
{ | |||||
if (int.TryParse(res, out int firstAddress)) return firstAddress.ToString(); | |||||
} | |||||
} | |||||
else if ((address.ToUpper().Contains("VW") || address.ToUpper().Contains("VD")) && address.Length >= 3) | |||||
{ | |||||
var res = address.Substring(2); | |||||
if (res != null && int.TryParse(res, out int tempAddress)) | |||||
{ | |||||
return ((tempAddress / 2) + 100).ToString(); | |||||
} | |||||
} | |||||
else if (address.ToUpper().Contains("LW") && address.Length >= 3) | |||||
{ | |||||
var res = address.Substring(2); | |||||
if (res != null && int.TryParse(res, out int LwAddress)) | |||||
{ | |||||
return LwAddress.ToString(); | |||||
} | |||||
} | |||||
} | |||||
return ""; | |||||
} | |||||
} | |||||
} |
@@ -8,6 +8,8 @@ namespace BPASmartClient.MorkCL | |||||
{ | { | ||||
public class GVL_MorkCL : IStatus | public class GVL_MorkCL : IStatus | ||||
{ | { | ||||
public ConcurrentQueue<ControlData> cds { get; set; } = new ConcurrentQueue<ControlData>(); | |||||
#region 炒锅1 | #region 炒锅1 | ||||
#endregion | #endregion | ||||
@@ -15,4 +15,5 @@ global using System.Collections.ObjectModel; | |||||
global using BPASmartClient.Device; | global using BPASmartClient.Device; | ||||
global using BPASmartClient.MorkCL.Model.Func; | global using BPASmartClient.MorkCL.Model.Func; | ||||
global using System.Threading; | global using System.Threading; | ||||
global using BPA.Communication.Base; | |||||
global using BPA.Communication.Base; | |||||
global using BPASmartClient.MorkCL.Model.Control; |
@@ -36,7 +36,7 @@ namespace BPASmartClient.MorkCL.Model.Control | |||||
/// <summary> | /// <summary> | ||||
/// 炒锅在投料位置反馈 | /// 炒锅在投料位置反馈 | ||||
/// </summary> | /// </summary> | ||||
public bool FeedingLocFB { get; set; } | |||||
public bool FeedingLocFB; | |||||
/// <summary> | /// <summary> | ||||
/// 炒锅在洗锅位置反馈 | /// 炒锅在洗锅位置反馈 | ||||
@@ -22,56 +22,60 @@ namespace BPASmartClient.MorkCL.Model.Control | |||||
/// <summary> | /// <summary> | ||||
/// 通道下料启动控制(1-3) | /// 通道下料启动控制(1-3) | ||||
/// </summary> | /// </summary> | ||||
/// <param name="ChannelNum">通道编号,1-3</param> | |||||
/// <param name="value">通道需求值</param> | |||||
public void CuttingControl(int ChannelNum, ushort value) | |||||
/// <param name="Num">通道编号,1-3</param> | |||||
/// <param name="demandValue">通道需求值</param> | |||||
public void CuttingControl(string Num, string demandValue) | |||||
{ | { | ||||
if (ChannelNum >= 1 && ChannelNum <= 3) | |||||
{ | |||||
byte[] VWOffset = new byte[3] { 6, 8, 10 }; | |||||
byte[] LBOffset = new byte[3] { 6, 7, 0 }; | |||||
MyModbus.Write($"VW10{VWOffset[ChannelNum - 1]}".ToModbusAdd(), value); | |||||
MyModbus.Write($"LB{LBOffset[ChannelNum - 1]}".ToModbusAdd(), true); | |||||
} | |||||
if (ushort.TryParse(Num, out ushort ChannelNum) && ushort.TryParse(demandValue, out ushort value)) | |||||
if (ChannelNum >= 1 && ChannelNum <= 3) | |||||
{ | |||||
byte[] VWOffset = new byte[3] { 6, 8, 10 }; | |||||
byte[] LBOffset = new byte[3] { 6, 7, 0 }; | |||||
MyModbus.Write($"VW10{VWOffset[ChannelNum - 1]}".ToModbusAdd(), value); | |||||
MyModbus.Write($"LB{LBOffset[ChannelNum - 1]}".ToModbusAdd(), true); | |||||
} | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 加热档位设定 | /// 加热档位设定 | ||||
/// </summary> | /// </summary> | ||||
/// <param name="Gear">档位,1-8挡</param> | |||||
public void HeatingGearSet(ushort Gear) | |||||
/// <param name="value">档位,1-8挡</param> | |||||
public void HeatingGearSet(string value) | |||||
{ | { | ||||
if (Gear >= 1 && Gear <= 8) | |||||
{ | |||||
MyModbus.Write($"VW100".ToModbusAdd(), Gear); | |||||
MyModbus.Write($"LB9".ToModbusAdd(), true); | |||||
} | |||||
if (ushort.TryParse(value, out ushort Gear)) | |||||
if (Gear >= 1 && Gear <= 8) | |||||
{ | |||||
MyModbus.Write($"VW100".ToModbusAdd(), Gear); | |||||
MyModbus.Write($"LB9".ToModbusAdd(), true); | |||||
} | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 搅拌频率设定 | /// 搅拌频率设定 | ||||
/// </summary> | /// </summary> | ||||
/// <param name="Frequency">频率,0-50HZ</param> | |||||
public void MixingFrequencySet(ushort Frequency) | |||||
/// <param name="value">频率,0-50HZ</param> | |||||
public void MixingFrequencySet(string value) | |||||
{ | { | ||||
if (Frequency >= 0 && Frequency <= 50) | |||||
{ | |||||
MyModbus.Write($"VW102".ToModbusAdd(), Frequency); | |||||
MyModbus.Write($"LB10".ToModbusAdd(), true); | |||||
} | |||||
if (ushort.TryParse(value, out ushort Frequency)) | |||||
if (Frequency >= 0 && Frequency <= 50) | |||||
{ | |||||
MyModbus.Write($"VW102".ToModbusAdd(), Frequency); | |||||
MyModbus.Write($"LB10".ToModbusAdd(), true); | |||||
} | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 翻转频率设定 | /// 翻转频率设定 | ||||
/// </summary> | /// </summary> | ||||
/// <param name="Frequency">频率,0-50HZ</param> | |||||
public void OverturnFrequencySet(ushort Frequency) | |||||
/// <param name="value">频率,0-50HZ</param> | |||||
public void OverturnFrequencySet(string value) | |||||
{ | { | ||||
if (Frequency >= 0 && Frequency <= 50) | |||||
{ | |||||
MyModbus.Write($"VW104".ToModbusAdd(), Frequency); | |||||
MyModbus.Write($"LB11".ToModbusAdd(), true); | |||||
} | |||||
if (ushort.TryParse(value, out ushort Frequency)) | |||||
if (Frequency >= 0 && Frequency <= 50) | |||||
{ | |||||
MyModbus.Write($"VW104".ToModbusAdd(), Frequency); | |||||
MyModbus.Write($"LB11".ToModbusAdd(), true); | |||||
} | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -90,20 +94,21 @@ namespace BPASmartClient.MorkCL.Model.Control | |||||
public bool FryingPanClear { get { return default; } set { MyModbus.Write("LB14".ToModbusAdd(), value); } } | public bool FryingPanClear { get { return default; } set { MyModbus.Write("LB14".ToModbusAdd(), value); } } | ||||
/// <summary> | /// <summary> | ||||
/// 炒锅回投料位置 | |||||
/// 炒锅到投料位置 | |||||
/// </summary> | /// </summary> | ||||
public bool FryingPanFeedingLoc { get { return default; } set { MyModbus.Write("LB15".ToModbusAdd(), value); } } | public bool FryingPanFeedingLoc { get { return default; } set { MyModbus.Write("LB15".ToModbusAdd(), value); } } | ||||
/// <summary> | /// <summary> | ||||
/// 去炒制位控制 | /// 去炒制位控制 | ||||
/// </summary> | /// </summary> | ||||
/// <param name="loc">炒锅位置,1-4</param> | |||||
public void SetStirFryingLoc(ushort loc) | |||||
/// <param name="value">炒锅位置,1-4</param> | |||||
public void SetStirFryingLoc(string value) | |||||
{ | { | ||||
if (loc >= 1 && loc <= 4) | |||||
{ | |||||
MyModbus.Write($"LB{loc + 15}".ToModbusAdd(), true); | |||||
} | |||||
if (ushort.TryParse(value, out ushort loc)) | |||||
if (loc >= 1 && loc <= 4) | |||||
{ | |||||
MyModbus.Write($"LB{loc + 15}".ToModbusAdd(), true); | |||||
} | |||||
} | } | ||||
} | } | ||||
@@ -0,0 +1,21 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.MorkCL.Model.Control | |||||
{ | |||||
internal class OtherDeviceGet : ModbusBase | |||||
{ | |||||
/// <summary> | |||||
/// 电子秤当前重量 | |||||
/// </summary> | |||||
public float CurrentWeight { get; set; } | |||||
/// <summary> | |||||
/// 空箱子检测 | |||||
/// </summary> | |||||
public bool[] BoxDetection { get; set; } = new bool[4]; | |||||
} | |||||
} |
@@ -4,12 +4,9 @@ using System.Linq; | |||||
using System.Text; | using System.Text; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
namespace BPASmartClient.MorkCL.Model | |||||
namespace BPASmartClient.MorkCL.Model.Control | |||||
{ | { | ||||
internal enum DeviceType | |||||
internal class OtherDeviceSet : OtherDeviceGet | |||||
{ | { | ||||
炒锅1, | |||||
炒锅2, | |||||
压力锅 | |||||
} | } | ||||
} | } |
@@ -0,0 +1,12 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.MorkCL.Model.Control | |||||
{ | |||||
internal class PressureCookerGet : ModbusBase | |||||
{ | |||||
} | |||||
} |
@@ -0,0 +1,12 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.MorkCL.Model.Control | |||||
{ | |||||
internal class PressureCookerSet : PressureCookerGet | |||||
{ | |||||
} | |||||
} |
@@ -14,12 +14,12 @@ namespace BPASmartClient.MorkCL.Model.Control | |||||
/// <summary> | /// <summary> | ||||
/// 倒料请求 | /// 倒料请求 | ||||
/// </summary> | /// </summary> | ||||
public bool[] MaterialPouringRequest { get; set; } = new bool[3]; | |||||
public bool[] MaterialPouringRequest = new bool[3]; | |||||
/// <summary> | /// <summary> | ||||
/// 倒料完成 | /// 倒料完成 | ||||
/// </summary> | /// </summary> | ||||
public bool[] MaterialPouringComplete { get; set; } = new bool[3]; | |||||
public bool[] MaterialPouringComplete = new bool[3]; | |||||
/// <summary> | /// <summary> | ||||
/// 出餐请求,机器人到位请求炒锅出餐 | /// 出餐请求,机器人到位请求炒锅出餐 | ||||
@@ -29,7 +29,27 @@ namespace BPASmartClient.MorkCL.Model.Control | |||||
/// <summary> | /// <summary> | ||||
/// 入库完成 | /// 入库完成 | ||||
/// </summary> | /// </summary> | ||||
public bool[] WarehousingComplete { get; set; } = new bool[3]; | |||||
public bool[] WarehousingComplete { get; set; } = new bool[12]; | |||||
/// <summary> | |||||
/// 机器人原点状态 | |||||
/// </summary> | |||||
public bool Home { get; set; } | |||||
/// <summary> | |||||
/// 机器人使能状态 | |||||
/// </summary> | |||||
public bool EnableState { get; set; } | |||||
/// <summary> | |||||
/// 机器人远程模式 | |||||
/// </summary> | |||||
public bool RemoteMode { get; set; } | |||||
/// <summary> | |||||
/// 机器人程序运行中 | |||||
/// </summary> | |||||
public bool ProgramRuning { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 机器人任务反馈 | /// 机器人任务反馈 | ||||
@@ -11,48 +11,129 @@ namespace BPASmartClient.MorkCL.Model.Control | |||||
/// <summary> | /// <summary> | ||||
/// 机器人任务控制 | /// 机器人任务控制 | ||||
/// </summary> | /// </summary> | ||||
/// <param name="mainTask"></param> | |||||
/// <param name="subTask"></param> | |||||
public void RobotTaskControl(ushort mainTask, ushort subTask) | |||||
/// <param name="MainTask"></param> | |||||
/// <param name="SubTask"></param> | |||||
public void RobotTaskControl(string MainTask, EDeviceType SubTask) | |||||
{ | { | ||||
MyModbus.Write("", mainTask); | |||||
MyModbus.Write("", subTask); | |||||
if (ushort.TryParse(MainTask, out ushort mainTask)) | |||||
if (mainTask >= 0 && mainTask <= 24) | |||||
{ | |||||
MyModbus.Write("GI1".ToModbusAdd(), (ushort)SubTask); | |||||
MyModbus.Write("GI0".ToModbusAdd(), mainTask); | |||||
} | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 入库控制 | /// 入库控制 | ||||
/// </summary> | /// </summary> | ||||
/// <param name="loc"></param> | |||||
public void WarehousingControl(ushort loc) | |||||
/// <param name="Loc"></param> | |||||
public void WarehousingControl(string Loc) | |||||
{ | { | ||||
if (ushort.TryParse(Loc, out ushort loc)) | |||||
if (loc >= 1 && loc <= 12) MyModbus.Write("GI0".ToModbusAdd(), (ushort)(loc + 29)); | |||||
} | |||||
/// <summary> | |||||
/// 机器人到位允许倒菜到炒锅 | |||||
/// </summary> | |||||
/// <param name="num">炒锅类型</param> | |||||
public void AllowPourVegetables(EDeviceType num) | |||||
{ | |||||
switch (num) | |||||
{ | |||||
case EDeviceType.炒锅1: | |||||
MyModbus.Write("GM500".ToModbusAdd(), true); | |||||
break; | |||||
case EDeviceType.炒锅2: | |||||
MyModbus.Write("GM501".ToModbusAdd(), true); | |||||
break; | |||||
case EDeviceType.压力锅: | |||||
MyModbus.Write("GM502".ToModbusAdd(), true); | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 运行倒菜 | |||||
/// 出餐减速到位 | |||||
/// </summary> | /// </summary> | ||||
/// <param name="num">炒锅编号</param> | |||||
public void AllowPourVegetables(ushort num) | |||||
/// <param name="num">炒锅类型</param> | |||||
public void ModerateInPlace(EDeviceType num) | |||||
{ | { | ||||
switch (num) | |||||
{ | |||||
case EDeviceType.炒锅1: | |||||
MyModbus.Write("GM503".ToModbusAdd(), true); | |||||
break; | |||||
case EDeviceType.炒锅2: | |||||
MyModbus.Write("GM505".ToModbusAdd(), true); | |||||
break; | |||||
case EDeviceType.压力锅: | |||||
MyModbus.Write("GM507".ToModbusAdd(), true); | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 出餐倒菜完成 | |||||
/// </summary> | |||||
/// <param name="num">炒锅类型</param> | |||||
public void DiningOutComplete(EDeviceType num) | |||||
{ | |||||
switch (num) | |||||
{ | |||||
case EDeviceType.炒锅1: | |||||
MyModbus.Write("GM504".ToModbusAdd(), true); | |||||
break; | |||||
case EDeviceType.炒锅2: | |||||
MyModbus.Write("GM506".ToModbusAdd(), true); | |||||
break; | |||||
case EDeviceType.压力锅: | |||||
MyModbus.Write("GM508".ToModbusAdd(), true); | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 出餐减速到位 | |||||
/// 设置远程启动(暂停后也可以启动) M702 | |||||
/// </summary> | /// </summary> | ||||
/// <param name="num">炒锅编号</param> | |||||
public void ModerateInPlace(ushort num) | |||||
public bool RobotStart | |||||
{ | { | ||||
get { return MyModbus.Read<bool>("GM702".ToModbusAdd()).Content; } | |||||
set { MyModbus.Write("GM702".ToModbusAdd(), value); } | |||||
} | |||||
/// <summary> | |||||
/// 设置远程暂停 M703 | |||||
/// </summary> | |||||
public bool RobotSuspend | |||||
{ | |||||
get { return MyModbus.Read<bool>("GM703".ToModbusAdd()).Content; } | |||||
set { MyModbus.Write("GM703".ToModbusAdd(), value); } | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 出餐倒菜完成 | |||||
/// 设置使能 M700 | |||||
/// </summary> | /// </summary> | ||||
/// <param name="num">炒锅编号</param> | |||||
public void DiningOutComplete(ushort num) | |||||
public bool RobotEnable | |||||
{ | { | ||||
get { return MyModbus.Read<bool>("GM700".ToModbusAdd()).Content; } | |||||
set { MyModbus.Write("GM700".ToModbusAdd(), value); } | |||||
} | |||||
/// <summary> | |||||
/// 机器人复位 | |||||
/// </summary> | |||||
public bool RobotReset | |||||
{ | |||||
get { return MyModbus.Read<bool>("GM701".ToModbusAdd()).Content; } | |||||
set { MyModbus.Write("GM701".ToModbusAdd(), value); } | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -1,6 +1,7 @@ | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Linq; | using System.Linq; | ||||
using System.Security.RightsManagement; | |||||
using System.Text; | using System.Text; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using BPASmartClient.MorkCL.Model.DataInfo; | using BPASmartClient.MorkCL.Model.DataInfo; | ||||
@@ -8,8 +9,16 @@ using BPASmartClient.MorkCL.Model.Func; | |||||
namespace BPASmartClient.MorkCL.Model | namespace BPASmartClient.MorkCL.Model | ||||
{ | { | ||||
internal class ControlData : RawMaterial | |||||
public class ControlData : RawMaterial | |||||
{ | { | ||||
/// <summary> | |||||
/// 选择设备类型 | |||||
/// </summary> | |||||
public EDeviceType DeviceType { get; set; } | |||||
/// <summary> | |||||
/// 功能配方 | |||||
/// </summary> | |||||
public ConcurrentDictionary<EFunc, List<FuncPar>> ControlFuncs { get; set; } = new ConcurrentDictionary<EFunc, List<FuncPar>>(); | public ConcurrentDictionary<EFunc, List<FuncPar>> ControlFuncs { get; set; } = new ConcurrentDictionary<EFunc, List<FuncPar>>(); | ||||
} | } | ||||
} | } |
@@ -6,12 +6,13 @@ using System.Threading.Tasks; | |||||
namespace BPASmartClient.MorkCL.Model | namespace BPASmartClient.MorkCL.Model | ||||
{ | { | ||||
internal enum ControlDeviceType | |||||
public enum EDeviceType : ushort | |||||
{ | { | ||||
炒锅1, | |||||
炒锅2, | |||||
压力锅, | |||||
机器人, | |||||
其它 | |||||
无 = 0, | |||||
炒锅1 = 1, | |||||
炒锅2 = 2, | |||||
压力锅 = 3, | |||||
机器人 = 4, | |||||
外部设备 = 5, | |||||
} | } | ||||
} | } |
@@ -11,6 +11,11 @@ namespace BPASmartClient.MorkCL.Model.Func | |||||
/// </summary> | /// </summary> | ||||
public class FuncPar | public class FuncPar | ||||
{ | { | ||||
/// <summary> | |||||
/// 物料ID | |||||
/// </summary> | |||||
public string Id { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 参数名 | /// 参数名 | ||||
/// </summary> | /// </summary> | ||||
@@ -31,7 +31,7 @@ namespace BPASmartClient.MorkCL.Model.Func | |||||
{ EFunc.出餐启动,new FuncPar[0] }, | { EFunc.出餐启动,new FuncPar[0] }, | ||||
{ EFunc.炒锅清洗,new FuncPar[0] }, | { EFunc.炒锅清洗,new FuncPar[0] }, | ||||
{ EFunc.炒锅回投料位置,new FuncPar[0] }, | { EFunc.炒锅回投料位置,new FuncPar[0] }, | ||||
{ EFunc.去指定炒制位,new FuncPar[] { new FuncPar() { ParName="设置炒制位", ParDescribe="请输入 1--3 选择一个合适的炒制位置"} } }, | |||||
{ EFunc.去指定炒制位,new FuncPar[] { new FuncPar() { ParName="设置炒制位", ParDescribe="请输入 1--4 选择一个合适的炒制位置"} } }, | |||||
{ EFunc.炒制,new FuncPar[] { new FuncPar() { ParName="设置炒制时间",ParUnit="秒", ParDescribe="请设置一个合适的炒制时间"} } }, | { EFunc.炒制,new FuncPar[] { new FuncPar() { ParName="设置炒制时间",ParUnit="秒", ParDescribe="请设置一个合适的炒制时间"} } }, | ||||
}; | }; | ||||
} | } | ||||
@@ -17,5 +17,10 @@ namespace BPASmartClient.MorkCL.Model | |||||
/// 机器人初始化 | /// 机器人初始化 | ||||
/// </summary> | /// </summary> | ||||
public static string RobotInit => $"{Header}RobotInit"; | public static string RobotInit => $"{Header}RobotInit"; | ||||
/// <summary> | |||||
/// 本地配方下发通知 | |||||
/// </summary> | |||||
public static string FormulaDistribution => $"{Header}FormulaDistribution"; | |||||
} | } | ||||
} | } |
@@ -0,0 +1,14 @@ | |||||
//using System; | |||||
//using System.Collections.Generic; | |||||
//using System.Linq; | |||||
//using System.Text; | |||||
//using System.Threading.Tasks; | |||||
//namespace BPASmartClient.MorkCL.Model | |||||
//{ | |||||
// public class Result | |||||
// { | |||||
// public bool IsSuccess { get; set; } | |||||
// public string Message { get; set; } | |||||
// } | |||||
//} |
@@ -7,7 +7,7 @@ using System.Threading.Tasks; | |||||
namespace BPASmartClient.MorkCL.Server | namespace BPASmartClient.MorkCL.Server | ||||
{ | { | ||||
internal interface ISqlLIte : IServer | |||||
internal interface ISqlite : IServer | |||||
{ | { | ||||
//主料 | //主料 | ||||
bool AddIngredients(IngredientsTB mb); | bool AddIngredients(IngredientsTB mb); |
@@ -3,13 +3,33 @@ using System.Collections.Generic; | |||||
using System.Linq; | using System.Linq; | ||||
using System.Text; | using System.Text; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using System.Windows.Controls; | |||||
namespace BPASmartClient.MorkCL.Server | namespace BPASmartClient.MorkCL.Server | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 其它服务类 | /// 其它服务类 | ||||
/// </summary> | /// </summary> | ||||
internal class OtherServer | |||||
internal class OtherServer : OtherDeviceSet, IModbus | |||||
{ | { | ||||
public void Init(string IP = "", int Port = 502, string PortName = "") | |||||
{ | |||||
MyModbus = new ModbusRtu(); | |||||
MyModbus.Connected = () => | |||||
{ | |||||
TaskManage.GetInstance.StartLong(new Action(() => | |||||
{ | |||||
var box = MyModbus.Read<bool[]>("LB100".ToModbusAdd(), 4); | |||||
if (box.IsSuccess) | |||||
{ | |||||
for (byte i = 0; i < box.Content.Length; i++) BoxDetection[i] = box.Content[i]; | |||||
} | |||||
var weight = MyModbus.Read<float>("LW20".ToModbusAdd()); | |||||
if (weight.IsSuccess) CurrentWeight = weight.Content; | |||||
Thread.Sleep(10); | |||||
}), $"其它外部设备-{PortName}", true); | |||||
}; | |||||
MyModbus.Connect(new ConfigurationOptions() { PortName = PortName }); | |||||
} | |||||
} | } | ||||
} | } |
@@ -9,7 +9,20 @@ namespace BPASmartClient.MorkCL.Server | |||||
/// <summary> | /// <summary> | ||||
/// 压力锅服务类 | /// 压力锅服务类 | ||||
/// </summary> | /// </summary> | ||||
internal class PressureCookerServer | |||||
internal class PressureCookerServer : PressureCookerSet, IModbus | |||||
{ | { | ||||
public void Init(string IP = "", int Port = 502, string PortName = "") | |||||
{ | |||||
MyModbus = new ModbusTcp(); | |||||
MyModbus.Connected = () => | |||||
{ | |||||
TaskManage.GetInstance.StartLong(new Action(() => | |||||
{ | |||||
Thread.Sleep(10); | |||||
}), $"压力锅服务-{IP}", true); | |||||
}; | |||||
MyModbus.Connect(new ConfigurationOptions() { IpAddress = IP, Port = Port }); | |||||
} | |||||
} | } | ||||
} | } |
@@ -19,7 +19,25 @@ namespace BPASmartClient.MorkCL.Server | |||||
{ | { | ||||
TaskManage.GetInstance.StartLong(new Action(() => | TaskManage.GetInstance.StartLong(new Action(() => | ||||
{ | { | ||||
var m600 = MyModbus.Read<bool[]>("M600".ToModbusAdd(), 9); | |||||
if (m600.IsSuccess) | |||||
{ | |||||
for (byte i = 0; i < 3; i++) | |||||
{ | |||||
MaterialPouringRequest[i] = m600.Content[i * 3]; | |||||
MaterialPouringComplete[i] = m600.Content[i * 3 + 1]; | |||||
DiningOutRequest[i] = m600.Content[i * 3 + 2]; | |||||
} | |||||
} | |||||
var m630 = MyModbus.Read<bool[]>("M630".ToModbusAdd(), 12); | |||||
if (m630.IsSuccess) | |||||
{ | |||||
for (byte i = 0; i < m630.Content.Length; i++) WarehousingComplete[i] = m630.Content[i]; | |||||
} | |||||
var gi = MyModbus.Read<ushort>("GI5".ToModbusAdd(), 1); | |||||
if (gi.IsSuccess) TaskFeedback = (RobotMainTask)gi.Content; | |||||
Thread.Sleep(10); | Thread.Sleep(10); | ||||
}), $"机器人服务-{IP}", true); | }), $"机器人服务-{IP}", true); | ||||
@@ -29,7 +47,37 @@ namespace BPASmartClient.MorkCL.Server | |||||
private void RobotInit() | private void RobotInit() | ||||
{ | { | ||||
if (EnableState && ProgramRuning) return; | |||||
//if (!CR_Data.Home) | |||||
//{ | |||||
// Noticer.GetInstance().Show("煮面机器人初始化失败,机器人不在原点"); | |||||
// return; | |||||
//} | |||||
while (!EnableState || !ProgramRuning) | |||||
{ | |||||
//复位 | |||||
RobotReset = true; | |||||
Thread.Sleep(1000); | |||||
RobotReset = false; | |||||
Thread.Sleep(500); | |||||
if (!EnableState) | |||||
{ | |||||
//上使能 | |||||
RobotEnable = true; | |||||
Thread.Sleep(1000); | |||||
RobotEnable = false; | |||||
Thread.Sleep(500); | |||||
} | |||||
//启动 | |||||
RobotStart = true; | |||||
Thread.Sleep(1000); | |||||
RobotStart = false; | |||||
Thread.Sleep(1000); | |||||
} | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -10,7 +10,7 @@ using System.Threading.Tasks; | |||||
namespace BPASmartClient.MorkCL.Server | namespace BPASmartClient.MorkCL.Server | ||||
{ | { | ||||
internal class SqliteHelper : ISqlLIte | |||||
internal class SqliteHelper : ISqlite | |||||
{ | { | ||||
private volatile static SqliteHelper _Instance; | private volatile static SqliteHelper _Instance; | ||||
@@ -0,0 +1,29 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.MorkCL.Server | |||||
{ | |||||
public class TaskServer | |||||
{ | |||||
/// <summary> | |||||
/// 获取任务是否执行完成 | |||||
/// </summary> | |||||
public bool IsComplete => RunTask == null ? false : RunTask.IsCompleted; | |||||
/// <summary> | |||||
/// 任务取消标识 | |||||
/// </summary> | |||||
public CancellationTokenSource Cts { get; set; } = new CancellationTokenSource(); | |||||
/// <summary> | |||||
/// 任务名称 | |||||
/// </summary> | |||||
public string TaskName { get; set; } | |||||
public Task RunTask { get; set; } | |||||
} | |||||
} |
@@ -8,7 +8,7 @@ | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.Helper" Version="1.0.71" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.73" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
</Project> | </Project> |
@@ -21,7 +21,7 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.Helper" Version="1.0.71" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.73" /> | |||||
<PackageReference Include="BPA.Message" Version="1.0.86" /> | <PackageReference Include="BPA.Message" Version="1.0.86" /> | ||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> | <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
@@ -9,7 +9,7 @@ | |||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="BPA.CustomResource" Version="1.0.16" /> | <PackageReference Include="BPA.CustomResource" Version="1.0.16" /> | ||||
<PackageReference Include="BPA.Helper" Version="1.0.71" /> | |||||
<PackageReference Include="BPA.Helper" Version="1.0.73" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
</Project> | </Project> |