如何实现根据通讯信号切换快速匹配的模型文件并触发流程执行?
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;
 }
 }
}
11-10 07:05