【VM服务管家】VM4.0平台SDK_2.5 全局工具类

news2024/11/28 14:36:27

目录

  • 2.5.1 全局相机:全局相机设置参数的方法
  • 2.5.2 全局相机:获取全局相机列表的方法
  • 2.5.3 全局通信:通信管理中设备开启状态管理
  • 2.5.4 全局通信:接收和发送数据的方法
  • 2.5.5 全局变量获取和设置全局变量的方法

2.5.1 全局相机:全局相机设置参数的方法

描述
环境:VM4.0.0 + VS2015及以上
现象:全局相机一些参数如何设置或获取?
解答
1)全局相机连接状态的获取方法只有在图像源绑定相机里面全局相机才可获取绑定该相机的状态,获取全局相机中相机的连接状态是Open还是Close,监测相机是否掉线。获取绑定该相机图像源的"CameraName"参数的Value,会获取类似"0 0 0 0$$ C l o s e " 的数据,对此数据按 Close"的数据,对此数据按 Close"的数据,对此数据按分割获取第一个数据,第一个值大于0表示连接,等于0表示未连接,如上数据表示该相机未连接。
在这里插入图片描述

C#	 
ImageSourceModuleTool imageSourceModule = (ImageSourceModuleTool)VmSolution.Instance["流程1.图像源1"];
tring i = null;
imageSourceModule.ModuParams.GetParamValue("CameraName", ref i);

2)全局相机触发源的获取和设置方法,触发源枚举值为枚举值就是 0 是LINE0, 1是LINE1,2是LINE2,3是LINE3, 7 是SOFTWARE。

C#
GlobalCameraModuleTool globalTool = VmSolution.Instance["全局相机1"] as GlobalCameraModuleTool;
//获取
string strVal11 = "";
globalTool.ModuParams.GetParamValue("TriggerSource", ref strVal11);
//设置
globalTool.ModuParams.SetParamValue("TriggerSource", "7");

3)全局相机设置曝光的方法

C#
GlobalCameraModuleTool tool = (GlobalCameraModuleTool)VmSolution.Instance["全局相机1"];
//获取
string strValue = "";
tool.ModuParams.GetParamValue("ExposureTime", ref strValue);
//设置
tool.ModuParams.SetParamValue("ExposureTime", "5000");

问题根因
不熟悉全局相机的一些参数配置

2.5.2 全局相机:获取全局相机列表的方法

描述
环境:VM4.0.0 + VS2015及以上
现象:如何获取全局相机列表并给图像源设置指定相机?
解答
1.获取全局相机列表,示例代码如下。

C#
// 全局相机下拉列表
private void vmGalobalCameraCombBox_DropDownOpened(object sender, EventArgs e)
{
    try
    {
        var moduleList = ServerSDKManager.serverSDKManager.mSolutionManager.GetAllModuleList();

        vmGalobalCameraCombBox.Items.Clear();
        if (moduleList.HasValue)
        {
            foreach (var item in moduleList.Value.astModuleInfo)
            {
                if (item.nModuleType == 6)
                {
                    string str = Encoding.UTF8.GetString(item.strDisplayName);
                    vmGalobalCameraCombBox.Items.Add(item.nNodeID.ToString() + " " + str);
                }
            }
        }
    }
    catch (VmException ex)
    {
        System.Windows.MessageBox.Show("获取相机列表失败!" + ex.ToString());
    }
}

2.图像源模块设置相机,代码如下。

C#
// 图像源绑定相机
private void BindingCamera_Click_1(object sender, RoutedEventArgs e)
{
    try
    {
        var imageSourceModuleTool = (ImageSourceModuleTool)VmSolution.Instance["流程1.图像源1"];
        imageSourceModuleTool.ModuParams.SetParamValue("CameraID",”1”);
        System.Windows.MessageBox.Show("绑定成功!");
    }
    catch (Exception ex)
    {
        System.Windows.MessageBox.Show("绑定失败!");
    }
}

问题根因
相关接口没有对外开放,后续版本(VM4.2)会开放出来。

