/// <summary> /// 反格式化 /// </summary> /// <param name="messageBytes">获取的信息</param> /// <param name="flag">当前反格式化的位置</param> /// <returns>反格式化的信息</returns> public override IOutputStruct Unformat(byte[] messageBytes, ref int flag) { var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); var startAddress = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag); var writeCount = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag); return(new SetSystemTimeModbusOutputStruct(slaveAddress, functionCode, startAddress, writeCount)); }
/// <summary> /// 反格式化 /// </summary> /// <param name="messageBytes">设备返回的信息</param> /// <param name="pos">当前反格式化的位置</param> /// <returns>反格式化的信息</returns> public override IOutputStruct Unformat(byte[] messageBytes, ref int pos) { var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref pos); var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref pos); var dataCount = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref pos); var dataValue = new byte[dataCount]; Array.Copy(messageBytes, 3, dataValue, 0, dataCount); return(new ReadDataModbusOutputStruct(slaveAddress, functionCode, dataCount, dataValue)); }
/// <summary> /// 反格式化 /// </summary> /// <param name="messageBytes">设备返回的信息</param> /// <param name="flag">当前反格式化的位置</param> /// <returns>反格式化的信息</returns> public override IOutputStruct Unformat(byte[] messageBytes, ref int flag) { var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); var startAddress = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag); var writeValue = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag); var returnValue = functionCode == (byte)ModbusProtocalWriteDataFunctionCode.WriteSingleCoil ? (object)(writeValue == 0xFF00) : writeValue; return(new WriteSingleDataModbusOutputStruct(slaveAddress, functionCode, startAddress, returnValue)); }
/// <summary> /// 构造函数 /// </summary> /// <param name="slaveAddress">从站号</param> /// <param name="startAddress">开始地址</param> /// <param name="writeValue">写入的数据</param> /// <param name="addressTranslator">地址翻译器</param> /// <param name="endian">端格式</param> public WriteDataModbusInputStruct(byte slaveAddress, string startAddress, object[] writeValue, AddressTranslator addressTranslator, Endian endian) { SlaveAddress = slaveAddress; var translateAddress = addressTranslator.AddressTranslate(startAddress, false); FunctionCode = (byte)translateAddress.Area; StartAddress = (ushort)translateAddress.Address; var writeByteValue = ValueHelper.GetInstance(endian).ObjectArrayToByteArray(writeValue); WriteCount = (ushort)(writeByteValue.Length / addressTranslator.GetAreaByteLength(translateAddress.AreaString)); WriteByteCount = (byte)writeByteValue.Length; WriteValue = writeByteValue; }
/// <summary> /// 反格式化 /// </summary> /// <param name="messageBytes">获取的信息</param> /// <param name="flag">当前反格式化的位置</param> /// <returns>反格式化的信息</returns> public override IOutputStruct Unformat(byte[] messageBytes, ref int flag) { var slaveAddress = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); var functionCode = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); var writeByteCount = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); var year = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag); var day = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); var month = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); var hour = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag); var second = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); var minute = ValueHelper.GetInstance(Endian).GetByte(messageBytes, ref flag); var millisecond = ValueHelper.GetInstance(Endian).GetUShort(messageBytes, ref flag); return(new GetSystemTimeModbusOutputStruct(slaveAddress, functionCode, writeByteCount, year, day, month, hour, second, minute, millisecond)); }
/// <summary> /// 构造函数 /// </summary> /// <param name="slaveAddress">从站号</param> /// <param name="startAddress">开始地址</param> /// <param name="writeValue">写入的数据</param> /// <param name="addressTranslator">地址翻译器</param> /// <param name="endian">端格式</param> public WriteSingleDataModbusInputStruct(byte slaveAddress, string startAddress, object writeValue, ModbusTranslatorBase addressTranslator, Endian endian) { SlaveAddress = slaveAddress; var translateAddress = addressTranslator.AddressTranslate(startAddress, false, true); FunctionCode = (byte)translateAddress.Area; StartAddress = (ushort)translateAddress.Address; int a = 0, b = 0; var writeByteValue = FunctionCode == (byte)ModbusProtocalWriteDataFunctionCode.WriteSingleCoil ? ((bool)writeValue ? new byte[] { 0xFF, 0x00 } : new byte[] { 0x00, 0x00 }) : ValueHelper.GetInstance(endian).GetBytes(ushort.Parse(writeValue.ToString())); WriteValue = writeByteValue; }