| | |
| | | |
| | | return list; |
| | | } |
| | | |
| | | public static HImage ConvertHObjectToHImage(this HObject obj) |
| | | { |
| | | HTuple pointer, type, width, heght; |
| | | HOperatorSet.GetImagePointer1(obj, out pointer, out type, out width, out heght); |
| | | |
| | | HImage img = new HImage(); |
| | | img.GenImage1(type, width, heght, pointer); |
| | | |
| | | return img; |
| | | } |
| | | } |
| | | } |
| | |
| | | int i = 0; |
| | | u.KeyImages?.ForEach(image => |
| | | { |
| | | string fileName = Path.Combine(dir, $"{measureName}_{u.Key}{(i == 0 ? "" : $"-{i}")}_{DateTime.Now.ToString("HHmmss")}.tiff"); |
| | | image.WriteImage("tiff", 0, fileName); |
| | | string fileName = ""; |
| | | try |
| | | { |
| | | fileName = Path.Combine(dir, $"{measureName}_{u.Key}{(i == 0 ? "" : $"-{i}")}_{DateTime.Now.ToString("HHmmss")}.tiff"); |
| | | image.WriteImage("tiff", 0, fileName); |
| | | } |
| | | catch (Exception) |
| | | { |
| | | LogAsync(DateTime.Now, "切图保存失败", fileName); |
| | | } |
| | | i++; |
| | | }); |
| | | |
| | |
| | | string toolKey = (opConfig as CameraOprerationConfigBase).AlgorithemPath; |
| | | HObject images = imgSet.HImage; |
| | | LaserScanParam scanParam = JsonConvert.DeserializeObject<LaserScanParam>(imgSet.ImageData); |
| | | LogAsync(DateTime.Now, $"扫描参数:{imgSet.ImageData}", ""); |
| | | |
| | | if (!string.IsNullOrWhiteSpace(toolKey)) |
| | | { |
| | |
| | | } |
| | | |
| | | HOperatorSet.CountObj(images, out HTuple count); |
| | | LogAsync(DateTime.Now, $"{snapshotName}切图{count.I}张", ""); |
| | | |
| | | if (count == 0) |
| | | { |
| | |
| | | return; |
| | | } |
| | | |
| | | var excludeKeys = keys.Where(u => u.ImageSeq > count).ToList(); |
| | | var excludeKeys = keys.Where(u => u.ImageSeq > count.I).ToList(); |
| | | if (excludeKeys.Count > 0) |
| | | { |
| | | LogAsync(DateTime.Now, $"{string.Join(" ", excludeKeys.Select(u => u.AliasName))}未在图片获取序列中", ""); |
| | |
| | | }); |
| | | } |
| | | |
| | | Parallel.For(1, count.I, (i) => |
| | | string dir = Path.Combine(Config.ImageSaveFolder, "Clips", $"{snapshotName}_{DateTime.Now.ToString("HHmmss")}"); |
| | | if (!Directory.Exists(dir)) |
| | | { |
| | | Directory.CreateDirectory(dir); |
| | | } |
| | | |
| | | Parallel.For(1, count.I + 1, (i) => |
| | | //for (int i = 1; i <= count.I; i++) |
| | | { |
| | | HOperatorSet.SelectObj(images, out HObject image, i); |
| | | |
| | | string fileName = Path.Combine(dir, $"{i}.tif"); |
| | | image.ConvertHObjectToHImage().WriteImage("tiff", 0, fileName); |
| | | |
| | | keys.Where(u => u.ImageSeq == i).ToList().ForEach(k => |
| | | { |
| | |
| | | else |
| | | { |
| | | _halconToolDict[keyToolKey].InputImageDic["INPUT_Image"] = image; |
| | | _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_X"] = scanParam.Resolution_X; |
| | | //_halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_Z"] = scanParam.Resolution_Z; |
| | | _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_X"] = scanParam.Resolution_X / 1000000.0; |
| | | _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_Z"] = scanParam.Resolution_Z / 1000000.0; |
| | | if (!_halconToolDict[keyToolKey].RunProcedure(out string error)) |
| | | { |
| | | LogAsync(DateTime.Now, $"{k.AliasName}检测算法异常,{error}", ""); |
| | |
| | | |
| | | keyBindList.ForEach(kb => |
| | | { |
| | | kb.KeyImages.Add(image.Clone() as HImage); |
| | | kb.KeyImages.Add(image.ConvertHObjectToHImage()); |
| | | kb.FillKeyValues(resultDict); |
| | | }); |
| | | }); |
| | | |
| | | image.Dispose(); |
| | | }); |
| | | //image.Dispose(); |
| | | } |
| | | ); |
| | | |
| | | //if (count.I != 1) |
| | | //{ |
| | |
| | | throw new ProcessException("未获取板卡设备"); |
| | | |
| | | bool? isToPause = null; //true 暂停 false 继续 |
| | | if (opConfig.InputPara != null && opConfig.InputPara.Count > 0) |
| | | //if (opConfig.InputPara != null && opConfig.InputPara.Count > 0) |
| | | //{ |
| | | // isToPause = opConfig.InputPara[0] == 1; |
| | | //} |
| | | if (opConfig.InputPara[0] == 10) |
| | | { |
| | | isToPause = opConfig.InputPara[0] == 1; |
| | | isToPause = false; |
| | | } |
| | | else if (opConfig.InputPara[0] == 11) |
| | | { |
| | | isToPause = true; |
| | | } |
| | | |
| | | if (isToPause == null) |
| | |
| | | [ProcessMethod("", "SafetyBeamSignal", "安全光幕信号监控,正常ON,OFF时报警", InvokeType.TestInvoke)] |
| | | public ProcessResponse SafetyBeamSignal(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) |
| | | { |
| | | if (MachineState != MachineState.Running || MachineState != MachineState.Alarm) |
| | | if (MachineState != MachineState.Running && MachineState != MachineState.Alarm) |
| | | return new ProcessResponse(true); |
| | | |
| | | if (opConfig.InputPara == null || opConfig.InputPara.Count == 0) |
| | |
| | | |
| | | public override void Draw(Graphics g) |
| | | { |
| | | g.DrawRectangle(Pen, DisplayRect); |
| | | if (ResultState == null) |
| | | { |
| | | g.DrawRectangle(Pen, DisplayRect); |
| | | } |
| | | RectangleF rectFill = new RectangleF(DisplayRect.X + 1, DisplayRect.Y + 1, DisplayRect.Width - 2, DisplayRect.Height - 2); |
| | | if (ResultState != null) |
| | | { |
| | |
| | | if (!ResultState.Value) |
| | | { |
| | | backColor = Color.Red; |
| | | foreColor = Color.White; |
| | | //foreColor = Color.White; |
| | | } |
| | | |
| | | g.FillRectangle(new SolidBrush(Color.FromArgb(85, backColor)), rectFill); |
| | | g.DrawString(Text, Font, new SolidBrush(foreColor), (float)(DisplayRect.X + DisplayRect.Width / 2.0 - txtSize.Width / 2.0), (float)(DisplayRect.Y + DisplayRect.Height / 2.0 - txtSize.Height / 2.0)); |
| | | |
| | | g.DrawString(Text, Font, new SolidBrush(foreColor), (float)(DisplayRect.X + DisplayRect.Width / 2.0 - txtSize.Width / 2.0), (float)(DisplayRect.Y + DisplayRect.Height)); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | btnStartMeasure.Text = "开始测量"; |
| | | btnStartMeasure.Enabled = false; |
| | | btnStartMeasure.BackColor = Color.Red; |
| | | break; |
| | | case MachineState.Pause: |
| | | btnStartMeasure.BackColor = lblMachineState.BackColor = Color.Yellow; |
| | |
| | | |
| | | btnStartMeasure.Text = "继续测量"; |
| | | btnStartMeasure.Enabled = true; |
| | | btnStartMeasure.BackColor = Color.Lime; |
| | | break; |
| | | case MachineState.Ready: |
| | | btnStartMeasure.BackColor = lblMachineState.BackColor = Color.Lime; |
| | | btnStartMeasure.ForeColor = lblMachineState.ForeColor = Color.White; |
| | | btnStartMeasure.ForeColor = lblMachineState.ForeColor = Color.Black; |
| | | lblMachineState.Text = "就绪"; |
| | | |
| | | btnStartMeasure.Text = "开始测量"; |
| | | btnStartMeasure.Enabled = true; |
| | | btnStartMeasure.BackColor = Color.Lime; |
| | | break; |
| | | case MachineState.Running: |
| | | btnStartMeasure.BackColor = lblMachineState.BackColor = Color.Lime; |
| | | btnStartMeasure.BackColor = lblMachineState.BackColor = Color.Transparent; |
| | | btnStartMeasure.ForeColor = lblMachineState.ForeColor = Color.DarkGreen; |
| | | lblMachineState.Text = "运行"; |
| | | |
| | | btnStartMeasure.Text = "暂停测量"; |
| | | btnStartMeasure.Enabled = true; |
| | | btnStartMeasure.BackColor = Color.Lime; |
| | | break; |
| | | case MachineState.Unknown: |
| | | btnStartMeasure.BackColor = lblMachineState.BackColor = SystemColors.Control; |
| | |
| | | lblMachineState.Text = "未知"; |
| | | |
| | | btnStartMeasure.Enabled = false; |
| | | btnStartMeasure.BackColor = Color.Red; |
| | | break; |
| | | } |
| | | })); |
| | |
| | | } |
| | | else if (btnStartMeasure.Text == "继续测量") |
| | | { |
| | | Process_M071.SwitchJobStatus(new OperationConfigBase() { InputPara = new List<int>() { 0 } }, null, null); |
| | | Process_M071.SwitchJobStatus(new OperationConfigBase() { InputPara = new List<int>() { 10 } }, null, null); |
| | | } |
| | | else |
| | | { |
| | | Process_M071.SwitchJobStatus(new OperationConfigBase() { InputPara = new List<int>() { 1 } }, null, null); |
| | | Process_M071.SwitchJobStatus(new OperationConfigBase() { InputPara = new List<int>() { 11 } }, null, null); |
| | | } |
| | | } |
| | | |
| | |
| | | AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w |
| | | LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 |
| | | ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADm |
| | | CgAAAk1TRnQBSQFMAgEBAgEAAfABAAHwAQABGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo |
| | | CgAAAk1TRnQBSQFMAgEBAgEAAfgBAAH4AQABGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo |
| | | AwABYAMAARgDAAEBAQABCAYAAQkYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA |
| | | AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 |
| | | AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA |
| | |
| | | AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w |
| | | LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 |
| | | ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD4 |
| | | CAAAAk1TRnQBSQFMAwEBAAHwAQAB8AEAARgBAAEYAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA |
| | | CAAAAk1TRnQBSQFMAwEBAAH4AQAB+AEAARgBAAEYAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA |
| | | AWADAAEYAwABAQEAAQgGAAEJGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA |
| | | AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA |
| | | AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm |