|
|
@@ -0,0 +1,649 @@ |
|
|
|
using BPA.Message; |
|
|
|
using BPA.Message.Enum; |
|
|
|
using BPASmartClient.Device; |
|
|
|
using BPASmartClient.EventBus; |
|
|
|
using BPASmartClient.Helper; |
|
|
|
using BPASmartClient.Message; |
|
|
|
using BPASmartClient.Model; |
|
|
|
using BPASmartClient.Model.PLC; |
|
|
|
using static BPASmartClient.EventBus.EventBus; |
|
|
|
|
|
|
|
namespace BPASmartClient.MorkF |
|
|
|
{ |
|
|
|
public class Control_MorkF : BaseDevice |
|
|
|
{ |
|
|
|
public override DeviceClientType DeviceType => throw new NotImplementedException(); |
|
|
|
|
|
|
|
GVL_MorkF morkF = new GVL_MorkF();//全局对象声明 |
|
|
|
private OrderMaterialDelivery orderMaterialDelivery { get; set; } = new OrderMaterialDelivery(); |
|
|
|
private RecipeBoms recipeBoms { get; set; } = new RecipeBoms(); |
|
|
|
int OrderCount; |
|
|
|
/// <summary> |
|
|
|
/// 入口 |
|
|
|
/// </summary> |
|
|
|
public override void DoMain() |
|
|
|
{ |
|
|
|
ReadData(); //plc状态量读取 |
|
|
|
DataParse();//数据解析 |
|
|
|
Main(); |
|
|
|
ResetProgram(); |
|
|
|
MessageLog.GetInstance.Show("MORKF 设备初始化完成"); |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// PLC数据读取 |
|
|
|
/// </summary> |
|
|
|
public void ReadData() |
|
|
|
{ |
|
|
|
ThreadManage.GetInstance().StartLong(new Action(() => |
|
|
|
{ |
|
|
|
GetStatus("M0.1", new Action<bool[]>((bools) => { |
|
|
|
morkF.InitialComplete = bools[0]; |
|
|
|
})); |
|
|
|
GetStatus("M1.0", new Action<bool[]>((bools) => { |
|
|
|
morkF.ProvidePlateModule = bools[0]; |
|
|
|
morkF.ProvidePlateComplete = bools[2]; |
|
|
|
morkF.CleanModule = bools[3]; |
|
|
|
morkF.CleanComplete = bools[5]; |
|
|
|
})); |
|
|
|
GetStatus("M2.0", new Action<bool[]>((bools) => { |
|
|
|
morkF.KitchenOneStatus = bools[1]; |
|
|
|
morkF.FallOilComplete = bools[8]; |
|
|
|
})); |
|
|
|
GetStatus("M8.0", new Action<bool[]>((bools) => { |
|
|
|
morkF.TurnMachineUpComplete = bools[1]; |
|
|
|
morkF.TurnMachineDownComplete = bools[3]; |
|
|
|
})); |
|
|
|
GetStatus("M13.5", new Action<bool[]>((bools) => { |
|
|
|
morkF.MaterialArriveComplete = bools[0]; |
|
|
|
})); |
|
|
|
GetStatus("M16.0", new Action<bool[]>((bools) => { |
|
|
|
morkF.PutPotToKitchenComlete = bools[1]; |
|
|
|
morkF.TakeMaterialComplete = bools[2]; |
|
|
|
morkF.PlaceRinseTableComplete = bools[5]; |
|
|
|
morkF.RoobotIdle = bools[6]; |
|
|
|
})); |
|
|
|
|
|
|
|
Thread.Sleep(500); |
|
|
|
}), "ReadPLCData"); |
|
|
|
} |
|
|
|
private void ServerInit() |
|
|
|
{ |
|
|
|
//物料信息 |
|
|
|
EventBus.EventBus.GetInstance().Subscribe<MaterialDeliveryEvent>(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) |
|
|
|
{ |
|
|
|
if (@event == null) return; |
|
|
|
if (@event is MaterialDeliveryEvent material) |
|
|
|
{ |
|
|
|
orderMaterialDelivery = material.orderMaterialDelivery; |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
//配方数据信息 |
|
|
|
EventBus.EventBus.GetInstance().Subscribe<RecipeBomEvent>(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) |
|
|
|
{ |
|
|
|
if (@event == null) return; |
|
|
|
if (@event is RecipeBomEvent recipe) |
|
|
|
{ |
|
|
|
recipeBoms = recipe.recipeBoms; |
|
|
|
WriteRecipeBoms(); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
private void OrderChange(string subid, ORDER_STATUS oRDER_STATUS) |
|
|
|
{ |
|
|
|
EventBus.EventBus.GetInstance().Publish(new OrderStatusChangedEvent() { Id = DeviceId, Status = oRDER_STATUS, SubOrderId = subid }); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary> |
|
|
|
/// 写入配方数据到 PLC |
|
|
|
/// </summary> |
|
|
|
private void WriteRecipeBoms() |
|
|
|
{ |
|
|
|
//List<ushort> recipeBoms = new List<ushort>(); |
|
|
|
//if (this.recipeBoms == null) return; |
|
|
|
//foreach (var item in this.recipeBoms.RecipeIds) |
|
|
|
//{ |
|
|
|
// foreach (var rec in item.Recipes) |
|
|
|
// { |
|
|
|
// recipeBoms.Add((ushort)rec); |
|
|
|
// } |
|
|
|
//} |
|
|
|
//if (recipeBoms.Count > 0) |
|
|
|
//{ |
|
|
|
// //配方数据地址范围:VW2000 - VW2278 |
|
|
|
// WriteData("VW2000", recipeBoms.ToArray()); |
|
|
|
//} |
|
|
|
//else { MessageLog.GetInstance.Show("配方数据为空"); } |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary> |
|
|
|
/// 数据解析 |
|
|
|
/// </summary> |
|
|
|
private void DataParse() |
|
|
|
{ |
|
|
|
EventBus.EventBus.GetInstance().Subscribe<DoOrderEvent>(DeviceId, delegate (IEvent @event, EventCallBackHandle callBackHandle) |
|
|
|
{ |
|
|
|
if (@event == null) return; |
|
|
|
if (@event is DoOrderEvent order) |
|
|
|
{ |
|
|
|
if (order.MorkOrder.GoodBatchings == null) return; |
|
|
|
OrderCount++; |
|
|
|
MessageLog.GetInstance.Show($"接收到{OrderCount}次订单"); |
|
|
|
foreach (var item in order.MorkOrder.GoodBatchings) |
|
|
|
{ |
|
|
|
var res = orderMaterialDelivery?.BatchingInfo?.FirstOrDefault(p => p.BatchingId == item.BatchingId); |
|
|
|
if (res != null) |
|
|
|
{ |
|
|
|
if (ushort.TryParse(res.BatchingLoc, out ushort loc)) |
|
|
|
{ |
|
|
|
if (loc >= 1 && loc <= 5) |
|
|
|
{ |
|
|
|
if (morkF.TakeMaterialQueue.FirstOrDefault(p => p.SuborderId == order.MorkOrder.SuborderId) == null) |
|
|
|
morkF.TakeMaterialQueue.Enqueue(new OrderLocInfo() { Loc = ushort.Parse(res.BatchingLoc), SuborderId = order.MorkOrder.SuborderId, BatchingId = res.BatchingId }); |
|
|
|
} |
|
|
|
else if (loc >= 10 && loc <= 11) |
|
|
|
{ |
|
|
|
int index = 0; |
|
|
|
if (recipeBoms != null) |
|
|
|
{ |
|
|
|
index = Array.FindIndex(recipeBoms.RecipeIds?.ToArray(), p => p.RecipeId == order.MorkOrder.RecipeId); |
|
|
|
index++; |
|
|
|
} |
|
|
|
if (morkF.TakePlateQueue.FirstOrDefault(p => p.SuborderId == order.MorkOrder.SuborderId) == null) |
|
|
|
morkF.TakePlateQueue.Enqueue(new OrderLocInfo() |
|
|
|
{ |
|
|
|
Loc = ushort.Parse(res.BatchingLoc), |
|
|
|
SuborderId = order.MorkOrder.SuborderId, |
|
|
|
RecipeNumber = (index >= 1 && index <= 10) ? (ushort)index : (ushort)0 |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary> |
|
|
|
/// 流程控制 |
|
|
|
/// </summary> |
|
|
|
public void Main() |
|
|
|
{ |
|
|
|
ThreadManage.GetInstance().StartLong(new Action(() => |
|
|
|
{ |
|
|
|
|
|
|
|
IsHealth = true; //心跳 |
|
|
|
TakePlatelTask(); |
|
|
|
TakePotTask(); |
|
|
|
TakeVegBurdenATask(); |
|
|
|
TakeMeatBurdenATask(); |
|
|
|
TakeVegBurdenBTask(); |
|
|
|
TakeBurdenCTask(); |
|
|
|
StartCookingTask(); |
|
|
|
OutDishTask(); |
|
|
|
CleanPotTask(); |
|
|
|
TurntableControl(); |
|
|
|
SingleProcess(); |
|
|
|
|
|
|
|
}), "MainTask"); |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 信号处理 |
|
|
|
/// </summary> |
|
|
|
private void SingleProcess() |
|
|
|
{ |
|
|
|
//转台互锁解除 |
|
|
|
if (morkF.TakeMaterialComplete && morkF.TurnTableLock) |
|
|
|
{ |
|
|
|
morkF.TurnTableLock = false; |
|
|
|
} |
|
|
|
//待定 |
|
|
|
if (morkF.TakeVegALock && morkF.TakeMeatALock && morkF.TakeVegBLock) |
|
|
|
{ |
|
|
|
morkF.TakeAllBurdenComplete = true; |
|
|
|
} |
|
|
|
//出餐完成,相应变量复位 |
|
|
|
if (morkF.OutMealComplete) |
|
|
|
{ |
|
|
|
morkF.TakePlateLock = false; |
|
|
|
morkF.TakePotLock = false; |
|
|
|
morkF.TakeVegALock = false; |
|
|
|
morkF.TakeMeatALock = false; |
|
|
|
morkF.TakeVegBLock = false; |
|
|
|
morkF.TakeBurdenCLcok = false; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/// <summary> |
|
|
|
/// 转台控制 |
|
|
|
/// </summary> |
|
|
|
private void TurntableControl() |
|
|
|
{ |
|
|
|
//正常轮询 |
|
|
|
if (morkF.InitialComplete && morkF.TakeMaterialQueue.Count > 0 && !morkF.TurnTableLock) |
|
|
|
{ |
|
|
|
var result = orderMaterialDelivery.BatchingInfo.Where(p => p.BatchingId == morkF.TakeMaterialQueue.ElementAt(0).BatchingId).ToList(); |
|
|
|
if (result != null) |
|
|
|
{ |
|
|
|
if (ushort.TryParse(result[0].BatchingLoc, out ushort loc)) |
|
|
|
{ |
|
|
|
TurnMaterialStore(loc); |
|
|
|
MessageLog.GetInstance.Show($"转台转到【{loc}】位置"); |
|
|
|
morkF.TurnTableLock = true; //取料完成后置false |
|
|
|
} |
|
|
|
} |
|
|
|
else MessageLog.GetInstance.Show("未找到可用的物料信息"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
/// 供盘 |
|
|
|
/// </summary> |
|
|
|
/// <exception cref="NotImplementedException"></exception> |
|
|
|
private void TakePlatelTask() |
|
|
|
{ |
|
|
|
if (!morkF.RoobotIdle && morkF.InitialComplete && morkF.TakePlateQueue.Count > 0 && !morkF.ProvidePlateModule && !morkF.TakePlateLock) |
|
|
|
{ |
|
|
|
|
|
|
|
if (morkF.TakePlateQueue.TryDequeue(out OrderLocInfo order)) |
|
|
|
{ |
|
|
|
StartTakePlate(); |
|
|
|
morkF.CurrentOrderId = order.SuborderId; |
|
|
|
morkF.TakePlateLock = true; //订单完成后置false |
|
|
|
MessageLog.GetInstance.Show($"订单【{ morkF.CurrentOrderId}】执行取碗控制,位置:[{order.Loc}]"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary> |
|
|
|
/// 取锅到灶台 |
|
|
|
/// </summary> |
|
|
|
/// <exception cref="NotImplementedException"></exception> |
|
|
|
private void TakePotTask() |
|
|
|
{ |
|
|
|
if (!morkF.RoobotIdle && morkF.InitialComplete && morkF.TakePlateQueue.Count > 0 && !morkF.CleanModule && morkF.CleanComplete && !morkF.KitchenOneStatus && !morkF.TakePotLock) |
|
|
|
{ |
|
|
|
TakePotToKitchen(); |
|
|
|
morkF.TakePotLock = true; //订单完成后置false |
|
|
|
MessageLog.GetInstance.Show($"订单【{ morkF.CurrentOrderId}】执行取锅到灶台控制"); |
|
|
|
} |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 取素菜A料 |
|
|
|
/// </summary> |
|
|
|
private void TakeVegBurdenATask() |
|
|
|
{ |
|
|
|
if (!morkF.RoobotIdle && morkF.PotInPlace && morkF.TurnMachineUpComplete && !morkF.TakeVegALock && morkF.AllowTakeMaterial) |
|
|
|
{ |
|
|
|
|
|
|
|
if (morkF.TakeMaterialQueue.TryDequeue(out OrderLocInfo order)) |
|
|
|
{ |
|
|
|
int loc = order.Loc; |
|
|
|
TakeBurden(loc); |
|
|
|
morkF.TakeVegALock = true;//订单完成置false |
|
|
|
morkF.AllowTakeMaterial = false; |
|
|
|
MessageLog.GetInstance.Show($"订单【{ order.SuborderId},翻转机上升完成,执行取素菜A控制"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 取荤菜A料 |
|
|
|
/// </summary> |
|
|
|
private void TakeMeatBurdenATask() |
|
|
|
{ |
|
|
|
if (!morkF.RoobotIdle && morkF.PotInPlace && morkF.TurnMachineUpComplete && morkF.TakeVegALock && !morkF.TakeMeatALock && morkF.AllowTakeMaterial) |
|
|
|
{ |
|
|
|
if (morkF.TakeMaterialQueue.TryDequeue(out OrderLocInfo order)) |
|
|
|
{ |
|
|
|
int loc = order.Loc; |
|
|
|
TakeBurden(loc); |
|
|
|
morkF.TakeMeatALock = true;//订单完成置false |
|
|
|
morkF.AllowTakeMaterial = false; |
|
|
|
MessageLog.GetInstance.Show($"订单【{ order.SuborderId}】,,翻转机上升完成,执行取荤菜A控制"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 取素菜B料 |
|
|
|
/// </summary> |
|
|
|
private void TakeVegBurdenBTask() |
|
|
|
{ |
|
|
|
if (!morkF.RoobotIdle && morkF.PotInPlace && morkF.TurnMachineUpComplete && morkF.TakeMeatALock && !morkF.TakeVegBLock && morkF.AllowTakeMaterial) |
|
|
|
{ |
|
|
|
if (morkF.TakeMaterialQueue.TryDequeue(out OrderLocInfo order)) |
|
|
|
{ |
|
|
|
int loc = order.Loc; |
|
|
|
TakeBurden(loc); |
|
|
|
morkF.TakeVegBLock = true;//订单完成置false |
|
|
|
morkF.AllowTakeMaterial = false; |
|
|
|
MessageLog.GetInstance.Show($"订单【{ order.SuborderId}】,,翻转机上升完成,执行取素菜B控制"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 取调味品C料 |
|
|
|
/// </summary> |
|
|
|
/// <exception cref="NotImplementedException"></exception> |
|
|
|
private void TakeBurdenCTask() |
|
|
|
{ |
|
|
|
if (!morkF.RoobotIdle && morkF.PotInPlace && morkF.TurnMachineUpComplete && morkF.TakeAllBurdenComplete && !morkF.TakeBurdenCLcok && morkF.AllowTakeMaterial) |
|
|
|
{ |
|
|
|
if (morkF.TakeMaterialQueue.TryDequeue(out OrderLocInfo order)) |
|
|
|
{ |
|
|
|
int loc = order.Loc; |
|
|
|
TakeBurden(loc); |
|
|
|
morkF.TakeBurdenCLcok = true;//订单完成置false |
|
|
|
morkF.AllowTakeMaterial = false; |
|
|
|
morkF.TakeAllBurdenComplete = false; |
|
|
|
MessageLog.GetInstance.Show($"订单【{ order.SuborderId}】,,翻转机上升完成,执行取调味品C料控制"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 开始烹饪 |
|
|
|
/// </summary> |
|
|
|
/// <exception cref="NotImplementedException"></exception> |
|
|
|
private void StartCookingTask() |
|
|
|
{ |
|
|
|
if (morkF.InitialComplete && morkF.TakeMaterialQueue.Count > 0 && morkF.PutPotToKitchenComlete && !morkF.CookingLock) |
|
|
|
{ |
|
|
|
MessageLog.GetInstance.Show($"订单【{morkF.CurrentOrderId}】开始烹饪"); |
|
|
|
morkF.CookingLock = true; |
|
|
|
morkF.PotInPlace = morkF.PutPotToKitchenComlete;//锅到位 |
|
|
|
Task.Run(new Action(() => |
|
|
|
{ |
|
|
|
KitchenAdjustGears(3); |
|
|
|
Task.Delay(1000); //大火加热1s |
|
|
|
AddOil();//注油 |
|
|
|
KitchenAdjustGears(2); |
|
|
|
Task.Delay(2000); //中火2s |
|
|
|
TurnDownStatusDetect();//翻转机下降及检测 |
|
|
|
KitchenAdjustGears(1);//灶台1挡 |
|
|
|
TurnMachineGearsControl(1);//翻炒机1挡 |
|
|
|
Task.Delay(2000); |
|
|
|
TurnMachineGearsControl(0);//关闭翻炒机 |
|
|
|
TurnUpStatusDetect();//翻转机上升及检测 |
|
|
|
TurnDownStatusDetect();//翻转机下降及检测 |
|
|
|
KitchenAdjustGears(3);//灶台3挡 |
|
|
|
TurnMachineGearsControl(3);//翻炒机3挡 |
|
|
|
Task.Delay(2000);//葱姜蒜断生 |
|
|
|
KitchenAdjustGears(1);//灶台1挡 |
|
|
|
TurnMachineGearsControl(0);//关闭翻炒机 |
|
|
|
TurnUpStatusDetect();//翻转机上升及检测 |
|
|
|
TurnDownStatusDetect();//翻转机下降及检测 |
|
|
|
KitchenAdjustGears(3);//灶台3挡 |
|
|
|
TurnMachineGearsControl(3);//翻炒机3挡 |
|
|
|
Task.Delay(2000);//B料断生 |
|
|
|
KitchenAdjustGears(1);//灶台1挡 |
|
|
|
TurnMachineGearsControl(0);//关闭翻炒机 |
|
|
|
TurnUpStatusDetect();//翻转机上升及检测 |
|
|
|
TurnDownStatusDetect();//翻转机下降及检测 |
|
|
|
KitchenAdjustGears(2);//灶台3挡 |
|
|
|
TurnMachineGearsControl(3);//翻炒机3挡 |
|
|
|
Task.Delay(2000);//煸炒入味 |
|
|
|
KitchenAdjustGears(0);//灶台0挡 |
|
|
|
TurnMachineGearsControl(0);//关闭翻炒机 |
|
|
|
TurnMachineOrientControl("Top");//翻转机上升 |
|
|
|
while (!morkF.TurnMachineUpComplete) |
|
|
|
{ |
|
|
|
Task.Delay(5); |
|
|
|
} |
|
|
|
EventBus.EventBus.GetInstance().Publish(new WriteModel() { Address = "M8.1", Value = false }); |
|
|
|
morkF.CookingComplete = true; //烹饪完成 |
|
|
|
MessageLog.GetInstance.Show($"订单【{morkF.CurrentOrderId}】烹饪完成"); |
|
|
|
})); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 出餐 |
|
|
|
/// </summary> |
|
|
|
private void OutDishTask() |
|
|
|
{ |
|
|
|
if (!morkF.RoobotIdle && morkF.CookingComplete && morkF.ProvidePlateComplete && !morkF.CleanModule) |
|
|
|
{ |
|
|
|
RobotOutMeal(); |
|
|
|
MessageLog.GetInstance.Show($"订单【{morkF.CurrentOrderId}】正在出餐"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary> |
|
|
|
/// 洗锅放锅 |
|
|
|
/// </summary> |
|
|
|
private void CleanPotTask() |
|
|
|
{ |
|
|
|
if (morkF.PlaceRinseTableComplete && !morkF.CleanModule) |
|
|
|
{ |
|
|
|
CleanModuleControl("Start"); |
|
|
|
Task.Delay(5000); |
|
|
|
CleanModuleControl("Stop"); |
|
|
|
} |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 任务复位重启 |
|
|
|
/// </summary> |
|
|
|
private void ResetProgram() |
|
|
|
{ |
|
|
|
ThreadManage.GetInstance().StartLong(new Action(() => |
|
|
|
{ |
|
|
|
if (RTrig.GetInstance("ResetProgram").Start(morkF.DevicDataInite)) |
|
|
|
{ |
|
|
|
ThreadManage.GetInstance().StopTask("MainTask", new Action(() => |
|
|
|
{ |
|
|
|
ThreadManage.GetInstance().StopTask("ReadPLCData", new Action(() => |
|
|
|
{ |
|
|
|
morkF = null; |
|
|
|
morkF = new GVL_MorkF(); |
|
|
|
ActionManage.GetInstance.Send("ResetProgram"); |
|
|
|
ActionManage.GetInstance.Send("ClearOrders"); |
|
|
|
ReadData(); |
|
|
|
Main(); |
|
|
|
})); |
|
|
|
})); |
|
|
|
} |
|
|
|
|
|
|
|
Thread.Sleep(10); |
|
|
|
}), "ResetProgram"); |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 翻转机下降及状态检测 |
|
|
|
/// </summary> |
|
|
|
public void TurnDownStatusDetect() |
|
|
|
{ |
|
|
|
TurnMachineOrientControl("Down"); |
|
|
|
while (!morkF.TurnMachineDownComplete)//等待翻转机下降完成 |
|
|
|
{ |
|
|
|
Task.Delay(5); |
|
|
|
} |
|
|
|
EventBus.EventBus.GetInstance().Publish(new WriteModel() { Address = "M8.3", Value = false });//复位 |
|
|
|
MessageLog.GetInstance.Show($"翻转机下降执行完成"); |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 翻转机上升及状态检测 |
|
|
|
/// </summary> |
|
|
|
public void TurnUpStatusDetect() |
|
|
|
{ |
|
|
|
TurnMachineOrientControl("Top");//翻转机上升 |
|
|
|
morkF.AllowTakeMaterial = true; |
|
|
|
while (!morkF.TurnMachineUpComplete || !morkF.TakeMaterialComplete)//等待翻转机上升完成以及取料完成 |
|
|
|
{ |
|
|
|
Task.Delay(5); |
|
|
|
} |
|
|
|
EventBus.EventBus.GetInstance().Publish(new WriteModel() { Address = "M8.1", Value = false }); |
|
|
|
MessageLog.GetInstance.Show("翻转机上升执行完成"); |
|
|
|
} |
|
|
|
private void GetStatus(string key, Action<bool[]> action) |
|
|
|
{ |
|
|
|
if (peripheralStatus.ContainsKey(key)) |
|
|
|
{ |
|
|
|
action((bool[])peripheralStatus[key]);//获取PLC指定地址的状态值 |
|
|
|
} |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 写数据 |
|
|
|
/// </summary> |
|
|
|
/// <param name="address"></param> |
|
|
|
/// <param name="value"></param> |
|
|
|
private void WriteData(string address, object value) |
|
|
|
{ |
|
|
|
EventBus.EventBus.GetInstance().Publish(new WriteModel() { Id = DeviceId, Address = address, Value = value }); |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 灶台档位调节 |
|
|
|
/// </summary> |
|
|
|
public void KitchenAdjustGears(int number) |
|
|
|
{ |
|
|
|
switch (number) |
|
|
|
{ |
|
|
|
case 0: |
|
|
|
WriteData("352", new bool[] { false, false, false, false, false, false, false, false });//0000 0000 |
|
|
|
break; |
|
|
|
case 1: |
|
|
|
WriteData("352", new bool[] { true, false, false, false, false, false, false, false });//0000 0001 |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
WriteData("352", new bool[] { false, true, false, false, false, false, false, false });//0000 0010 |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
WriteData("352", new bool[] { true, true, false, false, false, false, false, false });//0000 0011 |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
WriteData("352", new bool[] { false, false, true, false, false, false, false, false });//0000 0100 |
|
|
|
break; |
|
|
|
case 5: |
|
|
|
WriteData("352", new bool[] { true, false, true, false, false, false, false, false });//0000 0101 |
|
|
|
break; |
|
|
|
case 6: |
|
|
|
WriteData("352", new bool[] { false, true, true, false, false, false, false, false });//0000 0110 |
|
|
|
break; |
|
|
|
case 7: |
|
|
|
WriteData("352", new bool[] { true, true, true, false, false, false, false, false });//0000 0111 |
|
|
|
break; |
|
|
|
case 8: |
|
|
|
WriteData("355", new bool[] { false, false, false, true, false, false, false, false });//0000 1000 |
|
|
|
break; |
|
|
|
case 9: |
|
|
|
WriteData("352", new bool[] { true, false, false, true, false, false, false, false });//0000 1001 |
|
|
|
break; |
|
|
|
} |
|
|
|
MessageLog.GetInstance.Show($"订单【{morkF.CurrentOrderId}】,加热档位调至{number}挡"); |
|
|
|
} |
|
|
|
public void TurnMaterialStore(int loc) |
|
|
|
{ |
|
|
|
switch (loc) |
|
|
|
{ |
|
|
|
case 1: |
|
|
|
WriteData("M13.0", true); |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
WriteData("M13.1", true); |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
WriteData("M13.2", true); |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
WriteData("M13.3", true); |
|
|
|
break; |
|
|
|
case 5: |
|
|
|
WriteData("M13.4", true); |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 供盘启动 |
|
|
|
/// </summary> |
|
|
|
public void StartTakePlate() |
|
|
|
{ |
|
|
|
WriteData("M1.1", true); |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 取锅到灶台 |
|
|
|
/// </summary> |
|
|
|
public void TakePotToKitchen() |
|
|
|
{ |
|
|
|
WriteData("M14.0", true); |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 机器人出餐并将锅放置清洗台位置 |
|
|
|
/// </summary> |
|
|
|
public void RobotOutMeal() |
|
|
|
{ |
|
|
|
WriteData("M14.2", true); |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 注油 |
|
|
|
/// </summary> |
|
|
|
public void AddOil() |
|
|
|
{ |
|
|
|
WriteData("M2.7", true); |
|
|
|
MessageLog.GetInstance.Show("开始注油"); |
|
|
|
while (!morkF.FallOilComplete) |
|
|
|
{ |
|
|
|
Task.Delay(5); |
|
|
|
} |
|
|
|
MessageLog.GetInstance.Show("注油完成"); |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 翻转机方向控制 |
|
|
|
/// </summary> |
|
|
|
/// <param name="orientation"></param> |
|
|
|
public void TurnMachineOrientControl(string orientation) |
|
|
|
{ |
|
|
|
switch (orientation) |
|
|
|
{ |
|
|
|
case "Top": WriteData("M8.0", true); break; |
|
|
|
// case "Middle": WriteData("", 1); break; |
|
|
|
case "Down": WriteData("M8.2", true); break; |
|
|
|
} |
|
|
|
MessageLog.GetInstance.Show($"翻转机执行{orientation}操作"); |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 翻转机档位控制 |
|
|
|
/// </summary> |
|
|
|
public void TurnMachineGearsControl(int gear) |
|
|
|
{ |
|
|
|
switch (gear) |
|
|
|
{ |
|
|
|
case 0: WriteData("M7.0", true); break;//关闭翻炒机 |
|
|
|
case 1: WriteData("M7.1", true); break;//翻炒机1挡 |
|
|
|
case 2: WriteData("M7.2", true); break;//翻炒机2挡 |
|
|
|
case 3: WriteData("M7.3", true); break;//翻炒机3挡 |
|
|
|
} |
|
|
|
MessageLog.GetInstance.Show($"翻转机档位调至{gear}挡"); |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 取A,B,C料 |
|
|
|
/// </summary> |
|
|
|
public void TakeBurden(int loc) |
|
|
|
{ |
|
|
|
WriteData("M14.1", true);//机器人取料 |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 清洗模组1启停控制 |
|
|
|
/// </summary> |
|
|
|
public void CleanModuleControl(string status) |
|
|
|
{ |
|
|
|
if (status == "Start") |
|
|
|
{ |
|
|
|
WriteData("M1.4", true); |
|
|
|
} |
|
|
|
if (status == "Stop") |
|
|
|
{ |
|
|
|
WriteData("M1.4", false); |
|
|
|
} |
|
|
|
MessageLog.GetInstance.Show($"清洗模组执行【{status}】操作"); |
|
|
|
} |
|
|
|
|
|
|
|
public override void Stop() |
|
|
|
{ |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |