/// <summary> /// 读取西门子的地址的Wstring类型 Unicode字符串信息,这个信息是和西门子绑定在一起,长度随西门子的信息动态变化的 /// </summary> /// <param name="address"></param> /// <returns></returns> public OperateResult <string> ReadUnicodeWString(string address) { //最大字长度 UInt16 MaxWordLength = 0; //当前字实际长度 UInt16 CurrentWordLength = 0; var read = Read(address, 4); if (!read.IsSuccess) { return(OperateResult.CreateFailedResult <string>(read)); } MaxWordLength = (UInt16)(read.Content[0] * 256 + read.Content[1]); CurrentWordLength = (UInt16)(read.Content[2] * 256 + read.Content[3]); if (MaxWordLength == 0 || MaxWordLength == 65535) { return(new OperateResult <string>("Value in plc is not Wstring type")); } //此时判断实际字长,最大不能超过98, if (CurrentWordLength > 98) { return(new OperateResult <string>("The Wstring length exceeds the maximum length(100Word) defined in PLC")); } //实际长度在200字节以下 UInt16 CurrentByteLength = (UInt16)(CurrentWordLength * 2); //读取实际长度 var readWString = Read(address, (UInt16)(CurrentByteLength + 4)); if (!readWString.IsSuccess) { return(OperateResult.CreateFailedResult <string>(readWString)); } return(ByteTransformHelper.GetResultFromBytes <string>(this.Read(address, (UInt16)(CurrentByteLength + 4)), delegate(byte[] m) { return ByteTransform.TransString(m, 4, m.Length - 4, Encoding.BigEndianUnicode); })); }
/// <summary> /// 读取PLC的double类型的数组 -> An array that reads the double type of the PLC /// </summary> /// <param name="address">节点的名称 -> Name of the node </param> /// <param name="length">数组长度 -> Array length </param> /// <returns>带有结果对象的结果数据 -> Result data with result info </returns> /// <example> /// 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: /// <code lang="cs" source="HslCommunication_Net45.Test\Documentation\Samples\Core\NetworkDeviceBase.cs" region="ReadDoubleArray" title="Double类型示例" /> /// </example> public override OperateResult <double[]> ReadDouble(string address, ushort length) { return(ByteTransformHelper.GetResultFromBytes(Read(address, length), m => ByteTransform.TransDouble(m, 0, length))); }
/// <summary> /// 读取PLC的ulong类型的数组 -> An array that reads the ULONG type of the PLC /// </summary> /// <param name="address">节点的名称 -> Name of the node </param> /// <param name="length">数组长度 -> Array length </param> /// <returns>带有结果对象的结果数据 -> Result data with result info </returns> /// <example> /// 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: /// <code lang="cs" source="HslCommunication_Net45.Test\Documentation\Samples\Core\NetworkDeviceBase.cs" region="ReadUInt64Array" title="UInt64类型示例" /> /// </example> public override OperateResult <ulong[]> ReadUInt64(string address, ushort length) { return(ByteTransformHelper.GetResultFromBytes(Read(address, length), m => ByteTransform.TransUInt64(m, 0, length))); }
/// <summary> /// 读取设备的字符串数据,编码为ASCII /// </summary> /// <param name="address">起始地址</param> /// <param name="length">地址长度</param> /// <returns>带成功标志的结果数据对象</returns> /// <example> /// 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: /// <code lang="cs" source="HslCommunication_Net45.Test\Documentation\Samples\Core\NetworkDeviceBase.cs" region="ReadString" title="String类型示例" /> /// </example> public OperateResult <string> ReadString(string address, ushort length) { return(ByteTransformHelper.GetResultFromBytes(Read(address, length), m => ByteTransform.TransString(m, 0, m.Length, Encoding.ASCII))); }
/// <summary> /// 读取设备的double类型的数组 /// </summary> /// <param name="address">起始地址</param> /// <param name="length">数组长度</param> /// <returns>带成功标志的结果数据对象</returns> /// <example> /// 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: /// <code lang="cs" source="HslCommunication_Net45.Test\Documentation\Samples\Core\NetworkDeviceBase.cs" region="ReadDoubleArray" title="Double类型示例" /> /// </example> public virtual OperateResult <double[]> ReadDouble(string address, ushort length) { return(ByteTransformHelper.GetResultFromBytes(Read(address, (ushort)(length * WordLength * 4)), m => ByteTransform.TransDouble(m, 0, length))); }
/// <summary> /// 读取设备的float类型的数组 /// </summary> /// <param name="address">起始地址</param> /// <param name="length">数组长度</param> /// <returns>带成功标志的结果数据对象</returns> /// <example> /// 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: /// <code lang="cs" source="HslCommunication_Net45.Test\Documentation\Samples\Core\NetworkDeviceBase.cs" region="ReadFloatArray" title="Float类型示例" /> /// </example> public virtual OperateResult <float[]> ReadFloat(string address, ushort length) { return(ByteTransformHelper.GetResultFromBytes(Read(address, (ushort)(length * WordLength * 2)), m => ByteTransform.TransSingle(m, 0, length))); }
public override OperateResult <uint[]> ReadUInt32(string address, ushort length) => ByteTransformHelper.GetResultFromBytes <uint[]>(Read(address, length), m => ByteTransform.TransUInt32(m, 0, length));
public override OperateResult <long[]> ReadInt64(string address, ushort length) => ByteTransformHelper.GetResultFromBytes <long[]>(Read(address, length), m => ByteTransform.TransInt64(m, 0, length));
public override OperateResult <float[]> ReadFloat(string address, ushort length) => ByteTransformHelper.GetResultFromBytes <float[]>(Read(address, length), m => ByteTransform.TransSingle(m, 0, length));
/// <summary> /// 读取设备的ulong类型的数组 /// </summary> /// <param name="address">起始地址</param> /// <param name="length">数组长度</param> /// <returns>带成功标志的结果数据对象</returns> public OperateResult <ulong[]> ReadUInt64(string address, ushort length) { return(ByteTransformHelper.GetResultFromBytes(Read(address, (ushort)(length * WordLength * 4)), m => ByteTransform.TransUInt64(m, 0, length))); }
/// <summary> /// 读取设备的int类型的数组 /// </summary> /// <param name="address">起始地址</param> /// <param name="length">数组长度</param> /// <returns>带成功标志的结果数据对象</returns> public OperateResult <int[]> ReadInt32(string address, ushort length) { return(ByteTransformHelper.GetResultFromBytes(Read(address, (ushort)(length * WordLength * 2)), m => ByteTransform.TransInt32(m, 0, length))); }