| | |
| | | using System.Drawing.Imaging; |
| | | using System.IO; |
| | | using System.Linq; |
| | | using System.Runtime.CompilerServices; |
| | | using System.Text; |
| | | using System.Threading; |
| | | using System.Threading.Tasks; |
| | |
| | | public event Action<IShapeElement> OnElementUpdated; |
| | | public event Action<MachineState> OnMachineStateChanged; |
| | | public event Action OnFullResetDone; |
| | | public event Action OnResetDone; |
| | | #endregion |
| | | |
| | | string _precision = "f3"; |
| | |
| | | } |
| | | #endregion |
| | | |
| | | object productionLock = new object(); |
| | | List<ProductionMeasurement> productionList = new List<ProductionMeasurement>(); |
| | | |
| | | bool _isdoing = false; |
| | | object _doingLock = new object(); |
| | | |
| | | [ProcessMethod("", "StartJob", "开始扫描", InvokeType.TestInvoke)] |
| | | public ProcessResponse StartJob(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) |
| | |
| | | } |
| | | |
| | | string hint = ""; |
| | | if (MachineState != MachineState.Ready) |
| | | { |
| | | hint = "机台未就绪,请勿开始测量"; |
| | | OnCheckHintUpload?.Invoke(hint, true); |
| | | throw new ProcessException(hint, null, ExceptionLevel.Warning); |
| | | } |
| | | |
| | | //if (MachineState != MachineState.Ready) |
| | | //{ |
| | | // hint = "机台未就绪,请勿开始测量"; |
| | | // OnCheckHintUpload?.Invoke(hint, true); |
| | | // throw new ProcessException(hint, null, ExceptionLevel.Warning); |
| | | //} |
| | | |
| | | if (string.IsNullOrWhiteSpace(BarCode)) |
| | | { |
| | |
| | | OnClearBarcode?.Invoke(); |
| | | OnCheckHintUpload?.Invoke(hint, true); |
| | | throw new ProcessException(hint); |
| | | } |
| | | |
| | | lock (_doingLock) |
| | | { |
| | | if (_isdoing) |
| | | { |
| | | LogAsync(DateTime.Now, "设备正在运行中", ""); |
| | | return new ProcessResponse(true); |
| | | } |
| | | |
| | | _isdoing = true; |
| | | } |
| | | |
| | | MachineState = MachineState.Running; |
| | |
| | | |
| | | BarCode = ""; |
| | | |
| | | var existedProduction = productionList.FirstOrDefault(u => u.Barcode == pMeasure.Barcode); |
| | | if (existedProduction != null) |
| | | lock (productionLock) |
| | | { |
| | | productionList.Remove(existedProduction); |
| | | existedProduction.Dispose(); |
| | | existedProduction = null; |
| | | } |
| | | var existedProduction = productionList.FirstOrDefault(u => u.Barcode == pMeasure.Barcode); |
| | | if (existedProduction != null) |
| | | { |
| | | productionList.Remove(existedProduction); |
| | | existedProduction.Dispose(); |
| | | existedProduction = null; |
| | | } |
| | | |
| | | productionList.Add(pMeasure); |
| | | productionList.Add(pMeasure); |
| | | } |
| | | |
| | | pMeasure.InitialMeasurementsPropertyChanged(); |
| | | pMeasure.PropertyChanged += MeasureProduction_PropertyChanged; |
| | | |
| | | Config.SnapshotPointCollection.Where(u => u.IsEnabled).ToList().ForEach(s => |
| | | try |
| | | { |
| | | Config.SnapshotPointCollection.Where(u => u.IsEnabled).ToList().ForEach(s => |
| | | { |
| | | _pausedHandle.Wait(); |
| | | |
| | |
| | | |
| | | RunImageHandle(s.CameraOp.OpConfig, set, s.Id, s.Name, pMeasure.Measurements); |
| | | }); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw ex; |
| | | } |
| | | finally |
| | | { |
| | | LogAsync(DateTime.Now, $"{pMeasure.Barcode}测量动作完成", ""); |
| | | _isdoing = false; |
| | | |
| | | LogAsync(DateTime.Now, $"{pMeasure.Barcode}测量动作完成", ""); |
| | | |
| | | GC.Collect(0, GCCollectionMode.Optimized); |
| | | GC.Collect(0, GCCollectionMode.Optimized); |
| | | } |
| | | |
| | | return new ProcessResponse(true); |
| | | } |
| | | |
| | | #region 双手启动 |
| | | object _leftStartLock = new object(); |
| | | object _rightStartLock = new object(); |
| | | |
| | | bool isLeftStart = false; |
| | | bool IsLeftStart |
| | | { |
| | | get => isLeftStart; |
| | | set |
| | | { |
| | | isLeftStart = value; |
| | | StartCheck(); |
| | | if (isLeftStart != value) |
| | | { |
| | | lock (_leftStartLock) |
| | | { |
| | | if (IsLeftStart != value) |
| | | { |
| | | isLeftStart = value; |
| | | StartCheck(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | get => isRightStart; |
| | | set |
| | | { |
| | | isRightStart = value; |
| | | StartCheck(); |
| | | if (isRightStart != value) |
| | | { |
| | | lock (_rightStartLock) |
| | | { |
| | | if (isRightStart != value) |
| | | { |
| | | isRightStart = value; |
| | | StartCheck(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void StartCheck() |
| | | { |
| | | |
| | | if (isRightStart && isLeftStart) |
| | | { |
| | | if (_isdoing) |
| | | { |
| | | OnCheckHintUpload?.Invoke("设备运行中", false); |
| | | return; |
| | | } |
| | | StartJob(null, null, null); |
| | | } |
| | | } |
| | |
| | | { |
| | | if (sender is ProductionMeasurement pMeasure) |
| | | { |
| | | var production = productionList.FirstOrDefault(u => u.Barcode == pMeasure.Barcode); |
| | | if (production == null) |
| | | return; |
| | | ProductionMeasurement production = null; |
| | | lock (productionLock) |
| | | { |
| | | production = productionList.FirstOrDefault(u => u.Barcode == pMeasure.Barcode); |
| | | if (production == null) |
| | | return; |
| | | } |
| | | |
| | | lock (production) |
| | | { |
| | |
| | | |
| | | SaveWholeImage(pMeasure); |
| | | |
| | | productionList.RemoveAll(p => p.Barcode == pMeasure.Barcode); |
| | | lock (productionLock) |
| | | { |
| | | productionList.RemoveAll(p => p.Barcode == pMeasure.Barcode); |
| | | } |
| | | pMeasure.Dispose(); |
| | | //LogAsync(DateTime.Now, $"{pMeasure.Barcode}产品信息释放完成", JsonConvert.SerializeObject(pMeasure)); |
| | | } |
| | |
| | | Directory.CreateDirectory(Config.LogPath); |
| | | } |
| | | var fileName = Path.Combine(Config.LogPath, $"LDSData_{DateTime.Now.ToString("yyyyMMdd")}.xlsx"); |
| | | //bool isExisted = File.Exists(fileName); |
| | | using (ExcelPackage package = new ExcelPackage(new FileInfo(fileName))) |
| | | |
| | | try |
| | | { |
| | | ExcelWorksheet rawDataSheet = null; |
| | | ExcelWorksheet slantSheet = null; |
| | | ExcelWorksheet alignmentSheet = null; |
| | | ExcelWorksheet rowAlignmentSheet = null; |
| | | |
| | | if (!package.Workbook.Worksheets.Any(s => s.Name == "RawData")) |
| | | using (ExcelPackage package = new ExcelPackage(new FileInfo(fileName))) |
| | | { |
| | | package.Workbook.Worksheets.Add("RawData"); |
| | | rawDataSheet = package.Workbook.Worksheets["RawData"]; |
| | | for (int i = 0; i < Config.KeyNameCollection.Count; i++) |
| | | ExcelWorksheet rawDataSheet = null; |
| | | ExcelWorksheet slantSheet = null; |
| | | ExcelWorksheet alignmentSheet = null; |
| | | ExcelWorksheet rowAlignmentSheet = null; |
| | | |
| | | if (!package.Workbook.Worksheets.Any(s => s.Name == "RawData")) |
| | | { |
| | | var cell = rawDataSheet.Cells[i + 3, 1]; |
| | | cell.Value = Config.KeyNameCollection[i]; |
| | | SetTitleCell(cell, false); |
| | | package.Workbook.Worksheets.Add("RawData"); |
| | | rawDataSheet = package.Workbook.Worksheets["RawData"]; |
| | | for (int i = 0; i < Config.KeyNameCollection.Count; i++) |
| | | { |
| | | var cell = rawDataSheet.Cells[i + 3, 1]; |
| | | cell.Value = Config.KeyNameCollection[i]; |
| | | SetTitleCell(cell, false); |
| | | } |
| | | } |
| | | } |
| | | rawDataSheet = package.Workbook.Worksheets["RawData"]; |
| | | rawDataSheet = package.Workbook.Worksheets["RawData"]; |
| | | |
| | | if (!package.Workbook.Worksheets.Any(s => s.Name == "Slant")) |
| | | { |
| | | package.Workbook.Worksheets.Add("Slant"); |
| | | if (!package.Workbook.Worksheets.Any(s => s.Name == "Slant")) |
| | | { |
| | | package.Workbook.Worksheets.Add("Slant"); |
| | | slantSheet = package.Workbook.Worksheets["Slant"]; |
| | | |
| | | var keyCell = slantSheet.Cells[2, 1]; |
| | | keyCell.Value = "Key"; |
| | | SetTitleCell(keyCell); |
| | | |
| | | for (int i = 0; i < Config.KeyNameCollection.Count; i++) |
| | | { |
| | | var cell = slantSheet.Cells[i + 3, 1]; |
| | | cell.Value = Config.KeyNameCollection[i]; |
| | | SetTitleCell(cell, false); |
| | | } |
| | | } |
| | | slantSheet = package.Workbook.Worksheets["Slant"]; |
| | | |
| | | var keyCell = slantSheet.Cells[2, 1]; |
| | | keyCell.Value = "Key"; |
| | | SetTitleCell(keyCell); |
| | | |
| | | for (int i = 0; i < Config.KeyNameCollection.Count; i++) |
| | | if (!package.Workbook.Worksheets.Any(s => s.Name == "Alignment")) |
| | | { |
| | | var cell = slantSheet.Cells[i + 3, 1]; |
| | | cell.Value = Config.KeyNameCollection[i]; |
| | | SetTitleCell(cell, false); |
| | | } |
| | | } |
| | | slantSheet = package.Workbook.Worksheets["Slant"]; |
| | | package.Workbook.Worksheets.Add("Alignment"); |
| | | alignmentSheet = package.Workbook.Worksheets["Alignment"]; |
| | | |
| | | if (!package.Workbook.Worksheets.Any(s => s.Name == "Alignment")) |
| | | { |
| | | package.Workbook.Worksheets.Add("Alignment"); |
| | | var keysCell = alignmentSheet.Cells[2, 1]; |
| | | keysCell.Value = "Keys"; |
| | | SetTitleCell(keysCell); |
| | | |
| | | var positionCell = alignmentSheet.Cells[2, 2]; |
| | | positionCell.Value = "Positions"; |
| | | SetTitleCell(positionCell); |
| | | |
| | | var alignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Alignment")).ToList(); |
| | | for (int i = 0; i < alignmentMeasures.Count(); i++) |
| | | { |
| | | var cellKeys = alignmentSheet.Cells[i + 3, 1]; |
| | | cellKeys.Value = alignmentMeasures[i].Keys; |
| | | SetTitleCell(cellKeys, false); |
| | | |
| | | var cellPosition = alignmentSheet.Cells[i + 3, 2]; |
| | | cellPosition.Value = alignmentMeasures[i].Positions; |
| | | SetTitleCell(cellPosition, false); |
| | | } |
| | | } |
| | | alignmentSheet = package.Workbook.Worksheets["Alignment"]; |
| | | |
| | | var keysCell = alignmentSheet.Cells[2, 1]; |
| | | keysCell.Value = "Keys"; |
| | | SetTitleCell(keysCell); |
| | | |
| | | var positionCell = alignmentSheet.Cells[2, 2]; |
| | | positionCell.Value = "Positions"; |
| | | SetTitleCell(positionCell); |
| | | |
| | | var alignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Alignment")).ToList(); |
| | | for (int i = 0; i < alignmentMeasures.Count(); i++) |
| | | if (!package.Workbook.Worksheets.Any(s => s.Name == "RowAlignment")) |
| | | { |
| | | var cellKeys = alignmentSheet.Cells[i + 3, 1]; |
| | | cellKeys.Value = alignmentMeasures[i].Keys; |
| | | SetTitleCell(cellKeys, false); |
| | | package.Workbook.Worksheets.Add("RowAlignment"); |
| | | rowAlignmentSheet = package.Workbook.Worksheets["RowAlignment"]; |
| | | |
| | | var cellPosition = alignmentSheet.Cells[i + 3, 2]; |
| | | cellPosition.Value = alignmentMeasures[i].Positions; |
| | | SetTitleCell(cellPosition, false); |
| | | var keysCell = rowAlignmentSheet.Cells[2, 1]; |
| | | keysCell.Value = "Keys"; |
| | | SetTitleCell(keysCell); |
| | | |
| | | var positionCell = rowAlignmentSheet.Cells[2, 2]; |
| | | positionCell.Value = "Positions"; |
| | | SetTitleCell(positionCell); |
| | | |
| | | var rowAlignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("RowAlignment")).ToList(); |
| | | for (int i = 0; i < rowAlignmentMeasures.Count(); i++) |
| | | { |
| | | var cellKeys = rowAlignmentSheet.Cells[i + 3, 1]; |
| | | cellKeys.Value = rowAlignmentMeasures[i].Keys; |
| | | SetTitleCell(cellKeys, false); |
| | | |
| | | var cellPosition = rowAlignmentSheet.Cells[i + 3, 2]; |
| | | cellPosition.Value = rowAlignmentMeasures[i].Positions; |
| | | SetTitleCell(cellPosition, false); |
| | | } |
| | | } |
| | | } |
| | | alignmentSheet = package.Workbook.Worksheets["Alignment"]; |
| | | |
| | | if (!package.Workbook.Worksheets.Any(s => s.Name == "RowAlignment")) |
| | | { |
| | | package.Workbook.Worksheets.Add("RowAlignment"); |
| | | rowAlignmentSheet = package.Workbook.Worksheets["RowAlignment"]; |
| | | |
| | | var keysCell = rowAlignmentSheet.Cells[2, 1]; |
| | | keysCell.Value = "Keys"; |
| | | SetTitleCell(keysCell); |
| | | |
| | | var positionCell = rowAlignmentSheet.Cells[2, 2]; |
| | | positionCell.Value = "Positions"; |
| | | SetTitleCell(positionCell); |
| | | |
| | | var rowAlignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("RowAlignment")).ToList(); |
| | | for (int i = 0; i < rowAlignmentMeasures.Count(); i++) |
| | | #region RawData |
| | | { |
| | | var cellKeys = rowAlignmentSheet.Cells[i + 3, 1]; |
| | | cellKeys.Value = rowAlignmentMeasures[i].Keys; |
| | | SetTitleCell(cellKeys, false); |
| | | |
| | | var cellPosition = rowAlignmentSheet.Cells[i + 3, 2]; |
| | | cellPosition.Value = rowAlignmentMeasures[i].Positions; |
| | | SetTitleCell(cellPosition, false); |
| | | } |
| | | } |
| | | rowAlignmentSheet = package.Workbook.Worksheets["RowAlignment"]; |
| | | |
| | | #region RawData |
| | | { |
| | | int rowDataStartCol = rawDataSheet.Dimension.Columns; |
| | | var barcodeCell = rawDataSheet.Cells[1, rowDataStartCol + 1, 1, rowDataStartCol + 4]; |
| | | barcodeCell.Merge = true; |
| | | barcodeCell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; |
| | | barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; |
| | | SetTitleCell(barcodeCell); |
| | | |
| | | var z1Cell = rawDataSheet.Cells[2, rowDataStartCol + 1]; |
| | | z1Cell.Value = "Z1"; |
| | | SetTitleCell(z1Cell); |
| | | |
| | | var z2Cell = rawDataSheet.Cells[2, rowDataStartCol + 2]; |
| | | z2Cell.Value = "Z2"; |
| | | SetTitleCell(z2Cell); |
| | | |
| | | var z3Cell = rawDataSheet.Cells[2, rowDataStartCol + 3]; |
| | | z3Cell.Value = "Z3"; |
| | | SetTitleCell(z3Cell); |
| | | |
| | | var z4Cell = rawDataSheet.Cells[2, rowDataStartCol + 4]; |
| | | z4Cell.Value = "Z4"; |
| | | SetTitleCell(z4Cell); |
| | | |
| | | exportData.KeyUnitDataList.ForEach(k => |
| | | { |
| | | int keyIndex = Config.KeyNameCollection.IndexOf(k.Key); |
| | | if (keyIndex < 0) |
| | | { |
| | | LogAsync(DateTime.Now, "Excel导出错误", $"{k.Key}的RawData未能获取行信息,未导出"); |
| | | return; |
| | | } |
| | | |
| | | int zIndex = int.Parse(k.MeasurementItem.Substring(1)); |
| | | |
| | | var cell = rawDataSheet.Cells[keyIndex + 1 + 2, rowDataStartCol + zIndex]; |
| | | cell.Value = string.IsNullOrWhiteSpace(k.ItemValue) ? "NA" : k.ItemValue; |
| | | }); |
| | | } |
| | | #endregion |
| | | |
| | | #region Slant |
| | | var slantMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Slant")).ToList(); |
| | | if (slantMeasures.Count > 0) |
| | | { |
| | | int slantStartCol = slantSheet.Dimension.Columns; |
| | | |
| | | var barcodeCell = slantSheet.Cells[1, slantStartCol + 1]; |
| | | barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; |
| | | SetTitleCell(barcodeCell); |
| | | |
| | | var valueCell = slantSheet.Cells[2, slantStartCol + 1]; |
| | | valueCell.Value = "Value"; |
| | | SetTitleCell(valueCell); |
| | | |
| | | slantMeasures.ForEach(m => |
| | | { |
| | | int rowIndex = Config.KeyNameCollection.IndexOf(m.Keys); |
| | | if (rowIndex < 0) |
| | | { |
| | | LogAsync(DateTime.Now, "Excel导出错误", $"{m.Keys}的Slant未能获取行信息,未导出"); |
| | | return; |
| | | } |
| | | |
| | | var cellValue = slantSheet.Cells[rowIndex + 1 + 2, slantStartCol + 1]; |
| | | //var cellResult = slantSheet.Cells[rowIndex + 1 + 2, slantStartCol + 2]; |
| | | |
| | | cellValue.Value = m.MeasurementValue; |
| | | //cellResult.Value = m.MeasurementResult; |
| | | |
| | | if (m.MeasurementResult != "OK") |
| | | { |
| | | SetNGCell(cellValue); |
| | | //SetNGCell(cellResult); |
| | | } |
| | | }); |
| | | } |
| | | #endregion |
| | | |
| | | #region Alignment |
| | | { |
| | | var alignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Alignment")).ToList(); |
| | | if (alignmentMeasures.Count > 0) |
| | | { |
| | | List<string> keysList = new List<string>(); |
| | | int allRowNums = alignmentSheet.Dimension.Rows; |
| | | int aligneStartCol = alignmentSheet.Dimension.Columns; |
| | | |
| | | for (int i = 3; i <= alignmentSheet.Dimension.End.Row; i++) |
| | | { |
| | | string keys = alignmentSheet.Cells[i, 1].Value.ToString(); |
| | | string position = alignmentSheet.Cells[i, 2].Value.ToString(); |
| | | |
| | | keysList.Add($"{keys}_{position}"); |
| | | } |
| | | |
| | | //var barcodeCell = alignmentSheet.Cells[1, aligneStartCol + 1, 1, aligneStartCol + 2]; |
| | | //barcodeCell.Merge = true; |
| | | //barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; |
| | | //SetTitleCell(barcodeCell); |
| | | |
| | | var barcodeCell = alignmentSheet.Cells[1, aligneStartCol + 1]; |
| | | int rowDataStartCol = rawDataSheet.Dimension.Columns; |
| | | var barcodeCell = rawDataSheet.Cells[1, rowDataStartCol + 1, 1, rowDataStartCol + 4]; |
| | | barcodeCell.Merge = true; |
| | | barcodeCell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; |
| | | barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; |
| | | SetTitleCell(barcodeCell); |
| | | |
| | | var valueCell = alignmentSheet.Cells[2, aligneStartCol + 1]; |
| | | valueCell.Value = "Value"; |
| | | SetTitleCell(valueCell); |
| | | var z1Cell = rawDataSheet.Cells[2, rowDataStartCol + 1]; |
| | | z1Cell.Value = "Z1"; |
| | | SetTitleCell(z1Cell); |
| | | |
| | | //var resultCell = alignmentSheet.Cells[2, aligneStartCol + 2]; |
| | | //resultCell.Value = "Result"; |
| | | //SetTitleCell(resultCell); |
| | | var z2Cell = rawDataSheet.Cells[2, rowDataStartCol + 2]; |
| | | z2Cell.Value = "Z2"; |
| | | SetTitleCell(z2Cell); |
| | | |
| | | alignmentMeasures.ForEach(a => |
| | | var z3Cell = rawDataSheet.Cells[2, rowDataStartCol + 3]; |
| | | z3Cell.Value = "Z3"; |
| | | SetTitleCell(z3Cell); |
| | | |
| | | var z4Cell = rawDataSheet.Cells[2, rowDataStartCol + 4]; |
| | | z4Cell.Value = "Z4"; |
| | | SetTitleCell(z4Cell); |
| | | |
| | | exportData.KeyUnitDataList.ForEach(k => |
| | | { |
| | | int rowIndex = keysList.IndexOf($"{a.Keys}_{a.Positions}"); |
| | | if (rowIndex < 0) |
| | | int keyIndex = Config.KeyNameCollection.IndexOf(k.Key); |
| | | if (keyIndex < 0) |
| | | { |
| | | LogAsync(DateTime.Now, "Excel导出错误", $"{a.Keys}_{a.Positions}的Alignment未能获取行信息,未导出"); |
| | | LogAsync(DateTime.Now, "Excel导出错误", $"{k.Key}的RawData未能获取行信息,未导出"); |
| | | return; |
| | | } |
| | | |
| | | var cellValue = alignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 1]; |
| | | //var cellResult = alignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 2]; |
| | | int zIndex = int.Parse(k.MeasurementItem.Substring(1)); |
| | | |
| | | cellValue.Value = a.MeasurementValue; |
| | | //cellResult.Value = a.MeasurementResult; |
| | | var cell = rawDataSheet.Cells[keyIndex + 1 + 2, rowDataStartCol + zIndex]; |
| | | cell.Value = string.IsNullOrWhiteSpace(k.ItemValue) ? "NA" : k.ItemValue; |
| | | }); |
| | | } |
| | | #endregion |
| | | |
| | | if (a.MeasurementResult != "OK") |
| | | #region Slant |
| | | var slantMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Slant")).ToList(); |
| | | if (slantMeasures.Count > 0) |
| | | { |
| | | int slantStartCol = slantSheet.Dimension.Columns; |
| | | |
| | | var barcodeCell = slantSheet.Cells[1, slantStartCol + 1]; |
| | | barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; |
| | | SetTitleCell(barcodeCell); |
| | | |
| | | var valueCell = slantSheet.Cells[2, slantStartCol + 1]; |
| | | valueCell.Value = "Value"; |
| | | SetTitleCell(valueCell); |
| | | |
| | | slantMeasures.ForEach(m => |
| | | { |
| | | int rowIndex = Config.KeyNameCollection.IndexOf(m.Keys); |
| | | if (rowIndex < 0) |
| | | { |
| | | LogAsync(DateTime.Now, "Excel导出错误", $"{m.Keys}的Slant未能获取行信息,未导出"); |
| | | return; |
| | | } |
| | | |
| | | var cellValue = slantSheet.Cells[rowIndex + 1 + 2, slantStartCol + 1]; |
| | | //var cellResult = slantSheet.Cells[rowIndex + 1 + 2, slantStartCol + 2]; |
| | | |
| | | cellValue.Value = m.MeasurementValue; |
| | | //cellResult.Value = m.MeasurementResult; |
| | | |
| | | if (m.MeasurementResult != "OK") |
| | | { |
| | | SetNGCell(cellValue); |
| | | //SetNGCell(cellResult); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | #endregion |
| | | #endregion |
| | | |
| | | #region RowAlignment |
| | | { |
| | | var rowAlignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("RowAlignment")).ToList(); |
| | | if (rowAlignmentMeasures.Count > 0) |
| | | #region Alignment |
| | | { |
| | | List<string> keysList = new List<string>(); |
| | | int allRowNums = rowAlignmentSheet.Dimension.Rows; |
| | | int aligneStartCol = rowAlignmentSheet.Dimension.Columns; |
| | | |
| | | for (int i = 3; i <= allRowNums; i++) |
| | | var alignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Alignment")).ToList(); |
| | | if (alignmentMeasures.Count > 0) |
| | | { |
| | | string keys = alignmentSheet.Cells[i, 1].Value.ToString(); |
| | | string position = alignmentSheet.Cells[i, 2].Value.ToString(); |
| | | List<string> keysList = new List<string>(); |
| | | int allRowNums = alignmentSheet.Dimension.Rows; |
| | | int aligneStartCol = alignmentSheet.Dimension.Columns; |
| | | |
| | | keysList.Add($"{keys}_{position}"); |
| | | for (int i = 3; i <= alignmentSheet.Dimension.End.Row; i++) |
| | | { |
| | | string keys = alignmentSheet.Cells[i, 1].Value.ToString(); |
| | | string position = alignmentSheet.Cells[i, 2].Value.ToString(); |
| | | |
| | | keysList.Add($"{keys}_{position}"); |
| | | } |
| | | |
| | | //var barcodeCell = alignmentSheet.Cells[1, aligneStartCol + 1, 1, aligneStartCol + 2]; |
| | | //barcodeCell.Merge = true; |
| | | //barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; |
| | | //SetTitleCell(barcodeCell); |
| | | |
| | | var barcodeCell = alignmentSheet.Cells[1, aligneStartCol + 1]; |
| | | barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; |
| | | SetTitleCell(barcodeCell); |
| | | |
| | | var valueCell = alignmentSheet.Cells[2, aligneStartCol + 1]; |
| | | valueCell.Value = "Value"; |
| | | SetTitleCell(valueCell); |
| | | |
| | | //var resultCell = alignmentSheet.Cells[2, aligneStartCol + 2]; |
| | | //resultCell.Value = "Result"; |
| | | //SetTitleCell(resultCell); |
| | | |
| | | alignmentMeasures.ForEach(a => |
| | | { |
| | | int rowIndex = keysList.IndexOf($"{a.Keys}_{a.Positions}"); |
| | | if (rowIndex < 0) |
| | | { |
| | | LogAsync(DateTime.Now, "Excel导出错误", $"{a.Keys}_{a.Positions}的Alignment未能获取行信息,未导出"); |
| | | return; |
| | | } |
| | | |
| | | var cellValue = alignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 1]; |
| | | //var cellResult = alignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 2]; |
| | | |
| | | cellValue.Value = a.MeasurementValue; |
| | | //cellResult.Value = a.MeasurementResult; |
| | | |
| | | if (a.MeasurementResult != "OK") |
| | | { |
| | | SetNGCell(cellValue); |
| | | //SetNGCell(cellResult); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | //var barcodeCell = rowAlignmentSheet.Cells[1, aligneStartCol + 1, 1, aligneStartCol + 2]; |
| | | //barcodeCell.Merge = true; |
| | | //barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; |
| | | //SetTitleCell(barcodeCell); |
| | | |
| | | var barcodeCell = rowAlignmentSheet.Cells[1, aligneStartCol + 1]; |
| | | barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; |
| | | SetTitleCell(barcodeCell); |
| | | |
| | | var valueCell = rowAlignmentSheet.Cells[2, aligneStartCol + 1]; |
| | | valueCell.Value = "Value"; |
| | | SetTitleCell(valueCell); |
| | | |
| | | //var resultCell = rowAlignmentSheet.Cells[2, aligneStartCol + 2]; |
| | | //resultCell.Value = "Result"; |
| | | //SetTitleCell(resultCell); |
| | | |
| | | rowAlignmentMeasures.ForEach(a => |
| | | { |
| | | int rowIndex = keysList.IndexOf($"{a.Keys}_{a.Positions}"); |
| | | if (rowIndex < 0) |
| | | { |
| | | LogAsync(DateTime.Now, "Excel导出错误", $"{a.Keys}_{a.Positions}的RowAlignment未能获取行信息,未导出"); |
| | | return; |
| | | } |
| | | |
| | | var cellValue = rowAlignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 1]; |
| | | //var cellResult = rowAlignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 2]; |
| | | |
| | | cellValue.Value = a.MeasurementValue; |
| | | //cellResult.Value = a.MeasurementResult; |
| | | |
| | | if (a.MeasurementResult != "OK") |
| | | { |
| | | SetNGCell(cellValue); |
| | | //SetNGCell(cellResult); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | #endregion |
| | | #endregion |
| | | |
| | | package.Save(); |
| | | #region RowAlignment |
| | | { |
| | | var rowAlignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("RowAlignment")).ToList(); |
| | | if (rowAlignmentMeasures.Count > 0) |
| | | { |
| | | List<string> keysList = new List<string>(); |
| | | int allRowNums = rowAlignmentSheet.Dimension.Rows; |
| | | int aligneStartCol = rowAlignmentSheet.Dimension.Columns; |
| | | |
| | | rawDataSheet.Dispose(); |
| | | slantSheet.Dispose(); |
| | | alignmentSheet.Dispose(); |
| | | rowAlignmentSheet.Dispose(); |
| | | }; |
| | | for (int i = 3; i <= allRowNums; i++) |
| | | { |
| | | string keys = alignmentSheet.Cells[i, 1].Value.ToString(); |
| | | string position = alignmentSheet.Cells[i, 2].Value.ToString(); |
| | | |
| | | keysList.Add($"{keys}_{position}"); |
| | | } |
| | | |
| | | //var barcodeCell = rowAlignmentSheet.Cells[1, aligneStartCol + 1, 1, aligneStartCol + 2]; |
| | | //barcodeCell.Merge = true; |
| | | //barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; |
| | | //SetTitleCell(barcodeCell); |
| | | |
| | | var barcodeCell = rowAlignmentSheet.Cells[1, aligneStartCol + 1]; |
| | | barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode; |
| | | SetTitleCell(barcodeCell); |
| | | |
| | | var valueCell = rowAlignmentSheet.Cells[2, aligneStartCol + 1]; |
| | | valueCell.Value = "Value"; |
| | | SetTitleCell(valueCell); |
| | | |
| | | //var resultCell = rowAlignmentSheet.Cells[2, aligneStartCol + 2]; |
| | | //resultCell.Value = "Result"; |
| | | //SetTitleCell(resultCell); |
| | | |
| | | rowAlignmentMeasures.ForEach(a => |
| | | { |
| | | int rowIndex = keysList.IndexOf($"{a.Keys}_{a.Positions}"); |
| | | if (rowIndex < 0) |
| | | { |
| | | LogAsync(DateTime.Now, "Excel导出错误", $"{a.Keys}_{a.Positions}的RowAlignment未能获取行信息,未导出"); |
| | | return; |
| | | } |
| | | |
| | | var cellValue = rowAlignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 1]; |
| | | //var cellResult = rowAlignmentSheet.Cells[rowIndex + 1 + 2, aligneStartCol + 2]; |
| | | |
| | | cellValue.Value = a.MeasurementValue; |
| | | //cellResult.Value = a.MeasurementResult; |
| | | |
| | | if (a.MeasurementResult != "OK") |
| | | { |
| | | SetNGCell(cellValue); |
| | | //SetNGCell(cellResult); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | package.Save(); |
| | | |
| | | rawDataSheet.Dispose(); |
| | | slantSheet.Dispose(); |
| | | alignmentSheet.Dispose(); |
| | | rowAlignmentSheet.Dispose(); |
| | | }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogAsync(DateTime.Now, "Excel日志异常", ex.GetExceptionMessage()); |
| | | string bkFileName = Path.Combine(Config.LogPath, $"{Path.GetFileNameWithoutExtension(fileName)}_bk_{DateTime.Now.ToString("HHmmss")}.xlsx"); |
| | | File.Copy(fileName, bkFileName); |
| | | File.Delete(fileName); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | |
| | | var keys = Config.KeyUnitCollection.Where(u => u.IsEnabled && u.SnapshotPointId == snapshotId); |
| | | var keyBindCollection = measureList.SelectMany(u => u.KeyUnitCollection).Where(u => keys.Any(k => k.Key == u.Key)).ToList(); |
| | | |
| | | if (imgSet.HImage == null) |
| | | { |
| | | LogAsync(DateTime.Now, $"{snapshotName}未获取扫描图像", ""); |
| | | keyBindCollection.ForEach(k => k.FillKeyValues(null)); |
| | | return; |
| | | } |
| | | |
| | | string toolKey = (opConfig as CameraOprerationConfigBase).AlgorithemPath; |
| | | |
| | | HObject images = new HObject(); |