/// <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>
        /// 停止PLC
        /// </summary>
        /// <returns>是否停止成功</returns>
        public OperateResult StopPLC()
        {
            OperateResult <byte[]> operateResult = MelsecFxLinksOverTcp.BuildStop(station, sumCheck, watiingTime);

            if (!operateResult.IsSuccess)
            {
                return(operateResult);
            }
            OperateResult <byte[]> operateResult2 = ReadBase(operateResult.Content);

            if (!operateResult2.IsSuccess)
            {
                return(operateResult2);
            }
            if (operateResult2.Content[0] != 6)
            {
                return(new OperateResult(operateResult2.Content[0], "Stop Faild:" + SoftBasic.ByteToHexString(operateResult2.Content, ' ')));
            }
            return(OperateResult.CreateSuccessResult());
        }
        /// <summary>
        /// 批量写入bool类型的数组,支持的类型为X,Y,S,T,C,具体的地址范围取决于PLC的类型
        /// </summary>
        /// <param name="address">PLC的地址信息</param>
        /// <param name="value">数据信息</param>
        /// <returns>是否写入成功</returns>
        public override OperateResult Write(string address, bool[] value)
        {
            OperateResult <byte[]> operateResult = MelsecFxLinksOverTcp.BuildWriteBoolCommand(station, address, value, sumCheck, watiingTime);

            if (!operateResult.IsSuccess)
            {
                return(operateResult);
            }
            OperateResult <byte[]> operateResult2 = ReadBase(operateResult.Content);

            if (!operateResult2.IsSuccess)
            {
                return(operateResult2);
            }
            if (operateResult2.Content[0] != 6)
            {
                return(new OperateResult(operateResult2.Content[0], "Write Faild:" + SoftBasic.ByteToHexString(operateResult2.Content, ' ')));
            }
            return(OperateResult.CreateSuccessResult());
        }
        /// <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()));
        }