/// <summary> /// 从三菱PLC中读取想要的数据,返回读取结果 /// </summary> /// <param name="address">读取地址,格式为"M100","D100","W1A0"</param> /// <param name="length">读取的数据长度,字最大值960,位最大值7168</param> /// <returns>带成功标志的结果数据对象</returns> /// <remarks> /// 地址支持的列表如下: /// <list type="table"> /// <listheader> /// <term>地址名称</term> /// <term>示例</term> /// <term>地址范围</term> /// <term>地址进制</term> /// </listheader> /// <item> /// <term>数据寄存器</term> /// <term>D100,D200</term> /// <term>D0-D511,D8000-D8255</term> /// <term>10</term> /// </item> /// <item> /// <term>定时器的值</term> /// <term>T10,T20</term> /// <term>T0-T255</term> /// <term>10</term> /// </item> /// <item> /// <term>计数器的值</term> /// <term>C10,C20</term> /// <term>C0-C199,C200-C255</term> /// <term>10</term> /// </item> /// </list> /// </remarks> /// <example> /// 假设起始地址为D100,D100存储了温度,100.6℃值为1006,D101存储了压力,1.23Mpa值为123,D102,D103存储了产量计数,读取如下: /// <code lang="cs" source="HslCommunication_Net45.Test\Documentation\Samples\Profinet\MelsecAscii.cs" region="ReadExample2" title="Read示例" /> /// 以下是读取不同类型数据的示例 /// <code lang="cs" source="HslCommunication_Net45.Test\Documentation\Samples\Profinet\MelsecAscii.cs" region="ReadExample1" title="Read示例" /> /// </example> public override OperateResult <byte[]> Read(string address, ushort length) { // 获取指令 OperateResult <byte[]> command = MelsecHelper.FxBuildReadWordCommand(address, length); if (!command.IsSuccess) { return(OperateResult.CreateFailedResult <byte[]>(command)); } // 核心交互 OperateResult <byte[]> read = ReadBase(command.Content); if (!read.IsSuccess) { return(OperateResult.CreateFailedResult <byte[]>(read)); } // 反馈检查 OperateResult ackResult = CheckPlcReadResponse(read.Content); if (!ackResult.IsSuccess) { return(OperateResult.CreateFailedResult <byte[]>(ackResult)); } // 数据提炼 return(ExtractActualData(read.Content)); }