C#+VisionPro简单联合编程
·
主要完成了点击按钮,进行图像检测的功能并且含有检测目标计数功能,包含两种显示,单次显示以及连续显示,如下图所示:
首先需要进入VisionPro QuickBuild里面新建一个工程文件vpp,完成对应的操作,当然也可以直接从安装路径下的samples里面寻找一个对应的实列即可,本文的示例为samples中的示例,如下图所示:
1、创建vpp文件之后,打开vs,创建一个Windows窗口应用,开始进行窗口控件的放置。
2、在引用工程目录下的引用的地方,引入VisionPro的一些动态链接库,并且在代码中引用Cognex.VisionPro以及Cognex.VisionPro.QuickBuild。
3、初始化VisionPro中的变量。
//需要声明的3个变量
CogJobManager myjobManager; //对应vpp中的工程
CogJob myjob; //对应工程文件中的某一项工作
CogJobIndependent myjobIndependent; //
//委托
delegate void UserResultDelegate(object sender, CogJobManagerActionEventArgs e);
private void InitializeCogjob()
{
//加载vpp文件
string address = "./test.vpp"
myjobManager =(CogJobManager)CogSerializer.LoadObjectFromFile(address);
//设置myjob的序列号
myjob = myjobManager.Job(0);
myjobIndependent = myjob.OwnedIndependent;
//一个应用程序是由多个线程组成的,需要对线程中的队列进行刷新
myjobManager.FailureQueueFlush(); //失败队列刷新
myjobManager.UserQueueFlush(); //用户队列刷新
myjob.ImageQueueFlush(); //图像队列刷新
myjobIndependent.RealTimeQueueFlush(); //实时队列刷新
//结果处理
myjobManager.UserResultAvailable += MyjobManager_UserResultAvailable;
}
//构造函数
public Form1()
{
InitializeComponent(); //主要是一些基础控件的初始化
InitializeCogjob(); //VisionPro中的变量的声明和初始化
}
4、开始对Form中控件的行为进行编程,双击控件,即可跳转到对应的代码部分;
4.1、单次点击控件按钮,点击一次运行一次,附带图像显示代码,代码如下:
private void MyjobManager_UserResultAvailable(
object sender, CogJobManagerActionEventArgs e)
{
//控件操作都位于主线程,为了解决跨线程操作控件的问题,使用控件
//属性InvokeRequired 如果是true的话,就需要解决这个问题。
//使用委托函数进行操作
if(InvokeRequired)
{
BeginInvoke(new UserResultDelegate(
MyjobManager_UserResultAvailable), new object[] { sender, e });
return;
}
//MessageBox.Show("start");
//开始处理数据
ICogRecord tmp;
ICogRecord mydata = myjobManager.UserResult();
//找到vpp程序中的已发送项目的地址,通过SubRecords得到对应的数据
tmp = mydata.SubRecords[
@"Tools.Item[""CogBlobTool1""].CogBlobTool.Results.GetBlobs().Count"];
int Count = (int)tmp.Content;
mytextBox.Text = Count.ToString();
//开始图像的显示
tmp = mydata.SubRecords["ShowLastRunRecordForUserQueue"];
tmp = tmp.SubRecords["LastRun"];
tmp = tmp.SubRecords["Image Source.OutputImage"];
cogRecordDisplay1.Record = tmp;
cogRecordDisplay1.Fit(true); //自适应控件中窗口的大小。
}
private void button1_Click(object sender, EventArgs e)
{
try
{
myjobManager.Run();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
4.2、点击连续工作按钮,会一直工作,并且单次点击按钮编程不可点击模式,代码如下:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
//按键按下
if (checkBox1.Checked)
{
try
{
myjobManager.RunContinuous();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
mybutton.Enabled = false;
}
else
{
try
{
myjobManager.Stop();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
mybutton.Enabled = true;
}
}
5、对于项目结束运行后,需要点击窗口的关闭按钮,此时需要对线程进行关闭,资源进行回收,代码如下:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//需要解除委托
myjobManager.UserResultAvailable -= new CogJobManager.CogUserResultAvailableEventHandler(MyjobManager_UserResultAvailable);
cogRecordDisplay1.Dispose();
// Be sure to shudown the CogJobManager!!
myjobManager.Shutdown();
}
更多推荐
所有评论(0)