schangxiang@126.com
2024-09-02 2a55eedc9ba903c6a0b9cab8fa5ddc8fee9682aa
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandler/DataCaptureHandler_OP8001.cs
@@ -1,97 +1,163 @@
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>
    /// OP80读码完成标记
    /// </summary>
    public class DataCaptureHandler_OP8001: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP8001 Instance = new DataCaptureHandler_OP8001();
//namespace iWare_SCADA_BusinessLogical
//{
//    /// <summary>
//    /// OP80读码完成标记
//    /// </summary>
//    public class DataCaptureHandler_OP8001: DataCaptureHandler
//    {
//        public static readonly DataCaptureHandler_OP8001 Instance = new DataCaptureHandler_OP8001();
        public DataCaptureHandler_OP8001()
        {
        }
//        public DataCaptureHandler_OP8001()
//        {
//        }
        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)
//        {
//            //try
//            //{
//            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
//            //    {
//            //        switch (dataCaptureColumnDict.DataCapturePointCode)
//            //        {
//            //            case "OP8001":
//            //                //_dataCaptureConfig = dataCaptureColumnDict;
//            //                IsCaptureflag = true;
//            //                return;
//            //        }
//            //    }
//            //}
//            //catch (Exception ex)
//            //{
//            //    SystemValue._lbl_Alert_OP8001 = $" {RandomHelper.GenerateRandomCode(4)} OP80工序监控打码标记 出现异常,请查看日志!";
//            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "刷新 OP80工序监控打码标记数据时异常:", ex);
//            //}
//        }
//        public override void DataCaptureStart()
//        {
//            if (SystemValue.isStartedImitateModel)
//            {
//                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));
//                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
//                {//获取其他配置的待采集项
//                    //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);
//                return;
//            }
//            if (IsCaptureflag)
//            {
//                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
//                if (plcService == null)
//                {
//                    SystemValue.lbl_Alert_OP8001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
//                    return;
//                }
//                if (plcService != null && !plcService.IsConnected)
//                {
//                    plcService.Close();
//                    plcService.OpenService();
//                }
//                while (true)
//                {
            //try
            //{
            //    foreach (var dataCaptureColumnDict in dataCaptureConfig)
//                        if (plcService == null || !plcService.IsConnected)
            //    {
            //        switch (dataCaptureColumnDict.DataCapturePointCode)
//                            SystemValue.lbl_Alert_OP8001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
//                            plcService.Close();
//                            plcService.OpenService();
//                            Thread.Sleep(100);
//                            continue;
//                        }
//                        else
            //        {
            //            case "OP8001":
            //                //_dataCaptureConfig = dataCaptureColumnDict;
            //                IsCaptureflag = true;
            //                return;
//                            object value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
//                            if (SystemValue.value_OP8001.Equals("0") && value.ToString().Equals("1"))
//                            {//当上一标记位0,当前获取标记为1时,
//                             //触发操作,  并给静态变量赋值为1
//                             //业务代码
//                                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));
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    SystemValue._lbl_Alert_OP8001 = $" {RandomHelper.GenerateRandomCode(4)} OP80工序监控打码标记 出现异常,请查看日志!";
            //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "刷新 OP80工序监控打码标记数据时异常:", ex);
            //}
        }
        public override void DataCaptureStart()
        {
            if (SystemValue.isStartedImitateModel)
            {
                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));
                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));
