//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.Globalization; //using System.IO; //using System.Linq; //using System.Text; //using System.Threading; //using System.Threading.Tasks; //using System.Web.UI.WebControls; //namespace iWare_SCADA_BusinessLogical //{ // /// // /// OP05 打标完成标记,读取工控机中打印二维码信息 // /// // public class DataCaptureHandler_OP0501 : DataCaptureHandler // { // public static readonly DataCaptureHandler_OP0501 Instance = new DataCaptureHandler_OP0501(); // public DataCaptureHandler_OP0501() // { // } // 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) // { // 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) // //{ // // SystemValue.lbl_Alert_OP0501 = $" {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_OP0501.Equals("0") && value.ToString().Equals("1")) // {//当上一标记位0,当前获取标记为1时, // //触发操作, 并给静态变量赋值为1 // //业务代码 // //读码完成没啥业务操作,获取二维码,然后放到队列中 // #region 从工控机获取相关二维码 // var path = ConfigHelper.GetConfigString("WorkPeiceIDPath");//打码机打码二维码路径 // //扫描共享目录并将新的文件扫描返回 一般节拍在15秒左右(可以确认一下) // //扫描修改时间在上次扫描时间之前10秒到当前时间的之间的文件 // var dataTime = CommonManager.Instance.CheackPath(Environment.CurrentDirectory + "\\LastModifyTime\\OP05-LastScapTime.txt", 4, -10); // var scapEndTime = DateTimeHelper.GetDateTime(); // var newFiles = FileHelper.DetectNewFilesCSV(path, 60, Convert.ToDateTime(dataTime), scapEndTime); // Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), // $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息开始:{dataTime}"); // foreach (System.IO.FileInfo file in newFiles) // { // threadStatusMonitor.Threadlastmodifytime = DateTime.Now; // Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), // $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,文件名:{file.FullName}"); // 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 // ////筛选需要处理的二维码信息 // //DataRow[] drArr = dt.Select(" 扫码结果='成功'"); //查询 // //DataTable dtNew = dt.Clone(); // //for (int i = 0; i < drArr.Length; i++) // //{ // // var now = DateTime.Now; // // var list = drArr[i]["时间"].ToString().Split(':'); // // var d = new DateTime(now.Year, now.Month, now.Day, Convert.ToInt32(list[0]), Convert.ToInt32(list[1]), Convert.ToInt32(list[2]), DateTimeKind.Local); // // //and 时间> '19:19:34:547' // // if (Convert.ToDateTime(DateTime.Now.ToShortDateString() + " " +drArr[i]["时间"]).TimeOfDay> Convert.ToDateTime(DateTime.Now.ToShortDateString() + " 19:19:34:547").TimeOfDay) // // dtNew.ImportRow(drArr[i]); // // //获取到的工件号异常 // // SystemValue.lbl_Alert_OP0501 = $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位"; // // Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), // // $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位"); // //} // DataTable newDt = new DataTable(); // var dates = file.Name.Split('-', '.'); // var date = string.Format("{0:D4}-{1:D2}-{2:D2}", int.Parse(dates[0]), int.Parse(dates[1]), int.Parse(dates[2])); // if (DateTimeHelper.GetDateTime().Date != Convert.ToDateTime(date) && DateTimeHelper.GetDateTime().AddDays(-1).Date != Convert.ToDateTime(date)) // { // continue; // } // DataRow[] filteredRows = new DataRow[dt.Rows.Count]; // if (dt.Rows.Count > 0) // { // int j = 0; // var cache = DataCache.GetCache("OP501-LastTime"); // DateTime? lasttime = null; // if (cache != null) // { // lasttime = Convert.ToDateTime(cache); // } // Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), // $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,工件最新时间:{(cache == null ? "无缓存" : cache.ToString())}"); // for (int i = dt.Rows.Count - 1; i >= 0; i--) // {//降序,即优先读取最后一条数据 // string timeValue = " "; // try // { // timeValue = dt.Rows[i]["时间"].ToString(); // string[] timeComponents = timeValue.Split(':'); // string correctedTime = string.Format("{0:D2}:{1:D2}:{2:D2}", int.Parse(timeComponents[0]), int.Parse(timeComponents[1]), int.Parse(timeComponents[2])); // var newTime = date + " " + correctedTime; // dt.Rows[i]["时间"] = newTime; // var currrentTime = Convert.ToDateTime(dt.Rows[i]["时间"]); // if (cache == null) // { // if (j == 0) // { // if (currrentTime > DateTimeHelper.GetDateTime().AddHours(-10)) // { // lasttime = currrentTime; // } // } // var oldTime = DateTime.Now.AddMinutes(-10); // if (currrentTime <= oldTime) // {//如果excel里的时间要比 当前前10分钟时间要早,那么我就忽略不处理。 // break; // } // filteredRows[j] = dt.Rows[i]; // } // else // { // var cacheTime = Convert.ToDateTime(cache); // if (currrentTime <= cacheTime) // {//如果excel里的时间要比 我缓存中的时间要早,那么我就忽略不处理。 // break; // } // filteredRows[j] = dt.Rows[i]; // } // if (currrentTime > DateTimeHelper.GetDateTime().AddHours(-10)) // { // if (lasttime != null && lasttime < currrentTime) // { // lasttime = currrentTime; // } // } // j++; // } // catch (Exception ex) // { // SystemValue.lbl_Alert_OP0501 = $" {_dataCaptureConfig.WorkingProcedure}文件打标时间[{timeValue}]异常,请查看日志!"; // Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $" {_dataCaptureConfig.WorkingProcedure}文件打标时间,出现异常:", ex); // } // } // filteredRows = filteredRows.Where(item => item != null).ToArray(); // // 设置缓存值 // DateTime absoluteExpiration = DateTime.Now.AddDays(30); // TimeSpan slidingExpiration = TimeSpan.FromMinutes(20); // if (slidingExpiration == TimeSpan.Zero) // { // absoluteExpiration = DateTime.Now.AddDays(30); // } // else // { // absoluteExpiration = DateTime.MaxValue; // } // DataCache.SetCache("OP501-LastTime", lasttime, absoluteExpiration, slidingExpiration); // if (filteredRows.Count() <= 0) // { // continue; // } // if (file.LastAccessTime < Convert.ToDateTime(dataTime)) continue; // using (StreamWriter writer = new StreamWriter(Environment.CurrentDirectory + "\\OP05-LastScapTime.txt", false)) // { // dataTime = file.LastAccessTime.ToString(); // writer.Write(dataTime); // } // Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"读取到{filteredRows.Count()}行数据,时间范围是{filteredRows[j - 1]["时间"]}-{filteredRows[0]["时间"]}"); // } // //// 工件号(二维码值) // //string WorkPieceID = dt.Rows[0][""].ToString(); // //if (WorkPieceID.Length != 22) // //{ // // //获取到的工件号异常 // // SystemValue.lbl_Alert_HMI01 = $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位"; // // Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), // // $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息:【" + WorkPieceID + "】长度异常,长度不等于22位"); // //} // //SystemValue.QRcodeList.Add("", DateTimeHelper.GetDateTime());//二维码添加到列表中 // WorkPieceLog wplog = new WorkPieceLog(); // wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId(); // wplog.WorkingProcedure = _dataCaptureConfig.WorkingProcedure; ; // //wplog.EquipmentID = WorkingProcedure; // wplog.Remarks = "cs"; // wplog.MonitoringPoint = DataCapturePointCode; // //wplog.CreatedUserName = DataCapturePointCode; // SystemBussinessHelper.SetWorkPieceLogMiddleForCreatedUserName(ref wplog, DataCapturePointCode, DataCapturePointCname); // wplog.CreatedTime = DateTimeHelper.GetDateTime(); // wplog.UpdatedTime = DateTimeHelper.GetDateTime(); // wplog.UpdatedUserName = Environment.MachineName + "自动" + Thread.CurrentThread.ManagedThreadId.ToString(); // wplog.IsDeleted = false; // wplog.EquipmentID = _dataCaptureConfig.EquipmentID; // wplog.OnlineTime = DateTimeHelper.GetDateTime();//给上线时间用 // //wplog.QualityState = 1; // wplog.QualityState = (int)QualityStateEnum.OK;//默认合格,OP05默认合格 // wplog.ProcessingDuration = 1; // wplog.MachineToolState = 1; // wplog.AlertType = 1; // wplog.WorkPieceNumber = 1; // wplog.WorkPieceOnlineTime = Convert.ToDateTime(dataTime); // wplog.WorkPieceOfflineTime = Convert.ToDateTime(dataTime).AddHours(1); // wplog.WorkPieceStartMachiningTime = Convert.ToDateTime(dataTime); // wplog.WorkPieceEndMachiningTime = DateTime.Now.AddDays(7); // wplog.KnifeEdgeNumber = 10; // wplog.KnifeToolLife = 10; // wplog.KnifeToolEarlyWarningLife = 3; // wplog.KnifeToolSurplusLife = 10; // foreach (var item in filteredRows) // { // Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), // $"{_dataCaptureConfig.WorkingProcedure}工序读取工控机中二维码信息,读取工件二维码:{item["打标内容"].ToString()}"); // if (item == null) break; // wplog.Id = Yitter.IdGenerator.YitIdHelper.NextId(); // wplog.WorkPieceID = item["打标内容"].ToString(); // wplog.OfflineTime = Convert.ToDateTime(dataTime); // wplog.Remarks = item["时间"].ToString() + "|" + item["打标内容"].ToString() + "|" + item["打标内容"].ToString() + "|" + item["扫码等级"].ToString() + "|" + item["扫码结果"].ToString(); // WorkPieceInfoManager.ReadQRcode(wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), null, _dataCaptureConfig.IsFeedback); // threadStatusMonitor.Threadstatue = 1; // } // } // } // #endregion // //var fileCount = ((iWare_SCADA_BusinessLogical.Utils.FindFiles)newFiles).; // //Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"扫描完成,共扫描到:({fileCount.Count()})个文件"); // } // //SystemValue.value_OP0501 = value.ToString(); // } // } // catch (Exception ex) // { // threadStatusMonitor.ErrorMsg = $" {_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,出现异常,请查看日志!"; // SystemValue.lbl_Alert_OP0501 = $" {_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,出现异常,请查看日志!"; // Log4NetHelper.WriteErrorLog(LogType.PLCOP05, $" {_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,出现异常:", ex); // } // finally // { // WorkPieceInfoManager.ThreadMonitor(threadStatusMonitor); // } // //线程多久执行一次(不包含业务处理时间) // if (!_dataCaptureConfig.DataCaptureFrequency.HasValue || _dataCaptureConfig.DataCaptureFrequency < 10) // { // Thread.Sleep(3000); // } // else // { // Thread.Sleep(_dataCaptureConfig.DataCaptureFrequency.Value); // } // } // } // else // { // SystemValue.lbl_Alert_OP0501 = $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,不做校验,请确认配置信息!"; // Log4NetHelper.WriteInfoLog(LogType.PLCOP05, $"{_dataCaptureConfig.WorkingProcedure}工序打标完成标记,读取工控机中打印二维码信息,不做校验,请确认配置异常"); // } // } // } //}