/// <summary> /// 根据读取的地址,长度,是否位读取创建Fins协议的核心报文 /// </summary> /// <param name="address">地址,具体格式请参照示例说明</param> /// <param name="length">读取的数据长度</param> /// <param name="isBit">是否使用位读取</param> /// <returns>带有成功标识的Fins核心报文</returns> public static OperateResult <byte[]> BuildReadCommand(string address, ushort length, bool isBit) { var analysis = OmronFinsNetHelper.AnalysisAddress(address, isBit); if (!analysis.IsSuccess) { return(OperateResult.CreateFailedResult <byte[]>(analysis)); } byte[] _PLCCommand = new byte[8]; _PLCCommand[0] = 0x01; // 读取存储区数据 _PLCCommand[1] = 0x01; if (isBit) { _PLCCommand[2] = analysis.Content1.BitCode; } else { _PLCCommand[2] = analysis.Content1.WordCode; } analysis.Content2.CopyTo(_PLCCommand, 3); _PLCCommand[6] = (byte)(length / 256); // 长度 _PLCCommand[7] = (byte)(length % 256); return(OperateResult.CreateSuccessResult(_PLCCommand)); }
/// <summary> /// 根据写入的地址,数据,是否位写入生成Fins协议的核心报文 /// </summary> /// <param name="address">地址内容,具体格式请参照示例说明</param> /// <param name="value">实际的数据</param> /// <param name="isBit">是否位数据</param> /// <returns>带有成功标识的Fins核心报文</returns> public static OperateResult <byte[]> BuildWriteWordCommand(string address, byte[] value, bool isBit) { var analysis = OmronFinsNetHelper.AnalysisAddress(address, isBit); if (!analysis.IsSuccess) { return(OperateResult.CreateFailedResult <byte[]>(analysis)); } byte[] _PLCCommand = new byte[8 + value.Length]; _PLCCommand[0] = 0x01; _PLCCommand[1] = 0x02; if (isBit) { _PLCCommand[2] = analysis.Content1.BitCode; } else { _PLCCommand[2] = analysis.Content1.WordCode; } analysis.Content2.CopyTo(_PLCCommand, 3); if (isBit) { _PLCCommand[6] = (byte)(value.Length / 256); _PLCCommand[7] = (byte)(value.Length % 256); } else { _PLCCommand[6] = (byte)(value.Length / 2 / 256); _PLCCommand[7] = (byte)(value.Length / 2 % 256); } value.CopyTo(_PLCCommand, 8); return(OperateResult.CreateSuccessResult(_PLCCommand)); }