using iWare_SCADA_BusinessLogical.BLL; using iWare_SCADA_BusinessLogical.Utils; using iWare_SCADA_Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace iWare_SCADA_BusinessLogical { /// /// HML读取 /// public class HMI_WorkpieceReading : DataCaptureHandler { public static readonly HMI_WorkpieceReading Instance = new HMI_WorkpieceReading(); /// /// /// public HMI_WorkpieceReading() { } /// /// /// 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) { } /// /// 清除HMI上显示(二维码不能清) /// /// public void ClertHMI(PLCService plcService, List colConfig) { foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode)) { switch (col.DataCaptureColumnTabelName) { case "WorkPieceID": //plcService.WriteValuePointNew(col.DbNumber, col.Offset, info.WorkPieceID); break; case "WorkingProcedureCurrent": plcService.WriteValuePointNew(col.DbNumber, col.Offset, 0); break; case "WorkPieceState": plcService.WriteValuePointNew(col.DbNumber, col.Offset, 0); break; case "QualityState": plcService.WriteValuePointNew(col.DbNumber, col.Offset, 0); break; case "NoOkReason"://不合格原因 【Editby shaocx,2024-06-23】 plcService.WriteValuePointNew(col.DbNumber, col.Offset, 0); break; case "QualityErrorInfo": plcService.WriteValuePointNew(col.DbNumber, col.Offset, 0); break; default: break; } } } /// /// 数据采集开始 /// public override void DataCaptureStart() { if (IsCaptureflag) { var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig); if (plcService == null) { switch (_dataCaptureConfig.DataCapturePointCode) { case "RHMIOP104001": SystemValue.lbl_Alert_HMIOP104001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备"; break; case "RHMIOP2001": SystemValue.lbl_Alert_HMIOP2001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备"; break; case "RHMIOP303501": SystemValue.lbl_Alert_HMIOP303501 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备"; break; case "RHMIOP5001": SystemValue.lbl_Alert_HMIOP5001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备"; break; case "RHMIOP6001": 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) { SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; //switch (_dataCaptureConfig.DataCapturePointCode) //{ // case "RHMIOP104001": // SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; // break; // case "RHMIOP2001": // SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; // break; // case "RHMIOP303501": // SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; // break; // case "RHMIOP5001": // SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; // break; // case "RHMIOP6001": // SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!"; // break; // default: // break; //} plcService.Close(); plcService.OpenService(); Thread.Sleep(100); continue; } else { SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)}"; SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)}"; SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)}"; SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)}"; SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)}"; object value1 = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, "88", 2, PLCManger.GetTypeForString("int")); string value2 = value1 == null ? "" : value1.ToString().Trim(); if ("50".Equals(value2)) { ClertHMI(plcService, colConfig); } else if ("21".Equals(value2)) { ClertHMI(plcService, colConfig); //10:数采读取失败 //11 :数采读取成功 //21:扫码成功标记 plcService.WriteValuePointNew(_dataCaptureConfig.DbNumber, "88", 11); object value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, _dataCaptureConfig.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType)); if (value != null) { string WorkPieceID = value.ToString().Trim(); //if (WorkPieceID.Length == 22) if (WorkPieceID.Length > 20) { // 根据工件号获取工件信息 WorkPieceInfo info = null; WorkPieceProcess process = null; using (DbModel db = new DbModel()) { info = new WorkPieceInfo(); info = db.WorkPieceInfo.Where(o => o.WorkPieceID == WorkPieceID && o.IsDeleted == false).FirstOrDefault(); process = db.WorkPieceProcess.Where(o => o.WorkPieceID == WorkPieceID && !o.OperationType.Equals("SPC") && o.IsDeleted == false) .OrderByDescending(o => o.CreatedTime).FirstOrDefault(); } if (info != null && info.Id > 0) { var workProcedure = EnumberHelper.GetEnumForString(info.WorkingProcedureCurrent); // 把对应的工件信息写入PLC对应地址 foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode)) { switch (col.DataCaptureColumnTabelName) { case "WorkPieceID": //plcService.WriteValuePointNew(col.DbNumber, col.Offset, info.WorkPieceID); break; case "WorkingProcedureCurrent": plcService.WriteValuePointNew(col.DbNumber, col.Offset, (int)workProcedure); break; case "WorkPieceState": plcService.WriteValuePointNew(col.DbNumber, col.Offset, info.WorkPieceState); break; case "QualityState": plcService.WriteValuePointNew(col.DbNumber, col.Offset, info.QualityState); break; case "NoOkReason"://不合格原因 【Editby shaocx,2024-06-23】 plcService.WriteValuePointNew(col.DbNumber, col.Offset, info.QualityNoOk ?? 0); break; case "ReaderEndState": plcService.WriteValuePointNew(col.DbNumber, col.Offset, 11); break; case "DataSource": if (process != null) { plcService.WriteValuePointNew(col.DbNumber, col.Offset, process.CreatedUserName ?? "Empty"); } else { plcService.WriteValuePointNew(col.DbNumber, col.Offset, "NOSource"); } break; default: break; } } } else { foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode)) { switch (col.DataCaptureColumnTabelName) { case "ReaderEndState": plcService.WriteValuePointNew(col.DbNumber, col.Offset, 10); break; default: break; } } switch (_dataCaptureConfig.DataCapturePointCode) { case "RHMIOP104001": SystemValue.lbl_Alert_HMIOP104001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】在数据库中不存在"; break; case "RHMIOP2001": SystemValue.lbl_Alert_HMIOP2001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】在数据库中不存在"; break; case "RHMIOP303501": SystemValue.lbl_Alert_HMIOP303501 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】在数据库中不存在"; break; case "RHMIOP5001": SystemValue.lbl_Alert_HMIOP5001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】在数据库中不存在"; break; case "RHMIOP6001": SystemValue.lbl_Alert_HMIOP6001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】在数据库中不存在"; break; default: break; } Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"HMI读取监控 二维码值:【" + WorkPieceID + "】在数据库中不存在"); } } else if (WorkPieceID.Length > 0) { foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode)) { switch (col.DataCaptureColumnTabelName) { case "ReaderEndState": plcService.WriteValuePointNew(col.DbNumber, col.Offset, 10); break; default: break; } } switch (_dataCaptureConfig.DataCapturePointCode) { case "RHMIOP104001": SystemValue.lbl_Alert_HMIOP104001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位"; break; case "RHMIOP2001": SystemValue.lbl_Alert_HMIOP2001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位"; break; case "RHMIOP303501": SystemValue.lbl_Alert_HMIOP303501 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位"; break; case "RHMIOP5001": SystemValue.lbl_Alert_HMIOP5001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位"; break; case "RHMIOP6001": SystemValue.lbl_Alert_HMIOP6001 = $"HMI读取监控 二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位"; break; default: break; } Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"HMI读取监控 二维码值:【" + WorkPieceID + "】长度异常,长度不等于22位"); } } //else //{ // foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode)) // { // switch (col.DataCaptureColumnTabelName) // { // case "ReaderEndState": // plcService.WriteValuePointNew(col.DbNumber, col.Offset, 10); // break; // default: // break; // } // } //} } } if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10) { //Thread.Sleep(1000); //减少延迟 【Editby shaocx,2024-08-22】 Thread.Sleep(100); } else { //Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value); //减少延迟 【Editby shaocx,2024-08-22】 Thread.Sleep(100); } } catch (Exception ex) { switch (_dataCaptureConfig.DataCapturePointCode) { case "RHMIOP104001": SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!"; break; case "RHMIOP2001": SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!"; break; case "RHMIOP303501": SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!"; break; case "RHMIOP5001": SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!"; break; case "RHMIOP6001": SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序HMI读取二维码监控,出现异常,请查看日志!"; break; default: break; } Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {WorkingProcedure}工序HMI读取二维码监控,数据时异常:", ex); } } } else { switch (_dataCaptureConfig.DataCapturePointCode) { case "RHMIOP104001": SystemValue.lbl_Alert_HMIOP104001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!"; break; case "RHMIOP2001": SystemValue.lbl_Alert_HMIOP2001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!"; break; case "RHMIOP303501": SystemValue.lbl_Alert_HMIOP303501 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!"; break; case "RHMIOP5001": SystemValue.lbl_Alert_HMIOP5001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!"; break; case "RHMIOP6001": SystemValue.lbl_Alert_HMIOP6001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认配置信息!"; break; default: break; } Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{WorkingProcedure}工序HML读取二维码监控 不做数据采集,请确认是否配置异常"); } } } }