2.5.3 全局通信:通信管理中设备开启状态管理

描述
环境:VM4.0.0 + VS2015及以上
现象:通信管理中设备开启状态和如何通过代码设置,如何通过回调获取开启状态。
在这里插入图片描述

解答

  1. 调用通讯管理模块中SetParamValue()函数,其中nDeviceID表示设备列表中处于第几位,"ConnectState"参数设置true表示打开,false表示关闭。获取调用bIsDeviceConnect()函数,返还Bool类型的值。
C# 
 
CommManagerModuleTool commManagerModule = (CommManagerModuleTool)VmSolution.Instance["通信管理1"];
//设置通讯设备的开启 
commManagerModule.SetParamValue(1, "ConnectState", "true");
//获取通讯的开启状态
bool m= commManagerModule.bIsDeviceConnect(1);
  1. 通过回调获取设备是否开启
//注册回调函数
VmSolution.OnCommunicationStatusCallBackEvent += VmSolution_OnCommunicationStatusCallBackEvent;
private void VmSolution_OnCommunicationStatusCallBackEvent(ImvsSdkDefine.IMVS_COMMU_REPORT_DATA_INFO reportDataInfo)
{
    int nType = reportDataInfo.nType;
    byte[] btarr = ExternalCallHelper.IntPtr2Bytes(reportDataInfo.pData, reportDataInfo.nLen);//IntPtr转Byte,可使用Marshal.Copy
    int len = btarr.Length;
    string ID = btarr[1].ToString();
    string Open = btarr[0].ToString();//开关状态,1表示开,0表示关
}

问题根因
不熟悉VM二次开发接口。

2.5.4 全局通信:接收和发送数据的方法

描述
环境:VM4.0 + VS2015及以上
现象:二次开发中,全局模块控件中的通信管理如何接收和发送数据 ?
解答

  1. 通过接口GetReadData来接收数据以及SetInt或者SetString来发送整型或字符串数据。其中,需要注意的有两点,一是“通信管理1”指的是当前运行的通信设备;二是接口函数SetString中的设备号2,则为通信管理中自动生成的设备序号。
//C#
CommManagerModuleTool commTool = (CommManagerModuleTool)VmSolution.Instance["通信管理1"];
if (null != commTool)
{
	commTool.SetString(2, "abcd"); // 发送字符串型数据    
	int[] aIntVal = new int[3];
	aIntVal[0] = 10;
	aIntVal[1] = 11;
	aIntVal[2] = 12;
	commTool.SetInt(1, aIntVal, 0); // 发送整型数据    
	byte[] btData = null;
	commTool.GetReadData(2, ref btData);//接收数据
}
  1. 通过回调来接收数据
C#
//注册回调函数,通讯接受事件回调
VmSolution.OnCommunicationRecvCallBackEvent += VmSolution_OnCommunicationRecvCallBackEvent;
private void VmSolution_OnCommunicationRecvCallBackEvent(ImvsSdkDefine.IMVS_COMMU_REPORT_DATA_INFO reportDataInfo)
{
	string strMsg;
	try
	{
		int nType = reportDataInfo.nType;

		byte[] btarr = ExternalCallHelper.IntPtr2Bytes(reportDataInfo.pData, reportDataInfo.nLen);
		int len = btarr.Length;
		string ID = btarr[0].ToString();
		byte[] vs = new byte[len - 2];
		Array.Copy(btarr, 2, vs, 0, len - 2);
		string ReceiveData = System.Text.Encoding.Default.GetString(vs);//数据
		strMsg = ID + "号设备接受到:" + ReceiveData;
	}
	catch (VmException ex)
	{
		strMsg = "读取通信数据失败. Error Code: " + Convert.ToString(ex.errorCode, 16);
	}
}

