using Common; using Common.vo.pb; using MeterModelLibrary; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace MeterPlugInLibrary { public delegate void EventDataCollection(object o, DataCollectionArgs e); public class DataCollectionArgs { public string carno { get; set; }//车号 public string carnoAlert { get; set; } //双车号识别类型 0:都识别且一致 1:只有一个识别 2:都识别但不一致 3:都不识别 public int weight { get; set; }//重量 public int weightStatus { get; set; }//0稳定,1不稳定,2空磅 public int parkStatus { get; set; }//红外对射 0未挡住,1:车头压线 2:车尾压线 3:两头压线; 记录在重量稳定后生成 public int licType { get; set; }//0 抓拍 1 RFID public DateTime datetime { get; set; } //当前时间的距离1970.1.1.08:00时间的秒数 public string vdioCarNos { get; set; } public string RfidNos { get; set; } public string videoCarNo1 { get; set; } public string videoCarNo2 { get; set; } } public class DataCollectionControl { public event EventDataCollection EventDataCollectionArgs;//定义事件 private Thread CollectionThread;//采集线程 private string strPntNo = "";//计量点编号 private string strPntName = "";//计量点编号 /// /// 开启数据采集线程 /// public void Start(string strPntID, string strPntName) { PbCache.collect = new CollectModel(); this.strPntNo = strPntID; this.strPntName = strPntName; CollectionThread = new Thread(new ThreadStart(WgtThread)); CollectionThread.Start(); } public void Stop() { if (CollectionThread != null) { CollectionThread.Abort(); CollectionThread = null; } } /// /// 重量采集线程 /// private void WgtThread() { //===========eason 2020 注释================ int icount = 0, iOldWgt = 0, iWdCount = 0; //iWdCount稳定次数,这里判断为5次稳定即可 MemoryTableDataSocket MemoClass = new MemoryTableDataSocket(PbCache.collect_no);//内存表 //CarNoModfiy carNoModifyClass = new CarNoModfiy();//车号修正 while (true) { try { icount++; Thread.Sleep(500); DataCollectionArgs arg = new DataCollectionArgs(); //WriteThreadLog("数据采集线执行跟踪!");//2021年3月16日 杨秀东添加 JArray jArray = MemoClass.TrackTable(PbCache.collect_no); if (jArray != null) //正常采集,若为null则重量采集线程中断了 { //arg.carno = jArray[2].ToString(); arg.weight = Convert.ToInt32(jArray[3].ToString()); arg.weightStatus = Convert.ToInt32(jArray[4].ToString()); arg.parkStatus = Convert.ToInt32(jArray[5].ToString()); arg.datetime = Convert.ToDateTime(jArray[6].ToString().Replace("T", " ").Replace("Z", "")); arg.licType = Convert.ToInt32(jArray[7].ToString()); //if (jArray[2].ToString() != "" || jArray[8].ToString() != "" || jArray[14].ToString() != "") //{ WriteThreadLog("jArray:"+jArray.ToString()); //} // 20221011 By BourneCao // 增加双摄像头支持 // 1. 获取双摄像头车号 string carNo1 = jArray[8].ToString(); string carNo2 = jArray[14].ToString(); if (carNo1.Contains("挂")) carNo1 = ""; if (carNo2.Contains("挂")) carNo2 = ""; arg.videoCarNo1 = carNo1; arg.videoCarNo2 = carNo2; if (arg.licType == 0) //摄像头的数据 { //arg.carno = jArray[2].ToString(); // 2. 判断逻辑: // a.A车号识别,B车号不识别;B车号识别,A车号不识别,正常计量,标记只有1个车号识别 if (carNo1 != "" && carNo2 == "") { arg.carno = carNo1; arg.carnoAlert = "1"; } else if (carNo2 != "" && carNo1 == "") { arg.carno = carNo2; arg.carnoAlert = "1"; } // b.A车号识别,B车号识别,且识别一致,正常计量 else if (carNo1 != "" && carNo2 != "" && carNo1 == carNo2) { arg.carno = carNo1; arg.carnoAlert = "0"; } // c.A车号识别,B车号识别,且识别不一致,停止计量,标记只有车号不一致识别 // c.A车号识别,B车号识别,且识别不一致,以枪机为准。张存斌、李亚军批准 By BourneCao 20221214 else if (carNo1 != "" && carNo2 != "" && carNo1 != carNo2) { arg.carno = carNo2; arg.carnoAlert = "1"; } // d.都不识别 else { arg.carno = ""; arg.carnoAlert = "3"; } } else { arg.carno = jArray[8].ToString(); } arg.vdioCarNos = arg.carno; //jArray[8].ToString(); arg.RfidNos = jArray[9].ToString(); #region 判稳代码 /* if (PbCache.range != null) { if (PbCache.range.stableDiff != null) { if (Math.Abs(arg.weight - iOldWgt) > PbCache.range.stableDiff.Value) { iOldWgt = arg.weight; iWdCount = 0; } else { arg.weight = iOldWgt; iWdCount++; } } } if (arg.weightStatus == 2) { arg.weightStatus = 0; //重量稳定 iWdCount = 0; } //0.1秒采集一次,一共采集5次,若稳定则认为重量稳定 if (iWdCount >= 10) { arg.weightStatus = 0; //重量稳定 iWdCount = 10; } //*/ #endregion } //每隔0.5秒调用一次写入到界面数据 //if (icount > 4) { icount = 0; // 将数据提交移出数据采集线程 // 避免HTTP数据提交影响到数据采集的刷新 // By BourneCao 20220811 EventDataCollectionArgs(this, arg); } } catch (Exception exp) { WriteThreadLog("数据采集线程异常!" + exp.Message); } } } public void WriteLog(string str) { try { string m_szRunPath; m_szRunPath = System.Environment.CurrentDirectory; if (System.IO.Directory.Exists(m_szRunPath + "\\log") == false) { System.IO.Directory.CreateDirectory(m_szRunPath + "\\log"); } string strDate = System.DateTime.Now.ToString("yyyyMMdd"); string strPathFile = m_szRunPath + "\\log\\" + strDate; if (!Directory.Exists(strPathFile))//如果不存在就创建file文件夹 { Directory.CreateDirectory(strPathFile); } System.IO.TextWriter tw = new System.IO.StreamWriter(strPathFile + "\\数据采集_" + strDate + ".log", true); tw.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); tw.WriteLine(str); tw.WriteLine("\r\n"); tw.Close(); } catch (Exception exp) { } } /// /// 写线程日志 /// /// public void WriteThreadLog(string str) { try { string m_szRunPath; m_szRunPath = System.Environment.CurrentDirectory; if (System.IO.Directory.Exists(m_szRunPath + "\\log") == false) { System.IO.Directory.CreateDirectory(m_szRunPath + "\\log"); } string strDate = System.DateTime.Now.ToString("yyyyMMdd"); string strPathFile = m_szRunPath + "\\log\\" + strDate; if (!Directory.Exists(strPathFile))//如果不存在就创建file文件夹 { Directory.CreateDirectory(strPathFile); } System.IO.TextWriter tw = new System.IO.StreamWriter(strPathFile + "\\数据采集线程_" + strDate + ".log", true); tw.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); tw.WriteLine(str); tw.WriteLine("\r\n"); tw.Close(); } catch (Exception exp) { } } public void WriteLogUpCardNo(string str) { try { string m_szRunPath; m_szRunPath = System.Environment.CurrentDirectory; if (System.IO.Directory.Exists(m_szRunPath + "\\log") == false) { System.IO.Directory.CreateDirectory(m_szRunPath + "\\log"); } string strDate = System.DateTime.Now.ToString("yyyyMMdd"); string strPathFile = m_szRunPath + "\\log\\" + strDate; if (!Directory.Exists(strPathFile))//如果不存在就创建file文件夹 { Directory.CreateDirectory(strPathFile); } System.IO.TextWriter tw = new System.IO.StreamWriter(strPathFile + "\\修正车号_" + strDate + ".log", true); tw.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); tw.WriteLine(str); tw.WriteLine("\r\n"); tw.Close(); } catch (Exception exp) { } } public void WriteLogStatus(string str) { try { string m_szRunPath; m_szRunPath = System.Environment.CurrentDirectory; if (System.IO.Directory.Exists(m_szRunPath + "\\log") == false) { System.IO.Directory.CreateDirectory(m_szRunPath + "\\log"); } string strDate = System.DateTime.Now.ToString("yyyyMMdd"); string strPathFile = m_szRunPath + "\\log\\" + strDate; if (!Directory.Exists(strPathFile))//如果不存在就创建file文件夹 { Directory.CreateDirectory(strPathFile); } System.IO.TextWriter tw = new System.IO.StreamWriter(strPathFile + "\\重量稳定判断_" + strDate + ".log", true); tw.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); tw.WriteLine(str); tw.WriteLine("\r\n"); tw.Close(); } catch (Exception exp) { } } } }