schangxiang@126.com
2024-08-18 a3e2b38a895b32ac08bb4acf18a4e57f65651c4a
清洗机获取采集数据
已添加1个文件
已修改3个文件
263 ■■■■■ 文件已修改
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/Special/DataCaptureHandler_OP7009.cs 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/iWare_SCADA_BusinessLogical.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormMain.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs
@@ -804,6 +804,73 @@
        }
        /// <summary>
        /// è´¨é‡æ£€æµ‹å®Œæˆ-OP70专用
        /// </summary>
        /// <param name="logMiddle"></param>
        /// <param name="type"></param>
        public static void QualityInfoCompleteForOP70(WorkPieceLogMiddle logMiddle, LogType type)
        {
            if (string.IsNullOrEmpty(logMiddle.QualityOP70To1) && string.IsNullOrEmpty(logMiddle.QualityOP70To2) && string.IsNullOrEmpty(logMiddle.QualityOP70To3))
            {
                Log4NetHelper.WriteErrorLog(type, $" {logMiddle.WorkingProcedure}工序监控清洗机数据 è¯»å–工件码数据[{logMiddle.WorkPieceID ?? "空"}]获取的三个值都是空的,不处理返回");
                return;
            }
            using (DbModel db = new DbModel())
            {
                try
                {
                    bool isAdd = false;
                    if (logMiddle.WorkPieceID.Length == 22)
                    {
                        var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == logMiddle.WorkPieceID).FirstOrDefault();
                        if (qualityData == null || qualityData.WorkPieceID.Length < 1 || qualityData.WorkingProcedure.Length < 1)
                        {//插入QualityDataInfo表
                            isAdd = true;
                            qualityData = EntityPropHelper.Mapper<QualityDataInfo, WorkPieceLog>(logMiddle);
                        }
                        qualityData.QualityStateUpdateUser = "OP7009";
                        qualityData.QualityReceiveTime = DateTime.Now;
                        //特殊处理OP70的质量数据
                        if (!string.IsNullOrEmpty(logMiddle.QualityOP70To1) && !string.IsNullOrEmpty(qualityData.QualityOP70To1))
                        {
                            qualityData.QualityOP70To1 = logMiddle.QualityOP70To1;
                        }
                        if (!string.IsNullOrEmpty(logMiddle.QualityOP70To2) && !string.IsNullOrEmpty(qualityData.QualityOP70To2))
                        {
                            qualityData.QualityOP70To2 = logMiddle.QualityOP70To2;
                        }
                        if (!string.IsNullOrEmpty(logMiddle.QualityOP70To3) && !string.IsNullOrEmpty(qualityData.QualityOP70To3))
                        {
                            qualityData.QualityOP70To3 = logMiddle.QualityOP70To3;
                        }
                        db.QualityDataInfoLog.Add(GetAddQualityDataInfoLog(qualityData));//插入日志
                        if (isAdd)
                        {
                            db.QualityDataInfo.Add(GetAddQualityDataInfo(qualityData));
                        }
                        db.SaveChanges();//保存数据
                    }
                    else
                    {
                        Log4NetHelper.WriteErrorLog(type, $" {logMiddle.WorkingProcedure}工序监控清洗机数据 è¯»å–工件码数据[{logMiddle.WorkPieceID ?? "空"}]时异常:");
                    }
                }
                catch (Exception ex)
                {
                    Log4NetHelper.WriteErrorLog(type, $" {logMiddle.WorkingProcedure}工序监控清洗机数据 è¯»å–工件码数据[{logMiddle.WorkPieceID ?? "空"}]时异常:", ex);
                }
                finally
                {
                }
            }
        }
        /// <summary>
        /// èµ‹å€¼ ä¿®æ”¹äºº ã€Editby shaocx,2024-07-05】
        /// </summary>
        /// <param name="logMiddle"></param>
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/DataCaptureHandlerV2/Special/DataCaptureHandler_OP7009.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,189 @@
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using log4net;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP70 ç‰¹æ®Šæ•°æ®é‡‡é›†
    /// </summary>
    public class DataCaptureHandler_OP7009 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP7009 Instance = new DataCaptureHandler_OP7009();
        public DataCaptureHandler_OP7009()
        {
        }
        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> dataCaptureConfig)
        {
        }
        public override void DataCaptureStart()
        {
            if (IsCaptureflag)
            {
                //var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                var plcService = SystemValue.GetPLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP1002 = $"{RandomHelper.GenerateRandomCode(4)} æ²¡æœ‰æ‰¾åˆ°{WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    SystemValue.PLCServiceReconnect(plcService);
                    //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)
                        {
                            threadStatusMonitor.ErrorMsg = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.lbl_Alert_OP1002 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            SystemValue.PLCServiceReconnect(plcService);
                            //plcService.Close();
                            //plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now} *****0***");
                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now}***1****");
                            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.CreatedTime = DateTimeHelper.GetDateTime();
                            wplog.CreatedUserName = DataCapturePointCode;
                            wplog.UpdatedTime = DateTimeHelper.GetDateTime();
                            wplog.UpdatedUserName = Environment.MachineName + "自动" + Thread.CurrentThread.ManagedThreadId.ToString();
                            wplog.OnlineTime = DateTimeHelper.GetDateTime();
                            wplog.IsDeleted = false;
                            wplog.QualityType = QualityType.Online.ToString();
                            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), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态由于字段名没找到,赋值【{WorkingProcedure ?? "空字符串"}】失败{wplog.Id}");
                                    }
                                    Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now}***2****{col.DataCaptureColumnTabelName} å€¼ {valuecol.ToString() ?? ""}");
                                    if (col.DataCaptureColumnTabelName.Contains("Quality"))
                                    {//字段名包含Quality是认为是质量数据,都是转换成string
                                        set.SetValue(wplog, valuecol.ToString());//给动态字段赋值
                                    }
                                    else
                                    {
                                        set.SetValue(wplog, valuecol);//给动态字段赋值
                                    }
                                }
                                catch (Exception setex)
                                {
                                    Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {WorkingProcedure}工序监控读码标记 è¯»å–工件码动态赋值【{WorkingProcedure ?? "空字符串"}】异常{wplog.Id}", setex);
                                }
                            }
                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" {DataCapturePointCode}工序测标记读取{DateTime.Now}***3****");
                            //获取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.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;
                                }
                            }
                        }
                        SystemValue.lbl_Alert_OP1002 = $"abcdefg:{RandomHelper.GenerateRandomCode(4)}";
                        if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                        {
                            Thread.Sleep(5000);
                        }
                        else
                        {
                            Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP1002 = $" {RandomHelper.GenerateRandomCode(4)} è¯»å–{DataCapturePointCode}质量信息 å‡ºçŽ°å¼‚å¸¸ï¼Œè¯·æŸ¥çœ‹æ—¥å¿—ï¼";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"读取 {DataCapturePointCode}质量信息时异常:", ex);
                    }
                    finally
                    {
                        WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP1002 = $" {RandomHelper.GenerateRandomCode(4)} {DataCapturePointCode}质量信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤é…ç½®ä¿¡æ¯ï¼";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $"{DataCapturePointCode}质量信息 ä¸åšæ ¡éªŒï¼Œè¯·ç¡®è®¤æ˜¯å¦é…ç½®å¼‚常");
            }
        }
    }
}
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/iWare_SCADA_BusinessLogical.csproj
@@ -94,6 +94,7 @@
    <Compile Include="DataCaptureHandlerV2\DataCaptureHandler_06.cs" />
    <Compile Include="DataCaptureHandlerV2\DataCaptureHandler_07.cs" />
    <Compile Include="DataCaptureHandlerV2\DataCaptureHandler_OP0501.cs" />
    <Compile Include="DataCaptureHandlerV2\Special\DataCaptureHandler_OP7009.cs" />
    <Compile Include="DataCaptureHandlerV2\Special\DataCaptureHandler_OP1002.cs" />
    <Compile Include="DataCaptureHandlerV2\Special\DataCaptureHandler_OP1003.cs" />
    <Compile Include="DataCaptureHandlerV2\Special\DataCaptureHandler_OP1004.cs" />
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_DataCaptureV3/FormMain.cs
@@ -1440,6 +1440,7 @@
                            DataCaptureHandler_OP6002.Instance._dataCaptureConfig = config;
                            _dataCaptureHandler.Add(DataCaptureHandler_OP6002.Instance);
                            break;
                        #endregion
                        #region 03 NOOK推出
@@ -1501,6 +1502,11 @@
                            _dataCaptureHandler.Add(dc06);
                            break;
                        #endregion
                        case "OP7009"://清洗机获取采集数据
                            DataCaptureHandler_OP7009.Instance._dataCaptureConfig = config;
                            _dataCaptureHandler.Add(DataCaptureHandler_OP7009.Instance);
                            break;
                        //#region 07 æ•°é‡‡ç›’子告警采集
                        ////case "OP1007":