Mil学习之Msys
Posted Thomas会写字
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mil学习之Msys相关的知识,希望对你有一定的参考价值。
一、什么是Msys
以Msys为前缀的函数构成系统模块。系统模块支持系统的分配和查询。系统控件表示一个物理板,最常见的是一个成像帧捕获器。系统控件还允许您访问图形控制器和主机CPU。可以使用系统控件指定要访问的物理设备,并设置一些系统范围的设置。配置系统控件后,可以向应用程序中添加其他组件(如数字化仪控件),以控制设备的特定方面。
二、Msys常用功能
1. 初始化Msys环境
MsysAlloc(M_DEFAULT, M_SYSTEM_HOST, M_DEFAULT, M_DEFAULT, &MilSystem);
//...
MsysFree(MilSystem);
这里补充说明一下,MilSystem是指一个系统容器,通常来说初始化为 M_SYSTEM_HOST 就可以,但是当有采集的时候就有区别了。
这时需要针对不同的采集环境填入对应的类别ID。
如果你电脑上同时有GigE和USB3两种采集环境,在初始化MSys时需要使用两种类型的ID,GigE的ID为 M_SYSTEM_GIGE_VISION,USB3的ID为 M_SYSTEM_USB3_VISION。
不管是否为同一个采集环境,每一张采集卡一个System。
这里需要注意的是,有人误认为我有三张千兆网卡是不是分配一个Sys就可以?其实不是的,这里需要分配3个SysID,每一个采集卡一个ID。
2. 回调
示例的这个回调会在采集出现问题时用到,比如采集时相机断电了,马上重新上电Mil可以恢复采集。具体使用方法参照 MultiCamera.cpp,例子是C++,这里只是把改写 C# 的大概讨论写了出来。
class Example
{
public static MIL_SYS_HOOK_FUNCTION_PTR CamPresentFunctionDelegate = new MIL_SYS_HOOK_FUNCTION_PTR(CamPresentFunction);
static MIL_INT CamPresentFunction(MIL_INT HookType, MIL_ID HookId, IntPtr h_hookDataPtr)
{
if (h_hookDataPtr != IntPtr.Zero)
{
MIL_INT IsCamPresent = 0, Number = 0;
MIL.MsysGetHookInfo(MilSystem, HookId, MIL.M_CAMERA_PRESENT, ref IsCamPresent);
MIL.MsysGetHookInfo(MilSystem, HookId, MIL.M_NUMBER, ref Number);
}
return 0;
}
public Example()
{
UserDataStruct userData = new UserDataStruct();
GCHandle hData = GCHandle.Alloc(userData);
IntPtr ptrData = GCHandle.ToIntPtr(hData);
MIL.MsysHookFunction(MilSystem, MIL.M_CAMERA_PRESENT, CamPresentFunctionDelegate, ptrData);
//...
MIL.MsysHookFunction(MilSystem, MIL.M_CAMERA_PRESENT + MIL.M_UNHOOK, CamPresentFunctionDelegate, ptrData);
}
}
3. 查询Inquire
查询属性设置,使用很简单,查看Mil帮助文档吧,就不啰嗦了。
以上是关于Mil学习之Msys的主要内容,如果未能解决你的问题,请参考以下文章