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

目录

  • 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");

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023-4-27-深入理解C++指针类型间强制转换

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

记一次峰回路转的注入

0X01 背景 自己之前写过一篇记录,当时是由于之前是一位校友刚做开发,叫我友情帮忙测试一波,由于是开发的新手,漏洞比较多,所以直接从注入开始讲起,但是到getshell的过程也算是一场峰回路转再跌跌撞撞的路程…

【Java笔试强训 17】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥杨辉三角…

洞见数字时代的创新原力,数云原力大会暨2023TECH第五届数字中国技术年会开幕

4月25日,神州控股、神州信息、神州数码集团共同主办的数云原力大会暨2023TECH第五届数字中国技术年会开幕。开幕式上,数百位投身并关注数字技术、数字产业发展的学者、技术专家、从业者、行业用户齐聚一堂,围绕云原生、数字原生、大数据、金融…

这一次,让Kotlin Flow 操作符真正好用起来

前言 Kotlin Flow 如此受欢迎大部分归功于其丰富、简洁的操作符,巧妙使用Flow操作符可以大大简化我们的程序结构,提升可读性与可维护性。 然而,虽然好用,但有些操作符不太好理解,可惜的是网上大部分文章只是简单介绍其…

吴恩达 Chatgpt prompt 工程--1.Guidelines

课程链接 Setup #安装 !pip install openai#设置key !export OPENAI_API_KEYsk-... # or #import openai #openai.api_key "sk-..."import openai import osfrom dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv())openai.api_key os.geten…

记一次SSRF漏洞的学习和利用

导语:本文主要记录一次我们在复盘嘶吼网站渗透报告时遇到的一个SSRF漏洞。 1.前言 本文主要记录一次我们在复盘嘶吼网站渗透报告时遇到的一个SSRF漏洞。此漏洞并结合腾讯云的API接口,可以获取大量嘶吼服务器的敏感信息。利用这些敏感信息,又…

android10 关闭默认输入法的“更正建议”

1. 场景 使用系统默认的输入法,在进行输入时,在输入法上方,会显示更正建议列表,同时会干扰我们的输入内容:会自动补全到输入框,而且删除不掉,甚至越删越多,非常讨厌。 如下&#x…

一段凄惨Android 面试经历分享,败在了项目架构原理上……

大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助。 这是一位网友分享的面试经历,他准备了3个月,刚刚参加完字节跳动的第三面,视频面&#xff…

都23年了你还记得渐进式框架是什么意思吗

vue 文章目录 vue前言一、眼见为实举个栗子二、渐进式的优势 前言 渐进式框架是一种能够逐步增强应用功能的框架,它允许开发者在不影响应用性能的情况下,逐步添加新的功能和特性。Vue.js提供了一些基础功能,如数据绑定和组件化,然…

这8个摸鱼神器,千万别让你老板知道!

工欲善其事,必先利其器,对于程序员来说也是如此,想早点下班就不能死脑筋,必须借助于一些开发工具来提高自己的工作效率,小编选取了8款任务/项目管理工具,能助你[打通任督二脉],工作效率大大提升…

React之动态路由创建以及解决刷新白屏问题

动态路由的创建和动态菜单的创建几乎类似,只不过的是,动态路由需要导入组件。这样才能完成跳转。 动态路由与动态菜单一样都需要封装一个转化函数,将后端传来的数据进行转换,转换成我们需要的格式。 需要导入的依赖 导入路由use…

【ChatGPT】阿里版 ChatGPT 突然官宣意味着什么?

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 阿里版 ChatGPT 突然官宣 ​ ChatGPT 技术在 AI 领域的重要性 自然语言生成 上下文连续性 多语言支持 ChatGPT 未来可能的应用场景 社交领域 商业领域 ​编辑 医疗领域…

网络安全常用术语

肉鸡 肉鸡指的就是被黑客成功入侵并取得控制权限的电脑。黑客们可以随意的控制肉鸡,就像在使用自己的电脑一样,很形象的比喻,就像是养的肉鸡,任黑客宰杀和利用。关键的是,在成为肉鸡后,只要黑客不对电脑进…

linux|进程间通信如何加锁

进程间通信有一种[共享内存]方式,大家有没有想过,这种通信方式中如何解决数据竞争问题?我们可能自然而然的就会想到用锁。但我们平时使用的锁都是用于解决线程间数据竞争问题,貌似没有看到过它用在进程中,那怎么办&…

Java——把数组排成最小的数

题目链接 牛客网在线oj题——把数组排成最小的数 题目描述 输入一个非负整数数组numbers,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 例如输入数组[3,32,321],则打印出这三个数字能…

如何提高三维模型OSGB格式转换3DTILES的转换速度和数据质量

如何提高三维模型OSGB格式转换3DTILES的转换速度和数据质量 提高三维模型从OSGB格式转换为3DTILES格式的转换速度和数据质量,可以从以下几个方面进行优化: 1、选用高效的转换工具:选择高效的转换工具是提高转换速度和数据质量的关键。目前市…

【react从入门到精通】深入理解React生命周期

文章目录 前言React技能树React的生命周期是什么React v16.0前的生命周期组件初始化(initialization)阶段组件挂载(Mounting)阶段组件更新(update)阶段组件销毁阶段 React v16.4 的生命周期总结写在最后 前言 在上一篇文章《react入门这一篇就够了》中我们已经掌握了React的基本…

ABTEST平台建设思路与方案

导读 ABTest的作用: 用ABTEST的结果数据,论证是因为某个业务方案的调整,对产品能力的影响。ABTEST是一个过程,只是为了证明改动的效果,其最终的阶段一定是对某个方案进行推全结束实验,避免稳定的业务流程…

docker 安装 datax和datax-web 之 datax-web登录时提示账号或密码错误

docker 安装docker 安装 datax和datax-web 安装教程地址: https://www.cnblogs.com/leihongnu/p/16612273.html 根据该博客的教程安装成功后,登录页面能打开,但是所提供的账户密码一直报错,这个就需要根据日志一步步去寻找原因了…