/// <summary> /// 批量读取PLC的数据,以字为单位,支持读取X,Y,M,S,D,T,C,具体的地址范围需要根据PLC型号来确认 /// </summary> /// <param name="address">地址信息</param> /// <param name="length">数据长度</param> /// <returns>读取结果信息</returns> public override OperateResult <byte[]> Read(string address, ushort length) { OperateResult <byte[]> operateResult = MelsecFxLinksOverTcp.BuildReadCommand(station, address, length, isBool: false, sumCheck, watiingTime); if (!operateResult.IsSuccess) { return(OperateResult.CreateFailedResult <byte[]>(operateResult)); } OperateResult <byte[]> operateResult2 = ReadBase(operateResult.Content); if (!operateResult2.IsSuccess) { return(OperateResult.CreateFailedResult <byte[]>(operateResult2)); } if (operateResult2.Content[0] != 2) { return(new OperateResult <byte[]>(operateResult2.Content[0], "Read Faild:" + SoftBasic.ByteToHexString(operateResult2.Content, ' '))); } byte[] array = new byte[length * 2]; for (int i = 0; i < array.Length / 2; i++) { ushort value = Convert.ToUInt16(Encoding.ASCII.GetString(operateResult2.Content, i * 4 + 5, 4), 16); BitConverter.GetBytes(value).CopyTo(array, i * 2); } return(OperateResult.CreateSuccessResult(array)); }
/// <summary> /// 批量读取bool类型数据,支持的类型为X,Y,S,T,C,具体的地址范围取决于PLC的类型 /// </summary> /// <param name="address">地址信息,比如X10,Y17,注意X,Y的地址是8进制的</param> /// <param name="length">读取的长度</param> /// <returns>读取结果信息</returns> public override OperateResult <bool[]> ReadBool(string address, ushort length) { OperateResult <byte[]> operateResult = MelsecFxLinksOverTcp.BuildReadCommand(station, address, length, isBool: true, sumCheck, watiingTime); if (!operateResult.IsSuccess) { return(OperateResult.CreateFailedResult <bool[]>(operateResult)); } OperateResult <byte[]> operateResult2 = ReadBase(operateResult.Content); if (!operateResult2.IsSuccess) { return(OperateResult.CreateFailedResult <bool[]>(operateResult2)); } if (operateResult2.Content[0] != 2) { return(new OperateResult <bool[]>(operateResult2.Content[0], "Read Faild:" + SoftBasic.ByteToHexString(operateResult2.Content, ' '))); } byte[] array = new byte[length]; Array.Copy(operateResult2.Content, 5, array, 0, length); return(OperateResult.CreateSuccessResult(array.Select((byte m) => m == 49).ToArray())); }