海康VisionMaster-全局变量-全局脚本-全局通讯

using System; 
using VM.GlobalScript.Methods;
using System.Windows.Forms; 
using iMVS_6000PlatformSDKCS;
using System.Runtime.InteropServices;

/******************************
 * 示例说明: 接收全局通信模块数据示例
 *     前提: 全局通信模块中开启有通信设备
 * 控制逻辑: 1.接收来自全局通信模块接收到的数据
 *           2.如果接收到数据字符0,则执行流程1一次
 * ***************************************/
public class UserGlobalScript : UserGlobalMethods,IScriptMethods
{
        /// 
        /// 初始化函数
        /// 
		/// 成功:返回0
        public int Init()
        {
        	//二次开发SDK初始化
            InitSDK();
            //设置与全局通信模块的通信端口
            StartGlobalCommunicate();
            //注册通信数据接收事件
            RegesiterReceiveCommunicateDataEvent();
			
			return 0;
        }

        /// 
        /// 运行函数
        /// 单次执行:该函数执行一次
        /// 连续执行:以一定时间间隔重复执行该函数
        /// 
		/// 成功:返回0
        public int Process()
        {
        	//m_operateHandle 二次开发SDK操作句柄
            if (m_operateHandle == IntPtr.Zero)
            {return ImvsSdkPFDefine.IMVS_EC_NULL_PTR;}
		
		    //默认执行全部流程,如果自定义流程执行逻辑,请移除DefaultExecuteProcess方法
			int nRet = DefaultExecuteProcess();
			
			return nRet;
        }
        
        /// 
        /// 通信数据接收函数
        /// 
        public override void UserGlobalMethods_OnReceiveCommunicateDataEvent(ReceiveDataInfo dataInfo)
        {
        	//MessageBox.Show("ffff");
        	if(dataInfo == null || dataInfo.DeviceData==null)
        	{return;}
        	//接收到的数据转成字符串
        	string str = System.Text.Encoding.Default.GetString(dataInfo.DeviceData);
        	//这里的deviceIndex和全局通信模块中的一致
        	if(dataInfo.DeviceID==1)
            {
        		//解析收到的数据
        		if(str=="1")
        	    {
        			SetGlobalVariableStringValue("var0","1");
        			ImvsPlatformSDK_API.IMVS_PF_ExecuteOnce_V30_CS(m_operateHandle,10000,null);
        		}
         		if(str=="2")
        	    {
        			SetGlobalVariableStringValue("var0","2");
        			ImvsPlatformSDK_API.IMVS_PF_ExecuteOnce_V30_CS(m_operateHandle,10000,null);
        		}
       		
        		
        	}
        }
        
        /// 
        /// SDK回调函数
        /// 
        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.PtrToStructure(outputPlatformInfo, typeof(ImvsSdkPFDefine.IMVS_PF_OUTPUT_PLATFORM_INFO));
            switch (struInfo.nInfoType)
            {
                //获取模块结果数据
                case (uint)ImvsSdkPFDefine.IMVS_CTRLC_OUTPUT_PlATFORM_INFO_TYPE.IMVS_ENUM_CTRLC_OUTPUT_PLATFORM_INFO_MODULE_RESULT:
                	{
                    	ImvsSdkPFDefine.IMVS_PF_MODULE_RESULT_INFO_LIST_P resultInfo = (ImvsSdkPFDefine.IMVS_PF_MODULE_RESULT_INFO_LIST_P)Marshal.PtrToStructure(struInfo.pData, typeof(ImvsSdkPFDefine.IMVS_PF_MODULE_RESULT_INFO_LIST_P));
                    	break;
                    }
                ///获取流程运行状态
                case (uint)ImvsSdkPFDefine.IMVS_CTRLC_OUTPUT_PlATFORM_INFO_TYPE.IMVS_ENUM_CTRLC_OUTPUT_PLATFORM_INFO_WORK_STATE:
                    {
                        ImvsSdkPFDefine.IMVS_PF_MODULE_WORK_STAUS stWorkStatus = (ImvsSdkPFDefine.IMVS_PF_MODULE_WORK_STAUS)Marshal.PtrToStructure(struInfo.pData, typeof(ImvsSdkPFDefine.IMVS_PF_MODULE_WORK_STAUS));
                        break;
                    }
                default:
                    break;
            }
        }
}

下面重点讲:

 /// 
        /// 通信数据接收函数
        /// 
        public override void UserGlobalMethods_OnReceiveCommunicateDataEvent(ReceiveDataInfo dataInfo)
        {
        	//MessageBox.Show("ffff");
        	if(dataInfo == null || dataInfo.DeviceData==null)
        	{return;}
        	//接收到的数据转成字符串
        	string str = System.Text.Encoding.Default.GetString(dataInfo.DeviceData);
        	//这里的deviceIndex和全局通信模块中的一致
        	if(dataInfo.DeviceID==1)
            {
        		//解析收到的数据
        		if(str=="1")
        	    {
        			SetGlobalVariableStringValue("var0","1");
        			ImvsPlatformSDK_API.IMVS_PF_ExecuteOnce_V30_CS(m_operateHandle,10000,null);
        		}
         		if(str=="2")
        	    {
        			SetGlobalVariableStringValue("var0","2");
        			ImvsPlatformSDK_API.IMVS_PF_ExecuteOnce_V30_CS(m_operateHandle,10000,null);
        		}
       		
        		
        	}
        }

关键点:

一、函数

 public override void UserGlobalMethods_OnReceiveCommunicateDataEvent(ReceiveDataInfo dataInfo)

这是通讯收到信号的响应函数,无论串口、tcp,只要收到信号,都会触发他。

二、设备号

if(dataInfo.DeviceID==1)

这个说的是设备号,跟全局通讯模块中的设置一致。

三、设置全局变量

SetGlobalVariableStringValue("var0","1");

也可以设置浮点型等等,函数需要变化

四、执行流程

ImvsPlatformSDK_API.IMVS_PF_ExecuteOnce_V30_CS(m_operateHandle,10000,null);

10000代表第一个流程,10001代表第二个流程

五、分支字符

海康VisionMaster-全局变量-全局脚本-全局通讯_第1张图片

 

你可能感兴趣的:(VisionMaster)