schangxiang@126.com
2024-09-02 15662d05c2e2a8620cdabf9038c94f7b64a106d2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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;
 
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// OP80 心跳监控
    /// </summary>
    public class DataCaptureHandler_OP8006: DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP8006 Instance = new DataCaptureHandler_OP8006();
 
        public DataCaptureHandler_OP8006()
        {
        }
 
        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 (SystemValue.isStartedImitateModel)
            {
                return;
            }
            if (IsCaptureflag)
            {
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP8006 = $"{RandomHelper.GenerateRandomCode(4)} 没有找到{_dataCaptureConfig.WorkingProcedure}的PLC设备";
                    return;
                }
                if (plcService != null && !plcService.IsConnected)
                {
                    plcService.Close();
                    plcService.OpenService();
                }
                DateTime PLCHeartBeatMonitorTime = DateTime.Now;
                while (true)
                {
                    try
                    {
                        //_dataCaptureConfig
                        if (plcService == null || !plcService.IsConnected)
                        {
                            SystemValue.lbl_Alert_OP8006 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接已断开,正在尝试打开!";
                            plcService.Close();
                            plcService.OpenService();
                            Thread.Sleep(100);
                            continue;
                        }
                        else
                        {
                            var value = plcService.ReadValuePoint(_dataCaptureConfig.DbNumber, _dataCaptureConfig.Offset, PLCManger.GetTypeForString(_dataCaptureConfig.DataCaptureColumnType));
                            if (!SystemValue.value_OP8006.Equals(value.ToString()))
                            {//心跳监控
                                PLCHeartBeatMonitorTime = DateTime.Now;
                            }
                            if((DateTime.Now- PLCHeartBeatMonitorTime).TotalSeconds> heartBeatAlertInterval)
                            {
                                SystemValue.lbl_Alert_OP8006 = $" {RandomHelper.GenerateRandomCode(4)} {_dataCaptureConfig.WorkingProcedure} PLC连接心跳异常!";
                            }
                            SystemValue.value_OP8006 = value.ToString();
 
                            //写入心跳
 
 
 
                        }
                        SystemValue.lbl_Alert_OP8006 = $"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)
                    {
                        SystemValue.lbl_Alert_OP8006 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序监控打码标记 出现异常,请查看日志!";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP8006 = $" {RandomHelper.GenerateRandomCode(4)} 读取{WorkingProcedure}工序监控打码标记 出现异常,请查看日志!";
                        Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读取 {WorkingProcedure}工序监控打码标记数据时异常:", ex);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP8006 = $" {RandomHelper.GenerateRandomCode(4)} {WorkingProcedure}工序监控打码标记 不做校验,请确认配置信息!";
                Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), "读{WorkingProcedure}工序监控打码标记 不做校验,请确认是否配置异常");
            }
        }
 
    }
}