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 { /// /// 读码完成标记,读取工控机中读取二维码信息 /// 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) { } 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}工序读码完成标记,读取工控机中读取二维码信息,不做校验,请确认配置异常"); } } } }