Ejemplo n.º 1
0
        /// <summary>
        /// Converts an array of item objects to an array of GetOPCITEMDEF objects.
        /// </summary>
        internal static OpcRcw.Da.OPCITEMDEF[] GetOPCITEMDEFs(TsCDaItem[] input)
        {
            OpcRcw.Da.OPCITEMDEF[] output = null;

            if (input != null)
            {
                output = new OpcRcw.Da.OPCITEMDEF[input.Length];

                for (int ii = 0; ii < input.Length; ii++)
                {
                    output[ii] = new OpcRcw.Da.OPCITEMDEF();

                    output[ii].szItemID            = input[ii].ItemName;
                    output[ii].szAccessPath        = (input[ii].ItemPath == null) ? String.Empty : input[ii].ItemPath;
                    output[ii].bActive             = (input[ii].ActiveSpecified) ? ((input[ii].Active) ? 1 : 0) : 1;
                    output[ii].vtRequestedDataType = (short)Technosoftware.DaAeHdaClient.Com.Interop.GetType(input[ii].ReqType);
                    output[ii].hClient             = 0;
                    output[ii].dwBlobSize          = 0;
                    output[ii].pBlob = IntPtr.Zero;
                }
            }

            return(output);
        }
Ejemplo n.º 2
0
        private string BindOPCDb()
        {
            string errText = string.Empty;

            DataSet ds = DbInf.GetOPCDbInfo(ref errText);

            if (errText.Length > 0)
            {
                return(errText);
            }

            int itemNum = 0;

            //创建同步组
            DataRow[] drs = ds.Tables[0].Select("type = 'SYNC'");
            if ((itemNum = drs.Length) > 0)
            {
                _idAim          = new string[itemNum];
                _syncItemHandle = new int[itemNum];

                //添加组
                errText = _opcDaConn.AddSyncGroup(out _syncGroupOpcInfo);
                if (errText.Length > 0)
                {
                    return(errText);
                }

                //组装对象
                OpcRcw.Da.OPCITEMDEF[] items = new OpcRcw.Da.OPCITEMDEF[itemNum];
                for (int i = 0; i < itemNum; i++)
                {
                    items[i].szAccessPath        = "";
                    items[i].bActive             = 1;
                    items[i].dwBlobSize          = 1;
                    items[i].pBlob               = IntPtr.Zero;
                    items[i].hClient             = i;
                    items[i].vtRequestedDataType = (short)VarEnum.VT_BSTR;
                    items[i].szItemID            = drs[i]["db_str"].ToString();

                    _idAim[i] = drs[i]["id"].ToString() + _idAimSplitStr + drs[i]["db_aim"].ToString();
                }
                //添加对象
                errText = _opcDaConn.AddSyncItems(_syncGroupOpcInfo.SyncGroupObj, items, _syncItemHandle);
                if (errText.Length > 0)
                {
                    return(errText);
                }
            }

            //创建异步组
            drs = ds.Tables[0].Select("type = 'ASYNC'");
            if ((itemNum = drs.Length) > 0)
            {
                _idAim = new string[itemNum];

                //添加组
                errText = _opcDaConn.AddAsyncGroup(out _asyncGroupOpcInfo);
                if (errText.Length > 0)
                {
                    return(errText);
                }

                //组装对象
                OpcRcw.Da.OPCITEMDEF[] items = new OpcRcw.Da.OPCITEMDEF[itemNum];
                for (int i = 0; i < itemNum; i++)
                {
                    items[i].szAccessPath        = "";
                    items[i].bActive             = 1;
                    items[i].dwBlobSize          = 1;
                    items[i].pBlob               = IntPtr.Zero;
                    items[i].hClient             = i;
                    items[i].vtRequestedDataType = (short)VarEnum.VT_BSTR;
                    items[i].szItemID            = drs[i]["db_str"].ToString();

                    AsyncItemHandleToDeviceDic.Add(i, drs[i]["id"].ToString() + _idAimSplitStr + drs[i]["db_aim"].ToString());
                }
                //添加对象
                int[] itemHandle = new int[itemNum];
                _opcDaConn.AddAsyncItems(_asyncGroupOpcInfo.AsyncGroupObj, items, itemHandle);
                if (errText.Length > 0)
                {
                    return(errText);
                }
            }
            return(errText);
        }