schangxiang@126.com
2024-09-06 05f2a20bb792169bf7b8a101af8718b96449f55a
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP3506.cs
@@ -1,175 +1,175 @@
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;
using System.Web.UI.WebControls;
//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;
//using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP35 设备信息采集
    /// </summary>
    public class DataCaptureHandler_OP3506 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP3506 Instance = new DataCaptureHandler_OP3506();
//namespace iWare_SCADA_BusinessLogical
//{
//    /// <summary>
//    /// OP35 设备信息采集
//    /// </summary>
//    public class DataCaptureHandler_OP3506 : DataCaptureHandler
//    {
//        public static readonly DataCaptureHandler_OP3506 Instance = new DataCaptureHandler_OP3506();
        public DataCaptureHandler_OP3506()
        {
        }
//        public DataCaptureHandler_OP3506()
//        {
//        }
        public override string WorkingProcedure
        {
            get { return _dataCaptureConfig.WorkingProcedure; }
        }
//        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 string DataCapturePointCode
//        {
//            get { return _dataCaptureConfig.DataCapturePointCode; }
//        }
//        public override string DataCapturePointCname
//        {
//            get { return _dataCaptureConfig.DataCapturePointCname; }
//        }
        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
        {
        }
//        public override void RefreshDataList(List<DataCaptureConfig> dataCaptureConfig)
//        {
//        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedModel)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                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;
//        public override void DataCaptureStart()
//        {
//            if (SystemValue.isStartedImitateModel)
//            {
//                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
//                WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
//                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;
                wplog.WorkPieceID = WorkPieceID;
                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                wplog.UpdatedUserName = DataCapturePointCode;
                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
                WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
//                wplog.WorkPieceID = WorkPieceID;
//                wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
//                wplog.UpdatedTime = DateTimeHelper.GetDateTime();
//                wplog.UpdatedUserName = DataCapturePointCode;
//                //更新WorkPieceInfo表以及插入WorkPieceLog表和WorkPieceInfoLog表
//                WorkPieceInfoManager.WorkPiecePushOff(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP3506 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                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();
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP3506 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            //业务代码
                            WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
                            wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
                            wplog.WorkingProcedure = WorkingProcedure;
                            wplog.EquipmentID = WorkingProcedure;
                            wplog.MonitoringPoint = DataCapturePointCode;
                            wplog.CreatedTime = DateTimeHelper.GetDateTime();
                            wplog.CreatedUserName = DataCapturePointCode;
                            wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                            wplog.UpdatedUserName = Environment.MachineName+"自动";
                            wplog.OnlineTime = DateTimeHelper.GetDateTime();
                            wplog.IsDeleted = false;
//                return;
//            }
//            if (IsCaptureflag)
//            {
//                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
//                if (plcService == null)
//                {
//                    SystemValue.lbl_Alert_OP3506 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
//                    return;
//                }
//                if (plcService != null && !plcService.IsConnected)
//                {
//                    plcService.Close();
//                    plcService.OpenService();
//                }
//                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();
//                    try
//                    {
//                        //_dataCaptureConfig
//                        if (plcService == null || !plcService.IsConnected)
//                        {
//                            SystemValue.lbl_Alert_OP3506 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
//                            plcService.Close();
//                            plcService.OpenService();
//                            Thread.Sleep(100);
//                            continue;
//                        }
//                        else
//                        {
//                            //业务代码
//                            WorkPieceLogMiddle wplog = new WorkPieceLogMiddle();
//                            wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
//                            wplog.WorkingProcedure = WorkingProcedure;
//                            wplog.EquipmentID = WorkingProcedure;
//                            wplog.MonitoringPoint = DataCapturePointCode;
//                            wplog.CreatedTime = DateTimeHelper.GetDateTime();
//                            wplog.CreatedUserName = DataCapturePointCode;
//                            wplog.UpdatedTime = DateTimeHelper.GetDateTime();
//                            wplog.UpdatedUserName = Environment.MachineName+"自动";
//                            wplog.OnlineTime = DateTimeHelper.GetDateTime();
//                            wplog.IsDeleted = false;
                            foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                            {
                                try
                                {
                                    var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
                                    //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                                    var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
                                    if (set == null)
                                    {
                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序设备采集 读取工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                    }
                                    set.SetValue(wplog, valuecol);//给动态字段赋值
                                }
                                catch (Exception setex)
                                {
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序设备采集 读取工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                }
                            }
                            WorkPieceInfoManager.EquipmentMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
//                            foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
//                            {
//                                try
//                                {
//                                    var valuecol = plcService.ReadValuePoint(col.DbNumber, col.Offset, col.DataCaptureColumnLength.Value, PLCManger.GetTypeForString(col.DataCaptureColumnType));
//                                    //wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
//                                    var set = wplog.GetType().GetProperty(col.DataCaptureColumnTabelName);
//                                    if (set == null)
//                                    {
//                                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序设备采集 读取工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
//                                    }
//                                    set.SetValue(wplog, valuecol);//给动态字段赋值
//                                }
//                                catch (Exception setex)
//                                {
//                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序设备采集 读取工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
//                                }
//                            }
//                            WorkPieceInfoManager.EquipmentMonitor(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                            threadStatusMonitor.Threadstatue = 1;
                        }
                        SystemValue.lbl_Alert_OP3506 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
//                            threadStatusMonitor.Threadstatue = 1;
//                        }
//                        SystemValue.lbl_Alert_OP3506 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
//                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
//                        {
//                            Thread.Sleep(5000);
//                        }
//                        else
//                        {
//                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
//                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        SystemValue.lbl_Alert_OP3506 = $" {RandomHelper.GenerateRandomCode(4)} 读取{DataCapturePointCode}工序监控设备采集 出现异常,请查看日志!";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控设备采集数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP3506 = $" {RandomHelper.GenerateRandomCode(4)} 读取{DataCapturePointCode}工序监控设备采集 出现异常,请查看日志!";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控设备采集数据时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP3506 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控设备采集 不做校验,请确认配置信息!";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控设备采集 不做校验,请确认是否配置异常");
            }
        }
//                    }
//                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
//                    {
//                        SystemValue.lbl_Alert_OP3506 = $" {RandomHelper.GenerateRandomCode(4)} 读取{DataCapturePointCode}工序监控设备采集 出现异常,请查看日志!";
//                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控设备采集数据时异常:", ex);
//                    }
//                    catch (Exception ex)
//                    {
//                        SystemValue.lbl_Alert_OP3506 = $" {RandomHelper.GenerateRandomCode(4)} 读取{DataCapturePointCode}工序监控设备采集 出现异常,请查看日志!";
//                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}工序监控设备采集数据时异常:", ex);
//                    }
//                    finally
//                    {
//                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
//                    }
//                }
//            }
//            else
//            {
//                SystemValue.lbl_Alert_OP3506 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}工序监控设备采集 不做校验,请确认配置信息!";
//                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{DataCapturePointCode}工序监控设备采集 不做校验,请确认是否配置异常");
//            }
//        }
    }
}
//    }
//}