当前位置: 首页 > 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;如果还有左子树就一…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...

解决MybatisPlus使用Druid1.2.11连接池查询PG数据库报Merge sql error的一种办法

目录 前言 一、问题重现 1、环境说明 2、重现步骤 3、错误信息 二、关于LATERAL 1、Lateral作用场景 2、在四至场景中使用 三、问题解决之道 1、源码追踪 2、关闭sql合并 3、改写处理SQL 四、总结 前言 在博客&#xff1a;【写在创作纪念日】基于SpringBoot和PostG…...