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; 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)); //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; default: break; } } if ((bool)CheckUpdate) { // 读取内容检查 StringBuilder builder = new StringBuilder(); if (WorkPieceID != null) { if (WorkPieceID.ToString().Length != 22) { builder.AppendLine("工件二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位!"); } 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; } // 把对应的工件信息写入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; } Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"工序HML写入监控,数据返回格式异常:" + builder.ToString()); continue; } info.QualityState = Convert.ToInt32(QualityState); info.QualityStateUpdateUser = "HMI"; info.QualityStateUpdateTime = DateTime.Now; info.QualityStateUpdateMode = "自动"; info.QualityErrorInfo = QualityErrorInfo.ToString(); // 写入工件接收信息履历 //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; db.WorkPieceLog.Add(wplog); db.SaveChanges(); } 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) { 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; 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写入监控, 不做校验,请确认是否配置异常"); } } } }