海康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
{
        /// <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;}
		
		    //默认执行全部流程,如果自定义流程执行逻辑,请移除DefaultExecuteProcess方法
			int nRet = DefaultExecuteProcess();
			
			return nRet;
        }
        
        /// <summary>
        /// 通信数据接收函数
        /// </summary>
        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);
        		}
       		
        		
        	}
        }
        
        /// <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.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;
            }
        }
}

下面重点讲:

 /// <summary>
        /// 通信数据接收函数
        /// </summary>
        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代表第二个流程

五、分支字符

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值