schangxiang@126.com
2025-01-02 6f035bae8e9ce978c49941518de57585b77e8d7d
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/Special/DataCaptureHandler_OP7009.cs
@@ -1,4 +1,5 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.BLL.Important;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using log4net;
@@ -62,19 +63,19 @@
                }
                while (true)
                {
                    ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    threadStatusMonitor.Threadcode = DataCapturePointCode;
                    threadStatusMonitor.Threadcname = DataCapturePointCname;
                    threadStatusMonitor.Threadendtime = DateTime.Now;
                    //threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    threadStatusMonitor.Threadstatue = 0;
                    threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    //ThreadStatusMonitor threadStatusMonitor = new ThreadStatusMonitor();
                    //threadStatusMonitor.Threadcode = DataCapturePointCode;
                    //threadStatusMonitor.Threadcname = DataCapturePointCname;
                    //threadStatusMonitor.Threadendtime = DateTime.Now;
                    ////threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                    //threadStatusMonitor.Threadstatue = 0;
                    //threadStatusMonitor.ThreadId = Thread.CurrentThread.ManagedThreadId.ToString();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            // threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.lbl_Alert_OP1002 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.PLCServiceReconnect(plcService);
@@ -85,20 +86,42 @@
                        }
                        else
                        {
                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now} *****0***");
                            //获取OP70未结束的工件列表
                            var ooDateTime = Convert.ToDateTime("0001-01-01");
                            var findTime = DateTime.Now.AddHours(-12);
                            List<WorkPieceProcess> noFinishWorkPieceProcessList = null;
                            using (DbModel db = new DbModel())
                            {
                                var dateTime = DateTime.Now;
                                noFinishWorkPieceProcessList = db.WorkPieceProcess.Where(x =>
                                x.WorkingProcedureCurrent == WorkingProcedure
                               && (
                            (x.CreatedTime >= findTime
                                  && x.EndTime == ooDateTime)
                                  || x.Update70Flag == 1
                                  )
                                  ).ToList();
                            }
                            if (noFinishWorkPieceProcessList?.Count <= 0)
                            {
                                continue;
                            }
                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now}***1****");
                            threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                            // threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                            WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                            wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                            wplog.WorkingProcedure = WorkingProcedure;
                            wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                            wplog.Remarks = WorkingProcedure;
                            wplog.MonitoringPoint = DataCapturePointCode;
                            //wplog.CreatedUserName = DataCapturePointCode;
                            SystemBussinessHelper.SetWorkPieceLogMiddleForCreatedUserName(ref wplog, DataCapturePointCode, DataCapturePointCname);
                            wplog.CreatedTime = DateTimeHelper.GetDateTime();
                            wplog.CreatedUserName = DataCapturePointCode;
                            wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                            wplog.UpdatedUserName = Environment.MachineName + "自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                            wplog.OnlineTime = DateTimeHelper.GetDateTime();
@@ -114,9 +137,9 @@
                                    var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                    if (set == null)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 读取工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                        Log4NetHelper.WriteErrorLog(LogType.OP7009, $" {WorkingProcedure}工序监控读码标记 读取工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                    }
                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now}***2****{col.DataCaptureColumnTabelName} 值 {valuecol.ToString() ?? ""}");
                                    Log4NetHelper.WriteInfoLog(LogType.OP7009, $" {DataCapturePointCode}工序测标记读取{DateTime.Now}***2****{col.DataCaptureColumnTabelName} 值 {valuecol.ToString() ?? ""}");
                                    if (col.DataCaptureColumnTabelName.Contains("Quality"))
                                    {//字段名包含Quality是认为是质量数据,都是转换成string
@@ -129,70 +152,46 @@
                                }
                                catch (Exception setex)
                                {
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 读取工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                    Log4NetHelper.WriteErrorLog(LogType.OP7009, $" {WorkingProcedure}工序监控读码标记 读取工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                }
                            }
                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now}***3****");
                            if (string.IsNullOrEmpty(wplog.QualityOP70To1) && string.IsNullOrEmpty(wplog.QualityOP70To2) && string.IsNullOrEmpty(wplog.QualityOP70To3))
                            {
                                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}质量信息三个值都是空的:");
                                //Log4NetHelper.WriteInfoLog(LogType.OP7009, $"读取 {DataCapturePointCode}质量信息三个值都是空的:");
                                continue;
                            }
                            //获取OP70未结束的工件列表
                            var ooDateTime = Convert.ToDateTime("0001-01-01");
                            List<WorkPieceProcess> noFinishWorkPieceProcessList = null;
                            using (DbModel db = new DbModel())
                            {
                                var dateTime = DateTime.Now;
                                noFinishWorkPieceProcessList = db.WorkPieceProcess.Where(x => x.CreatedTime >= DateTime.Now.AddHours(-12)
                                  && x.WorkingProcedureCurrent == WorkingProcedure
                                  && x.EndTime == ooDateTime).ToList();
                            }
                            if (noFinishWorkPieceProcessList?.Count > 0)
                            {
                                foreach (var item in noFinishWorkPieceProcessList)
                                {
                                    wplog.WorkPieceID = item.WorkPieceID;
                                    WorkPieceInfoManager.QualityInfoCompleteForOP70(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                    threadStatusMonitor.Threadstatue = 1;
                                    QualityInfoCompleteManager.QualityInfoCompleteForOP70(wplog, LogType.OP7009);
                                    // threadStatusMonitor.Threadstatue = 1;
                                }
                            }
                            else
                            {
                                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}质量信息三个值有值,但是获取OP70未结束的工件列表为空:");
                            }
                        }
                        SystemValue.lbl_Alert_OP1002 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                        Thread.Sleep(5000);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP1002 = $" {RandomHelper.GenerateRandomCode(4)} 读取{DataCapturePointCode}质量信息 出现异常,请查看日志!";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}质量信息时异常:", ex);
                        Log4NetHelper.WriteErrorLog(LogType.OP7009, $"读取 {DataCapturePointCode}质量信息时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                        //WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP1002 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}质量信息 不做校验,请确认配置信息!";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}质量信息 不做校验,请确认是否配置异常");
                Log4NetHelper.WriteInfoLog(LogType.OP7009, $"{DataCapturePointCode}质量信息 不做校验,请确认是否配置异常");
            }
        }