//发送字符串数据同样是使用commManagerModule.SetString ()接口
public void SendCommDeviceData(int Num, string SendMessage)
{
	CommManagerModuleTool commManagerModule = (CommManagerModuleTool)VmSolution.Instance["通信管理1"];
	string strMsg;
	try
	{
		//获取通讯的连接状态
		if (commManagerModule.bIsDeviceConnect(Num))
		{
			commManagerModule.SetString(Num, SendMessage);//给连接VM通讯的设备发送
			strMsg = "发送信号:" + SendMessage + "给" + Num + "号通讯设备";
		}
		else
		{
			strMsg = Num + "号通讯设备未打开";
		}
	}
	catch (Exception)
	{
		strMsg = "发送信号失败";
		return;
	}
}

问题根因
不熟悉全局模块中通信管理的相关接口和回调函数。

2.5.5 全局变量获取和设置全局变量的方法

描述
环境:VM4.0 + VS2015及以上
现象:如何获取和设置全局变量的值?
解答
获取方案中的全局变量:

C#
GlobalVariableModuleTool globalVar = VmSolution.Instance["全局变量1"] as GlobalVariableModuleTool;
if (globalVar != null)
string strX = globalVar.GetGlobalVar(“PhotoX”);//获取
globalVar.SetGlobalVar("PhotoX", "150.229");//设置
globalVar.SetGlobalVar("PhotoY", "225.651");
globalVar.SetGlobalVar("PhotoR", "23.12");

在这里插入图片描述

问题根因
不熟悉全局变量工具及其接口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/474396.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

经典重装上阵,更好用的中小手游戏鼠标,雷柏V300W上手

日常办公、玩游戏都需要用到鼠标,特别是对于游戏玩家来说,一款手感好、易定制的鼠标,绝对是游戏上分的利器。早先雷柏出过一款V300鼠标,距今已有10年历史,当时是很受欢迎,最近南卡又出了一款复刻版的V300W&…

为什么不要相信AI机器人提供的健康信息?

自从OpenAI、微软和谷歌推出了AI聊天机器人,许多人开始尝试一种新的互联网搜索方式:与一个模型进行对话,而它从整个网络上学到的知识。 专家表示,鉴于之前我们倾向于通过搜索引擎查询健康问题,我们也不可避免地会向Ch…

linux下的权限管理

1.shell概念 当我们在进入正文前先给大家普及一些基础概念。 广义上来讲,linux 发行版 linux内核 外壳程序(这个外壳程序就相当于 windows gui(窗口图形),linux 常用的shell 是 bash) 所以&#xff0c…

vue基本语法