//                                //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
                {//获取其他配置的待采集项
//                                if(wplog.WorkPieceID.Length!=22)
//                                {//获取到的工件号异常
//                                    continue;
//                                }
//                                else
//                                {//获取其他配置的待采集项
                    //foreach (var col in colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode))
                    //{
@@ -99,136 +165,70 @@
                    //    wplog.GetType().GetProperty(col.DataCaptureColumnTabelName).SetValue(wplog, valuecol);//给动态字段赋值
                    //}
                }
                //读取二维码后更新数据库
                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP8001 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                while (true)
                {
                    try
                    {
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP8001 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            object value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (SystemValue.value_OP8001.Equals("0") && value.ToString().Equals("1"))
                            {//当上一标记位0,当前获取标记为1时,
                             //触发操作,  并给静态变量赋值为1
                             //业务代码
                                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));
                                //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)
                                {//获取到的工件号异常
                                    continue;
                                }
                                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);//给动态字段赋值
                                    }
                                }
                                //读取二维码后更新数据库
                                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),plcService, _dataCaptureConfig.IsFeedback);
                                //#region 反馈PLC
                                //bool checkQualityInfoCompleteFlag = false;
                                //bool plcFlag = true;//反馈给PLC的标记
                                //string message = "";
                                //checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
                                //if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityState.OK)
                                //{
                                //    plcFlag = false;
                                //    message = !checkQualityInfoCompleteFlag ? "跳序," : "";
                                    //message += info.QualityState != (int)QualityState.OK ? "质量不符合" : "";
                                //}
                                ////反馈给PLC,(写入点待定)
                                //MessageModel fr = null;
                                //fr = plcService.WriteValuePoint("", "", plcFlag, PLCManger.GetTypeForString("bool"));
                                //if (fr.result)
//                                //读取二维码后更新数据库
//                                WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),plcService, _dataCaptureConfig.IsFeedback);
//                                //#region 反馈PLC
//                                //bool checkQualityInfoCompleteFlag = false;
//                                //bool plcFlag = true;//反馈给PLC的标记
//                                //string message = "";
//                                //checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure));
//                                //if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityState.OK)
//                                //{
//                                //    plcFlag = false;
//                                //    message = !checkQualityInfoCompleteFlag ? "跳序," : "";
//                                    //message += info.QualityState != (int)QualityState.OK ? "质量不符合" : "";
//                                //}
//                                ////反馈给PLC,(写入点待定)
//                                //MessageModel fr = null;
//                                //fr = plcService.WriteValuePoint("", "", plcFlag, PLCManger.GetTypeForString("bool"));
//                                //if (fr.result)
//                                //{
//                                //    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" 工件{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC 成功, 出现 {message}");
//                                //}
//                                //else
//                                //{
//                                //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" 工件{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC 失败, 出现 {message} ,失败原因:{fr.resMsg}");
//                                //}
//                                //#endregion
//                            }
//                            SystemValue.value_OP8001 = value.ToString();
//                        }
//                        SystemValue.lbl_Alert_OP8001 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
//                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                                //{
                                //    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" 工件{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC 成功, 出现 {message}");
//                            Thread.Sleep(5000);
                                //}
                                //else
                                //{
                                //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" 工件{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC 失败, 出现 {message} ,失败原因:{fr.resMsg}");
//                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                                //}
                                //#endregion
                            }
                            SystemValue.value_OP8001 = value.ToString();
                        }
                        SystemValue.lbl_Alert_OP8001 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    //catch (System.Data.Entity.Validation.DbEntityValidationException ex)
//                    }
//                    //catch (System.Data.Entity.Validation.DbEntityValidationException ex)
//                    //{
//                    //    SystemValue.lbl_Alert_OP8001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序监控打码标记 出现异常,请查看日志!";
//                    //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
//                    //}
//                    catch (Exception ex)
                    //{
                    //    SystemValue.lbl_Alert_OP8001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序监控打码标记 出现异常,请查看日志!";
                    //    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
//                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    //}
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP8001 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序监控打码标记 出现异常,请查看日志!";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP8001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 不做校验,请确认配置信息!";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{WorkingProcedure}工序监控打码标记 不做校验,请确认是否配置异常");
            }
        }
//                }
//            }
//            else
//            {
//                SystemValue.lbl_Alert_OP8001 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 不做校验,请确认配置信息!";
//                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读{WorkingProcedure}工序监控打码标记 不做校验,请确认是否配置异常");
//            }
//        }
    }
}
//    }
//}