当前位置: 首页 > news >正文

海康Visionmaster-全局脚本:通过通讯触发快速匹配 模块换型的方法

如何实现根据通讯信号切换快速匹配的模型文件并触发流程执行?
1.动态切换模板需在全局脚本中调用相关接口实现,可以在全局脚本的通讯数据接收回调中实现代码逻辑,代码如下。

C#
using System;
using VM.GlobalScript.Methods;
using System.Windows.Forms;
using iMVS_6000PlatformSDKCS;
using System.Runtime.InteropServices;
* 示例说明: 接收全局通信模块数据示例
* 前提: 全局通信模块中开启有通信设备
* 控制逻辑: 1.接收来自全局通信模块接收到的数据
* 2.如果接收到数据字符 T1/T2,则加载对应模型文件并执行流程
1 一次
* ***************************************/
public class UserGlobalScript : UserGlobalMethods, IScriptMethods
{/// <summary>/// 初始化函数/// </summary>/// <returns>成功:返回 0</returns>public int Init(){//二次开发 SDK 初始化InitSDK();//设置与全局通信模块的通信端口StartGlobalCommunicate();//注册通信数据接收事件RegesiterReceiveCommunicateDataEvent();return 0;}/// <summary>/// 运行函数/// 单次执行:该函数执行一次/// 连续执行:以一定时间间隔重复执行该函数/// </summary>/// <returns>成功:返回 0</returns>public int Process(){//m_operateHandle 二次开发 SDK 操作句柄if (m_operateHandle == IntPtr.Zero){ return ImvsSdkPFDefine.IMVS_EC_NULL_PTR; }//默认执行全部流程,如果自定义流程执行逻辑,请移除 DefaultExe
cuteProcess 方法int nRet = DefaultExecuteProcess();return nRet;}/// <summary>/// 通信数据接收函数/// </summary>public override void UserGlobalMethods_OnReceiveCommunicate
DataEvent(ReceiveDataInfo dataInfo){if (dataInfo == null || dataInfo.DeviceData == null){ return; }//接收到的数据转成字符串string str = System.Text.Encoding.Default.GetString(dataInfo.D
eviceData);//创建导入模型结构体ImvsSdkPFDefine.IMVS_PF_IMPORT_MODULE_DATA_INPUT stI
mportData = new ImvsSdkPFDefine.IMVS_PF_IMPORT_MODULE_DATA
_INPUT();stImportData.stImportModuData = new ImvsSdkPFDefine.IMV
S_PF_IMPORT_MODULE_DATA[ImvsSdkPFDefine.IMVS_PF_MAX_IMPOR
T_NUM];//这里的 deviceIndex 和全局通信模块中的一致if (dataInfo.DeviceID == 1){//解析收到的数据if (str == "T1"){//导入一个模板string strImportFilePath = "E:\\Project\\VMProject\\模
板切换\\3.fmxml";stImportData.stImportModuData = new ImvsSdkPFDe
fine.IMVS_PF_IMPORT_MODULE_DATA[ImvsSdkPFDefine.IMVS_PF_MAX
_IMPORT_NUM];stImportData.nDataNum = 1;stImportData.nDataType = 1;//操作模块 IDstImportData.nModuleID = 1;stImportData.stImportModuData[0].pData = Marshal.S
tringToHGlobalAnsi(strImportFilePath);int iDataLen = System.Text.Encoding.Default.GetBytes
(strImportFilePath).Length;stImportData.stImportModuData[0].nDataLen = (uint)i
DataLen;}if (str == "T2"){//创建模型文件字符串数组,同时导入两个模板string[] strImportFilePath = new System.String[] { "E:\
\Project\\VMProject\\模板切换\\1.fmxml", "E:\\Project\\VMProject\\模板
切换\\2.fmxml" };stImportData.nDataNum = 2;stImportData.nDataType = 1;stImportData.nModuleID = 1;int count = 0;foreach (var iter in strImportFilePath){stImportData.stImportModuData[count].pData =
Marshal.StringToHGlobalAnsi(iter);int iDataLen = System.Text.Encoding.Default.GetB
ytes(iter).Length;stImportData.stImportModuData[count].nDataLen 
= (uint)iDataLen;count++;}}//导入模型ImvsPlatformSDK_API.IMVS_PF_ImportModuleData_CS(m_o
perateHandle, stImportData);
//执行流程 1 ImvsPlatformSDK_API.IMVS_PF_ExecuteOnce_V30_CS(m_op
erateHandle, 10000, null);}}/// <summary>/// SDK 回调函数/// </summary>public override void ResultDataCallBack(IntPtr outputPlatformInfo,
IntPtr puser){base.ResultDataCallBack(outputPlatformInfo, puser);ImvsSdkPFDefine.IMVS_PF_OUTPUT_PLATFORM_INFO struInfo 
= (ImvsSdkPFDefine.IMVS_PF_OUTPUT_PLATFORM_INFO)Marshal.PtrTo
Structure(outputPlatformInfo, typeof(ImvsSdkPFDefine.IMVS_PF_OUTP
UT_PLATFORM_INFO));switch (struInfo.nInfoType){//获取模块结果数据case (uint)ImvsSdkPFDefine.IMVS_CTRLC_OUTPUT_PlATFO
RM_INFO_TYPE.IMVS_ENUM_CTRLC_OUTPUT_PLATFORM_INFO_MODU
LE_RESULT:{ImvsSdkPFDefine.IMVS_PF_MODULE_RESULT_INFO
_LIST_P resultInfo = (ImvsSdkPFDefine.IMVS_PF_MODULE_RESULT_INF
O_LIST_P)Marshal.PtrToStructure(struInfo.pData, typeof(ImvsSdkPFDefi
ne.IMVS_PF_MODULE_RESULT_INFO_LIST_P));break;}///获取流程运行状态case (uint)ImvsSdkPFDefine.IMVS_CTRLC_OUTPUT_PlATFO
RM_INFO_TYPE.IMVS_ENUM_CTRLC_OUTPUT_PLATFORM_INFO_WORK_
STATE:{ImvsSdkPFDefine.IMVS_PF_MODULE_WORK_STAU
S stWorkStatus = (ImvsSdkPFDefine.IMVS_PF_MODULE_WORK_STAUS)
Marshal.PtrToStructure(struInfo.pData, typeof(ImvsSdkPFDefine.IMVS_P
F_MODULE_WORK_STAUS));break;}default:break;}}
}

