/// <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)); }