|
@@ -1709,10 +1709,39 @@ namespace TeamAAS_VP.Core
|
|
|
{
|
|
{
|
|
|
SendTaskMessage($"触发上相机检测拍照...", MessageLevel.Debug);
|
|
SendTaskMessage($"触发上相机检测拍照...", MessageLevel.Debug);
|
|
|
//相机的编号
|
|
//相机的编号
|
|
|
- //Int16 cameraIndex = plc.ReadNode<Int16>(addressConfig.Out_UPCameracheckNum.Address);
|
|
|
|
|
|
|
+ Int16 cameraIndex = plc.ReadNode<Int16>(addressConfig.Out_UPCameracheckNum.Address);
|
|
|
|
|
|
|
|
|
|
+ //视觉流程ID
|
|
|
|
|
+ Guid procedureId = Guid.Empty;
|
|
|
|
|
+ //获取锁付拍照的点位
|
|
|
|
|
+ var pos = currentProduct.CheckCameraPoints.FirstOrDefault(p => p.Number == cameraIndex);
|
|
|
|
|
+ if (pos != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ procedureId = pos.VisionProcessID;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ // 获取流程
|
|
|
|
|
+ var process = _productService.GetCurrentProductProcedureModelById(procedureId);
|
|
|
|
|
+ if (process == null)
|
|
|
|
|
+ {
|
|
|
|
|
+ SendTaskMessage(string.Format("未找到点位:{0}的视觉流程:{1}", cameraIndex, procedureId), MessageLevel.Alarm);
|
|
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_UPCameracheckStatus.Address, (Int16)2);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ // 执行视觉任务
|
|
|
|
|
+ var _cts = new CancellationTokenSource();
|
|
|
|
|
+ var visionResult = await _remoteCommandService.ExecutePhotoGetSinglePoint(process, null, null, _cts.Token, cameraIndex, null);
|
|
|
|
|
+ if (visionResult.IsSucceed)
|
|
|
|
|
+ {
|
|
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_UPCameracheckStatus.Address, (Int16)1);
|
|
|
|
|
+ SendTaskMessage($"点位{cameraIndex}检测OK", MessageLevel.Debug);
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_UPCameracheckStatus.Address, (Int16)2);
|
|
|
|
|
+ SendTaskMessage($"点位{cameraIndex}检测NG", MessageLevel.Error);
|
|
|
|
|
+ }
|
|
|
await plc.WriteNodeAsync(addressConfig.Out_UPCameracheckStatus.Address, (Int16)1);
|
|
await plc.WriteNodeAsync(addressConfig.Out_UPCameracheckStatus.Address, (Int16)1);
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
@@ -1801,10 +1830,71 @@ namespace TeamAAS_VP.Core
|
|
|
{
|
|
{
|
|
|
SendTaskMessage($"触发固定相机检测拍照...", MessageLevel.Debug);
|
|
SendTaskMessage($"触发固定相机检测拍照...", MessageLevel.Debug);
|
|
|
//相机的编号
|
|
//相机的编号
|
|
|
- //Int16 cameraIndex = plc.ReadNode<Int16>(addressConfig.In_FixedCameracheckNum.Address);
|
|
|
|
|
|
|
+ Int16 cameraIndex = plc.ReadNode<Int16>(addressConfig.In_FixedCameracheckNum.Address);
|
|
|
|
|
+ List<Task<(bool IsSucceed, double X, double Y, double U)>> visionTasks = new List<Task<(bool IsSucceed, double X, double Y, double U)>>();
|
|
|
|
|
+ List<ProcedureModel> visionProcesses = new List<ProcedureModel>();
|
|
|
|
|
+
|
|
|
|
|
+ if (currentProduct.MoveDownCamer1CheckProcedureId != Guid.Empty)
|
|
|
|
|
+ {
|
|
|
|
|
+ var process = _productService.GetCurrentProductProcedureModelById(currentProduct.MoveDownCamer1CheckProcedureId);
|
|
|
|
|
+ if (process != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ visionProcesses.Add(process);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (currentProduct.MoveDownCamer2CheckProcedureId != Guid.Empty)
|
|
|
|
|
+ {
|
|
|
|
|
+ var process = _productService.GetCurrentProductProcedureModelById(currentProduct.MoveDownCamer2CheckProcedureId);
|
|
|
|
|
+ if (process != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ visionProcesses.Add(process);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (visionProcesses.Count <= 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ SendTaskMessage($"未配置移动向下相机检测视觉流程", MessageLevel.Alarm);
|
|
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_FixedCameracheckStatus.Address, (Int16)2);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 执行视觉任务
|
|
|
|
|
+ var _cts = new CancellationTokenSource();
|
|
|
|
|
+ for (int i = 0; i < visionProcesses.Count; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ visionTasks.Add(_remoteCommandService.ExecutePhotoGetSinglePoint(visionProcesses[i], null, null, _cts.Token, i + 1, null));
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ var visionResults = await Task.WhenAll(visionTasks.ToArray());
|
|
|
|
|
+
|
|
|
|
|
+ if (isDryMode)
|
|
|
|
|
+ {
|
|
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_FixedCameracheckStatus.Address, (Int16)1);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ //获取visionResults集合中所有的结果,如果全部成功则为通过
|
|
|
|
|
+ bool allSucceed = true;
|
|
|
|
|
+ for (int i = 0; i < visionResults.Length; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (!visionResults[i].IsSucceed)
|
|
|
|
|
+ {
|
|
|
|
|
+ allSucceed = false;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- await plc.WriteNodeAsync(addressConfig.Out_FixedCameracheckStatus.Address, (Int16)1);
|
|
|
|
|
|
|
+ if (allSucceed)
|
|
|
|
|
+ {
|
|
|
|
|
+ SendTaskMessage($"固定相机检测OK", MessageLevel.Debug);
|
|
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_FixedCameracheckStatus.Address, (Int16)1);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ SendTaskMessage($"固定相机检测NG", MessageLevel.Error);
|
|
|
|
|
+ await plc.WriteNodeAsync(addressConfig.Out_FixedCameracheckStatus.Address, (Int16)2);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|