相关文章:

海康Visionmaster-全局脚本:通过通讯触发快速匹配 模块换型的方法

如何实现根据通讯信号切换快速匹配的模型文件并触发流程执行&#xff1f; 1.动态切换模板需在全局脚本中调用相关接口实现&#xff0c;可以在全局脚本的通讯数据接收回调中实现代码逻辑&#xff0c;代码如下。 C# using System; using VM.GlobalScript.Methods; using System.…...

什么是闭包

闭包是指函数在定义时可以访问其词法作用域的能力&#xff0c;即使函数在定义之后被传递到了其他地方执行。它包含了两个主要的特性&#xff1a;函数内部可以访问外部函数作用域中的变量&#xff0c;而这些变量在函数执行完毕后依然保持在内存中。 具体来说&#xff0c;闭包的…...

sql6(Leetcode1387使用唯一标识码替换员工ID)

1112-2 代码&#xff1a; INNER JOIN 如果表中有至少一个匹配&#xff0c;则返回行 LEFT JOIN 即使右表中没有匹配&#xff0c;也从左表返回所有的行&#xff08;LEFT为基准 RIGHT JOIN 即使左表中没有匹配&#xff0c;也从右表返回所有的行 # Write your MySQL query st…...

qt-C++笔记之Qt中的时间与定时器

qt-C笔记之Qt中的时间与定时器 code review! 文章目录 qt-C笔记之Qt中的时间与定时器一.Qt中的日期时间数据1.1.QTime&#xff1a;获取当前时间1.2.QDate&#xff1a;获取当前日期1.3.QDateTime&#xff1a;获取当前日期和时间1.4.QTime类详解1.5.QDate类详解1.6..QDateTime类…...

【C++】复杂的多继承及其缺陷(菱形继承)

本篇要分享的内容是C中多继承的缺陷&#xff1a;菱形继承。 以下为本篇目录 目录 1.多继承的缺陷与解决方法 2.虚继承的底层原理 3.虚继承底层原理的设计原因 1.多继承的缺陷与解决方法 首先观察下面的图片判断它是否为多继承 这实际上是一个单继承&#xff0c;单继承的特…...

esp32-rust-no_std-examples-blinky

什么是裸机环境&#xff1f; 裸机环境是指没有可供使用的操作系统环境。当编译的 Rust 程序拥有 no_std 属性时&#xff0c;该程序无权访问上述 std 章节中提到的某些特定功能。尽管仍支持使用配网或引入复杂数据结构等功能&#xff0c;但实现方式将会更加复杂。 no_std…...

GitHub上的开源工业软件

github上看到一个中国人做的流体力学开源介绍&#xff0c;太牛了&#xff01; https://github.com/clatterrr/FluidSimulationTutorialsUnity 先分析一下工业仿真软件赛道 工业仿真软件的赛道和产品主要功能如下&#xff1a; 1. 工艺仿真赛道&#xff1a; - 工厂布局优化&am…...

Centos7安装配置中文输入法

Centos7安装配置中文输入法 在安装CentOS时&#xff0c;我们为了方便使用&#xff0c;语言选择了中文&#xff0c;但是我们发现&#xff0c;在Linux命令行或者是浏览器中输入时&#xff0c;我们只能输入英文&#xff0c;无法输入汉字。 来&#xff0c;跟随脚步&#xff0c;设…...

