public void SetCameraConfigFile(string file) { CameraConfigFile = file; if (!string.IsNullOrEmpty(file)) { //获取相机配置参数 string configFile = $"{System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase}/VisionPlatform/Camera/CameraConfig/{CameraSerial}/ConfigFile/{CameraConfigFile}"; if (File.Exists(configFile)) { cameraConfigParam = JsonSerialization.DeserializeObjectFromFile <CameraConfigParam>(configFile); //还原相机配置 try { CameraFactory.ConfigurateCamera(CameraSerial, cameraConfigParam); } catch (Exception) { } } else { cameraConfigParam = CameraFactory.GetCameraConfigration(CameraSerial); JsonSerialization.SerializeObjectToFile(cameraConfigParam, configFile); } } }
public RunStatus Execute(int timeout, out string visionResult) { bool isTimeout = false; var runStatus = new RunStatus(); visionResult = ""; try { //参数校验 if (VisionFrame == null) { throw new NullReferenceException("VisionFrame cannot be null"); } if (!IsInit) { throw new Exception($"scene is uninitialized({nameof(IsVisionFrameInit)}:{IsVisionFrameInit} {nameof(IsCameraInit)}:{IsCameraInit})"); } ItemCollection outputs; //开始计时 totalProcessStopwatch.Restart(); //如果使能相机,则调用相机采集 if (VisionFrame.IsEnableCamera && IsCameraInit) { lock (threadLock) { isVisionProcessed = false; } //注册相机采集完成事件 Camera.NewImageEvent -= Camera_NewImageEvent; Camera.NewImageEvent += Camera_NewImageEvent; //配置相机参数 CameraFactory.ConfigurateCamera(CameraSerial, cameraConfigParam); //触发拍照 Camera.TriggerSoftware(); //阻塞等待视觉处理完成 grapTimeoutStopwatch.Restart(); while (true) { lock (threadLock) { if (isVisionProcessed) { grapTimeoutStopwatch.Stop(); break; } } if ((timeout > 0) && (grapTimeoutStopwatch.Elapsed.TotalMilliseconds > timeout)) { isTimeout = true; grapTimeoutStopwatch.Stop(); throw new TimeoutException("grab image timeout"); } System.Threading.Thread.Sleep(2); } //执行视觉框架 VisionFrame.ExecuteByImageInfo(imageInfo, out outputs); //结果拼接 visionResult = ConvertItemCollectionToString(outputs, MainSeparatorChar, SubSeparatorChar); } else { //执行视觉框架 VisionFrame.Execute(timeout, out outputs); //结果拼接 visionResult = ConvertItemCollectionToString(outputs, MainSeparatorChar, SubSeparatorChar); } } catch (Exception ex) { return(new RunStatus(0, EResult.Error, ex.Message)); } finally { //停止计时 totalProcessStopwatch.Stop(); VisionFrame.RunStatus.TotalTime = totalProcessStopwatch.Elapsed.TotalMilliseconds; if (!isTimeout) { //释放图像资源,否则可能会导致资源泄露 imageInfo.DisposeImageIntPtr?.Invoke(imageInfo.ImagePtr); } } return(VisionFrame.RunStatus); }