Exemple #1
0
        private void cmdWriteAsync_Click(object sender, EventArgs e)
        {
            int CancelID;

            int[]    aE         = new int[2];
            object[] ItemValues = new object[2];
            ItemValues[0] = txtWriteVal1.Text;
            ItemValues[1] = txtWriteVal2.Text;
            try
            {
                theGroup.AsyncWrite(HandlesServer, ItemValues, 55667788, out CancelID, out aE);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Exemple #2
0
        public int[] writeAsyn(int[] arryHandleServer, Object[] arryVal)
        {
            int[] erro = new int[1];
            int   CancelID;

            try
            {
                TheGrp.AsyncWrite(arryHandleServer, arryVal, 55667788, out CancelID, out erro);
            }
            catch (Exception e)
            {
                System.Windows.Forms.MessageBox.Show(e.ToString());
            }
            if (erro == null)
            {
                erro[0] = 0;
            }
            return(erro);
        }
Exemple #3
0
        /// <summary>
        /// 异步写数据
        /// </summary>
        /// <param name="dataAddress"></param>
        /// <param name="dataValue"></param>
        /// <returns></returns>
        public OperateResult AsyncWriteData(string dataAddress, string dataValue)
        {
            #region 检验

            if (string.IsNullOrEmpty(dataAddress) || string.IsNullOrEmpty(dataValue))
            {
                return(new OperateResult("传入的参数都不能为空"));
            }

            if (_opcServer == null)
            {
                return(new OperateResult("OPCServer未能正确初始化!"));
            }

            if (!_opcServer.IsConnected)
            {
                return(new OperateResult("OPCServer连接错误!"));
            }

            #endregion

            string groupName = "AsyncWriteData";

            OpcGroup group = _opcServer.FindGroupByName(groupName);
            if (group != null)
            {
                _opcServer.RemoveGroup(group);
            }
            group = _opcServer.AddGroup(groupName, 1, false);  //添加组

            string datavalue = dataValue.Split('|')[0];

            WriteCompleteEventHandler writeFinishHandler = WriteFinishHandler;
            IRequest request;

            #region 添加Item及写入Item

            if ((dataAddress.Contains(',')) && (OPCServerName == _RSLinxOPC)) //RSLinx 数组的写入
            {
                //地址前缀,类型,起始位置,长度

                #region RSLinx 数组及地址串

                string[] tags = dataAddress.Split(',');

                if (tags.Length < 3)
                {
                    return(new OperateResult("RSLinx 地址错误"));
                }

                string mainAddress = tags[0];                          //主地址
                string type        = tags[1];                          //类型
                int    beginIndex  = SafeConverter.SafeToInt(tags[2]); //开始索引
                int    length      = SafeConverter.SafeToInt(tags[3]); //长度
                string endStr      = (tags.Length > 4) ? tags[4] : "";

                Guid[]   handels = new Guid[length];
                string[] address = new string[length];
                string[] values  = new string[length];
                for (int i = 0; i < length; i++)
                {
                    handels[i] = Guid.NewGuid();
                    values[i]  = datavalue.Length > i ? datavalue[i].ToString() : "0"; //默认为0
                    if (type.ToLower() == "array")                                     //数组型
                    {
                        address[i] = mainAddress + "[" + (i + beginIndex).ToString() + "]";
                    }
                    else //连续地址
                    {
                        address[i] = mainAddress + type + (i + beginIndex).ToString() + endStr;
                    }
                }

                ItemResult[] itemResults = group.AddItems(address, handels);

                ItemValue[] itemValues = new ItemValue[length];

                for (int i = 0; i < length; i++)
                {
                    itemValues[i] = new ItemValue(itemResults[i])
                    {
                        Value = values[i]
                    };
                }

                group.AsyncWrite(itemValues, handels, writeFinishHandler, out request);

                #endregion
            }
            else  //正常类型
            {
                Guid[]       handel      = new[] { Guid.NewGuid() };
                ItemResult[] itemResults = group.AddItems(new[] { dataAddress }, handel);

                ItemValue itemValue = new ItemValue(itemResults[0])
                {
                    Value = datavalue,
                };
                group.AsyncWrite(new ItemValue[] { itemValue }, handel, writeFinishHandler, out request);
            }

            #endregion

            return(OperateResult.CreateSuccessResult());
        }