当前位置: 首页 > 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;}}
}
http://www.lryc.cn/news/224198.html

相关文章:

  • 什么是闭包
  • sql6(Leetcode1387使用唯一标识码替换员工ID)
  • qt-C++笔记之Qt中的时间与定时器
  • 【C++】复杂的多继承及其缺陷(菱形继承)
  • esp32-rust-no_std-examples-blinky
  • GitHub上的开源工业软件
  • Centos7安装配置中文输入法
  • 【OJ比赛日历】快周末了,不来一场比赛吗? #11.11-11.17 #12场
  • 提取当前文件夹下多文件夹中的数据
  • 深度学习(生成式模型)——Classifier Free Guidance Diffusion
  • C语言 每日一题 11.9 day15
  • STM32F103C8T6第三天:pwm、sg90、超声波、距离感应按键开盖震动开盖蜂鸣器
  • 栈的顺序存储实现(C语言)(数据结构与算法)
  • 设计模式 -- 观察者模式
  • Go RabbitMQ简介 使用
  • 【面经】Spring框架中用了哪些设计模式
  • SpringBoot自动配置的原理篇,剖析自动配置原理;实现自定义启动类!附有代码及截图详细讲解
  • 苹果Ios系统app应用程序开发者如何获取IPA文件签名证书时需要注意什么?
  • 算法通关村第七关-黄金挑战二叉树迭代遍历
  • 2023-11-Rust
  • iOS代码混淆----自动
  • 对Mysql和应用微服务做TPS压力测试
  • 将程序添加至右键菜单
  • 三板斧的使用、全局配置文件、静态文件的配置、orm介绍
  • 【编程实践】黑框框里的打字小游戏,但是汇编语言
  • ElasticSearch的集群、节点、索引、分片和副本
  • std::cout无法打印uint8_t类型的数据
  • 浅谈泛在电力物联网在智能配电系统应用
  • 已解决:云原生领域的超时挂载Bug — Kubernetes深度剖析
  • 概念解析 | 高光谱图像:揭开自然世界的神秘面纱