海康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;
 //操作模块 ID
 stImportData.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.niftyadmin.cn/n/5167074.html

相关文章

SPASS-交叉表分析

导入数据 修改变量测量类型 分析->描述统计->交叉表 表中显示行、列变量通过卡方检验给出的独立性检验结果。共使用了三种检验方法。上表各种检验方法显著水平sig.都远远小于0.05,所以有理由拒绝实验准备与评价结果是独立的假设&#xff0c;即认为实验准备这个评价指标是…

震裕科技-300953 三季报分析(20231108)

震裕科技-300953 基本情况 公司名称&#xff1a;宁波震裕科技股份有限公司 A股简称&#xff1a;震裕科技 成立日期&#xff1a;1994-10-18 上市日期&#xff1a;2021-03-18 所属行业&#xff1a;专用设备制造业 周期性&#xff1a;0 主营业务&#xff1a;精密级进冲压模具及下游…

C++中的函数重载:多功能而强大的特性

引言 函数重载是C编程语言中的一项强大特性&#xff0c;它允许在同一个作用域内定义多个同名函数&#xff0c;但这些函数在参数类型、个数或顺序上有所不同。本文将深入探讨函数重载的用法&#xff0c;以及它的优势和应用场景。 正文 在C中&#xff0c;函数重载是一项非常有…

Android Camera App启动流程解析

前言&#xff1a;做了7年的camera app开发&#xff0c;给自己一个总结&#xff0c;算是对camera的一次告白吧。Camera被大家誉为手机的眼睛&#xff0c;是现在各大手机厂商的卖点&#xff0c;也是各大厂商重点发力的地方。Camera的重要性我就不在这里赘述了&#xff0c;让我们进…

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类…

Maven依赖包冲突的两种排查和解决方案

1、识别冲突 观察错误消息&#xff1a;Maven在构建过程或者是项目启动过程中&#xff0c;大概率会输出关于版本冲突的警告或错误消息。当然也有小概率是在运行到指定代码时才会产生的包冲突导致异常报错。 使用mvn dependency:tree命令&#xff1a;这个命令可以展示项目中的所…

ElasticSearch的文档、字段、映射和高级查询

1. 文档&#xff08;Document&#xff09; 在ES中一个文档是一个可被索引的基础信息单元&#xff0c;也就是一条数据 比如&#xff1a;你可以拥有某一个客户的文档&#xff0c;某一个产品的一个文档&#xff0c;当然&#xff0c;也可以拥有某个订单的一个文档。文档以JSON&…

Python---列表的循环遍历,嵌套

循环遍历就是使用while或for循环对列表中的每个数据进行打印输出 while循环&#xff1a; list1 [貂蝉, 大乔, 小乔]# 定义计数器 i 0 # 编写循环条件 while i < len(list1):print(list1[i])# 更新计数器i 1 for循环&#xff08;推荐&#xff09;&#xff1a; list1 [貂…