Example #1
0
        /// <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);
            }));
        }
Example #2
0
 /// <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)));
 }
Example #3
0
 /// <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)));
 }
Example #4
0
 /// <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)));
 }
Example #5
0
 /// <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)));
 }
Example #6
0
 /// <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)));
 }
Example #7
0
 public override OperateResult <uint[]> ReadUInt32(string address, ushort length) =>
 ByteTransformHelper.GetResultFromBytes <uint[]>(Read(address, length), m => ByteTransform.TransUInt32(m, 0, length));
Example #8
0
 public override OperateResult <long[]> ReadInt64(string address, ushort length) =>
 ByteTransformHelper.GetResultFromBytes <long[]>(Read(address, length), m => ByteTransform.TransInt64(m, 0, length));
Example #9
0
 public override OperateResult <float[]> ReadFloat(string address, ushort length) =>
 ByteTransformHelper.GetResultFromBytes <float[]>(Read(address, length), m => ByteTransform.TransSingle(m, 0, length));
Example #10
0
 /// <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)));
 }
Example #11
0
 /// <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)));
 }