/// <summary> /// 写入自定义的数据到数据内存中去 /// </summary> /// <param name="address">地址</param> /// <param name="value">数据值</param> /// <returns>是否写入成功的结果对象</returns> public override OperateResult Write(string address, byte[] value) { OperateResult <string> analysis = XGBFastEnet.AnalysisAddress(address, false); if (!analysis.IsSuccess) { return(OperateResult.CreateFailedResult <byte[]>(analysis)); } int startIndex = int.Parse(analysis.Content.Remove(0, 3)); switch (analysis.Content[1]) { case 'P': inputBuffer.SetBytes(value, startIndex / 8); return(OperateResult.CreateSuccessResult()); case 'Q': outputBuffer.SetBytes(value, startIndex / 8); return(OperateResult.CreateSuccessResult()); case 'M': memeryBuffer.SetBytes(value, startIndex / 8); return(OperateResult.CreateSuccessResult()); case 'D': dbBlockBuffer.SetBytes(value, startIndex / 8); return(OperateResult.CreateSuccessResult()); default: return(new OperateResult <byte[]>(StringResources.Language.NotSupportedDataType)); } }
/// <summary> /// 读取自定义的寄存器的值 /// </summary> /// <param name="address">起始地址,示例:"I100","M100"</param> /// <param name="length">数据长度</param> /// <exception cref="IndexOutOfRangeException"></exception> /// <returns>byte数组值</returns> public override OperateResult <byte[]> Read(string address, ushort length) { OperateResult <string> analysis = XGBFastEnet.AnalysisAddress(address, true); if (!analysis.IsSuccess) { return(OperateResult.CreateFailedResult <byte[]>(analysis)); } int startIndex = int.Parse(analysis.Content.Remove(0, 3)); switch (analysis.Content[1]) { case 'P': return(OperateResult.CreateSuccessResult(inputBuffer.GetBytes(startIndex / 8, length))); case 'Q': return(OperateResult.CreateSuccessResult(outputBuffer.GetBytes(startIndex / 8, length))); case 'M': return(OperateResult.CreateSuccessResult(memeryBuffer.GetBytes(startIndex / 8, length))); case 'D': return(OperateResult.CreateSuccessResult(dbBlockBuffer.GetBytes(startIndex / 8, length))); default: return(new OperateResult <byte[]>(StringResources.Language.NotSupportedDataType)); } }
/// <summary> /// 写入自定义的数据到数据内存中去 /// </summary> /// <param name="address">地址</param> /// <param name="value">数据值</param> /// <returns>是否写入成功的结果对象</returns> public override OperateResult Write(string address, byte[] value) { OperateResult <string> analysis = XGBFastEnet.AnalysisAddress(address, false); if (!analysis.IsSuccess) { return(OperateResult.CreateFailedResult <byte[]>(analysis)); } int startIndex = CheckAddress(analysis.Content.Substring(3)); switch (analysis.Content[1]) { case 'P': pBuffer.SetBytes(value, startIndex); return(OperateResult.CreateSuccessResult()); case 'Q': qBuffer.SetBytes(value, startIndex); return(OperateResult.CreateSuccessResult()); case 'M': mBuffer.SetBool(value[0] == 1 ? true:false, startIndex); return(OperateResult.CreateSuccessResult()); case 'D': dBuffer.SetBytes(value, startIndex == 0 ? startIndex : startIndex *= 2); return(OperateResult.CreateSuccessResult()); default: return(new OperateResult <byte[]>(StringResources.Language.NotSupportedDataType)); } }
/// <summary> /// 读取自定义的寄存器的值 /// </summary> /// <param name="address">起始地址,示例:"I100","M100"</param> /// <param name="length">数据长度</param> /// <exception cref="IndexOutOfRangeException"></exception> /// <returns>byte数组值</returns> public override OperateResult <byte[]> Read(string address, ushort length) { OperateResult <string> analysis = XGBFastEnet.AnalysisAddress(address, true); if (!analysis.IsSuccess) { return(OperateResult.CreateFailedResult <byte[]>(analysis)); } int startIndex = CheckAddress(analysis.Content.Substring(3)); switch (analysis.Content[1]) { case 'P': return(OperateResult.CreateSuccessResult(pBuffer.GetBytes(startIndex, length))); case 'Q': return(OperateResult.CreateSuccessResult(qBuffer.GetBytes(startIndex, length))); case 'M': return(OperateResult.CreateSuccessResult(SoftBasic.BoolArrayToByte(mBuffer.GetBool(startIndex, length *= 8)))); case 'D': return(OperateResult.CreateSuccessResult(dBuffer.GetBytes(startIndex == 0 ? startIndex : startIndex *= 2, length))); default: return(new OperateResult <byte[]>(StringResources.Language.NotSupportedDataType)); } }
/// <summary> /// 写入自定义的数据到数据内存中去 /// </summary> /// <param name="address">地址</param> /// <param name="value">数据值</param> /// <returns>是否写入成功的结果对象</returns> public override OperateResult Write(string address, byte[] value) { int startIndex = 0; string[] fullAddressSplit = null; string Dmain = string.Empty; string AddressSplit = string.Empty; OperateResult <string> analysis = XGBFastEnet.AnalysisAddress(address, false); if (!analysis.IsSuccess) { return(OperateResult.CreateFailedResult <byte[]>(analysis)); } if (address.IndexOf(".") > 0)//BitOnByte and BitOnWord { Dmain = address.Substring(0, 1); AddressSplit = address.Remove(0, 2); switch (Dmain) { case "I": case "Q": case "U": { fullAddressSplit = AddressSplit.Split(new char[1] { '.' }, 4); startIndex = CheckAddress(fullAddressSplit[3]); break; } default: // MB---DB----- { fullAddressSplit = AddressSplit.Split(new char[1] { '.' }, 2); startIndex = CheckAddress(fullAddressSplit[0]); break; } } } else { startIndex = CheckAddress(analysis.Content.Substring(3)); } switch (analysis.Content[1]) { case 'I': case 'Q': case 'U': case 'P': pBuffer.SetBytes(value, startIndex); return(OperateResult.CreateSuccessResult()); case 'M': mBuffer.SetBool(value[0] == 1 ? true : false, startIndex); return(OperateResult.CreateSuccessResult()); case 'D': dBuffer.SetBytes(value, startIndex == 0 ? startIndex : startIndex *= 2); return(OperateResult.CreateSuccessResult()); default: return(new OperateResult <byte[]>(StringResources.Language.NotSupportedDataType)); } }