|
|
|
|
using HalconDotNet;
|
|
|
|
|
using Rs.Camera;
|
|
|
|
|
using Rs.Controls;
|
|
|
|
|
using Rs.Framework;
|
|
|
|
|
using Rs.Motion;
|
|
|
|
|
using Rs.MotionPlat.Commom;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
namespace Rs.MotionPlat.Flow.Space
|
|
|
|
|
{
|
|
|
|
|
enum CameraTriggerTestStep
|
|
|
|
|
{
|
|
|
|
|
gotoTriggerStartPos,
|
|
|
|
|
waitGotoTriggerStartPos,
|
|
|
|
|
gotoTriggerEndPos,
|
|
|
|
|
waitGotoTriggerEndPos,
|
|
|
|
|
waitGrabOk
|
|
|
|
|
}
|
|
|
|
|
public class CameraTriggerTest:BaseFlow
|
|
|
|
|
{
|
|
|
|
|
public event Action<List<MatchResult>> OnMatchResult;
|
|
|
|
|
//goto trigger start postion
|
|
|
|
|
private static CameraTriggerTest instance;
|
|
|
|
|
public static CameraTriggerTest Instance
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if(instance == null)
|
|
|
|
|
instance = new CameraTriggerTest();
|
|
|
|
|
return instance;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int grabNum = 0;
|
|
|
|
|
CameraTriggerTestStep step;
|
|
|
|
|
HObject[] imgs;
|
|
|
|
|
public override void Run()
|
|
|
|
|
{
|
|
|
|
|
switch (step)
|
|
|
|
|
{
|
|
|
|
|
case CameraTriggerTestStep.gotoTriggerStartPos:
|
|
|
|
|
AxisControl.LoadX.MovePos(SysConfigParam.GetValue<double>("Nozzle1CenterX") + 50, GlobalVar.WholeSpeed);
|
|
|
|
|
AxisControl.LoadY.MovePos(SysConfigParam.GetValue<double>("Nozzle1CenterY"), GlobalVar.WholeSpeed);
|
|
|
|
|
step = CameraTriggerTestStep.waitGotoTriggerStartPos;
|
|
|
|
|
break;
|
|
|
|
|
case CameraTriggerTestStep.waitGotoTriggerStartPos:
|
|
|
|
|
if(Ops.IsStop("LoadX", "LoadY"))
|
|
|
|
|
{
|
|
|
|
|
IoManager.Instance.WriteOut("下左相机光源触发", 1);
|
|
|
|
|
HikCamera.Instance.SetExposure("locationCamera", 50);
|
|
|
|
|
HikCamera.Instance.SetGain("locationCamera", 15);
|
|
|
|
|
List<double> grabPos = new List<double>();
|
|
|
|
|
for(int i=1;i<10;i++)
|
|
|
|
|
{
|
|
|
|
|
grabPos.Add(SysConfigParam.GetValue<double>($"Nozzle{i}CenterX"));
|
|
|
|
|
}
|
|
|
|
|
AxisControl.LoadX.SetPosCompare(1, grabPos.ToArray());
|
|
|
|
|
HikCamera.Instance.SetTrigger("locationCamera", ETriggerMode.Auto);
|
|
|
|
|
|
|
|
|
|
step = CameraTriggerTestStep.gotoTriggerEndPos;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case CameraTriggerTestStep.gotoTriggerEndPos:
|
|
|
|
|
AxisControl.LoadX.MovePos(SysConfigParam.GetValue<double>("Nozzle9CenterX")-50, GlobalVar.WholeSpeed);
|
|
|
|
|
step = CameraTriggerTestStep.waitGotoTriggerEndPos;
|
|
|
|
|
break;
|
|
|
|
|
case CameraTriggerTestStep.waitGotoTriggerEndPos:
|
|
|
|
|
if (Ops.IsStop(AxisControl.LoadX))
|
|
|
|
|
{
|
|
|
|
|
IoManager.Instance.WriteOut("下左相机光源触发", 0);
|
|
|
|
|
AxisControl.LoadX.ClearCompare(1);
|
|
|
|
|
Thread.Sleep(1000);
|
|
|
|
|
step = CameraTriggerTestStep.waitGrabOk;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case CameraTriggerTestStep.waitGrabOk:
|
|
|
|
|
imgs = ImageProcess.GetAutoImage();
|
|
|
|
|
if(imgs != null && imgs.Length==9)
|
|
|
|
|
{
|
|
|
|
|
ImageProcess.ClearAutoTrigger();
|
|
|
|
|
List<MatchResult> result = VisionProcess.Instance.MatchDownCam(imgs);
|
|
|
|
|
if(result.Where(r=>r.IsOK==true).Count()==imgs.Length)
|
|
|
|
|
{
|
|
|
|
|
OnMatchResult?.Invoke(result);
|
|
|
|
|
step = CameraTriggerTestStep.gotoTriggerStartPos;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
MessageQueue.Instance.Warn("拍照定位失败");
|
|
|
|
|
step = CameraTriggerTestStep.gotoTriggerStartPos;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|