C#和VisionPro对接:VisionPro的部分控件是可以直接在C# WinForm里调用的;算法文件在VisionPro平台里编辑好后保存下来也可以通过C#加载调用;下面我们主要说一下C#调用Vpp文件
首先我们要先引用VisionPro平台的dll文件,在项目文件里添加引用,在引用管理器里程序集扩展里找到需要的dll:
一般情况下我们都是在VisionPro平台里新建一个ToolBlock工具再添加输入和输出再在ToolBlock里添加一系列工具运算出需要的结果到输出参数,再把ToolBlock整个保存下来,然后用C# 加载给输入参数赋值得到输出参数:
先在CS文件里添加引用:
using Cognex.VisionPro;
using Cognex.VisionPro.ToolBlock;
加载Vpp文件代码:
//加载Vpp文件
var path=@"";
var toolBlock=CogSerializer.LoadObjectFromFile(path);
给输入参数赋值代码:
toolBlock.Inputs["InputImage"].Value = image;
工具运行代码:
toolBlock.Run();
运行成功代码:
if (toolBlock.RunStatus.Result == CogToolResultConstants.Accept)
{
//运行OK
}
获取得到输出参数代码:
var angle = (double)toolBlock.Outputs["Angle"].Value;
C# 和相机拍照获取图片对接有两种写法:
第一种比较简单就和上面调其它ToolBlock Vpp文件一样运行拍照工具CogAcqFifoTool输出图片即可
另一种代码如下:
//TB_Acq是加载在ToolBlock里放一个CogAcqFifoTool工具的ToolBlock
var acqFifoTool = (CogAcqFifoTool)TB_Acq.Tools["CogAcqFifoTool1"];
var acqFifo = AcqFifoTool.Operator;
//拍照完成触发事件
acqFifoTool.Operator.Complete += new CogCompleteEventHandler(Camera1Acq_compeletevent);
private void Camera1Acq_compeletevent(object sender, CogCompleteEventArgs e)
{
if (InvokeRequired)
{
Invoke(new CogCompleteEventHandler(Camera1Acq_compeletevent), new object[] { sender, e });
}
else
{
var numPending = 0;
var numReady = 0;
var busy = false;
AcqFifoTool[0].Operator.GetFifoState(out numPending, out numReady, out busy);
if (numReady > 0)
{
var info = new CogAcqInfo();
var _Image = (CogImage8Grey)AcqFifo[0].CompleteAcquireEx(info);
//toolBlockRun是继续执行的方法
ThreadPool.QueueUserWorkItem(new WaitCallback(toolBlockRun));
}
}
}
下面再介绍下VP在C#里常用的三个控件:
1.图像显示控件(CogRecordDisplay):
CogRecordDisplay1.InteractiveGraphics.Clear();
CogRecordDisplay1.Record = toolBlock.CreateLastRunRecord().SubRecords[0];
CogRecordDisplay1.Fit();
2.Vpp文件编辑控件(CogToolBlockEditV2):
var CogToolBlockEditV21 = new CogToolBlockEditV2();
CogToolBlockEditV21.Dock = DockStyle.Fill;
this.Controls.Add(CogToolBlockEditV21);
this.CogToolBlockEditV21.Subject =(CogToolBlock)CogSerializer.LoadObjectFromFile(ToolBlockPath);
3.相机工具编辑控件(CogAcqFifoEditV2):
var CogAcqFifoEditV2=new CogAcqFifoEditV21();
var cogToolBlock = (CogToolBlock)CogSerializer.LoadObjectFromFile(acqFifoFilePath);
this.CogAcqFifoEditV21.Subject = (CogAcqFifoTool)cogToolBlock1.Tools["CogAcqFifoTool1"];