终端一体化运控平台
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

1052 řádky
83 KiB

  1. using BPA.Communication;
  2. using BPA.Helper;
  3. using BPASmartClient.CustomResource.Pages.Model;
  4. using BPASmartClient.CustomResource.UserControls;
  5. using BPASmartClient.CustomResource.UserControls.MessageShow;
  6. using BPASmartClient.Model;
  7. using System;
  8. using System.Collections.Concurrent;
  9. using System.Collections.Generic;
  10. using System.Collections.ObjectModel;
  11. using System.Diagnostics;
  12. using System.Linq;
  13. using System.Threading;
  14. using System.Threading.Tasks;
  15. namespace BPASmartClient.DosingSystem.ViewModel
  16. {
  17. public class RecipeControlViewModel : NotifyBase
  18. {
  19. //int ComCount = 0;//配料完成计数
  20. // static ConcurrentQueue<string> RecipeNames = new ConcurrentQueue<string>();
  21. // static ObservableCollection<StockStatusModel> StockStatus = new ObservableCollection<StockStatusModel>();
  22. public RecipeControlViewModel()
  23. {
  24. //StartCommand = new BPARelayCommand<object>(RecipeIssued);
  25. //// ChangeRecipeStateCommand = new BPARelayCommand<object>(ChangeRecipeState);
  26. //CancelRecipeCommand = new BPARelayCommand<object>(CancelRecipe);
  27. //RecipeRun();
  28. //RecipeStatusInquire();
  29. StartCommand = new BPARelayCommand<object>(new Action<object>((o) => {
  30. if (o != null && o is string recipeName)
  31. {
  32. ActionManage.GetInstance.Send("配方下发", recipeName);
  33. }
  34. }));
  35. CancelRecipeCommand = new BPARelayCommand<object>(new Action<object>((ob) => {
  36. if (ob != null && ob is RecipeModel recipe)
  37. {
  38. ActionManage.GetInstance.Send("取消配方", recipe.RecipeName);
  39. }
  40. }));
  41. }
  42. //private async void CancelRecipe(object o)
  43. //{
  44. // if (o != null && o is RecipeModel recipe)
  45. // {
  46. // var res = MessageNotify.GetInstance.ShowDialog($"是否取消配方 【{recipe.RecipeName}】制作", DialogType.Warning);
  47. // if (res)
  48. // {
  49. // int index = Recipes.ToList().FindIndex(p => p.RecipeName == recipe.RecipeName);
  50. // if (index >= 0 && index < Recipes.Count)
  51. // {
  52. // await Task.Factory.StartNew(new Action(() =>
  53. // {
  54. // Recipes.ElementAt(index).IsEnable = true;
  55. // Json<LocalRecipe>.Data.Recipes.ElementAt(index).IsEnable = true;
  56. // Recipes.ElementAt(index).Are.Set();
  57. // App.Current.Dispatcher.Invoke(new Action(() => { recipeProcesses.Clear(); }));
  58. // SiemensDevice.GetInstance.MySiemens.Write("M10.5", true);
  59. // MessageNotify.GetInstance.ShowRunLog($"M10.5:true");
  60. // Thread.Sleep(1000);
  61. // SiemensDevice.GetInstance.MySiemens.Write("M10.5", false);
  62. // MessageNotify.GetInstance.ShowRunLog($"M10.5:false");
  63. // NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"配方 [{recipe.RecipeName}] 取消成功");
  64. // MessageNotify.GetInstance.ShowUserLog($"取消配方制作 {recipe.RecipeName}");
  65. // }));
  66. // }
  67. // }
  68. // }
  69. //}
  70. /// <summary>
  71. /// 配方下发
  72. /// </summary>
  73. //private void RecipeIssued(object o)
  74. //{
  75. // if (o != null && o is string deviceName)
  76. // {
  77. // int index = Array.FindIndex(Recipes.ToArray(), p => p.RecipeName == deviceName);
  78. // if (index >= 0 && index < Recipes.Count)
  79. // {
  80. // for (int i = 0; i < Recipes.ElementAt(index).RawMaterials.Count; i++)
  81. // {
  82. // if (Recipes.ElementAt(index).RawMaterials.ElementAt(i).RawMaterialSource == 1)
  83. // {
  84. // string ip = Recipes.ElementAt(index).RawMaterials.ElementAt(i).DeviceIp;
  85. // var device = DeviceInquire.GetInstance.GetDevice(ip);
  86. // if (ip == null && ip == "")
  87. // {
  88. // MessageNotify.GetInstance.ShowDialog($"原料 【{Recipes.ElementAt(index).RawMaterials.ElementAt(i).RawMaterialName}】配料系统无法配料,请人工配置此原料:原料{Recipes.ElementAt(index).RawMaterials.ElementAt(i).RawMaterialName},重量{Recipes.ElementAt(index).RawMaterials.ElementAt(i).RawMaterialWeight}", DialogType.Information);
  89. // return;
  90. // }
  91. // if (!device.IsConnected)
  92. // {
  93. // MessageNotify.GetInstance.ShowDialog($"设备 【{device.DeviceName}】 未连接,不允许下发此配方", DialogType.Error);
  94. // return;
  95. // }
  96. // }
  97. // }
  98. // Recipes.ElementAt(index).IsEnable = false;
  99. // Json<LocalRecipe>.Data.Recipes.ElementAt(index).IsEnable = false;
  100. // }
  101. // MessageNotify.GetInstance.ShowUserLog($"下发工单 {Recipes.ElementAt(index).RecipeName}");
  102. // RecipeNames.Enqueue(deviceName);
  103. // //var t = RecipeNames.GetHashCode();
  104. // var res = Recipes.FirstOrDefault(p => p.RecipeName == deviceName);
  105. // UserTreeWait.Add(new RecipeModel { RecipStatus = "等待制作", SerialNum = UserTreeWait.Count + 1, RecipeName = deviceName, RawMaterials = res.RawMaterials });
  106. // }
  107. // NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"配方下发成功!");
  108. //}
  109. /// <summary>
  110. /// 配方业务执行
  111. /// </summary>
  112. //private void RecipeRun()
  113. //{
  114. // TaskManage.GetInstance.StartLong(new Action(() =>
  115. // {
  116. // if (RecipeNames.Count > 0)
  117. // {
  118. // int index = Array.FindIndex(Recipes.ToArray(), p => p.RecipeName == RecipeNames.ElementAt(0));
  119. // if (index >= 0 && index < Recipes.Count)
  120. // {
  121. // Recipes.ElementAt(index).Are.Reset();
  122. // Recipes.ElementAt(index).IsEnable = false;
  123. // StockStatus.Clear();
  124. // App.Current.Dispatcher.Invoke(new Action(() =>
  125. // {
  126. // recipeProcesses.Clear();
  127. // if (UserTreeWait.Count > 0) UserTreeWait.RemoveAt(0);
  128. // }));
  129. // CurrentRecipeName = Recipes.ElementAt(index).RecipeName;
  130. // #region 配方下发到PLC操作相关
  131. // //配方数据写入到输送机
  132. // var res = Json<LocalRecipe>.Data.Recipes.FirstOrDefault(p => p.RecipeName == CurrentRecipeName);
  133. // List<int> BarrelNum = new List<int>();
  134. // ConcurrentDictionary<string, int[]> values = new();
  135. // if (res != null)
  136. // {
  137. // var tInfo = res.RawMaterials.GroupBy(p => p.Loc);//获取桶号信息
  138. // if (tInfo != null)
  139. // {
  140. // for (int i = 0; i < tInfo.Count(); i++)
  141. // {
  142. // int data = 0;
  143. // for (int m = 0; m < tInfo.ElementAt(i).Count(); m++)
  144. // {
  145. // var TempName = tInfo.ElementAt(i).ElementAt(m).RawMaterialName;
  146. // var tempDevice = DeviceInquire.GetInstance.devices.FirstOrDefault(p => p.DeviceName == TempName);
  147. // if (tempDevice != null)
  148. // {
  149. // /*data = data.SetBitValue((byte)tempDevice.DeviceNum, true);*/
  150. // if (tempDevice.DeviceNum > 0)
  151. // {
  152. // // //int a = data.SetBitValue((byte)tInfo.ElementAt(i).ElementAt(m).Loc, true);
  153. // // //byte[] test1 = a.ToBytes(BPA.Helper.DataFormat.BADC);
  154. // // //int item = test1.ToInt();
  155. // // int item = data.SetBitValue((byte)tInfo.ElementAt(i).ElementAt(m).Loc, true).ToBytes(BPA.Helper.DataFormat.BADC).ToInt();
  156. // // int item1 = SiemensDevice.GetInstance.MySiemens.Read<int>($"DB4.DBD{2 + (tempDevice.DeviceNum - 1) * 4}").Content;
  157. // ////prop1:
  158. // // var RE = SiemensDevice.GetInstance.MySiemens.Write($"DB4.DBD{2 + (tempDevice.DeviceNum - 1) * 4}", item + item1);
  159. // // //var values = SiemensDevice.GetInstance.MySiemens.Read<int>($"DB4.DBD{2 + (tempDevice.DeviceNum - 1) * 4}");
  160. // // //if ((values != null && values.ToString() != (item + item1).ToString()) || values == null)
  161. // // // goto prop1;
  162. // // if (RE.IsSuccess)
  163. // // MessageNotify.GetInstance.ShowRunLog($"下发配方DB4.DBD{2 + (tempDevice.DeviceNum - 1) * 4} :{(byte)tInfo.ElementAt(i).ElementAt(m).Loc}-{item + item1}-{(item + item1).ToBinString()}");
  164. // // else
  165. // // MessageNotify.GetInstance.ShowRunLog($"下发配方DB4.DBD{2 + (tempDevice.DeviceNum - 1) * 4} 失败");
  166. // int item = data.SetBitValue((byte)tInfo.ElementAt(i).ElementAt(m).Loc, true).ToBytes(BPA.Helper.DataFormat.BADC).ToInt();
  167. // string tempAdd = $"DB4.DBD{2 + (tempDevice.DeviceNum - 1) * 4}";
  168. // if (!values.ContainsKey(tempAdd)) values.TryAdd(tempAdd, new int[2] { 0, 0 });
  169. // values[tempAdd][0] = values[tempAdd][0] + item;
  170. // values[tempAdd][1] = tInfo.ElementAt(i).ElementAt(m).Loc;
  171. // }
  172. // }
  173. // if (tInfo.ElementAt(i).ElementAt(m).Loc > 0)
  174. // {
  175. // if (!BarrelNum.Contains(tInfo.ElementAt(i).ElementAt(m).Loc))
  176. // {
  177. // BarrelNum.Add(tInfo.ElementAt(i).ElementAt(m).Loc);
  178. // }
  179. // }
  180. // }
  181. // }
  182. // }
  183. // }
  184. // values?.ToList().ForEach(x =>
  185. // {
  186. // SiemensDevice.GetInstance.MySiemens.Write(x.Key, x.Value[0]).OnSuccess(() =>
  187. // {
  188. // MessageNotify.GetInstance.ShowRunLog($"下发配方-{x.Key} :桶数:[{x.Value[1]}]-{x.Value[0].ToBinString()}");
  189. // }).OnFail(s =>
  190. // {
  191. // MessageNotify.GetInstance.ShowRunLog($"下发配方-{x.Key} 失败");
  192. // });
  193. // });
  194. // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD198", BarrelNum.Count);//配方使用桶数写入
  195. // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBX0.1", true);//配方执行启动
  196. // Stopwatch sw = new Stopwatch();
  197. // var recipe = Recipes.ElementAt(index);
  198. // ObservableCollection<RawMaterialModel> RawMater = new ObservableCollection<RawMaterialModel>();
  199. // foreach (var item in recipe.RawMaterials)
  200. // {
  201. // RawMater.Add(new RawMaterialModel()
  202. // {
  203. // RawMaterialName = item.RawMaterialName,
  204. // DeviceIp = item.DeviceIp,
  205. // DownLimtFeedback = item.DownLimtFeedback,
  206. // Loc = item.Loc,
  207. // RawMaterialId = item.RawMaterialId,
  208. // RawMaterialSource = item.RawMaterialSource,
  209. // RawMaterialType = item.RawMaterialType,
  210. // RawMaterialWeight = item.RawMaterialWeight,
  211. // RecipeStatus = item.RecipeStatus,
  212. // SelectIndex = item.SelectIndex,
  213. // Status = item.Status,
  214. // UpLimtFeedback = item.UpLimtFeedback,
  215. // UpLimtWeightFeedback = item.UpLimtWeightFeedback,
  216. // WeightFeedback = item.WeightFeedback,
  217. // });
  218. // }
  219. // App.Current.Dispatcher.Invoke(() =>
  220. // {
  221. // recipeProcesses.Add(new RecipeModel()
  222. // {
  223. // RawMaterials = RawMater,
  224. // IsEnable = recipe.IsEnable,
  225. // RecipeName = recipe.RecipeName,
  226. // SerialNum = recipe.SerialNum,
  227. // RecipCode = recipe.RecipCode,
  228. // });
  229. // });
  230. // sw.Restart();
  231. // while (true)
  232. // {
  233. // if (sw.ElapsedMilliseconds >= 3000 && !GlobalDevice.PlcData.ResComplete)
  234. // {
  235. // MessageNotify.GetInstance.ShowRunLog("获取配方下发反馈超时");
  236. // break;
  237. // }
  238. // if (GlobalDevice.PlcData.ResComplete)
  239. // {
  240. // SiemensDevice.GetInstance.MySiemens.Write("DB3.DBX0.1", false);
  241. // break;
  242. // }
  243. // Thread.Sleep(100);
  244. // }
  245. // #endregion
  246. // Recipes.ElementAt(index).Are.WaitOne();//阻塞,直到当前配方完成
  247. // RecipeNames.TryDequeue(out string deviceName);
  248. // var recipeComple = Recipes.ElementAt(index);
  249. // ObservableCollection<RawMaterialModel> RawMaterComple = new ObservableCollection<RawMaterialModel>();
  250. // foreach (var item in recipeComple.RawMaterials)
  251. // {
  252. // RawMaterComple.Add(new RawMaterialModel()
  253. // {
  254. // RawMaterialName = item.RawMaterialName,
  255. // DeviceIp = item.DeviceIp,
  256. // DownLimtFeedback = item.DownLimtFeedback,
  257. // Loc = item.Loc,
  258. // RawMaterialId = item.RawMaterialId,
  259. // RawMaterialSource = item.RawMaterialSource,
  260. // RawMaterialType = item.RawMaterialType,
  261. // RawMaterialWeight = item.RawMaterialWeight,
  262. // RecipeStatus = item.RecipeStatus,
  263. // SelectIndex = item.SelectIndex,
  264. // Status = item.Status,
  265. // UpLimtFeedback = item.UpLimtFeedback,
  266. // UpLimtWeightFeedback = item.UpLimtWeightFeedback,
  267. // WeightFeedback = item.WeightFeedback,
  268. // });
  269. // }
  270. // App.Current.Dispatcher.Invoke(() =>
  271. // {
  272. // UserTreeCompelete.Add(new RecipeModel()
  273. // {
  274. // RawMaterials = RawMaterComple,
  275. // IsEnable = recipeComple.IsEnable,
  276. // RecipeName = recipeComple.RecipeName,
  277. // SerialNum = UserTreeCompelete.Count + 1,
  278. // RecipCode = recipeComple.RecipCode,
  279. // RecipStatus = "制作完成"
  280. // });
  281. // });
  282. // App.Current.Dispatcher.Invoke(new Action(() =>
  283. // {
  284. // recipeProcesses.Clear();
  285. // CurrentRecipeName = string.Empty;
  286. // }));//完成后清空当前配方
  287. // }
  288. // }
  289. // Thread.Sleep(100);
  290. // }), "启动配方下发", true);
  291. //}
  292. /// <summary>
  293. /// 配方执行状态监听
  294. /// </summary>
  295. //private void RecipeStatusInquire()
  296. //{
  297. // TaskManage.GetInstance.StartLong(new Action(() =>
  298. // {
  299. // #region v1.0
  300. // //for (int i = 0; i < Recipes.Count; i++)
  301. // //{
  302. // // for (int m = 0; m < Recipes.ElementAt(i).RawMaterials.Count; m++)
  303. // // {
  304. // // var RunStatus = DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(m).DeviceIp).deviceStatus.RunStatus;
  305. // // //设备状态显示
  306. // // if (Recipes.ElementAt(i).RecipeName == CurrentRecipeName)
  307. // // {
  308. // // string tempRawMaterialName = DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(m).DeviceIp).DeviceName;
  309. // // int recIndex = recipeProcesses.ToList().FindIndex(p => p.RecipeName == CurrentRecipeName);
  310. // // if (recIndex >= 0 && recIndex < recipeProcesses.Count)
  311. // // {
  312. // // int index = recipeProcesses.ElementAt(recIndex).RawMaterials.ToList().FindIndex(p => p.RawMaterialName == tempRawMaterialName);
  313. // // if (index >= 0 && index < recipeProcesses.ElementAt(recIndex).RawMaterials.Count)
  314. // // {
  315. // // //测试使用
  316. // // recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(index).RecipeStatus = RunStatus;
  317. // // }
  318. // // for (int j = 0; j < GlobalDevice.PlcData.IsAllowIngredients.Length; j++)
  319. // // {
  320. // // if (GlobalDevice.PlcData.IsAllowIngredients[j])
  321. // // {
  322. // // int barrel = j + 1;//桶号
  323. // // int cnt = GlobalDevice.PlcData.LocationFeedback[j];//允许配料的位置 0~6
  324. // // if (RTrig.GetInstance("a").Start(GlobalDevice.PlcData.IsAllowIngredients[j]))
  325. // // {
  326. // // MessageNotify.GetInstance.ShowRunLog($"桶号:{barrel},位置:{cnt},允许配料");
  327. // // }
  328. // // int Location1 = 0;
  329. // // int Location2 = 0;
  330. // // if (cnt == -1)
  331. // // {
  332. // // MessageNotify.GetInstance.ShowRunLog("错误");
  333. // // return;
  334. // // }
  335. // // else
  336. // // {
  337. // // if (cnt >= 1 && cnt <= 6)
  338. // // {
  339. // // //int a1 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == cnt * 2 - 1);
  340. // // //int b1 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == cnt * 2);
  341. // // //if (a1 >= 0)
  342. // // //{
  343. // // // Location1 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(a1).DeviceName && p.Loc == barrel);
  344. // // //}
  345. // // //if (b1 >= 0)
  346. // // //{
  347. // // // Location2 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(b1).DeviceName && p.Loc == barrel);
  348. // // //}
  349. // // int a1 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == cnt);
  350. // // //int b1 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == cnt * 2);
  351. // // if (a1 >= 0)
  352. // // {
  353. // // Location1 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(a1).DeviceName && p.Loc == barrel);
  354. // // }
  355. // // //if (b1 >= 0)
  356. // // //{
  357. // // // Location2 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(b1).DeviceName && p.Loc == barrel);
  358. // // //}
  359. // // Location2 = Location1;
  360. // // }
  361. // // }
  362. // // if (Location1 >= 0)
  363. // // {
  364. // // string RawName = Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).RawMaterialName;
  365. // // int abc = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceName == RawName);
  366. // // int DeviceNum = DeviceInquire.GetInstance.devices.ElementAt(abc).DeviceNum;
  367. // // if (DeviceNum > 0)
  368. // // {
  369. // // float weight = Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).RawMaterialWeight;
  370. // // //测试
  371. // // int loc = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => (p.RawMaterialName == RawName));
  372. // // if (loc >= 0 && RawName != null && weight >= 0)
  373. // // {
  374. // // int St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
  375. // // int materialCount = recipeProcesses.ElementAt(recIndex).RawMaterials.Where(p => p.RawMaterialName == RawName).Count();
  376. // // if (St_index < 0 || (StockStatus.Count < materialCount && St_index > 0))
  377. // // {
  378. // // StockStatus.Add(new StockStatusModel()
  379. // // {
  380. // // MaterialName = RawName,
  381. // // IssueWeight = weight,
  382. // // IssueStatus = 0,
  383. // // });
  384. // // }
  385. // // St_index = Array.FindIndex(StockStatus.ToArray(), p => (p.MaterialName == RawName && p.IssueStatus == 0));
  386. // // int St_index1 = Array.FindIndex(StockStatus.ToArray(), p => (p.MaterialName == RawName && p.IssueStatus == 1));
  387. // // if (St_index >= 0)
  388. // // {
  389. // // if ((recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 1 && StockStatus.ElementAt(St_index).IssueStatus == 0))//
  390. // // {
  391. // // StockStatus.ElementAt(St_index).IssueStatus = 1;
  392. // // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).Start(weight);
  393. // // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},开始出料");
  394. // // }
  395. // // //if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 3 && StockStatus.ElementAt(St_index).IssueStatus == 1)
  396. // // //{
  397. // // // //GlobalDevice.PlcData.IsAllowIngredients[j] = false;//测试使用
  398. // // // StockStatus.ElementAt(St_index).IssueStatus = 2;
  399. // // // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).StatusReset();
  400. // // // int a = 0.SetBitValue((byte)(DeviceNum), true);
  401. // // // byte[] test1 = a.ToBytes(BPA.Helper.DataFormat.BADC);
  402. // // // int item = test1.ToInt();
  403. // // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD130", item);
  404. // // // //MessageNotify.GetInstance.ShowRunLog($"{res}");
  405. // // // MessageNotify.GetInstance.ShowRunLog($"DB4.DBD130:{item.ToBinString()}");
  406. // // // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},出料完成,状态复位");
  407. // // //}
  408. // // //测试
  409. // // if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 3 && StockStatus.ElementAt(St_index1).IssueStatus == 1)
  410. // // {
  411. // // //GlobalDevice.PlcData.IsAllowIngredients[j] = false;//测试使用
  412. // // StockStatus.ElementAt(St_index1).IssueStatus = 2;
  413. // // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).StatusReset();
  414. // // int a = 0.SetBitValue((byte)(DeviceNum), true);
  415. // // byte[] test1 = a.ToBytes(BPA.Helper.DataFormat.BADC);
  416. // // int item = test1.ToInt();
  417. // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD130", item);
  418. // // //MessageNotify.GetInstance.ShowRunLog($"{res}");
  419. // // MessageNotify.GetInstance.ShowRunLog($"DB4.DBD130:{item.ToBinString()}");
  420. // // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},出料完成,状态复位");
  421. // // }
  422. // // }
  423. // // }
  424. // // }
  425. // // }
  426. // // //调试
  427. // // //if (Location1 >= 0)
  428. // // //{
  429. // // // string RawName = Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).RawMaterialName;
  430. // // // int abc = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceName == RawName);
  431. // // // int DeviceNum = DeviceInquire.GetInstance.devices.ElementAt(abc).DeviceNum;
  432. // // // if (DeviceNum > 0)
  433. // // // {
  434. // // // float weight = Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).RawMaterialWeight;
  435. // // // //测试
  436. // // // // int loc = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => (p.RawMaterialName == RawName));
  437. // // // if (Location1 >= 0 && RawName != null && weight >= 0)
  438. // // // {
  439. // // // int St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
  440. // // // int materialCount = recipeProcesses.ElementAt(recIndex).RawMaterials.Where(p => p.RawMaterialName == RawName).Count();
  441. // // // if (St_index < 0 || (StockStatus.Count < materialCount && St_index > 0))
  442. // // // {
  443. // // // StockStatus.Add(new StockStatusModel()
  444. // // // {
  445. // // // MaterialName = RawName,
  446. // // // IssueWeight = weight,
  447. // // // IssueStatus = 0,
  448. // // // });
  449. // // // }
  450. // // // St_index = Array.FindIndex(StockStatus.ToArray(), p => (p.MaterialName == RawName && p.IssueStatus == 0));
  451. // // // int St_index1 = Array.FindIndex(StockStatus.ToArray(), p => (p.MaterialName == RawName && p.IssueStatus == 1));
  452. // // // if (St_index >= 0)
  453. // // // {
  454. // // // if ((recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(Location1).RecipeStatus == 1 && StockStatus.ElementAt(St_index).IssueStatus == 0))//
  455. // // // {
  456. // // // StockStatus.ElementAt(St_index).IssueStatus = 1;
  457. // // // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).DeviceIp).Start(weight);
  458. // // // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).DeviceIp},开始出料");
  459. // // // }
  460. // // // //if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 3 && StockStatus.ElementAt(St_index).IssueStatus == 1)
  461. // // // //{
  462. // // // // //GlobalDevice.PlcData.IsAllowIngredients[j] = false;//测试使用
  463. // // // // StockStatus.ElementAt(St_index).IssueStatus = 2;
  464. // // // // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).StatusReset();
  465. // // // // int a = 0.SetBitValue((byte)(DeviceNum), true);
  466. // // // // byte[] test1 = a.ToBytes(BPA.Helper.DataFormat.BADC);
  467. // // // // int item = test1.ToInt();
  468. // // // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD130", item);
  469. // // // // //MessageNotify.GetInstance.ShowRunLog($"{res}");
  470. // // // // MessageNotify.GetInstance.ShowRunLog($"DB4.DBD130:{item.ToBinString()}");
  471. // // // // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},出料完成,状态复位");
  472. // // // //}
  473. // // // //测试
  474. // // // if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(Location1).RecipeStatus == 3 && StockStatus.ElementAt(St_index1).IssueStatus == 1)
  475. // // // {
  476. // // // //GlobalDevice.PlcData.IsAllowIngredients[j] = false;//测试使用
  477. // // // StockStatus.ElementAt(St_index1).IssueStatus = 2;
  478. // // // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).DeviceIp).StatusReset();
  479. // // // int a = 0.SetBitValue((byte)(DeviceNum), true);
  480. // // // byte[] test1 = a.ToBytes(BPA.Helper.DataFormat.BADC);
  481. // // // int item = test1.ToInt();
  482. // // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD130", item);
  483. // // // //MessageNotify.GetInstance.ShowRunLog($"{res}");
  484. // // // MessageNotify.GetInstance.ShowRunLog($"DB4.DBD130:{item.ToBinString()}");
  485. // // // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).DeviceIp},出料完成,状态复位");
  486. // // // }
  487. // // // }
  488. // // // }
  489. // // // }
  490. // // //}
  491. // // if (Location1 >= 0)
  492. // // {
  493. // // string RawName111 = Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).RawMaterialName;
  494. // // int St_index111 = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName111);
  495. // // if (Location2 >= 0 && ((Location1 >= 0 && StockStatus.ElementAt(St_index111).IssueStatus == 2)))
  496. // // {
  497. // // string RawName = Recipes.ElementAt(i).RawMaterials.ElementAt(Location2).RawMaterialName;
  498. // // int abc = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceName == RawName);
  499. // // int DeviceNum = DeviceInquire.GetInstance.devices.ElementAt(abc).DeviceNum;
  500. // // if (DeviceNum > 0)
  501. // // {
  502. // // float weight = Recipes.ElementAt(i).RawMaterials.ElementAt(Location2).RawMaterialWeight;
  503. // // int loc = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == RawName);
  504. // // if (loc >= 0 && RawName != null && weight >= 0)
  505. // // {
  506. // // int St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
  507. // // if (St_index < 0)
  508. // // {
  509. // // StockStatus.Add(new StockStatusModel()
  510. // // {
  511. // // MaterialName = RawName,
  512. // // IssueWeight = weight,
  513. // // IssueStatus = 0,
  514. // // });
  515. // // }
  516. // // St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
  517. // // if (St_index >= 0)
  518. // // {
  519. // // if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 1 && StockStatus.ElementAt(St_index).IssueStatus == 0)
  520. // // {
  521. // // StockStatus.ElementAt(St_index).IssueStatus = 1;
  522. // // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).Start(weight);
  523. // // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},开始出料");
  524. // // }
  525. // // if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 3 && StockStatus.ElementAt(St_index).IssueStatus == 1)
  526. // // {
  527. // // //GlobalDevice.PlcData.IsAllowIngredients[j] = false;//测试使用
  528. // // StockStatus.ElementAt(St_index).IssueStatus = 2;
  529. // // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).StatusReset();
  530. // // int a = 0.SetBitValue((byte)(DeviceNum), true);
  531. // // byte[] test1 = a.ToBytes(BPA.Helper.DataFormat.BADC);
  532. // // int item = test1.ToInt();
  533. // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD130", item);
  534. // // //MessageNotify.GetInstance.ShowRunLog($"{res}");
  535. // // //MessageNotify.GetInstance.ShowRunLog($"DB4.DBD130:{item.ToBinString()}");
  536. // // MessageNotify.GetInstance.ShowRunLog($"DB4.DBD130:{item}");
  537. // // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},出料完成,状态复位");
  538. // // }
  539. // // }
  540. // // }
  541. // // }
  542. // // }
  543. // // }
  544. // // else
  545. // // {
  546. // // if (Location2 >= 0)
  547. // // {
  548. // // string RawName = Recipes.ElementAt(i).RawMaterials.ElementAt(Location2).RawMaterialName;
  549. // // int abc = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceName == RawName);
  550. // // int DeviceNum = DeviceInquire.GetInstance.devices.ElementAt(abc).DeviceNum;
  551. // // if (DeviceNum >= 0)
  552. // // {
  553. // // float weight = Recipes.ElementAt(i).RawMaterials.ElementAt(Location2).RawMaterialWeight;
  554. // // int loc = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == RawName);
  555. // // if (cnt > 0 && loc >= 0 && RawName != null && weight >= 0)
  556. // // {
  557. // // int St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
  558. // // if (St_index < 0)
  559. // // {
  560. // // StockStatus.Add(new StockStatusModel()
  561. // // {
  562. // // MaterialName = RawName,
  563. // // IssueWeight = weight,
  564. // // IssueStatus = 0,
  565. // // });
  566. // // }
  567. // // St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
  568. // // if (St_index >= 0)
  569. // // {
  570. // // if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 1 && StockStatus.ElementAt(St_index).IssueStatus == 0)
  571. // // {
  572. // // StockStatus.ElementAt(St_index).IssueStatus = 1;
  573. // // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).Start(weight);
  574. // // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},开始出料");
  575. // // }
  576. // // if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 3 && StockStatus.ElementAt(St_index).IssueStatus == 1)
  577. // // {
  578. // // //GlobalDevice.PlcData.IsAllowIngredients[j] = false;//测试使用
  579. // // StockStatus.ElementAt(St_index).IssueStatus = 2;
  580. // // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).StatusReset();
  581. // // int a = 0.SetBitValue((byte)(DeviceNum), true);
  582. // // byte[] test1 = a.ToBytes(BPA.Helper.DataFormat.BADC);
  583. // // int item = test1.ToInt();
  584. // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD130", item);
  585. // // recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).UpLimtWeightFeedback = DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).deviceStatus.NowWeightFeedback;
  586. // // //MessageNotify.GetInstance.ShowRunLog($"{res}");
  587. // // MessageNotify.GetInstance.ShowRunLog($"DB4.DBD130:{item.ToBinString()}");
  588. // // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},出料完成,状态复位");
  589. // // }
  590. // // }
  591. // // }
  592. // // }
  593. // // }
  594. // // }
  595. // // }
  596. // // //508配料项目代码
  597. // // //if (GlobalDevice.PlcData.IsAllowIngredients[j])
  598. // // //{
  599. // // // int barrel = j + 1;//桶号
  600. // // // int cnt = GlobalDevice.PlcData.LocationFeedback[j];//允许配料的位置 1~10
  601. // // // if (RTrig.GetInstance("a").Start(GlobalDevice.PlcData.IsAllowIngredients[j]))
  602. // // // {
  603. // // // MessageNotify.GetInstance.ShowRunLog($"桶号:{barrel},位置:{cnt},允许配料");
  604. // // // }
  605. // // // int Location1 = 0;
  606. // // // if (cnt == -1)
  607. // // // {
  608. // // // MessageNotify.GetInstance.ShowRunLog("没有读取到配料的位置");
  609. // // // return;
  610. // // // }
  611. // // // else
  612. // // // {
  613. // // // int a1 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == cnt);
  614. // // // Location1 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(a1).DeviceName && p.Loc == barrel);
  615. // // // }
  616. // // // if (Location1 >= 0)
  617. // // // {
  618. // // // string RawName = Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).RawMaterialName;
  619. // // // int abc = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceName == RawName);
  620. // // // int DeviceNum = DeviceInquire.GetInstance.devices.ElementAt(abc).DeviceNum;
  621. // // // if (DeviceNum > 0)
  622. // // // {
  623. // // // float weight = Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).RawMaterialWeight;
  624. // // // int loc = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == RawName);
  625. // // // if (loc >= 0 && RawName != null && weight >= 0)
  626. // // // {
  627. // // // int St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
  628. // // // if (St_index < 0)
  629. // // // {
  630. // // // StockStatus.Add(new StockStatusModel()
  631. // // // {
  632. // // // MaterialName = RawName,
  633. // // // IssueWeight = weight,
  634. // // // IssueStatus = 0,
  635. // // // });
  636. // // // }
  637. // // // St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
  638. // // // if (St_index >= 0)
  639. // // // {
  640. // // // if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 1 && StockStatus.ElementAt(St_index).IssueStatus == 0)
  641. // // // {
  642. // // // StockStatus.ElementAt(St_index).IssueStatus = 1;
  643. // // // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).Start(weight);
  644. // // // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},开始出料");
  645. // // // }
  646. // // // if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 3 && StockStatus.ElementAt(St_index).IssueStatus == 1)
  647. // // // {
  648. // // // //GlobalDevice.PlcData.IsAllowIngredients[j] = false;//测试使用
  649. // // // StockStatus.ElementAt(St_index).IssueStatus = 2;
  650. // // // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).StatusReset();
  651. // // // /*int a = 0.SetBitValue((byte)(DeviceNum), true);
  652. // // // byte[] test1 = a.ToBytes(BPA.Helper.DataFormat.ABCD);
  653. // // // int item = test1.ToInt();*/
  654. // // // if (DeviceNum >= 1 && DeviceNum <= 8)
  655. // // // {
  656. // // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBX130." + (DeviceNum - 1), true);
  657. // // // }else if (DeviceNum >= 9 && DeviceNum <= 16)
  658. // // // {
  659. // // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBX131." + (DeviceNum - 9), true);
  660. // // // }
  661. // // // else if (DeviceNum >=17 && DeviceNum <= 24)
  662. // // // {
  663. // // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBX132." + (DeviceNum - 17), true);
  664. // // // }else if (DeviceNum >= 25 && DeviceNum <= 32)
  665. // // // {
  666. // // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBX133." + (DeviceNum - 25), true);
  667. // // // }
  668. // // // MessageNotify.GetInstance.ShowRunLog($"料仓:{DeviceNum},配料完成");
  669. // // // /*string res = SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD130", item, 2);
  670. // // // MessageNotify.GetInstance.ShowRunLog($"{res}");
  671. // // // MessageNotify.GetInstance.ShowRunLog($"DB4.DBD130:{item.ToBinString()}");*/
  672. // // // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},出料完成,状态复位");
  673. // // // }
  674. // // // }
  675. // // // }
  676. // // // }
  677. // // // }
  678. // // //}
  679. // // }
  680. // // int Finish_Count = StockStatus.Where(s => s.IssueStatus == 2).Count();
  681. // // int Finish = Recipes.ElementAt(i).RawMaterials.Where(p => p.RecipeStatus == 3).Count();
  682. // // if (StockStatus.Count >= Recipes.ElementAt(i).RawMaterials.Count && Finish == Recipes.ElementAt(i).RawMaterials.Count) //配方配料完成 Finish_Count >= Recipes.ElementAt(i).RawMaterials.Count
  683. // // {
  684. // // StockStatus.Clear();
  685. // // MessageNotify.GetInstance.ShowUserLog($"配方:{recipeProcesses.ElementAt(recIndex).RecipeName},配料完成");
  686. // // foreach (var item in recipeProcesses.ElementAt(recIndex).RawMaterials)
  687. // // {
  688. // // MessageNotify.GetInstance.ShowUserLog($"原料:{item.RawMaterialName},桶号:{item.Loc},设定配料重量{item.RawMaterialWeight}g,实际配料重量{item.UpLimtWeightFeedback}g");
  689. // // }
  690. // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBX202.0", true);//配料完成
  691. // // MessageNotify.GetInstance.ShowRunLog($"配方:{CurrentRecipeName},配料完成");
  692. // // int recipIndex = Array.FindIndex(Recipes.ToArray(), p => p.RecipeName == CurrentRecipeName);
  693. // // App.Current.Dispatcher.Invoke(new Action(() => { recipeProcesses.Clear(); }));
  694. // // Recipes.ElementAt(recipIndex).IsEnable = true;
  695. // // Json<LocalRecipe>.Data.Recipes.ElementAt(recipIndex).IsEnable = true;
  696. // // Recipes.ElementAt(recipIndex).Are.Set();
  697. // // Thread.Sleep(100);
  698. // // }
  699. // // }
  700. // // }
  701. // // }
  702. // //}
  703. // #endregion
  704. // #region 正式版
  705. // for (int i = 0; i < Recipes.Count; i++)
  706. // {
  707. // for (int m = 0; m < Recipes.ElementAt(i).RawMaterials.Count; m++)
  708. // {
  709. // var RunStatus = DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(m).DeviceIp).deviceStatus.RunStatus;
  710. // //设备状态显示
  711. // if (Recipes.ElementAt(i).RecipeName == CurrentRecipeName)
  712. // {
  713. // string tempRawMaterialName = DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(m).DeviceIp).DeviceName;
  714. // int recIndex = recipeProcesses.ToList().FindIndex(p => p.RecipeName == CurrentRecipeName);
  715. // if (recIndex >= 0 && recIndex < recipeProcesses.Count)
  716. // {
  717. // int index = recipeProcesses.ElementAt(recIndex).RawMaterials.ToList().FindIndex(p => p.RawMaterialName == tempRawMaterialName);
  718. // if (index >= 0 && index < recipeProcesses.ElementAt(recIndex).RawMaterials.Count)
  719. // {
  720. // //测试使用
  721. // recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(index).RecipeStatus = RunStatus;
  722. // }
  723. // for (int j = 0; j < GlobalDevice.PlcData.IsAllowIngredients.Length; j++)
  724. // {
  725. // if (GlobalDevice.PlcData.IsAllowIngredients[j])
  726. // {
  727. // int barrel = j + 1;//桶号
  728. // int cnt = GlobalDevice.PlcData.LocationFeedback[j];//允许配料的位置 1~6
  729. // if (RTrig.GetInstance($"a{j}").Start(GlobalDevice.PlcData.IsAllowIngredients[j]))
  730. // {
  731. // MessageNotify.GetInstance.ShowRunLog($"桶号:{barrel},位置:{cnt},允许配料");
  732. // }
  733. // int Location1 = 0;
  734. // int Location2 = 0;
  735. // if (cnt == -1)
  736. // {
  737. // MessageNotify.GetInstance.ShowRunLog("错误");
  738. // return;
  739. // }
  740. // else
  741. // {
  742. // if (cnt >= 1 && cnt <= 6)
  743. // {
  744. // int a1 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == cnt);
  745. // if (a1 >= 0)
  746. // {
  747. // Location1 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(a1).DeviceName && p.Loc == barrel);
  748. // }
  749. // }
  750. // }
  751. // if (Location1 >= 0)
  752. // {
  753. // string RawName = Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).RawMaterialName;
  754. // int abc = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceName == RawName);
  755. // int DeviceNum = DeviceInquire.GetInstance.devices.ElementAt(abc).DeviceNum;
  756. // if (DeviceNum > 0)
  757. // {
  758. // float weight = Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).RawMaterialWeight;
  759. // int loc = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => (p.RawMaterialName == RawName));
  760. // if (loc >= 0 && RawName != null && weight >= 0)
  761. // {
  762. // int St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
  763. // if (St_index < 0) //|| (StockStatus.Count < materialCount && St_index > 0)
  764. // {
  765. // StockStatus.Add(new StockStatusModel()
  766. // {
  767. // MaterialName = RawName,
  768. // IssueWeight = weight,
  769. // IssueStatus = 0,
  770. // });
  771. // }
  772. // St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);//&& p.IssueStatus == 0)
  773. // if (St_index >= 0)
  774. // {
  775. // if (RTrig.GetInstance($"ac{j}-{St_index}").Start(GlobalDevice.PlcData.IsAllowIngredients[j]))
  776. // {
  777. // MessageNotify.GetInstance.ShowRunLog($"{St_index}-{j}--》允许配料");
  778. // if (StockStatus.ElementAt(St_index).IssueStatus == 2)
  779. // {
  780. // StockStatus.ElementAt(St_index).IssueStatus = 0;
  781. // MessageNotify.GetInstance.ShowRunLog($"{St_index}-复位");
  782. // }
  783. // }
  784. // var rrr = DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).deviceStatus.RunStatus;
  785. // if ((recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 1 && StockStatus.ElementAt(St_index).IssueStatus == 0))//
  786. // {
  787. // StockStatus.ElementAt(St_index).IssueStatus = 1;
  788. // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).Start(weight);
  789. // var res = recipeProcesses.ElementAt(recIndex).RawMaterials.FirstOrDefault(p => p.Status != Status.正在配料 && p.Status != Status.配料完成 && p.RawMaterialName == tempRawMaterialName && p.Loc == j + 1);
  790. // if (res != null)
  791. // res.Status = Status.正在配料;
  792. // MessageNotify.GetInstance.ShowRunLog($"设备执行状态:{rrr}");
  793. // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},开始出料");
  794. // }
  795. // if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 3 && StockStatus.ElementAt(St_index).IssueStatus == 1)
  796. // {
  797. // //GlobalDevice.PlcData.IsAllowIngredients[j] = false;//测试使用
  798. // ComCount++;
  799. // StockStatus.ElementAt(St_index).IssueStatus = 2;
  800. // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).StatusReset();
  801. // //int a = 0.SetBitValue((byte)(DeviceNum), true);
  802. // //byte[] test1 = a.ToBytes(BPA.Helper.DataFormat.BADC);
  803. // //int item = test1.ToInt();
  804. // //prop1:
  805. // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD130", item);
  806. // SiemensDevice.GetInstance.MySiemens.Write($"DB4.DBX130.{DeviceNum - 1}", true);
  807. // Task.Run(() =>
  808. // {
  809. // int cout = DeviceNum - 1;
  810. // while (!SiemensDevice.GetInstance.MySiemens.Read<bool>($"DB3.DBX148.{cout}").Content) //DB3.DBX148.0-31 148.0-148.5代表6个料仓位置
  811. // {
  812. // SiemensDevice.GetInstance.MySiemens.Write($"DB4.DBX130.{cout}", true);
  813. // Thread.Sleep(200);
  814. // }
  815. // while (SiemensDevice.GetInstance.MySiemens.Read<bool>($"DB3.DBX148.{cout}").Content)
  816. // {
  817. // SiemensDevice.GetInstance.MySiemens.Write($"DB4.DBX130.{cout}", false);
  818. // }
  819. // MessageNotify.GetInstance.ShowRunLog($"{cout}号气缸复位信号写入成功!");
  820. // });
  821. // var res = recipeProcesses.ElementAt(recIndex).RawMaterials.FirstOrDefault(p => p.Status != Status.配料完成 && p.RawMaterialName == tempRawMaterialName && p.Loc == j + 1);
  822. // if (res != null)
  823. // res.Status = Status.配料完成;
  824. // MessageNotify.GetInstance.ShowRunLog($"设备完成执行状态:{rrr}");
  825. // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},出料完成,状态复位");
  826. // }
  827. // }
  828. // }
  829. // }
  830. // }
  831. // }
  832. // //508配料项目代码
  833. // //if (GlobalDevice.PlcData.IsAllowIngredients[j])
  834. // //{
  835. // // int barrel = j + 1;//桶号
  836. // // int cnt = GlobalDevice.PlcData.LocationFeedback[j];//允许配料的位置 1~10
  837. // // if (RTrig.GetInstance("a").Start(GlobalDevice.PlcData.IsAllowIngredients[j]))
  838. // // {
  839. // // MessageNotify.GetInstance.ShowRunLog($"桶号:{barrel},位置:{cnt},允许配料");
  840. // // }
  841. // // int Location1 = 0;
  842. // // if (cnt == -1)
  843. // // {
  844. // // MessageNotify.GetInstance.ShowRunLog("没有读取到配料的位置");
  845. // // return;
  846. // // }
  847. // // else
  848. // // {
  849. // // int a1 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == cnt);
  850. // // Location1 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(a1).DeviceName && p.Loc == barrel);
  851. // // }
  852. // // if (Location1 >= 0)
  853. // // {
  854. // // string RawName = Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).RawMaterialName;
  855. // // int abc = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceName == RawName);
  856. // // int DeviceNum = DeviceInquire.GetInstance.devices.ElementAt(abc).DeviceNum;
  857. // // if (DeviceNum > 0)
  858. // // {
  859. // // float weight = Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).RawMaterialWeight;
  860. // // int loc = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == RawName);
  861. // // if (loc >= 0 && RawName != null && weight >= 0)
  862. // // {
  863. // // int St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
  864. // // if (St_index < 0)
  865. // // {
  866. // // StockStatus.Add(new StockStatusModel()
  867. // // {
  868. // // MaterialName = RawName,
  869. // // IssueWeight = weight,
  870. // // IssueStatus = 0,
  871. // // });
  872. // // }
  873. // // St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
  874. // // if (St_index >= 0)
  875. // // {
  876. // // if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 1 && StockStatus.ElementAt(St_index).IssueStatus == 0)
  877. // // {
  878. // // StockStatus.ElementAt(St_index).IssueStatus = 1;
  879. // // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).Start(weight);
  880. // // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},开始出料");
  881. // // }
  882. // // if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 3 && StockStatus.ElementAt(St_index).IssueStatus == 1)
  883. // // {
  884. // // //GlobalDevice.PlcData.IsAllowIngredients[j] = false;//测试使用
  885. // // StockStatus.ElementAt(St_index).IssueStatus = 2;
  886. // // DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).StatusReset();
  887. // // /*int a = 0.SetBitValue((byte)(DeviceNum), true);
  888. // // byte[] test1 = a.ToBytes(BPA.Helper.DataFormat.ABCD);
  889. // // int item = test1.ToInt();*/
  890. // // if (DeviceNum >= 1 && DeviceNum <= 8)
  891. // // {
  892. // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBX130." + (DeviceNum - 1), true);
  893. // // }else if (DeviceNum >= 9 && DeviceNum <= 16)
  894. // // {
  895. // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBX131." + (DeviceNum - 9), true);
  896. // // }
  897. // // else if (DeviceNum >=17 && DeviceNum <= 24)
  898. // // {
  899. // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBX132." + (DeviceNum - 17), true);
  900. // // }else if (DeviceNum >= 25 && DeviceNum <= 32)
  901. // // {
  902. // // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBX133." + (DeviceNum - 25), true);
  903. // // }
  904. // // MessageNotify.GetInstance.ShowRunLog($"料仓:{DeviceNum},配料完成");
  905. // // /*string res = SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD130", item, 2);
  906. // // MessageNotify.GetInstance.ShowRunLog($"{res}");
  907. // // MessageNotify.GetInstance.ShowRunLog($"DB4.DBD130:{item.ToBinString()}");*/
  908. // // MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},出料完成,状态复位");
  909. // // }
  910. // // }
  911. // // }
  912. // // }
  913. // // }
  914. // //}
  915. // }
  916. // if (ComCount >= Recipes.ElementAt(i).RawMaterials.Count) //配方配料完成 StockStatus.Count >= Recipes.ElementAt(i).RawMaterials.Count &&
  917. // {
  918. // int cc = recipeProcesses.ElementAt(recIndex).RawMaterials.OrderBy(p => p.RawMaterialName).Count();
  919. // for (int k = 0; k < 32; k++)
  920. // {
  921. // for (int l = 0; l < cc; l++)
  922. // {
  923. // RTrig.GetInstance($"ac{k}-{l}").Start(false);
  924. // }
  925. // }
  926. // ComCount = 0;
  927. // StockStatus.Clear();
  928. // MessageNotify.GetInstance.ShowUserLog($"配方:{recipeProcesses.ElementAt(recIndex).RecipeName},配料完成");
  929. // foreach (var item in recipeProcesses.ElementAt(recIndex).RawMaterials)
  930. // {
  931. // MessageNotify.GetInstance.ShowUserLog($"原料:{item.RawMaterialName},桶号:{item.Loc},设定配料重量{item.RawMaterialWeight}g,实际配料重量{item.UpLimtWeightFeedback}g");
  932. // }
  933. // SiemensDevice.GetInstance.MySiemens.Write("DB4.DBX202.0", true);//配料完成
  934. // MessageNotify.GetInstance.ShowRunLog($"配方:{CurrentRecipeName},配料完成");
  935. // int recipIndex = Array.FindIndex(Recipes.ToArray(), p => p.RecipeName == CurrentRecipeName);
  936. // App.Current.Dispatcher.Invoke(new Action(() => { recipeProcesses.Clear(); }));
  937. // Recipes.ElementAt(recipIndex).IsEnable = true;
  938. // Json<LocalRecipe>.Data.Recipes.ElementAt(recipIndex).IsEnable = true;
  939. // Recipes.ElementAt(recipIndex).Are.Set();
  940. // Thread.Sleep(100);
  941. // }
  942. // }
  943. // }
  944. // }
  945. // }
  946. // #endregion
  947. // Thread.Sleep(100);
  948. // }), "RecipeControlViewModelStatusInquire", true);
  949. //}
  950. public BPARelayCommand<object> StartCommand { get; set; }
  951. //public BPARelayCommand<object> ChangeRecipeStateCommand { get; set; }
  952. public BPARelayCommand<object> CancelRecipeCommand { get; set; }
  953. public static ObservableCollection<RecipeModel> Recipes { get; set; } =ExcuteControl.GetInstance.Recipes;
  954. // public static string CurrentRecipeName { get { return _RecipeName; } set { _RecipeName = value; OnStaticPropertyChanged(); } }
  955. // private static string _RecipeName;
  956. /// <summary>
  957. /// 当前正在制作的配方
  958. /// </summary>
  959. public static ObservableCollection<RecipeModel> recipeProcesses { get; set; } = ExcuteControl.GetInstance.recipeProcesses;
  960. /// <summary>
  961. /// 等待制作的配方
  962. /// </summary>
  963. //public static ObservableCollection<RecipeModel> UserTreeWait { get; set; } = new ObservableCollection<RecipeModel>();
  964. /// <summary>
  965. /// 已完成的配方
  966. /// </summary>
  967. //public static ObservableCollection<RecipeModel> UserTreeCompelete { get; set; } = new ObservableCollection<RecipeModel>();
  968. //private void ChangeRecipeState(object o)
  969. //{
  970. // if (o == null) return;
  971. // if (o is string id)
  972. // {
  973. // var Recipe = recipeProcesses.FirstOrDefault(p => p.RecipeName == CurrentRecipeName);
  974. // if (Recipe != null)
  975. // {
  976. // var res = Recipe.RawMaterials.FirstOrDefault(p => p.RawMaterialId == id);
  977. // //var res1=Recipe.RawMaterials.Where(p => p.RawMaterialId == id);
  978. // if (res != null)
  979. // {
  980. // if (res.RecipeStatus == 3)
  981. // {
  982. // res.RecipeStatus = 1;
  983. // }
  984. // else
  985. // {
  986. // res.RecipeStatus = 3;
  987. // }
  988. // }
  989. // }
  990. // }
  991. //}
  992. }
  993. }