|
|
@@ -24,27 +24,47 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
public HKDeviceStatus HKDevice = new HKDeviceStatus(); |
|
|
|
DL_Finish_DB FinishData = new DL_Finish_DB(); |
|
|
|
/// <summary> |
|
|
|
/// 配方数据 |
|
|
|
/// 西门子配方数据 |
|
|
|
/// </summary> |
|
|
|
public ObservableCollection<RecipeData> Recipes = new ObservableCollection<RecipeData>(); |
|
|
|
public ObservableCollection<RecipeData> SiemensRecipes = new ObservableCollection<RecipeData>(); |
|
|
|
/// <summary> |
|
|
|
/// 配方数据 |
|
|
|
/// 本地配方数据 |
|
|
|
/// </summary> |
|
|
|
public ObservableCollection<RecipeData> IssuedComplete = new ObservableCollection<RecipeData>(); |
|
|
|
public ObservableCollection<RecipeData> LocalRecipes = new ObservableCollection<RecipeData>(); |
|
|
|
|
|
|
|
/// <summary> |
|
|
|
/// 配方等待执行 |
|
|
|
/// </summary> |
|
|
|
public ObservableCollection<RecipeData> RecipeWaitExecute = new ObservableCollection<RecipeData>(); |
|
|
|
/// <summary> |
|
|
|
/// 配方正在执行 |
|
|
|
/// </summary> |
|
|
|
public ObservableCollection<RecipeData> RecipeExecuting = new ObservableCollection<RecipeData>(); |
|
|
|
/// <summary> |
|
|
|
/// 配方执行完成 |
|
|
|
/// </summary> |
|
|
|
public ObservableCollection<RecipeData> RecipeExecuteComple = new ObservableCollection<RecipeData>(); |
|
|
|
/// <summary> |
|
|
|
/// 原料的名称和料仓的位置对应 |
|
|
|
/// </summary> |
|
|
|
public Dictionary<string, short> RawMaterialsNamePos = new Dictionary<string, short>(); |
|
|
|
/// <summary> |
|
|
|
/// 配方队列 |
|
|
|
/// 西门子配方队列 |
|
|
|
/// </summary> |
|
|
|
public ConcurrentQueue<string> RecipeQueue1 = new ConcurrentQueue<string>(); |
|
|
|
public ConcurrentQueue<string> RecipeQueue2 = new ConcurrentQueue<string>(); |
|
|
|
public ConcurrentQueue<string> RecipeQueue3 = new ConcurrentQueue<string>(); |
|
|
|
public ConcurrentQueue<string> RecipeQueue4 = new ConcurrentQueue<string>(); |
|
|
|
public ConcurrentQueue<string> SiemensRecipeQueue1 = new ConcurrentQueue<string>(); |
|
|
|
public ConcurrentQueue<string> SiemensRecipeQueue2 = new ConcurrentQueue<string>(); |
|
|
|
public ConcurrentQueue<string> SiemensRecipeQueue3 = new ConcurrentQueue<string>(); |
|
|
|
public ConcurrentQueue<string> SiemensRecipeQueue4 = new ConcurrentQueue<string>(); |
|
|
|
/// <summary> |
|
|
|
/// 本地配方队列 |
|
|
|
/// </summary> |
|
|
|
public ConcurrentQueue<string> LocalRecipeQueue1 = new ConcurrentQueue<string>(); |
|
|
|
public ConcurrentQueue<string> LocalRecipeQueue2 = new ConcurrentQueue<string>(); |
|
|
|
public ConcurrentQueue<string> LocalRecipeQueue3 = new ConcurrentQueue<string>(); |
|
|
|
public ConcurrentQueue<string> LocalRecipeQueue4 = new ConcurrentQueue<string>(); |
|
|
|
public void Init() |
|
|
|
{ |
|
|
|
testData(); |
|
|
|
testRawMaterialNameData();//自定义料仓名称 |
|
|
|
ActionManage.GetInstance.CancelRegister("SiemensSendRecipe"); |
|
|
|
ActionManage.GetInstance.Register(new Action<object>((res) => |
|
|
|
{ |
|
|
@@ -68,7 +88,7 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
//报警,配方的原料名称下发和设备不一致 |
|
|
|
MessageNotify.GetInstance.ShowAlarmLog($"本地原料名称和西门子下发的原料名称无法对应,原料位置:{i}"); |
|
|
|
} |
|
|
|
} |
|
|
|
App.Current.Dispatcher.Invoke(() => |
|
|
@@ -89,13 +109,13 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
try |
|
|
|
{ |
|
|
|
//HKDevice.HK_PLC_S7.Connect(S7.Net.CpuType.S71500, HK_PLC_IP); |
|
|
|
SiemensDevice.Siemens_PLC_S7.Connect(S7.Net.CpuType.S71500, Siemens_PLC_IP); |
|
|
|
//SiemensDevice.Siemens_PLC_S7.Connect(S7.Net.CpuType.S71500, Siemens_PLC_IP); |
|
|
|
if (HKDevice.IsConnected) |
|
|
|
{ |
|
|
|
HKDevice.Init(); |
|
|
|
MessageNotify.GetInstance.ShowRunLog("海科plc连接成功"); |
|
|
|
} |
|
|
|
if (SiemensDevice.IsConnected || true) |
|
|
|
if (SiemensDevice.IsConnected) |
|
|
|
{ |
|
|
|
SiemensDevice.Init(); |
|
|
|
MessageNotify.GetInstance.ShowRunLog("西门子plc连接成功"); |
|
|
@@ -105,39 +125,480 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
{ |
|
|
|
|
|
|
|
} |
|
|
|
RecipeQueue1.Clear(); |
|
|
|
RecipeQueue2.Clear(); |
|
|
|
RecipeQueue3.Clear(); |
|
|
|
RecipeQueue4.Clear(); |
|
|
|
LocalRecipeQueue1.Clear(); |
|
|
|
LocalRecipeQueue2.Clear(); |
|
|
|
LocalRecipeQueue3.Clear(); |
|
|
|
LocalRecipeQueue4.Clear(); |
|
|
|
SiemensRecipeQueue1.Clear(); |
|
|
|
SiemensRecipeQueue2.Clear(); |
|
|
|
SiemensRecipeQueue3.Clear(); |
|
|
|
SiemensRecipeQueue4.Clear(); |
|
|
|
ThreadManage.GetInstance().StartLong(new Action(() => |
|
|
|
{ |
|
|
|
SystemStatus(); |
|
|
|
ReceviceData(); |
|
|
|
RecipeInfoToHKPLC(); |
|
|
|
Thread.Sleep(10); |
|
|
|
}), "流程处理", true); |
|
|
|
}), "西门子配方执行流程", true); |
|
|
|
ThreadManage.GetInstance().StartLong(new Action(() => |
|
|
|
{ |
|
|
|
if (GVL_BigStation.IsUseLocalRecipe) |
|
|
|
{ |
|
|
|
LocalRecipeRecevice(); |
|
|
|
LocalRecipeDosing(); |
|
|
|
} |
|
|
|
Thread.Sleep(10); |
|
|
|
}), "本地配方执行流程", true); |
|
|
|
} |
|
|
|
private void SystemStatus() |
|
|
|
{ |
|
|
|
GVL_BigStation.HeartBeatFromPlc = HKDevice.PlcRead.HeartBeat;//读取plc心跳 |
|
|
|
private void LocalRecipeRecevice() |
|
|
|
{ |
|
|
|
if (LocalRecipes.Count > 0) |
|
|
|
{ |
|
|
|
foreach (var data in LocalRecipes) |
|
|
|
{ |
|
|
|
if (LocalRecipeQueue1.Count == 0 && !LocalRecipeQueue2.Contains(data.RecipeCode) && !LocalRecipeQueue3.Contains(data.RecipeCode) && !LocalRecipeQueue4.Contains(data.RecipeCode)) |
|
|
|
{ |
|
|
|
if (!(LocalRecipeQueue1.Contains(data.RecipeCode))) |
|
|
|
{ |
|
|
|
LocalRecipeQueue1.Enqueue(data.RecipeCode); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (LocalRecipeQueue2.Count == 0 && !LocalRecipeQueue1.Contains(data.RecipeCode) && !LocalRecipeQueue3.Contains(data.RecipeCode) && !LocalRecipeQueue4.Contains(data.RecipeCode)) |
|
|
|
{ |
|
|
|
if (!(LocalRecipeQueue2.Contains(data.RecipeCode))) |
|
|
|
{ |
|
|
|
LocalRecipeQueue2.Enqueue(data.RecipeCode); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (LocalRecipeQueue3.Count == 0 && !LocalRecipeQueue1.Contains(data.RecipeCode) && !LocalRecipeQueue2.Contains(data.RecipeCode) && !LocalRecipeQueue4.Contains(data.RecipeCode)) |
|
|
|
{ |
|
|
|
if (!(LocalRecipeQueue3.Contains(data.RecipeCode))) |
|
|
|
{ |
|
|
|
LocalRecipeQueue3.Enqueue(data.RecipeCode); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (LocalRecipeQueue4.Count == 0 && !LocalRecipeQueue1.Contains(data.RecipeCode) && !LocalRecipeQueue2.Contains(data.RecipeCode) && !LocalRecipeQueue3.Contains(data.RecipeCode)) |
|
|
|
{ |
|
|
|
if (!(LocalRecipeQueue4.Contains(data.RecipeCode))) |
|
|
|
{ |
|
|
|
LocalRecipeQueue4.Enqueue(data.RecipeCode); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
LocalRecipeQueue1.Clear(); |
|
|
|
LocalRecipeQueue2.Clear(); |
|
|
|
LocalRecipeQueue3.Clear(); |
|
|
|
LocalRecipeQueue4.Clear(); |
|
|
|
GVL_BigStation.Recipe1DosingStatus = 0; |
|
|
|
GVL_BigStation.Recipe2DosingStatus = 0; |
|
|
|
GVL_BigStation.Recipe3DosingStatus = 0; |
|
|
|
GVL_BigStation.Recipe4DosingStatus = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
private void ReceviceData() |
|
|
|
private void LocalRecipeDosing() |
|
|
|
{ |
|
|
|
if (!GVL_BigStation.IsUseLocalRecipe && Recipes.Count == 0)//一个配方执行完成后,再获取配方数据 |
|
|
|
if (LocalRecipeQueue1.Count > 0) |
|
|
|
{ |
|
|
|
int index = Array.FindIndex(LocalRecipes.ToArray(), p => p.RecipeCode == LocalRecipeQueue1.ElementAt(0)); |
|
|
|
if (index >= 0 && index < LocalRecipes.Count) |
|
|
|
{ |
|
|
|
string code = LocalRecipes.ElementAt(index).RecipeCode; |
|
|
|
int trayCode = LocalRecipes.ElementAt(index).TrayCode; |
|
|
|
if (HKDevice.PlcRead.IsAllowIssueRecipe1 && GVL_BigStation.Recipe1DosingStatus == 0)//配方1是否允许下发配发 |
|
|
|
{ |
|
|
|
HKDevice.StockBinPar(LocalRecipes.ElementAt(index)); |
|
|
|
HKDevice.PlcWrite.Recipe1IssuedFinish = true; |
|
|
|
GVL_BigStation.Recipe1DosingStatus = 1; |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方编号:{code},托盘编号:{trayCode},下发完成"); |
|
|
|
} |
|
|
|
if (HKDevice.PlcRead.ReceiveFinishRecipe1 && GVL_BigStation.Recipe1DosingStatus == 1) |
|
|
|
{ |
|
|
|
GVL_BigStation.Recipe1DosingStatus = 2; |
|
|
|
HKDevice.PlcWrite.Recipe1IssuedFinish = false; |
|
|
|
StockBinParReset(); |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方编号:{code},托盘编号:{trayCode},PLC接收配方完成"); |
|
|
|
} |
|
|
|
if (GVL_BigStation.Recipe1DosingStatus == 2 && HKDevice.PlcRead.Recipe1DosingFinish) |
|
|
|
{ |
|
|
|
GVL_BigStation.Recipe1DosingStatus = 3; |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}配料完成"); |
|
|
|
if (HKDevice.PlcRead.Recipe1TrayCode == 1) |
|
|
|
{ |
|
|
|
foreach (var item in LocalRecipes.ElementAt(index).RawMaterial) |
|
|
|
{ |
|
|
|
if (item.RawMaterialLocation == 1) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin1ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 2) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin2ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 3) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin3ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 4) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin4ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 5) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin5ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 6) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin6ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 7) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin7ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 8) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin8ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 9) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin9ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 10) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin10ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 11) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin11ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 12) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin12ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 13) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin13ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 14) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin14ActualWeight; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
LocalRecipeQueue1.TryDequeue(out code); |
|
|
|
RecipeExecuteComple.Add(LocalRecipes.ElementAt(index));//将配方添加到完成列表 |
|
|
|
//App.Current.Dispatcher.Invoke(() => { |
|
|
|
// Json<LocalRecipe>.Data.Recipes.RemoveAt(index);//制作完成,移除当前配方 |
|
|
|
//}); |
|
|
|
LocalRecipes.RemoveAt(index); |
|
|
|
GVL_BigStation.Recipe1DosingStatus = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (LocalRecipeQueue2.Count > 0) |
|
|
|
{ |
|
|
|
int index = Array.FindIndex(LocalRecipes.ToArray(), p => p.RecipeCode == LocalRecipeQueue2.ElementAt(0)); |
|
|
|
if (index >= 0 && index < LocalRecipes.Count) |
|
|
|
{ |
|
|
|
string code = LocalRecipes.ElementAt(index).RecipeCode; |
|
|
|
int trayCode = LocalRecipes.ElementAt(index).TrayCode; |
|
|
|
if (HKDevice.PlcRead.IsAllowIssueRecipe2 && GVL_BigStation.Recipe2DosingStatus == 0)//配方2是否允许下发配发 |
|
|
|
{ |
|
|
|
HKDevice.StockBinPar(LocalRecipes.ElementAt(index)); |
|
|
|
HKDevice.PlcWrite.Recipe2IssuedFinish = true; |
|
|
|
GVL_BigStation.Recipe2DosingStatus = 1; |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}下发完成"); |
|
|
|
} |
|
|
|
if (HKDevice.PlcRead.ReceiveFinishRecipe2 && GVL_BigStation.Recipe2DosingStatus == 1) |
|
|
|
{ |
|
|
|
GVL_BigStation.Recipe2DosingStatus = 2; |
|
|
|
HKDevice.PlcWrite.Recipe2IssuedFinish = false; |
|
|
|
StockBinParReset(); |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}配方配料"); |
|
|
|
} |
|
|
|
if (GVL_BigStation.Recipe2DosingStatus == 2 && HKDevice.PlcRead.Recipe2DosingFinish) |
|
|
|
{ |
|
|
|
GVL_BigStation.Recipe2DosingStatus = 3; |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}配料完成"); |
|
|
|
if (HKDevice.PlcRead.Recipe2TrayCode > 0) |
|
|
|
{ |
|
|
|
foreach (var item in LocalRecipes.ElementAt(index).RawMaterial) |
|
|
|
{ |
|
|
|
if (item.RawMaterialLocation == 1) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin1ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 2) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin2ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 3) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin3ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 4) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin4ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 5) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin5ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 6) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin6ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 7) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin7ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 8) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin8ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 9) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin9ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 10) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin10ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 11) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin11ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 12) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin12ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 13) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin13ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 14) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin14ActualWeight; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
LocalRecipeQueue2.TryDequeue(out code); |
|
|
|
RecipeExecuteComple.Add(LocalRecipes.ElementAt(index));//将该配方添加到下 |
|
|
|
//App.Current.Dispatcher.Invoke(() => { |
|
|
|
// Json<LocalRecipe>.Data.Recipes.RemoveAt(index);//制作完成,移除当前配方 |
|
|
|
//}); |
|
|
|
LocalRecipes.RemoveAt(index); |
|
|
|
GVL_BigStation.Recipe2DosingStatus = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (LocalRecipeQueue3.Count > 0) |
|
|
|
{ |
|
|
|
Recipes = Json<RemoteRecipe>.Data.Recipes; |
|
|
|
int index = Array.FindIndex(LocalRecipes.ToArray(), p => p.RecipeCode == LocalRecipeQueue3.ElementAt(0)); |
|
|
|
if (index >= 0 && index < LocalRecipes.Count) |
|
|
|
{ |
|
|
|
string code = LocalRecipes.ElementAt(index).RecipeCode; |
|
|
|
int trayCode = LocalRecipes.ElementAt(index).TrayCode; |
|
|
|
if (HKDevice.PlcRead.IsAllowIssueRecipe3 && GVL_BigStation.Recipe3DosingStatus == 0)//配方3是否允许下发配发 |
|
|
|
{ |
|
|
|
HKDevice.StockBinPar(LocalRecipes.ElementAt(index)); |
|
|
|
HKDevice.PlcWrite.Recipe3IssuedFinish = true; |
|
|
|
GVL_BigStation.Recipe3DosingStatus = 1; |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}下发完成"); |
|
|
|
} |
|
|
|
if (HKDevice.PlcRead.ReceiveFinishRecipe3 && GVL_BigStation.Recipe3DosingStatus == 1) |
|
|
|
{ |
|
|
|
GVL_BigStation.Recipe3DosingStatus = 2; |
|
|
|
StockBinParReset(); |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}配方配料"); |
|
|
|
} |
|
|
|
if (HKDevice.PlcRead.Recipe3DosingFinish && GVL_BigStation.Recipe3DosingStatus == 2) |
|
|
|
{ |
|
|
|
GVL_BigStation.Recipe3DosingStatus = 3; |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}配料完成"); |
|
|
|
if (HKDevice.PlcRead.Recipe3TrayCode > 0) |
|
|
|
{ |
|
|
|
foreach (var item in LocalRecipes.ElementAt(index).RawMaterial) |
|
|
|
{ |
|
|
|
if (item.RawMaterialLocation == 1) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin1ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 2) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin2ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 3) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin3ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 4) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin4ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 5) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin5ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 6) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin6ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 7) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin7ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 8) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin8ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 9) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin9ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 10) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin10ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 11) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin11ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 12) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin12ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 13) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin13ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 14) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin14ActualWeight; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
HKDevice.HK_PLC_S7.Write<bool>("DB98.DBX1.1", false); |
|
|
|
LocalRecipeQueue3.TryDequeue(out code); |
|
|
|
RecipeExecuteComple.Add(LocalRecipes.ElementAt(index));//将该配方添加到下 |
|
|
|
//App.Current.Dispatcher.Invoke(() => { |
|
|
|
// Json<LocalRecipe>.Data.Recipes.RemoveAt(index);//制作完成,移除当前配方 |
|
|
|
//}); |
|
|
|
LocalRecipes.RemoveAt(index); |
|
|
|
GVL_BigStation.Recipe3DosingStatus = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else if (GVL_BigStation.IsUseLocalRecipe && Recipes.Count == 0) |
|
|
|
if (LocalRecipeQueue4.Count > 0) |
|
|
|
{ |
|
|
|
Recipes = Json<LocalRecipe>.Data.Recipes; |
|
|
|
int index = Array.FindIndex(LocalRecipes.ToArray(), p => p.RecipeCode == LocalRecipeQueue4.ElementAt(0)); |
|
|
|
if (index >= 0 && index < LocalRecipes.Count) |
|
|
|
{ |
|
|
|
string code = LocalRecipes.ElementAt(index).RecipeCode; |
|
|
|
int trayCode = LocalRecipes.ElementAt(index).TrayCode; |
|
|
|
if (HKDevice.PlcRead.IsAllowIssueRecipe4 && GVL_BigStation.Recipe4DosingStatus == 0)//配方4是否允许下发配发 |
|
|
|
{ |
|
|
|
HKDevice.StockBinPar(LocalRecipes.ElementAt(index)); |
|
|
|
HKDevice.PlcWrite.Recipe4IssuedFinish = true; |
|
|
|
GVL_BigStation.Recipe4DosingStatus = 1; |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}下发完成"); |
|
|
|
} |
|
|
|
if (HKDevice.PlcRead.ReceiveFinishRecipe4 && GVL_BigStation.Recipe4DosingStatus == 1) |
|
|
|
{ |
|
|
|
GVL_BigStation.Recipe4DosingStatus = 2; |
|
|
|
HKDevice.PlcWrite.Recipe4IssuedFinish = false; |
|
|
|
StockBinParReset(); |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}配方配料"); |
|
|
|
} |
|
|
|
if (GVL_BigStation.Recipe4DosingStatus == 2 && HKDevice.PlcRead.Recipe4DosingFinish) |
|
|
|
{ |
|
|
|
GVL_BigStation.Recipe4DosingStatus = 3; |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}配料完成"); |
|
|
|
if (HKDevice.PlcRead.Recipe4TrayCode > 0) |
|
|
|
{ |
|
|
|
foreach (var item in LocalRecipes.ElementAt(index).RawMaterial) |
|
|
|
{ |
|
|
|
if (item.RawMaterialLocation == 1) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin1ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 2) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin2ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 3) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin3ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 4) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin4ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 5) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin5ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 6) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin6ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 7) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin7ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 8) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin8ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 9) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin9ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 10) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin10ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 11) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin11ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 12) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin12ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 13) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin13ActualWeight; |
|
|
|
} |
|
|
|
else if (item.RawMaterialLocation == 14) |
|
|
|
{ |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin14ActualWeight; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
HKDevice.HK_PLC_S7.Write<bool>("DB98.DBX1.3", false); |
|
|
|
LocalRecipeQueue4.TryDequeue(out code); |
|
|
|
RecipeExecuteComple.Add(LocalRecipes.ElementAt(index));//将该配方添加到下 |
|
|
|
//App.Current.Dispatcher.Invoke(() => { |
|
|
|
// Json<LocalRecipe>.Data.Recipes.RemoveAt(index);//制作完成,移除当前配方 |
|
|
|
//}); |
|
|
|
LocalRecipes.RemoveAt(index); |
|
|
|
GVL_BigStation.Recipe4DosingStatus = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (Recipes.Count > 0) |
|
|
|
} |
|
|
|
private void ReceviceData() |
|
|
|
{ |
|
|
|
SiemensRecipes = Json<RemoteRecipe>.Data.Recipes; |
|
|
|
if (SiemensRecipes.Count > 0) |
|
|
|
{ |
|
|
|
foreach (var data in Recipes) |
|
|
|
foreach (var data in SiemensRecipes) |
|
|
|
{ |
|
|
|
if (RecipeQueue1.Count == 0 && !RecipeQueue2.Contains(data.RecipeCode) && !RecipeQueue3.Contains(data.RecipeCode) && !RecipeQueue4.Contains(data.RecipeCode)) |
|
|
|
if (SiemensRecipeQueue1.Count == 0 && !SiemensRecipeQueue2.Contains(data.RecipeCode) && !SiemensRecipeQueue3.Contains(data.RecipeCode) && !SiemensRecipeQueue4.Contains(data.RecipeCode)) |
|
|
|
{ |
|
|
|
if (!(RecipeQueue1.Contains(data.RecipeCode))) |
|
|
|
if (!(SiemensRecipeQueue1.Contains(data.RecipeCode))) |
|
|
|
{ |
|
|
|
if (SiemensDevice.DL_Status is DL_Status_DB status) |
|
|
|
{ |
|
|
@@ -161,16 +622,15 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
if (SiemensDevice.DL_Status.Dosing_Start_ACK == false) |
|
|
|
{ |
|
|
|
GVL_BigStation.SiemensSendRecipeStatus = 6; |
|
|
|
RecipeQueue1.Enqueue(data.RecipeCode); |
|
|
|
SiemensRecipeQueue1.Enqueue(data.RecipeCode); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
else if (RecipeQueue2.Count == 0 && !RecipeQueue1.Contains(data.RecipeCode) && !RecipeQueue3.Contains(data.RecipeCode) && !RecipeQueue4.Contains(data.RecipeCode)) |
|
|
|
else if (SiemensRecipeQueue2.Count == 0 && !SiemensRecipeQueue1.Contains(data.RecipeCode) && !SiemensRecipeQueue3.Contains(data.RecipeCode) && !SiemensRecipeQueue4.Contains(data.RecipeCode)) |
|
|
|
{ |
|
|
|
if (!(RecipeQueue2.Contains(data.RecipeCode))) |
|
|
|
if (!(SiemensRecipeQueue2.Contains(data.RecipeCode))) |
|
|
|
{ |
|
|
|
if (SiemensDevice.DL_Status is DL_Status_DB status) |
|
|
|
{ |
|
|
@@ -194,15 +654,15 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
if (SiemensDevice.DL_Status.Dosing_Start_ACK == false) |
|
|
|
{ |
|
|
|
GVL_BigStation.SiemensSendRecipeStatus = 6; |
|
|
|
RecipeQueue2.Enqueue(data.RecipeCode); |
|
|
|
SiemensRecipeQueue2.Enqueue(data.RecipeCode); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else if (RecipeQueue3.Count == 0 && !RecipeQueue1.Contains(data.RecipeCode) && !RecipeQueue2.Contains(data.RecipeCode) && !RecipeQueue4.Contains(data.RecipeCode)) |
|
|
|
else if (SiemensRecipeQueue3.Count == 0 && !SiemensRecipeQueue1.Contains(data.RecipeCode) && !SiemensRecipeQueue2.Contains(data.RecipeCode) && !SiemensRecipeQueue4.Contains(data.RecipeCode)) |
|
|
|
{ |
|
|
|
if (!(RecipeQueue3.Contains(data.RecipeCode))) |
|
|
|
if (!(SiemensRecipeQueue3.Contains(data.RecipeCode))) |
|
|
|
{ |
|
|
|
if (SiemensDevice.DL_Status is DL_Status_DB status) |
|
|
|
{ |
|
|
@@ -226,15 +686,15 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
if (SiemensDevice.DL_Status.Dosing_Start_ACK == false) |
|
|
|
{ |
|
|
|
GVL_BigStation.SiemensSendRecipeStatus = 6; |
|
|
|
RecipeQueue3.Enqueue(data.RecipeCode); |
|
|
|
SiemensRecipeQueue3.Enqueue(data.RecipeCode); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else if (RecipeQueue4.Count == 0 && !RecipeQueue1.Contains(data.RecipeCode) && !RecipeQueue2.Contains(data.RecipeCode) && !RecipeQueue3.Contains(data.RecipeCode)) |
|
|
|
else if (SiemensRecipeQueue4.Count == 0 && !SiemensRecipeQueue1.Contains(data.RecipeCode) && !SiemensRecipeQueue2.Contains(data.RecipeCode) && !SiemensRecipeQueue3.Contains(data.RecipeCode)) |
|
|
|
{ |
|
|
|
if (!(RecipeQueue4.Contains(data.RecipeCode))) |
|
|
|
if (!(SiemensRecipeQueue4.Contains(data.RecipeCode))) |
|
|
|
{ |
|
|
|
if (SiemensDevice.DL_Status is DL_Status_DB status) |
|
|
|
{ |
|
|
@@ -258,7 +718,7 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
if (SiemensDevice.DL_Status.Dosing_Start_ACK == false) |
|
|
|
{ |
|
|
|
GVL_BigStation.SiemensSendRecipeStatus = 6; |
|
|
|
RecipeQueue4.Enqueue(data.RecipeCode); |
|
|
|
SiemensRecipeQueue4.Enqueue(data.RecipeCode); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@@ -268,10 +728,10 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
RecipeQueue1.Clear(); |
|
|
|
RecipeQueue2.Clear(); |
|
|
|
RecipeQueue3.Clear(); |
|
|
|
RecipeQueue4.Clear(); |
|
|
|
SiemensRecipeQueue1.Clear(); |
|
|
|
SiemensRecipeQueue2.Clear(); |
|
|
|
SiemensRecipeQueue3.Clear(); |
|
|
|
SiemensRecipeQueue4.Clear(); |
|
|
|
GVL_BigStation.Recipe1DosingStatus = 0; |
|
|
|
GVL_BigStation.Recipe2DosingStatus = 0; |
|
|
|
GVL_BigStation.Recipe3DosingStatus = 0; |
|
|
@@ -280,16 +740,16 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
} |
|
|
|
private void RecipeInfoToHKPLC() |
|
|
|
{ |
|
|
|
if (RecipeQueue1.Count > 0) |
|
|
|
if (SiemensRecipeQueue1.Count > 0) |
|
|
|
{ |
|
|
|
int index = Array.FindIndex(Recipes.ToArray(), p => p.RecipeCode == RecipeQueue1.ElementAt(0)); |
|
|
|
if (index >= 0 && index < Recipes.Count) |
|
|
|
int index = Array.FindIndex(SiemensRecipes.ToArray(), p => p.RecipeCode == SiemensRecipeQueue1.ElementAt(0)); |
|
|
|
if (index >= 0 && index < SiemensRecipes.Count) |
|
|
|
{ |
|
|
|
string code = Recipes.ElementAt(index).RecipeCode; |
|
|
|
int trayCode = Recipes.ElementAt(index).TrayCode; |
|
|
|
string code = SiemensRecipes.ElementAt(index).RecipeCode; |
|
|
|
int trayCode = SiemensRecipes.ElementAt(index).TrayCode; |
|
|
|
if (HKDevice.PlcRead.IsAllowIssueRecipe1 && GVL_BigStation.Recipe1DosingStatus == 0)//配方1是否允许下发配发 |
|
|
|
{ |
|
|
|
HKDevice.StockBinPar(Recipes.ElementAt(index)); |
|
|
|
HKDevice.StockBinPar(SiemensRecipes.ElementAt(index)); |
|
|
|
HKDevice.PlcWrite.Recipe1IssuedFinish = true; |
|
|
|
GVL_BigStation.Recipe1DosingStatus = 1; |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方编号:{code},托盘编号:{trayCode},下发完成"); |
|
|
@@ -307,7 +767,7 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}配料完成"); |
|
|
|
if (HKDevice.PlcRead.Recipe1TrayCode == 1) |
|
|
|
{ |
|
|
|
foreach (var item in Recipes.ElementAt(index).RawMaterial) |
|
|
|
foreach (var item in SiemensRecipes.ElementAt(index).RawMaterial) |
|
|
|
{ |
|
|
|
if (item.RawMaterialLocation == 1) |
|
|
|
{ |
|
|
@@ -367,27 +827,27 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
FinishData.Order_No = Recipes.ElementAt(index).RecipeCode; |
|
|
|
FinishData.Product_Code = Recipes.ElementAt(index).RecipeName; |
|
|
|
FinishData.job_No =(short) Recipes.ElementAt(index).TrayCode; |
|
|
|
for (int i = 0; i < FinishData.Material.Length; i++) |
|
|
|
{ |
|
|
|
FinishData.Material[i] = new UDT1(); |
|
|
|
} |
|
|
|
for (int i = 0; i < Recipes.ElementAt(index).RawMaterial.Count; i++) |
|
|
|
{ |
|
|
|
FinishData.Material[i].Material_Name = Recipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialName; |
|
|
|
FinishData.Material[i].Material_BarrelNum = (short)Recipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialBarrelNum; |
|
|
|
FinishData.Material[i].Material_Laying_Off_Weight = Recipes.ElementAt(index).RawMaterial.ElementAt(i).Laying_Off_Weight; |
|
|
|
} |
|
|
|
if (SiemensDevice.IsConnected) |
|
|
|
{ |
|
|
|
FinishData.Order_No = SiemensRecipes.ElementAt(index).RecipeCode; |
|
|
|
FinishData.Product_Code = SiemensRecipes.ElementAt(index).RecipeName; |
|
|
|
FinishData.job_No = (short)SiemensRecipes.ElementAt(index).TrayCode; |
|
|
|
for (int i = 0; i < FinishData.Material.Length; i++) |
|
|
|
{ |
|
|
|
FinishData.Material[i] = new UDT1(); |
|
|
|
} |
|
|
|
for (int i = 0; i < SiemensRecipes.ElementAt(index).RawMaterial.Count; i++) |
|
|
|
{ |
|
|
|
FinishData.Material[i].Material_Name = SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialName; |
|
|
|
FinishData.Material[i].Material_BarrelNum = (short)SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialBarrelNum; |
|
|
|
FinishData.Material[i].Material_Laying_Off_Weight = SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).Laying_Off_Weight; |
|
|
|
} |
|
|
|
FinishData.Ask_For_Finish = true; |
|
|
|
GVL_BigStation.SiemensSendRecipeStatus = 7; |
|
|
|
SiemensDevice.Siemens_PLC_S7.WriteClass<DL_Finish_DB>(FinishData, 2361); |
|
|
|
} |
|
|
|
RecipeQueue1.TryDequeue(out code); |
|
|
|
IssuedComplete.Add(Recipes.ElementAt(index));//将配方添加到完成列表 |
|
|
|
SiemensRecipeQueue1.TryDequeue(out code); |
|
|
|
RecipeExecuteComple.Add(SiemensRecipes.ElementAt(index));//将配方添加到完成列表 |
|
|
|
if (!GVL_BigStation.IsUseLocalRecipe) |
|
|
|
{ |
|
|
|
App.Current.Dispatcher.Invoke(() => { |
|
|
@@ -404,16 +864,16 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (RecipeQueue2.Count > 0) |
|
|
|
if (SiemensRecipeQueue2.Count > 0) |
|
|
|
{ |
|
|
|
int index = Array.FindIndex(Recipes.ToArray(), p => p.RecipeCode == RecipeQueue2.ElementAt(0)); |
|
|
|
if (index >= 0 && index < Recipes.Count) |
|
|
|
int index = Array.FindIndex(SiemensRecipes.ToArray(), p => p.RecipeCode == SiemensRecipeQueue2.ElementAt(0)); |
|
|
|
if (index >= 0 && index < SiemensRecipes.Count) |
|
|
|
{ |
|
|
|
string code = Recipes.ElementAt(index).RecipeCode; |
|
|
|
int trayCode = Recipes.ElementAt(index).TrayCode; |
|
|
|
string code = SiemensRecipes.ElementAt(index).RecipeCode; |
|
|
|
int trayCode = SiemensRecipes.ElementAt(index).TrayCode; |
|
|
|
if (HKDevice.PlcRead.IsAllowIssueRecipe2 && GVL_BigStation.Recipe2DosingStatus == 0)//配方2是否允许下发配发 |
|
|
|
{ |
|
|
|
HKDevice.StockBinPar(Recipes.ElementAt(index)); |
|
|
|
HKDevice.StockBinPar(SiemensRecipes.ElementAt(index)); |
|
|
|
HKDevice.PlcWrite.Recipe2IssuedFinish = true; |
|
|
|
GVL_BigStation.Recipe2DosingStatus = 1; |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}下发完成"); |
|
|
@@ -431,7 +891,7 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}配料完成"); |
|
|
|
if (HKDevice.PlcRead.Recipe2TrayCode > 0) |
|
|
|
{ |
|
|
|
foreach (var item in Recipes.ElementAt(index).RawMaterial) |
|
|
|
foreach (var item in SiemensRecipes.ElementAt(index).RawMaterial) |
|
|
|
{ |
|
|
|
if (item.RawMaterialLocation == 1) |
|
|
|
{ |
|
|
@@ -490,14 +950,17 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin14ActualWeight; |
|
|
|
} |
|
|
|
} |
|
|
|
FinishData.Order_No = Recipes.ElementAt(index).RecipeCode; |
|
|
|
FinishData.Product_Code = Recipes.ElementAt(index).RecipeName; |
|
|
|
for (int i = 0; i < Recipes.ElementAt(index).RawMaterial.Count; i++) |
|
|
|
FinishData.Order_No = SiemensRecipes.ElementAt(index).RecipeCode; |
|
|
|
FinishData.Product_Code = SiemensRecipes.ElementAt(index).RecipeName; |
|
|
|
for (int i = 0; i < FinishData.Material.Length; i++) |
|
|
|
{ |
|
|
|
FinishData.Material[i] = new UDT1(); |
|
|
|
FinishData.Material[i].Material_Name = Recipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialName; |
|
|
|
FinishData.Material[i].Material_BarrelNum = (short)Recipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialBarrelNum; |
|
|
|
FinishData.Material[i].Material_Laying_Off_Weight = Recipes.ElementAt(index).RawMaterial.ElementAt(i).Laying_Off_Weight; |
|
|
|
} |
|
|
|
for (int i = 0; i < SiemensRecipes.ElementAt(index).RawMaterial.Count; i++) |
|
|
|
{ |
|
|
|
FinishData.Material[i].Material_Name = SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialName; |
|
|
|
FinishData.Material[i].Material_BarrelNum = (short)SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialBarrelNum; |
|
|
|
FinishData.Material[i].Material_Laying_Off_Weight = SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).Laying_Off_Weight; |
|
|
|
} |
|
|
|
} |
|
|
|
if (SiemensDevice.IsConnected) |
|
|
@@ -505,8 +968,8 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
SiemensDevice.Siemens_PLC_S7.WriteClass<DL_Finish_DB>(FinishData, 2361); |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方配料完成,将信号反馈给西门子"); |
|
|
|
} |
|
|
|
RecipeQueue2.TryDequeue(out code); |
|
|
|
IssuedComplete.Add(Recipes.ElementAt(index));//将该配方添加到下 |
|
|
|
SiemensRecipeQueue2.TryDequeue(out code); |
|
|
|
RecipeExecuteComple.Add(SiemensRecipes.ElementAt(index)); |
|
|
|
if (!GVL_BigStation.IsUseLocalRecipe) |
|
|
|
{ |
|
|
|
Json<RemoteRecipe>.Data.Recipes.RemoveAt(index);//制作完成,移除当前配方 |
|
|
@@ -519,16 +982,16 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (RecipeQueue3.Count > 0) |
|
|
|
if (SiemensRecipeQueue3.Count > 0) |
|
|
|
{ |
|
|
|
int index = Array.FindIndex(Recipes.ToArray(), p => p.RecipeCode == RecipeQueue3.ElementAt(0)); |
|
|
|
if (index >= 0 && index < Recipes.Count) |
|
|
|
int index = Array.FindIndex(SiemensRecipes.ToArray(), p => p.RecipeCode == SiemensRecipeQueue3.ElementAt(0)); |
|
|
|
if (index >= 0 && index < SiemensRecipes.Count) |
|
|
|
{ |
|
|
|
string code = Recipes.ElementAt(index).RecipeCode; |
|
|
|
int trayCode = Recipes.ElementAt(index).TrayCode; |
|
|
|
string code = SiemensRecipes.ElementAt(index).RecipeCode; |
|
|
|
int trayCode = SiemensRecipes.ElementAt(index).TrayCode; |
|
|
|
if (HKDevice.PlcRead.IsAllowIssueRecipe3 && GVL_BigStation.Recipe3DosingStatus == 0)//配方3是否允许下发配发 |
|
|
|
{ |
|
|
|
HKDevice.StockBinPar(Recipes.ElementAt(index)); |
|
|
|
HKDevice.StockBinPar(SiemensRecipes.ElementAt(index)); |
|
|
|
HKDevice.PlcWrite.Recipe3IssuedFinish = true; |
|
|
|
GVL_BigStation.Recipe3DosingStatus = 1; |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}下发完成"); |
|
|
@@ -545,7 +1008,7 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}配料完成"); |
|
|
|
if (HKDevice.PlcRead.Recipe3TrayCode > 0) |
|
|
|
{ |
|
|
|
foreach (var item in Recipes.ElementAt(index).RawMaterial) |
|
|
|
foreach (var item in SiemensRecipes.ElementAt(index).RawMaterial) |
|
|
|
{ |
|
|
|
if (item.RawMaterialLocation == 1) |
|
|
|
{ |
|
|
@@ -604,14 +1067,17 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin14ActualWeight; |
|
|
|
} |
|
|
|
} |
|
|
|
FinishData.Order_No = Recipes.ElementAt(index).RecipeCode; |
|
|
|
FinishData.Product_Code = Recipes.ElementAt(index).RecipeName; |
|
|
|
for (int i = 0; i < Recipes.ElementAt(index).RawMaterial.Count; i++) |
|
|
|
FinishData.Order_No = SiemensRecipes.ElementAt(index).RecipeCode; |
|
|
|
FinishData.Product_Code = SiemensRecipes.ElementAt(index).RecipeName; |
|
|
|
for (int i = 0; i < FinishData.Material.Length; i++) |
|
|
|
{ |
|
|
|
FinishData.Material[i] = new UDT1(); |
|
|
|
FinishData.Material[i].Material_Name = Recipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialName; |
|
|
|
FinishData.Material[i].Material_BarrelNum = (short)Recipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialBarrelNum; |
|
|
|
FinishData.Material[i].Material_Laying_Off_Weight = Recipes.ElementAt(index).RawMaterial.ElementAt(i).Laying_Off_Weight; |
|
|
|
} |
|
|
|
for (int i = 0; i < SiemensRecipes.ElementAt(index).RawMaterial.Count; i++) |
|
|
|
{ |
|
|
|
FinishData.Material[i].Material_Name = SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialName; |
|
|
|
FinishData.Material[i].Material_BarrelNum = (short)SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialBarrelNum; |
|
|
|
FinishData.Material[i].Material_Laying_Off_Weight = SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).Laying_Off_Weight; |
|
|
|
} |
|
|
|
} |
|
|
|
if (SiemensDevice.IsConnected) |
|
|
@@ -619,8 +1085,8 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
SiemensDevice.Siemens_PLC_S7.WriteClass<DL_Finish_DB>(FinishData, 2361); |
|
|
|
} |
|
|
|
HKDevice.HK_PLC_S7.Write<bool>("DB98.DBX1.1", false); |
|
|
|
RecipeQueue3.TryDequeue(out code); |
|
|
|
IssuedComplete.Add(Recipes.ElementAt(index));//将该配方添加到下 |
|
|
|
SiemensRecipeQueue3.TryDequeue(out code); |
|
|
|
RecipeExecuteComple.Add(SiemensRecipes.ElementAt(index));//将该配方添加到下 |
|
|
|
if (!GVL_BigStation.IsUseLocalRecipe) |
|
|
|
{ |
|
|
|
Json<RemoteRecipe>.Data.Recipes.RemoveAt(index);//制作完成,移除当前配方 |
|
|
@@ -633,16 +1099,16 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (RecipeQueue4.Count > 0) |
|
|
|
if (SiemensRecipeQueue4.Count > 0) |
|
|
|
{ |
|
|
|
int index = Array.FindIndex(Recipes.ToArray(), p => p.RecipeCode == RecipeQueue4.ElementAt(0)); |
|
|
|
if (index >= 0 && index < Recipes.Count) |
|
|
|
int index = Array.FindIndex(SiemensRecipes.ToArray(), p => p.RecipeCode == SiemensRecipeQueue4.ElementAt(0)); |
|
|
|
if (index >= 0 && index < SiemensRecipes.Count) |
|
|
|
{ |
|
|
|
string code = Recipes.ElementAt(index).RecipeCode; |
|
|
|
int trayCode = Recipes.ElementAt(index).TrayCode; |
|
|
|
string code = SiemensRecipes.ElementAt(index).RecipeCode; |
|
|
|
int trayCode = SiemensRecipes.ElementAt(index).TrayCode; |
|
|
|
if (HKDevice.PlcRead.IsAllowIssueRecipe4 && GVL_BigStation.Recipe4DosingStatus == 0)//配方4是否允许下发配发 |
|
|
|
{ |
|
|
|
HKDevice.StockBinPar(Recipes.ElementAt(index)); |
|
|
|
HKDevice.StockBinPar(SiemensRecipes.ElementAt(index)); |
|
|
|
HKDevice.PlcWrite.Recipe4IssuedFinish = true; |
|
|
|
GVL_BigStation.Recipe4DosingStatus = 1; |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}下发完成"); |
|
|
@@ -660,7 +1126,7 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
MessageNotify.GetInstance.ShowRunLog($"配方状态:{code}配料完成"); |
|
|
|
if (HKDevice.PlcRead.Recipe4TrayCode > 0) |
|
|
|
{ |
|
|
|
foreach (var item in Recipes.ElementAt(index).RawMaterial) |
|
|
|
foreach (var item in SiemensRecipes.ElementAt(index).RawMaterial) |
|
|
|
{ |
|
|
|
if (item.RawMaterialLocation == 1) |
|
|
|
{ |
|
|
@@ -719,14 +1185,17 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
item.Laying_Off_Weight = HKDevice.PlcRead.StockBin14ActualWeight; |
|
|
|
} |
|
|
|
} |
|
|
|
FinishData.Order_No = Recipes.ElementAt(index).RecipeCode; |
|
|
|
FinishData.Product_Code = Recipes.ElementAt(index).RecipeName; |
|
|
|
for (int i = 0; i < Recipes.ElementAt(index).RawMaterial.Count; i++) |
|
|
|
FinishData.Order_No = SiemensRecipes.ElementAt(index).RecipeCode; |
|
|
|
FinishData.Product_Code = SiemensRecipes.ElementAt(index).RecipeName; |
|
|
|
for (int i = 0; i < FinishData.Material.Length; i++) |
|
|
|
{ |
|
|
|
FinishData.Material[i] = new UDT1(); |
|
|
|
FinishData.Material[i].Material_Name = Recipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialName; |
|
|
|
FinishData.Material[i].Material_BarrelNum = (short)Recipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialBarrelNum; |
|
|
|
FinishData.Material[i].Material_Laying_Off_Weight = Recipes.ElementAt(index).RawMaterial.ElementAt(i).Laying_Off_Weight; |
|
|
|
} |
|
|
|
for (int i = 0; i < SiemensRecipes.ElementAt(index).RawMaterial.Count; i++) |
|
|
|
{ |
|
|
|
FinishData.Material[i].Material_Name = SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialName; |
|
|
|
FinishData.Material[i].Material_BarrelNum = (short)SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).RawMaterialBarrelNum; |
|
|
|
FinishData.Material[i].Material_Laying_Off_Weight = SiemensRecipes.ElementAt(index).RawMaterial.ElementAt(i).Laying_Off_Weight; |
|
|
|
} |
|
|
|
} |
|
|
|
if (SiemensDevice.IsConnected) |
|
|
@@ -734,8 +1203,8 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
SiemensDevice.Siemens_PLC_S7.WriteClass<DL_Finish_DB>(FinishData, 2361); |
|
|
|
} |
|
|
|
HKDevice.HK_PLC_S7.Write<bool>("DB98.DBX1.3", false); |
|
|
|
RecipeQueue4.TryDequeue(out code); |
|
|
|
IssuedComplete.Add(Recipes.ElementAt(index));//将该配方添加到下 |
|
|
|
SiemensRecipeQueue4.TryDequeue(out code); |
|
|
|
RecipeExecuteComple.Add(SiemensRecipes.ElementAt(index));//将该配方添加到下 |
|
|
|
if (!GVL_BigStation.IsUseLocalRecipe) |
|
|
|
{ |
|
|
|
Json<RemoteRecipe>.Data.Recipes.RemoveAt(index);//制作完成,移除当前配方 |
|
|
@@ -772,7 +1241,6 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
HKDevice.PlcWrite.Bareel1Bin13SetWeight = 0; |
|
|
|
HKDevice.PlcWrite.Bareel1Bin14SetWeight = 0; |
|
|
|
|
|
|
|
|
|
|
|
HKDevice.PlcWrite.Bareel2Bin1SetWeight = 0; |
|
|
|
HKDevice.PlcWrite.Bareel2Bin2SetWeight = 0; |
|
|
|
HKDevice.PlcWrite.Bareel2Bin3SetWeight = 0; |
|
|
@@ -818,7 +1286,7 @@ namespace BPASmartClient.JXJFoodBigStation.Model |
|
|
|
HKDevice.PlcWrite.Bareel5Bin13SetWeight = 0; |
|
|
|
HKDevice.PlcWrite.Bareel5Bin14SetWeight = 0; |
|
|
|
} |
|
|
|
private void testData() |
|
|
|
private void testRawMaterialNameData() |
|
|
|
{ |
|
|
|
RawMaterialsNamePos.Clear(); |
|
|
|
if (!HKDevice.IsConnected) |
|
|
|