该程序演示了如何与一些CogToolBlock API进行交互.
创建Cognex工具并捕获工具事件
这个示例演示了如何创建一个工具,将其分配给一个工具编辑控件,并捕获工具的 Changed、Ran 和 Running 事件。为此使用了 CogBlobTool 和 CogBlobEdit 控件。
CogImageFileTool 将在启动时自动加载位于“images”目录中的 bracket_std.idb 文件。 程序从 CogImageFileCDB 中检索一幅图像,并将其作为 CogBlobTool 的输入图像。这一过程是在 CogBlobTool 的 Running 事件处理程序内部完成的。
1. 界面设计
添加CogBlobEditV2控件,并设置Dock属性为fill
2. 添加引用
using Cognex.VisionPro;
using Cognex.VisionPro.Blob;
using Cognex.VisionPro.ImageFile;
3. 声明变量
private CogImageFileTool imageFileTool;
private CogBlobTool blobTool;
4. 加载工具
-
获取环境变量:
string VPPPath = Environment.GetEnvironmentVariable("VPRO_ROOT");
- 从系统环境变量中获取名为
VPRO_ROOT
的变量值,并将其赋值给VPPPath
变量。如果这个环境变量未设置,VPPPath
将为null
或空字符串。
- 从系统环境变量中获取名为
-
检查环境变量是否设置:
if (string.IsNullOrEmpty(VPPPath))
{
throw new Exception("环境变量VPRO_RROT未设置.");
}- 这里检查
VPPPath
是否为空或为null
。如果是,则抛出异常,提示用户环境变量VPRO_ROOT
未设置。这是为了确保后续代码能够顺利执行,因为后续操作依赖于这个路径。
- 这里检查
-
构建图像文件路径:
string VPPFiles = VPPPath + "/Images/bracket_std.idb";
- 构建一个完整的图像文件路径,将
VPPPath
和图像文件名bracket_std.idb
结合起来。这个路径指向一个存储在Images
目录下的图像文件。
- 构建一个完整的图像文件路径,将
-
创建图像文件工具并打开文件:
imageFileTool = new CogImageFileTool();
imageFileTool.Operator.Open(VPPFiles, CogImageFileModeConstants.Read);- 创建一个
CogImageFileTool
实例,并使用Open
方法打开之前构建的图像文件路径。CogImageFileModeConstants.Read
表示以只读模式打开文件。
- 创建一个
-
创建并配置 Blob 工具:
blobTool = new CogBlobTool();
cogBlobEditV21.Subject = blobTool;- 创建一个
CogBlobTool
实例,并将其分配给cogBlobEditV21
控件的Subject
属性。这使得cogBlobEditV21
控件能够显示和编辑blobTool
的属性。
- 创建一个
-
注册事件处理程序:
blobTool.Changed += BlobTool_Changed;
blobTool.Running += BlobTool_Running;
blobTool.Ran += BlobTool_Ran;- 为
blobTool
注册三个事件的处理程序:Changed
:当工具的状态或属性发生变化时触发。Running
:当工具开始运行时触发。Ran
:当工具运行完成时触发。
- 这些事件处理程序可以用来更新界面或执行其他操作。
- 为
-
运行 Blob 工具:
blobTool.Run();
- 最后,调用
Run
方法启动blobTool
的处理过程。这将触发Running
和Ran
事件,并根据工具的功能进行相应的图像处理。
- 最后,调用
5. Changed事件
private void BlobTool_Changed(object sender, Cognex.VisionPro.CogChangedEventArgs e)
{
if ((e.StateFlags & CogBlobTool.SfRunStatus)>0)
{
if (blobTool.RunStatus.Result==CogToolResultConstants.Error)
{
MessageBox.Show(blobTool.RunStatus.Message);
}
}
}
事件处理逻辑
-
状态标志说明:
StateFlags
属性是一个位字段,每一位代表工具中可能发生变化的单个元素。如果某一位被设置,则表示工具中的该元素发生了变化,通过检查这些位,可以确定哪些元素已更改。
-
检查特定状态的变化:
- 代码使用位与运算符(&)检查
RunStatus
属性是否发生变化。CogBlobTool.SfRunStatus
是一个静态常量,表示与运行状态相关的状态标志。
- 代码使用位与运算符(&)检查
-
报告错误条件:
- 如果
StateFlags
中的SfRunStatus
位被设置(即发生了变化),则进一步检查VisionProTool.RunStatus.Result
的值。 - 如果运行状态的结果为
CogToolResultConstants.Error
,则表示在运行过程中发生了错误,此时使用MessageBox.Show
显示错误消息。
- 如果
总结
- 这个事件处理程序的主要目的是监控
VisionProTool
的状态变化,特别是运行状态的变化。如果检测到错误,它会通过消息框通知用户。这种方式可以帮助开发者及时了解工具的执行状态,并处理潜在的问题。
6. Running事件
//在Visionpro工具运行前调用此例程
private void BlobTool_Running(object sender, EventArgs e)
{
imageFileTool.Run();
blobTool.InputImage = imageFileTool.OutputImage;
}
总结
这个方法的作用是在事件触发时获取输入图像,并将其存储在 VisionProTool 对象的 InputImage 属性中,以供后续处理
7. Ran事件
//在 VisionPro 工具运行完成后被调用
private void BlobTool_Ran(object sender, EventArgs e)
{
MessageBox.Show("工具已运行.");
}
总结
这个方法的作用是在 VisionPro 工具运行完成后被调用,可以用于执行后续操 作,比如报告结果或进行其他处理。此示例中,它通过弹出消息框来提示用户工具已运行。
8. 界面效果
可以看到,点击运行三角图标,Running事件被捕获,图片工具运行后更新了Blob工具的输入图像.
blob工具运行完成后,Ran事件被捕获,提示用户已运行.
在运行过程中如果发生错误,Changed事件被捕获,提示用户错误信息.
使用CogToolGroup控件进行图像检测
本示例演示了如何通过图像数据库使用 CogImageFileTool,并将其放入 CogToolGroup 中,对于数据库中的每个图像运行一次检测.
使用 PMAlign和Fixture固定Blob工具检测孔
这个示例演示了如何使用 PMAlign 工具和 Fixture 工具来夹持一个 Blob 工具。示例代码将检测支架右上角孔的存在。当点击运行按钮时,将读取新图像。PMAlign 工具运行并生成一个 POSE 作为输出。POSE 是一个六自由度的变换,描述了从运行时坐标空间到训练时坐标空间的转换。一个 POSE 由 TranslationX、TranslationY、旋转、缩放、ScalingX 和 ScalingY 组成。
使用Caliper工具和Fixture工具来固定 Blob 工具
该示例演示了如何使用卡尺工具和夹具工具来固定 Blob 工具。示例代码将检测图像上部区域中小方块的存在。当点击“运行”按钮时,将读取一张新图像。卡尺工具将被运行,卡尺工具的输出 Y 信息将传递给夹具工具。夹具工具使用来自卡尺工具的 Y 信息和新图像,并创建一个新的输出图像。夹具工具的输出图像随后将传递给 Blob 工具.
如何将静态或交互式图形添加到CogDisplay中
CogDisplay支持两种类型的图形:静态图形和交互式图形。静态图形一旦添加到显示中,就无法移动或更改。静态图形不能添加提示文本(TipText).