/// <summary> /// /// </summary> /// <param name="dataAddress"></param> /// <param name="dataValue"></param> /// <returns></returns> public OperateResult SyncWriteData(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 = "SyncWriteData"; 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()); }