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帮助文档吧,就不啰嗦了。

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值