schangxiang@126.com
2024-08-26 350e1111aa34534fa6074072142deaf319f8d6b4
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
using iWare_SCADA_BusinessLogical.BLL;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
 
namespace iWare_SCADA_BusinessLogical
{
    /// <summary>
    /// 读码完成标记,读取工控机中读取二维码信息
    /// </summary>
    public class DataCaptureHandler_OP0502 : DataCaptureHandler
    {
        public static readonly DataCaptureHandler_OP0502 Instance = new DataCaptureHandler_OP0502();
 
        public DataCaptureHandler_OP0502()
        {
        }
        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)
            {
                // plc连接
                var plcService = PLCManger.GetSinglePLCService(_dataCaptureConfig);
                if (plcService == null)
                {
                    SystemValue.lbl_Alert_OP0501 = $"{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_OP0502 = $" {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_OP0502.Equals("0") && value.ToString().Equals("1"))
                            {
                                #region 从工控机获取相关二维码
                                //打码机打码二维码路径
                                var path = ConfigHelper.GetConfigString("WorkPeiceIDPath");
 
                                //扫描共享目录并将新的文件扫描返回  一般节拍在15秒左右(可以确认一下)
                                var newFiles = FileHelper.DetectNewFilesCSV(path, 10, DateTimeHelper.GetDateTime(), DateTimeHelper.GetDateTime());
                                foreach (System.IO.FileInfo file in newFiles)
                                {
                                    DataTable dt = null;
                                    dt = CSVHelper.ReadCSV(file.FullName);
                                    if (dt == null)
                                    {
                                        continue;
                                    }
                                    lock (SystemValue.lock5QRcodeList)
                                    {
                                        #region 清过期缓存
                                        try
                                        {
                                            //清过期缓存
                                            var lstRemoveKey = SystemValue.QRcodeList
                                                .Where(p => p.Value < DateTimeHelper.GetDateTime().AddMinutes(-600))
                                                .Select(p => p.Key).ToList();
                                            if (lstRemoveKey.Count > 0)
                                            {
                                                foreach (var key in lstRemoveKey) SystemValue.QRcodeList.Remove(key);
                                                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"清除缓存数量:({lstRemoveKey.Count}) 剩余缓存数量:({SystemValue.QRcodeList.Count})");
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            Log4NetHelper.WriteErrorLog(LogType.PLCOP05, "清除告警报文ID缓存错误!", ex);
                                        }
                                        #endregion
                                        // 工件号(二维码值)
                                        string WorkPieceID = dt.Rows[0][""].ToString();
                                        if (WorkPieceID.Length != 22)
                                        {
                                            //获取到的工件号异常
                                            SystemValue.lbl_Alert_OP0502 = $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位";
                                            Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure),
                                                $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位");
                                        }
 
                                        if (SystemValue.QRcodeList.ContainsKey(WorkPieceID))
                                        {
                                            // 存在清理缓存
                                            SystemValue.QRcodeList.Remove(WorkPieceID);
                                        }
                                        else
                                        {
                                            // 不存在反馈PLC 
                                            var col = colConfig.Where(o => o.DataCapturePointCode == DataCapturePointCode).ToList();
                                            if (col.Count == 0)
                                            {
                                                SystemValue.lbl_Alert_OP0502 = $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息不存在,请先配置数据收集点对于字段表信息!";
                                                Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息不存在,请先配置数据收集点对于字段表信息!");
                                            }
                                            plcService.WriteValuePoint(col[0].DbNumber, col[0].Offset, col[0].DataCaptureColumnTabelName);
 
                                        }
 
 
                                        SystemValue.QRcodeList.Add("", DateTimeHelper.GetDateTime());//二维码添加到列表中
 
                                        //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.UpdatedTime = DateTimeHelper.GetDateTime();
                                        //wplog.UpdatedUserName = DataCapturePointCode;
                                        //wplog.IsDeleted = false;
                                        //wplog.EquipmentID = _dataCaptureConfig.EquipmentID;
 
                                        //wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用
 
                                        //wplog.WorkPieceID = dt.Rows[0][""].ToString();
 
                                        // 读取二维码后更新数据库
                                        // var info = WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), plcService, _dataCaptureConfig.IsFeedback);
 
                                    }
                                }
                                #endregion
                            }
                            SystemValue.value_OP0502 = value.ToString();
                        }
                    }
                    catch (Exception ex)
                    {
                        SystemValue.lbl_Alert_OP0502 = $" {_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息,出现异常,请查看日志!";
                        Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $" {_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息,出现异常:", ex);
                    }
 
                    //线程多久执行一次(不包含业务处理时间)
                    if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10)
                    {
                        Thread.Sleep(5000);
                    }
                    else
                    {
                        Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value);
                    }
                }
            }
            else
            {
                SystemValue.lbl_Alert_OP0502 = $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息,不做校验,请确认配置信息!";
                Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"{_dataCaptureConfig.WorkingProcedure}工序读码完成标记,读取工控机中读取二维码信息,不做校验,请确认配置异常");
            }
        }
    }
}