/// <summary>
        /// 从三菱PLC中批量读取位软元件,返回读取结果
        /// </summary>
        /// <param name="address">起始地址</param>
        /// <param name="length">读取的长度</param>
        /// <returns>带成功标志的结果数据对象</returns>
        /// <remarks>
        /// 地址支持的列表如下:
        /// <list type="table">
        ///   <listheader>
        ///     <term>地址名称</term>
        ///     <term>示例</term>
        ///     <term>地址范围</term>
        ///     <term>地址进制</term>
        ///   </listheader>
        ///   <item>
        ///     <term>内部继电器</term>
        ///     <term>M100,M200</term>
        ///     <term>M0-M1023,M8000-M8255</term>
        ///     <term>10</term>
        ///   </item>
        ///   <item>
        ///     <term>输入继电器</term>
        ///     <term>X100,X1A0</term>
        ///     <term>X0-X177</term>
        ///     <term>8</term>
        ///   </item>
        ///   <item>
        ///     <term>输出继电器</term>
        ///     <term>Y10,Y20</term>
        ///     <term>Y0-Y177</term>
        ///     <term>8</term>
        ///   </item>
        ///   <item>
        ///     <term>步进继电器</term>
        ///     <term>S100,S200</term>
        ///     <term>S0-S999</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-C255</term>
        ///     <term>10</term>
        ///   </item>
        /// </list>
        /// </remarks>
        /// <example>
        ///  <code lang="cs" source="HslCommunication_Net45.Test\Documentation\Samples\Profinet\MelsecAscii.cs" region="ReadBool" title="Bool类型示例" />
        /// </example>
        public OperateResult <bool[]> ReadBool(string address, ushort length)
        {
            //获取指令
            OperateResult <byte[], int> command = MelsecHelper.FxBuildReadBoolCommand(address, length);

            if (!command.IsSuccess)
            {
                return(OperateResult.CreateFailedResult <bool[]>(command));
            }

            // 核心交互
            OperateResult <byte[]> read = ReadBase(command.Content1);

            if (!read.IsSuccess)
            {
                return(OperateResult.CreateFailedResult <bool[]>(read));
            }

            // 结果严重
            OperateResult ackResult = CheckPlcReadResponse(read.Content);

            if (!ackResult.IsSuccess)
            {
                return(OperateResult.CreateFailedResult <bool[]>(ackResult));
            }

            // 提取真实的数据
            OperateResult <byte[]> extraResult = ExtractActualData(read.Content);

            if (!extraResult.IsSuccess)
            {
                return(OperateResult.CreateFailedResult <bool[]>(extraResult));
            }

            // 转化bool数组
            bool[] data  = new bool[length];
            bool[] array = BasicFramework.SoftBasic.ByteToBoolArray(extraResult.Content, extraResult.Content.Length * 8);
            for (int i = 0; i < length; i++)
            {
                array[i] = array[i + command.Content2];
            }

            return(OperateResult.CreateSuccessResult(data));
        }