目录
- 2.5.1 全局相机:获取全局相机列表和设置相机参数的方法
2.5.1 全局相机:获取全局相机列表和设置相机参数的方法
描述
环境:VM4.2 + VS2013及以上
问题:问题1:如何获取方案中所有的全局相机的连接状态,如下图所示:
如何在流程运行时监控全局相机1和全局相机2的连接状态?
问题2:如何设置全局相机的基本参数,例如设置全局相机1的曝光和增益?
解答
问题1的解答:
在4.2.1中,VM SDK增加了获取相机连接状态的API,在GlobalCameraTool类中,方法bIsCameraConnect( )可以获取相机的连接状态。如果要监控方案中所有全局相机模块的连接状态可以参考下面的代码:
在程序初始化时,启动监控线程,如下:
C#
//获取流程中所有全局相机模块
List<GlobalCameraModuleTool> glCameralist = new List<GlobalCameraModuleTool>();
List<VmModule> vmModules = new List<VmModule>();
VmSolution.Instance.GetAllModule(vmModules);
foreach(VmModule module in vmModules)
{
if(module.GetType()==typeof(GlobalCameraModuleTool))
{
glCameralist.Add((GlobalCameraModuleTool) module);
}
}
//启动全局相机连接状态监控线程
Thread watchThread = new Thread(new ParameterizedThreadStart(CameraConnectionWatchDog));
watchThread.IsBackground = true;
watchThread.Start(glCameralist);
监控相机连接状态的线程函数,如下:
C#
public void CameraConnectionWatchDog(object obj)
{
List<GlobalCameraModuleTool> globalCameraToolList = (List<GlobalCameraModuleTool>)obj;
bool[] isCameraConected = new bool[globalCameraToolList.Count];
while (true)
{
try
{
//获取流程中所有已配置的连接状态
foreach (var cameraTool in globalCameraToolList)
{
if (cameraTool.bIsCameraConnect() == false)
{
Debug.WriteLine(string.Format($"警告: {cameraTool.Name} 已经离线!"));
}
}
}
catch (VmException ex)
{
Debug.WriteLine("发生致命错误,错误码:" + ex.errorCode);
}
Thread.Sleep(2000);
}
}
问题2的解答:
全局相机参数设置,通过调用GlobalCameraParam这个类的方法和属性就可以做到。
例如设置全局相机1的曝光和增益,代码如下:
GlobalCameraModuleTool cameraModuleTool = VmSolution.Instance["全局相机1"] as GlobalCameraModuleTool;
GlobalCameraParam globalCameraParam = cameraModuleTool.ModuParams;
globalCameraParam.ExposureTime = 5000;
globalCameraParam.Gain = 5.0;
需要注意的地方:全局相机模块在VM SDK中使用,如果没有使用添加引用的工具,可以手动添加GlobalCameraModuleCs.dll 引用,并将引用属性的“复制到本地”选项设置为False, 然后在程序代码文件中,添加命名空间的引用:using GlobalCameraModuleCs;
问题根因
不了解VM SDK中全局相机模块的使用
不知道如何访问全局相机模块的方法和属性