【OJ比赛日历】快周末了,不来一场比赛吗? #11.11-11.17 #12场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-11-11&#xff08;周六&#xff09; #5场比赛2023-11-12…...

提取当前文件夹下多文件夹中的数据

提取当前文件夹下多文件夹中的数据 1.实现步骤 现在D:\临时\图库 这个文件夹下有多个文件夹,现在需要将多个文件夹中的文件全部移动到D:\临时\图库下; $sourcePath "D:\临时\图库" $targetPath "D:\临时\图库"Get-ChildItem -Path $sourcePath -File …...

深度学习(生成式模型)——Classifier Free Guidance Diffusion

文章目录 前言推导流程训练流程测试流程 前言 在上一节中&#xff0c;我们总结了Classifier Guidance Diffusion&#xff0c;其有两个弊端&#xff0c;一是需要额外训练一个分类头&#xff0c;引入了额外的训练开销。二是要噪声图像通常难以分类&#xff0c;分类头通常难以学习…...

C语言 每日一题 11.9 day15

数组元素循环右移问题 一个数组A中存有N&#xff08; > 0&#xff09;个整数&#xff0c;在不允许使用另外数组的前提下&#xff0c;将每个整数循环向右移M&#xff08;≥0&#xff09;个位置&#xff0c;即将A中的数据由&#xff08;A0​A1⋯AN−1&#xff09;变换为&…...

STM32F103C8T6第三天:pwm、sg90、超声波、距离感应按键开盖震动开盖蜂鸣器

1. 定时器介绍1&#xff08;317.21&#xff09; 软件定时&#xff08;之前的定时方法&#xff09;&#xff08;软件延时&#xff09;缺点&#xff1a;不精确、占用CPU资源 void Delay500ms() //11.0592MHz {unsigned char i, j, k;_nop_();i 4;j 129;k 119;do{do{while (-…...

栈的顺序存储实现(C语言)(数据结构与算法)

栈的顺序存储实现通常使用数组来完成。实现方法包括定义一个固定大小的数组&#xff0c;以及一个指向栈顶的指针。当元素入栈时&#xff0c;指针加一并将元素存储在相应位置&#xff1b;当元素出栈时&#xff0c;指针减一并返回相应位置的元素。 1. 顺序栈定义 #define MaxSi…...

设计模式 -- 观察者模式

说明 author blog.jellyfishmix.com / JellyfishMIX - githubLICENSE GPL-2.0 定义 观察者模式(Observer Design Pattern) 也被称为发布订阅模式(Publish-Subscribe Design Pattern)。在 GoF 的《设计模式》一书中&#xff0c;它的定义是这样的: Define a one-to-many depe…...

Go RabbitMQ简介 使用

RabbitMQ简介 RabbitMQ 是一个广泛使用的开源消息队列系统&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;标准&#xff0c;为分布式应用程序提供了强大的消息传递功能。RabbitMQ 是 Erlang 语言编写的&#xff0c;具有高度的可扩展性和可靠性&#xff0c;…...

【面经】Spring框架中用了哪些设计模式

在Spring框架中&#xff0c;主要运用了以下几种设计模式&#xff1a; 工厂模式&#xff1a; Spring beanFactory使用工厂模式在应用程序中管理对象的创建。 通过使用工厂模式&#xff0c;Spring可以将对象的创建与使用分离&#xff0c;降低耦合度。 单例模式&#xff1a; Spr…...

SpringBoot自动配置的原理篇,剖析自动配置原理;实现自定义启动类!附有代码及截图详细讲解

SpringBoot 自动配置 Condition Condition 是在Spring 4.0 增加的条件判断功能&#xff0c;通过这个可以功能可以实现选择性的创建 Bean 操作 思考&#xff1a;SpringBoot是如何知道要创建哪个Bean的&#xff1f;比如SpringBoot是如何知道要创建RedisTemplate的&#xff1f;…...

苹果Ios系统app应用程序开发者如何获取IPA文件签名证书时需要注意什么?

今天呢想和大家介绍介绍苹果App开发者如何获取IPA文件签名证书的步骤和注意事项。对于苹果应用程序开发者而言&#xff0c;获取IPA文件签名证书是发布应用程序至App Store的重要步骤之一。签名证书能够确保应用程序的安全性和可信度&#xff0c;并使其能够在设备上正确运行。 …...

算法通关村第七关-黄金挑战二叉树迭代遍历

大家好我是苏麟 , 今天带来二叉树的迭代遍历 . 二叉树的迭代遍历 前序编列 描述 : 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 题目 : LeetCode 二叉树的前序遍历 : 144. 二叉树的前序遍历 分析 : 前序遍历是中左右&#xff0c;如果还有左子树就一…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...