using HighWayIot.Log4net; using HighWayIot.Plc; using HighWayIot.Plc.PlcHelper; using HighWayIot.Repository.domain; using HighWayIot.Repository.service; using Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Schema; using Timer = System.Threading.Timer; namespace HighWayIot.Winform.Business { /// /// 排程信号业务类 /// public class RecipeSendBusiness { private Timer GetSchedulingTimer; private RecipeSignal recipeSignal = new RecipeSignal(); private ZxSchedulingService zxSchedulingService = ZxSchedulingService.Instance; private ZxRecipeParaService zxRecipeParaService = ZxRecipeParaService.Instance; private ZxRecipePositionParaService zxRecipePositionParaService = ZxRecipePositionParaService.Instance; private RecipeParaHelper recipeParaHelper = new RecipeParaHelper(); public static int RecipeNeededVehicleNo = 0; public RecipeSendBusiness() { //GetSchedulingTimer = new Timer(new System.Threading.TimerCallback(ReadSignal), null, 0, 1000); } /// /// 重复读取 /// /// public void ReadSignal(object o) { Dictionary a = recipeSignal.ReadSchedulingSignal(); if (a == null) { return; } foreach (var item in a) { if (item.Value) { var schedulingInfo = zxSchedulingService.GetSchedulingInfo(); string recipeNo; ZxRecipeParaEntity recipeParaInfo; List zxRecipePositionParaEntities; if ((item.Key + 1) <= 62) { recipeNo = schedulingInfo.Single(x => x.Id == item.Key + 1).RecipeCode1; recipeParaInfo = zxRecipeParaService.GetRecipeParaInfoByRecipeCode(recipeNo).FirstOrDefault(); zxRecipePositionParaEntities = zxRecipePositionParaService.GetRecipePositionParaInfos(x => x.RecipeCode == recipeNo); if (recipeParaInfo == null) { LogHelper.Instance.Error("配方信息获取失败"); return; } if (recipeParaHelper.UploadToPLC(recipeParaInfo, zxRecipePositionParaEntities)) { PlcConnect.MelsecInstance2.Write($"B{(item.Key + 0x901).ToString("X")}", false); int deviceNo = schedulingInfo.Single(x => x.Id == item.Key + 1).DeviceNo ?? 0; MonitorInsert(recipeNo, $"{deviceNo}上模"); } } else { recipeNo = schedulingInfo.Single(x => x.Id == item.Key + 1).RecipeCode2; recipeParaInfo = zxRecipeParaService.GetRecipeParaInfoByRecipeCode(recipeNo).FirstOrDefault(); zxRecipePositionParaEntities = zxRecipePositionParaService.GetRecipePositionParaInfos(x => x.RecipeCode == recipeNo); if (recipeParaInfo == null) { LogHelper.Instance.Error("配方信息获取失败"); return; } if (recipeParaHelper.UploadToPLC(recipeParaInfo, zxRecipePositionParaEntities)) { PlcConnect.MelsecInstance2.Write($"B{(item.Key + 0x941).ToString("X")}", false); int deviceNo = schedulingInfo.Single(x => x.Id == item.Key + 1 - 62).DeviceNo ?? 0; MonitorInsert(recipeNo, $"{deviceNo}下模"); } } return; } } } /// /// 监控画面信息插入 /// public void MonitorInsert(string recipeCode, string deviceNo) { ZxRecipeEntity recipeEntity = ZxRecipeService.Instance.GetRecipeInfosByRecipeCode(recipeCode).FirstOrDefault(); if (recipeEntity == null) { return; } ZxDailyReportEntity entity = new ZxDailyReportEntity() { Uuid = Guid.NewGuid().ToString("N"), VulcanizationNo = deviceNo, StartTime = DateTime.Now, RecipeName = recipeEntity.RecipeName, RecipeCode = recipeEntity.RecipeCode, SpecCode = recipeEntity.RecipeSpecCode, DeviceNo = RecipeNeededVehicleNo, IsDone = 0 }; ZxDailyReportService.Instance.InsertDailyReportInfo(entity); } } }