| | |
| | | using Bro.Common.Helper; |
| | | using Bro.Common.Interface; |
| | | using Bro.Common.Model; |
| | | using Bro.M135.DBManager; |
| | | using Newtonsoft.Json; |
| | | using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView; |
| | | |
| | | namespace Bro.M135.Common |
| | | { |
| | |
| | | { |
| | | if (!string.IsNullOrWhiteSpace(d.FAIData)) |
| | | { |
| | | d.SpecList = JsonConvert.DeserializeObject<List<Spec>>(d.FAIData); |
| | | d.SpecList = JsonConvert.DeserializeObject<List<ISpec>>(d.FAIData); |
| | | } |
| | | else |
| | | { |
| | | d.SpecList = new List<Spec>(); |
| | | d.SpecList = new List<ISpec>(); |
| | | } |
| | | |
| | | if (!string.IsNullOrWhiteSpace(d.DefectDesc)) |
| | |
| | | #endregion |
| | | |
| | | public bool IsPreStationOK { get; set; } = false; |
| | | |
| | | [JsonIgnore] |
| | | public List<string> ImagePaths { get; set; } = new List<string>(); |
| | | |
| | | public List<Netdefectdetail> Netdefectdetails = new List<Netdefectdetail>(); |
| | | |
| | | public List<double> Centermatrix { get; set; } = new List<double>(); |
| | | |
| | | public DateTime? EndTime { get; set; } = null; |
| | | |
| | |
| | | }); |
| | | }); |
| | | |
| | | head = $"PID,条码,汇总检测结果,"; |
| | | allSpecs.RemoveAll(u => (u.Code.ToLower() == "ngspec" || u.Code == "检测TBD")); |
| | | |
| | | head = $"时间,PID,栏具码,物料码,条码,汇总检测结果,"; |
| | | |
| | | positionList = new List<string>(); |
| | | Details = Details.OrderBy(u => u.PositionName).ToList(); |
| | | Details = Details.OrderBy(u => u.STATION_CODE).ThenBy(u => u.PositionName).ToList(); |
| | | foreach (var d in Details) |
| | | { |
| | | positionList.Add($"{d.STATION_CODE}_{d.PositionName}"); |
| | |
| | | }); |
| | | }); |
| | | |
| | | string data = $"{PID},{SN},{Result},"; |
| | | //时间,PID,栏具码,物料码,条码,汇总检测结果,"; |
| | | string data = $"{DateTime.Now.ToString("yyyyMMddHHmmss")}T,{PID},{BasketCode},{SEQUENCE},{SN},{Result},"; |
| | | positionList.ForEach(pName => |
| | | { |
| | | var detail = Details.FirstOrDefault(u => $"{u.STATION_CODE}_{u.PositionName}" == pName); |
| | |
| | | }); |
| | | }); |
| | | |
| | | head = $"时间,PID,序号,条码,"; |
| | | allSpecs.RemoveAll(u => u.Code.ToLower() == "ngspec" || u.Code == "检测TBD"); |
| | | |
| | | head = $"时间,栏具码,PID,序号,条码,"; |
| | | |
| | | foreach (var d in positionDetail) |
| | | { |
| | |
| | | }); |
| | | }); |
| | | |
| | | string data = $"{DateTime.Now.ToString("HH:mm:ss.fff")}T,{PID},{SEQUENCE},{SN},"; |
| | | string data = $"{DateTime.Now.ToString("HH:mm:ss.fff")}T,{BasketCode},{PID},{SEQUENCE},{SN},"; |
| | | positionDetail.ForEach(detail => |
| | | { |
| | | if (!detail.IsDone) |
| | |
| | | } |
| | | }); |
| | | |
| | | positionDetail.ForEach(detail => |
| | | { |
| | | if (detail.IsDone) |
| | | { |
| | | //positionDetail.ForEach(detail => |
| | | //{ |
| | | // if (detail.IsDone) |
| | | // { |
| | | |
| | | var results = detail.ResultList; |
| | | // var results = detail.ResultList; |
| | | |
| | | var list = results.Where((DetectResult u) => u.ResultState != EnumHelper.ResultState.OK).SelectMany((DetectResult u) => u.NetResults.Where((NetResult m) => !m.IsAbandoned && m.CurResult != EnumHelper.ResultState.OK).SelectMany((NetResult m) => from n in m.DetectDetails where !n.IsAbandoned && n.FinalResult != EnumHelper.ResultState.OK select n)).ToList(); |
| | | // var list = results.Where((DetectResult u) => u.ResultState != EnumHelper.ResultState.OK).SelectMany((DetectResult u) => u.NetResults.Where((NetResult m) => !m.IsAbandoned && m.CurResult != EnumHelper.ResultState.OK).SelectMany((NetResult m) => from n in m.DetectDetails where !n.IsAbandoned && n.FinalResult != EnumHelper.ResultState.OK select n)).ToList(); |
| | | |
| | | list.ForEach(d => |
| | | { |
| | | data += $"{(d.Rect.Height * d.PixelSize).ToString("f4")},"; |
| | | data += $"{(d.Rect.Width * d.PixelSize).ToString("f4")},"; |
| | | }); |
| | | } |
| | | }); |
| | | // list.ForEach(d => |
| | | // { |
| | | // data += $"{(d.Rect.Height * d.PixelSize).ToString("f4")},"; |
| | | // data += $"{(d.Rect.Width * d.PixelSize).ToString("f4")},"; |
| | | // }); |
| | | // } |
| | | //}); |
| | | |
| | | |
| | | |
| | |
| | | #endregion |
| | | |
| | | #region PositionCheckTimes |
| | | public void InitialPositionCheckList(string positionName, List<int> checkTimes) |
| | | public void InitialPositionCheckList(string positionName, List<int> checkTimes, string stationName) |
| | | { |
| | | lock (_checkResultLock) |
| | | { |
| | | PositionCheckList[positionName] = new List<int>(checkTimes); |
| | | Details.RemoveAll(u => u.PositionName == positionName); |
| | | |
| | | |
| | | P_PRODUCT_DETAIL detail = new P_PRODUCT_DETAIL(); |
| | | detail.STATION_CODE = stationName; |
| | | detail.PositionName = positionName; |
| | | detail.PID = PID; |
| | | detail.IsDone = false; |
| | | Details.Add(detail); |
| | | } |
| | | } |
| | | |
| | |
| | | TimeoutTimer = null; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | public class Netdefectdetail |
| | | { |
| | | public string name { get; set; } |
| | | |
| | | public double centerX { get; set; } |
| | | public double centerY { get; set; } |
| | | |
| | | |
| | | |
| | | |
| | | public static double GetDistance(double x1, double y1, double x2, double y2) |
| | | { |
| | | double dx = x2 - x1; |
| | | double dy = y2 - y1; |
| | | return Math.Sqrt(dx * dx + dy * dy); |
| | | } |
| | | public static bool operator ==(Netdefectdetail a, Netdefectdetail b) |
| | | { |
| | | if (GetDistance(a.centerX, a.centerY, b.centerX, b.centerY) < 50) |
| | | { |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public static bool operator !=(Netdefectdetail a, Netdefectdetail b) |
| | | { |
| | | return !(a == b); |
| | | } |
| | | } |
| | | } |