schangxiang@126.com
2024-09-05 09a12e1094e90fe83c5578de64b56e9237c60507
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/DataCaptureHandler_01.cs
@@ -45,46 +45,46 @@
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            if (SystemValue.isStartedImitateModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLog wplog = new WorkPieceLog();
                wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                wplog.WorkingProcedure = WorkingProcedure;
                wplog.EquipmentID = WorkingProcedure;
                wplog.Remarks = WorkingProcedure;
                wplog.MonitoringPoint = DataCapturePointCode;
                wplog.CreatedTime = DateTimeHelper.GetDateTime();
                wplog.CreatedUserName = DataCapturePointCode;
                wplog.IsDeleted = false;
                //var valuecol = plcService.ReadValuePoint("2050", "28", 25, typeof(string));
                //WorkPieceLog wplog = new WorkPieceLog();
                //wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                //wplog.WorkingProcedure = WorkingProcedure;
                //wplog.EquipmentID = WorkingProcedure;
                //wplog.Remarks = WorkingProcedure;
                //wplog.MonitoringPoint = DataCapturePointCode;
                //wplog.CreatedTime = DateTimeHelper.GetDateTime();
                //wplog.CreatedUserName = DataCapturePointCode;
                //wplog.IsDeleted = false;
                ////var valuecol = plcService.ReadValuePoint("2050", "28", 25, typeof(string));
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.WorkPieceID = WorkPieceID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
                //wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                //wplog.WorkPieceID = WorkPieceID;
                //wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                //wplog.UpdatedUserName = DataCapturePointCode;
                //wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
                //var valueid = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, _dataCaptureConfig.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                //wplog.WorkPieceID = PLCManger.GetWorkPieceIDForPLC(_dataCaptureConfig, plcService);
                if (wplog.WorkPieceID.Length != 22)
                {//获取到的工件号异常
                    return;
                }
                else
                {//获取其他配置的待采集项
                ////var valueid = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, _dataCaptureConfig.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                ////wplog.WorkPieceID = PLCManger.GetWorkPieceIDForPLC(_dataCaptureConfig, plcService);
                //if (wplog.WorkPieceID.Length != 22)
                //{//获取到的工件号异常
                //    return;
                //}
                //else
                //{//获取其他配置的待采集项
                    //foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                    //{
                    //    var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                    //    wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                //    //foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                //    //{
                //    //    var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                //    //    wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                    //}
                }
                //读取二维码后更新数据库
                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
                //    //}
                //}
                ////读取二维码后更新数据库
                //WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
                return;
@@ -106,7 +106,7 @@
                    //plcService.Close();
                    //plcService.OpenService();
                }
                string value_01 = "";
                string value_01 = "";//注意:默认是FALSE 【Editby shaocx,2024-09-05】
                while (true)
                {
                    threadStatusMonitor.ErrorMsg = "";
@@ -119,7 +119,7 @@
                    {
                        if (plcService == null || !plcService.IsConnected)
                        {
                            threadStatusMonitor.ErrorMsg= $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.PLCServiceReconnect(plcService);
                            //plcService.Close();
                            //plcService.OpenService();
@@ -134,21 +134,22 @@
                            //string hostname = Environment.MachineName;
                            object value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (value_01.ToUpper().Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  并给静态变量赋值为1
                             //业务代码
                                threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                                WorkPieceLog wplog = new WorkPieceLog();
                            WorkPieceLog wplog = null;
                            var value_bool = value.ToString().ToUpper().Equals("TRUE");
                            if (value_bool)
                            {
                                wplog = new WorkPieceLog();
                                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.UpdatedUserName = Environment.MachineName + "自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                                wplog.OnlineTime = DateTimeHelper.GetDateTime();
                                wplog.IsDeleted = false;
@@ -170,6 +171,31 @@
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序监控上线完成标记 字段{col.DataCaptureColumnTabelName}动态赋值异常{wplog.Id}", setex);
                                    }
                                }
                                //监控测试数据,模拟,测试
                                MonitorHelper.MonitorTestForOP3501(_dataCaptureConfig, value, colConfig, wplog);
                                //监控上线
                                MonitorHelper.MonitorTestForLine(_dataCaptureConfig, value, colConfig, wplog.WorkPieceID);
                            }
                            //if (wplog != null)
                            //{
                            //    var isRight = SystemBussinessHelper.ValidateIsRightWorkPieceID(wplog.WorkPieceID);
                            //    if (isRight)
                            //    {
                            #region 处理业务
                            if (value_01.ToUpper().Equals("FALSE") && value.ToString().ToUpper().Equals("TRUE"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  并给静态变量赋值为1
                             //业务代码
                                threadStatusMonitor.Threadlastmodifytime = DateTime.Now;
                                //特殊处理OP50 【Editby shaocx,2024-08-16】
                                string sideValue = GetSideForOP50(plcService, wplog);
                                wplog.MonitoringPoint += sideValue;
                                //wplog.CreatedUserName = wplog.MonitoringPoint;
                                SystemBussinessHelper.SetWorkPieceLogMiddleForCreatedUserName(ref wplog, wplog.MonitoringPoint, DataCapturePointCname);
                                //读取二维码后更新数据库
                                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
@@ -178,12 +204,15 @@
                            }
                            value_01 = value.ToString();
                            #endregion
                            //    }
                            //}
                        }
                        threadStatusMonitor.Remarks = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            threadStatusMonitor.ThreadFrequency = 5000;
                            Thread.Sleep(5000);
                            threadStatusMonitor.ThreadFrequency = 700;
                            Thread.Sleep(700);
                        }
                        else
                        {
@@ -218,5 +247,135 @@
            }
        }
        /// <summary>
        /// 获取OP50的某个工位的哪个面
        /// </summary>
        /// <param name="plcService"></param>
        /// <returns></returns>
        //private string GetSideForOP50(PLCService plcService, WorkPieceLog wplog)
        //{
        //    try
        //    {
        //        if (!(DataCapturePointCode.Contains("OP5001A") || DataCapturePointCode.Contains("OP5001B")))
        //        {
        //            return "";
        //        }
        //        string title = $"读取 {DataCapturePointCode}工序时,获取OP50的哪个面,工件号:{wplog.WorkPieceID}";
        //        int i_value_M88 = _GetSideForOP50(plcService, wplog, "M87.0");
        //        if (i_value_M88 == 1)
        //        {
        //            title += ",返回1";
        //            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), title);
        //            return "1";
        //        }
        //        i_value_M88 = _GetSideForOP50(plcService, wplog, "M87.2");
        //        if (i_value_M88 == 1)
        //        {
        //            title += ",返回2";
        //            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), title);
        //            return "2";
        //        }
        //        i_value_M88 = _GetSideForOP50(plcService, wplog, "M87.4");
        //        if (i_value_M88 == 1)
        //        {
        //            title += ",返回3";
        //            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), title);
        //            return "3";
        //        }
        //        i_value_M88 = _GetSideForOP50(plcService, wplog, "M87.6");
        //        if (i_value_M88 == 1)
        //        {
        //            title += ",返回4";
        //            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), title);
        //            return "4";
        //        }
        //        Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序时,无效数值,获取OP50的哪个面,i_value_M88:{i_value_M88},工件号:{wplog.WorkPieceID}");
        //        return "";
        //    }
        //    catch (Exception ex)
        //    {
        //        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序时异常,获取OP50的哪个面,工件号:{wplog.WorkPieceID}", ex);
        //        return "";
        //    }
        //}
        /// <summary>
        /// 获取OP50的某个工位的哪个面
        /// </summary>
        /// <param name="plcService"></param>
        /// <returns></returns>
        private string GetSideForOP50(PLCService plcService, WorkPieceLog wplog)
        {
            try
            {
                if (!(DataCapturePointCode.Contains("OP5001A") || DataCapturePointCode.Contains("OP5001B")))
                {
                    return "";
                }
                object value_M88 = plcService.ReadValuePointV2("M88", PLCManger.GetTypeForString("int"));
                int i_value_M88 = 0;
                var isRight = int.TryParse(value_M88.ToString(), out i_value_M88);
                Log4NetHelper.WriteInfoLog(LogType.MonitorOP50Side, $"读取 {DataCapturePointCode}工序监控测量标记数据,获取OP50的哪个面,i_value_M88:{i_value_M88},工件号:{wplog.WorkPieceID}");
                if (isRight)
                {
                    if (i_value_M88 == 64)
                    {
                        return "1";
                    }
                    else if (i_value_M88 == 16384)
                    {//原定为16384为正在旋转,监控下来,发现 16384应该是工位1的问题 【Editby shaocx,2024-06-12】
                        return "1";
                    }
                    else if (i_value_M88 == 256)
                    {
                        return "2";
                    }
                    else if (i_value_M88 == 1024)
                    {
                        return "3";
                    }
                    else if (i_value_M88 == 4096)
                    {
                        return "4";
                    }
                }
                Log4NetHelper.WriteErrorLog(LogType.MonitorOP50Side, $"读取 {DataCapturePointCode}工序监控测量标记数据时,无效数值,获取OP50的哪个面,,i_value_M88:{i_value_M88},工件号:{wplog.WorkPieceID}", null);
                return "";
            }
            catch (Exception ex)
            {
                Log4NetHelper.WriteErrorLog(LogType.MonitorOP50Side, $"读取 {DataCapturePointCode}工序监控测量标记数据时异常,获取OP50的哪个面,工件号:{wplog.WorkPieceID}", ex);
                return "";
            }
        }
        private int _GetSideForOP50(PLCService plcService, WorkPieceLog wplog, string address)
        {
            try
            {
                object value_M88 = plcService.ReadValuePointV2(address, PLCManger.GetTypeForString("int"));
                int i_value_M88 = 0;
                var isRight = int.TryParse(value_M88.ToString(), out i_value_M88);
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode},读取地址 {address},工序监控数据,获取OP50的哪个面,i_value_M88:{i_value_M88},工件号:{wplog.WorkPieceID}");
                if (isRight)
                {
                    return i_value_M88;
                }
                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode},读取地址 {address},工序监控测量标记数据时,无效数值,获取OP50的哪个面,,i_value_M88:{i_value_M88},工件号:{wplog.WorkPieceID}", null);
                return 0;
            }
            catch (Exception ex)
            {
                Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode},读取地址 {address},工序监控测量标记数据时异常,获取OP50的哪个面,工件号:{wplog.WorkPieceID}", ex);
                return 0;
            }
        }
    }
}