using iWare.Wms.Core; using iWare_SCADA_BusinessLogical.BLL; using iWare_SCADA_BusinessLogical.Utils; using iWare_SCADA_Model; using System; using System.Collections.Generic; using System.Data.Entity.Migrations; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Web.UI.WebControls; namespace iWare_SCADA_BusinessLogical { /// /// HMI写入 /// public class HMI_WorkpieceWrite : DataCaptureHandler { public static readonly HMI_WorkpieceWrite Instance = new HMI_WorkpieceWrite(); /// /// /// public HMI_WorkpieceWrite() { } /// /// /// public override string WorkingProcedure { get { return _dataCaptureConfig.WorkingProcedure; } } /// /// /// public override string DataCapturePointCode { get { return _dataCaptureConfig.DataCapturePointCode; } } /// /// /// public override string DataCapturePointCname { get { return _dataCaptureConfig.DataCapturePointCname; } } /// /// 刷新数据列表 /// /// public override void RefreshDataList(List dataCaptureConfig) { } /// /// 数据采集开始 /// public override void DataCaptureStart() { if (IsCaptureflag) { var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig); if (plcService == null) { switch (_dataCaptureConfig.DataCapturePointCode) { case "WHMIOP104002": SystemValue.lbl_Alert_HMIOP104001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备"; break; case "WHMIOP2002": SystemValue.lbl_Alert_HMIOP2001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备"; break; case "WHMIOP303502": SystemValue.lbl_Alert_HMIOP303501 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备"; break; case "WHMIOP5002": SystemValue.lbl_Alert_HMIOP5001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备"; break; case "WHMIOP6002": SystemValue.lbl_Alert_HMIOP6001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备"; break; default: break; } return; } if (plcService != null && !plcService.IsConnected) { plcService.Close(); plcService.OpenService(); } while (true) { try { if (plcService == null && !plcService.IsConnected) { switch (_dataCaptureConfig.DataCapturePointCode) { case "WHMIOP104002": SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; break; case "WHMIOP2002": SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; break; case "WHMIOP303502": SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; break; case "WHMIOP5002": SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; break; case "WHMIOP6002": SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; break; default: break; } plcService.Close(); plcService.OpenService(); Thread.Sleep(100); continue; } else { Object WorkPieceID = null; Object QualityState = null; Object CheckUpdate = null; Object QualityErrorInfo = null; Object WorkingProcedureInt = null; string WorkingProcedureCurrent = ""; int UpdateIsOK = 0; // 把对应的工件信息写入PLC对应地址 foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode)) { switch (col.DataCaptureColumnTabelName) { case "WorkPieceID": WorkPieceID = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType)); break; case "QualityState": QualityState = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType)); break; case "CheckUpdate": CheckUpdate = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType)); if ((bool)CheckUpdate) { var check = plcService.WriteValuePointNew(col.DbNumber, col.Offset, false); } //plcService.WriteValuePoint(col.DbNumber, col.Offset, 0, PLCManger.GetTypeForString(col.DataCaptureColumnType)); break; case "QualityErrorInfo": QualityErrorInfo = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType)); break; case "UpdateIsOK": UpdateIsOK = col.IsFeedback; break; case "WorkingProcedureCurrent": WorkingProcedureInt = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType)); WorkingProcedureCurrent = EnumberHelper.GetEnumName((int)WorkingProcedureInt).ToString(); break; default: break; } } if ((bool)CheckUpdate) { // 读取内容检查 StringBuilder builder = new StringBuilder(); if (WorkPieceID != null) { if (WorkPieceID.ToString().Trim().Length == 0) { builder.AppendLine("工件二维码值:【" + WorkPieceID.ToString().Trim() + "】长度异常,长度不等于22位!"); } //if (WorkPieceID.ToString().Length != 22) //{ // builder.AppendLine("工件二维码值:【" + WorkPieceID.ToString().Trim() + "】长度异常,长度不等于22位!"); //} if (WorkingProcedureCurrent.Length < 4) { builder.AppendLine("工件工序:【" + WorkingProcedureInt + "】长度异常,不在约定枚举范围内!"); } if (QualityState == null) { builder.AppendLine("工件二维码值:【" + WorkPieceID + "】质量状态不能为空"); } else { if ((int)QualityState != 1 && (int)QualityState != 2 && (int)QualityState != 3) { builder.AppendLine("工件二维码值:【" + WorkPieceID + "】质量状态【" + QualityState + "】错误,只能为1:合格 2:不合格 3:疑似"); } else if ((int)QualityState == 2 || (int)QualityState == 3) { if (QualityErrorInfo == null || string.IsNullOrEmpty(QualityErrorInfo.ToString())) { builder.AppendLine("工件二维码值:【" + WorkPieceID + "】质量不合格原因不能为空"); } } } } if (!string.IsNullOrEmpty(builder.ToString())) { switch (_dataCaptureConfig.DataCapturePointCode) { case "WHMIOP104002": SystemValue.lbl_Alert_HMIOP104001 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString(); break; case "WHMIOP2002": SystemValue.lbl_Alert_HMIOP2001 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString(); break; case "WHMIOP303502": SystemValue.lbl_Alert_HMIOP303501 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString(); break; case "WHMIOP5002": SystemValue.lbl_Alert_HMIOP5001 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString(); break; case "WHMIOP6002": SystemValue.lbl_Alert_HMIOP6001 = $"{WorkingProcedure}工序HML写入监控,数据返回格式异常:" + builder.ToString(); break; default: break; } plcService.WriteValuePointNew(_dataCaptureConfig.DbNumber, "88", 30); //// 把对应的工件信息写入PLC对应地址 //foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode)) //{ // switch (col.DataCaptureColumnTabelName) // { // case "UpdateIsOK": // var aa = plcService.WriteValuePointNew(col.DbNumber, col.Offset, false); // break; // default: // //plcService.WriteValuePoint(col.DbNumber, col.Offset, "", PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType)); // break; // } //} Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"工序HML写入监控,数据返回格式异常:" + builder.ToString()); continue; } // 工件信息 WorkPieceInfo info = null; // 工件接收信息履历 WorkPieceLog wplog = new WorkPieceLog(); using (DbModel db = new DbModel()) { info = new WorkPieceInfo(); info = db.WorkPieceInfo.Where(o => o.WorkPieceID == WorkPieceID.ToString() && o.IsDeleted == false).FirstOrDefault(); if (info == null) { switch (_dataCaptureConfig.DataCapturePointCode) { case "WHMIOP104002": SystemValue.lbl_Alert_HMIOP104001 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在"; break; case "WHMIOP2002": SystemValue.lbl_Alert_HMIOP2001 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在"; break; case "WHMIOP303502": SystemValue.lbl_Alert_HMIOP303501 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在"; break; case "WHMIOP5002": SystemValue.lbl_Alert_HMIOP5001 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在"; break; case "WHMIOP6002": SystemValue.lbl_Alert_HMIOP6001 = $"工件{WorkPieceID},{WorkingProcedure}工序HML写入监控时,工件信息表中不存在"; break; default: break; } plcService.WriteValuePointNew(_dataCaptureConfig.DbNumber, "88", 30); Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"工序HML写入监控,数据返回格式异常:" + builder.ToString()); continue; } QualityStateEnum qualityStateEnum = (QualityStateEnum)Enum.Parse(typeof(QualityStateEnum), QualityState.ToString()); info.QualityState = Convert.ToInt32(QualityState); if (qualityStateEnum == QualityStateEnum.OK) { info.QualityNoOk = 0;//清理不合格原因 【Editby shaocx,2024-12-19】 info.QualityNoOkReason = ""; } info.QualityStateUpdateUser = "HMI"; info.QualityStateUpdateTime = DateTime.Now; info.QualityStateUpdateMode = Environment.MachineName + "自动"; info.QualityErrorInfo = QualityErrorInfo.ToString(); if (!info.WorkingProcedureCurrent.Equals(WorkingProcedureCurrent)) { info.Remarks = ($"HMI修改工序{info.WorkingProcedureCurrent}到{WorkingProcedureCurrent}"); info.WorkingProcedureCurrent = WorkingProcedureCurrent; info.WorkingProcedureCurrent = WorkingProcedureCurrent; } // 写入工件接收信息履历 ////wplog = CommonManager.Instance.GetWorkPieceID(wplog, LogType.PLCHMI04); //wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId(); //wplog.WorkPieceID = info.WorkPieceID; //wplog.WorkingProcedure = WorkingProcedure; //wplog.EquipmentID = WorkingProcedure; //wplog.Remarks = WorkingProcedure; //wplog.MonitoringPoint = DataCapturePointCode; //wplog.QualityState = Convert.ToInt32(QualityState); //wplog.CreatedTime = DateTimeHelper.GetDateTime(); //wplog.CreatedUserName = DataCapturePointCode; //wplog.IsDeleted = false; //wplog.OnlineTime = info.WorkPieceinitOnlineTime; wplog = EntityPropHelper.Mapper(info); wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId(); //1:合格 2:不合格 3:疑似" wplog.Remarks = $"HMI更新工件质量信息,修改为[{qualityStateEnum.ToString()}]"; wplog.PieceLogType = (int)PieceLogTypeEnum.HMI修改质量状态; wplog.PieceLogTypeName = PieceLogTypeEnum.HMI修改质量状态.ToString(); wplog.OnlineTime = info.WorkPieceinitOnlineTime; if (qualityStateEnum == QualityStateEnum.OK) { wplog.QualityNoOk = 0;//清理不合格原因 【Editby shaocx,2024-12-19】 wplog.QualityNoOkReason = ""; } db.WorkPieceLog.Add(wplog); db.WorkPieceInfoLog.Add(WorkPieceInfoManager.GetAddWorkPieceInfoLog(info)); db.SaveChanges(); } plcService.WriteValuePointNew(_dataCaptureConfig.DbNumber, "88", 31); //if (UpdateIsOK == 1) //{ // // 把对应的工件信息写入PLC对应地址 // foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode)) // { // switch (col.DataCaptureColumnTabelName) // { // case "UpdateIsOK": // var aa = plcService.WriteValuePointNew(col.DbNumber, col.Offset, true); // break; // //case "WorkPieceID": // // plcService.WriteValuePointNew(col.DbNumber, col.Offset, ""); // // break; // default: // //plcService.WriteValuePoint(col.DbNumber, col.Offset, "", PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType)); // break; // } // } //} } } if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10) { Thread.Sleep(5000); } else { Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value); } } catch (Exception ex) { plcService.WriteValuePointNew(_dataCaptureConfig.DbNumber, "88", 30); //foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode)) //{ // switch (col.DataCaptureColumnTabelName) // { // case "UpdateIsOK": // var aa = plcService.WriteValuePointNew(col.DbNumber, col.Offset, false); // break; // default: // break; // } //} switch (_dataCaptureConfig.DataCapturePointCode) { case "WHMIOP104002": SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!"; break; case "WHMIOP2002": SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!"; break; case "WHMIOP303502": SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!"; break; case "WHMIOP5002": SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!"; break; case "WHMIOP6002": SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!"; break; default: break; } Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {WorkingProcedure}工序HML写入监控,数据时异常:", ex); } } } else { switch (_dataCaptureConfig.DataCapturePointCode) { case "WHMIOP104002": SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!"; break; case "WHMIOP2002": SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!"; break; case "WHMIOP303502": SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!"; break; case "WHMIOP5002": SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!"; break; case "WHMIOP6002": SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!"; break; default: break; } Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{WorkingProcedure}工序HML写入监控, 不做校验,请确认是否配置异常"); } } } }