目录 一、模板语法 (1)文本 (2)原始HTML (3)属性Attribute (4)使用JavaScript表达式 二、条件渲染 (1)v-if,v-else (2&#x…

nodejs+vue+elementui学生毕业生离校系统

学生毕业离校系统的开发过程中。该学生毕业离校系统包括管理员、学生和教师。其主要功能包括管理员:首页、个人中心、学生管理、教师管理、离校信息管理、费用结算管理、论文审核管理、管理员管理、留言板管理、系统管理等,前台首页;首页、离…

stm32 CubeMx 实现SD卡/sd nand FATFS读写测试

stm32 CubeMx 实现SD卡/SD nand FATFS读写测试 文章目录 stm32 CubeMx 实现SD卡/SD nand FATFS读写测试1. 前言2. 环境介绍2.1 软硬件说明2.2 外设原理图 3. 工程搭建3.1 CubeMx 配置3.2 SDIO时钟配置说明3.2 读写测试3.2.1 添加读写测试代码 3.3 FATFS文件操作3.3.1 修改读写测…

云计算:数字化转型的利器

随着数字化转型的加速,企业对于信息技术应用的需求越来越大,而云计算作为一种新的基础设施,也逐渐成为了许多企业的首选。那么,云计算究竟有哪些优势?未来发展趋势又是怎样的呢?下面就让我们一起来探讨一下…

深入理解try...catch(字节码层面)

我们工作中常用try...catch来解决程序中出现的异常情况,但是你真的了解它的实现原理吗?今天我就带着大家从字节码层面理解try...catch 一、准备工作 我们首先需要准备好异常类和对应的测试类方便我们观察。 异常类: public class DivideB…

1.软件测试

目录 一、面试重点 1.什么是软件测试? 2.软件测试和软件开发的区别 3.你为什么选择软件测试? 4.什么是需求? 5.软件测试人员如何深入了解需求? 6.什么是内存泄露? 7.什么是测试用例? 8.测试用例有…

【23】linux进阶——linux的软链接和硬链接

大家好,这里是天亮之前ict,本人网络工程大三在读小学生,拥有锐捷的ie和红帽的ce认证。每天更新一个linux进阶的小知识,希望能提高自己的技术的同时,也可以帮助到大家 另外其它专栏请关注: 锐捷数通实验&…

终于成功了,CCED2000后,中文编程软件再次脱颖而出,系出金山

WPS抗衡微软,CCEDE却被淹没? DOS代,我们用WPS来进行文字编辑,CCED来做表格,两者在那个时代可以称得上是国产办公领域的“必装软件”。 如今,30年过去了,WPS一步一步成长为抗衡微软office的国产…

electron入门 | 手把手带electron项目初始化

Electron是一个基于Chromium和 Node.js,可以使用 HTML、CSS和JavaScript构建跨平台应用的技术框架,兼容 Mac、Windows 和 Linux。 目录 1.了解electron 2.开发环境 3.初始化 采坑插曲: 1.了解electron Electron 可以让你使用纯 JavaScrip…

easyexcel读取excel合并单元格数据

普通的excel列表,easyexcel读取是没有什么问题的。但是,如果有合并单元格,那么它读取的时候,能获取数据,但是数据是不完整的。如下所示的单元格数据: 我们通过简单的异步读取,最后查看数据内容&…

symfonos 2

目录 扫描 SMB SSH 提权 扫描 由于端口80是打开的,我们试图在浏览器中打开IP地址,但在网页上没有找到任何有用的信息。我们还尝试了dirb和其他目录暴力工具,但没有找到任何东西。 SMB 为了进一步枚举,我们使用Enum4Linux工具并找到了一些有用的信息。我们发现了一个名…

Microelectronic学习章节总结(1)-- 计算机架构复习

文章目录 Part1. 处理器架构,以及流水线的实现方法part2 DLX架构part3 ULTRA SPARC T2架构part4 PENTIUM 4架构part5 不同架构之间的性能比较 PPT:2,4,5,6 这一章主要对之前的计算机架构一些知识进行复习,因…

数字中国建设峰会|大模型带来产业智能化新机遇

第六届数字中国建设峰会在福建省福州市举办。峰会期间,百度与福州市政府签署战略协议,将基于文心一言为代表的大模型和百度智能云通用AI能力深入合作。未来,双方将聚焦算力产业,共建百度智能云(福州)智算中…

移动推车定位查找方案

CK_Label_v24 产品型号 CK_Label_v24 尺寸 124x90x12mm(不含安装支架) 屏幕尺寸 4.2 inch 显示技术 电子墨水屏显示 显示区域面积 (mm) 84.8(H) x 63.6(V) 分辨率 400*300 像素密度 120dpi 显示颜色 黑/白 外观颜色 白色&灰外圏…

Mozilla 自身是如何模糊 Firefox 浏览器的?

导语:Mozilla一直在模糊Firefox及其底层组件,它已被证明是识别质量和安全漏洞的最有效方法之一。 Mozilla一直在模糊Firefox及其底层组件,它已被证明是识别质量和安全漏洞的最有效方法之一。通常,研究人员会在不同级别上应用模糊测…

二叉树的遍历及相关衍生

二叉树的遍历及相关衍生 前言二叉树的遍历建树二叉树的遍历遍历的分类代码部分 遍历根的应用打印树中的每个数据代码部分 遍历计算树节点个数代码部分 计算二叉树的深度思路代码部分 第k层个数 结束 前言 如标题所示,在这里我们要研究的是二叉树的遍历。 为什么不…

java获取星期几

如果你要问 java什么时候学习比较好,那么答案肯定是 java的星期几。 在 Java中,你可以使用 public static void main ()方法来获取一个类的所有成员变量,然后在所有类中调用这个方法来获取对象的所有成员变量。它能以对…