/// <summary> /// Converts a register into a word. /// </summary> /// <param name="register">The register.</param> /// <returns></returns> public static ushort GetUInt16(this ModbusObject register) { if (register.Type != ModbusObjectType.HoldingRegister && register.Type != ModbusObjectType.InputRegister) { throw new ArgumentException("Invalid register type"); } return(register.RegisterValue); }
/// <summary> /// Converts a register value into a boolean. /// </summary> /// <param name="obj">The Modbus object.</param> /// <returns><c>false</c> if the value is zero (0), else <c>true</c>.</returns> public static bool GetBool(this ModbusObject obj) { if (obj == null) { throw new ArgumentNullException(nameof(obj)); } return(obj.RegisterValue > 0); }
/// <summary> /// Converts a register value into a byte. /// </summary> /// <param name="register">The register.</param> /// <returns></returns> public static byte GetByte(this ModbusObject register) { if (register.Type != ModbusObjectType.HoldingRegister && register.Type != ModbusObjectType.InputRegister) { throw new ArgumentException("Invalid register type"); } return((byte)register.RegisterValue); }
/// <summary> /// Converts a register into a signed byte. /// </summary> /// <param name="register">The register.</param> /// <returns></returns> public static sbyte GetSByte(this ModbusObject register) { if (register == null) { throw new ArgumentNullException(nameof(register)); } if (register.Type != ModbusObjectType.HoldingRegister && register.Type != ModbusObjectType.InputRegister) { throw new ArgumentException("Invalid register type"); } return((sbyte)register.RegisterValue); }
/// <summary> /// Converts a register into a short. /// </summary> /// <param name="register">The register.</param> /// <returns></returns> public static short GetInt16(this ModbusObject register) { if (register.Type != ModbusObjectType.HoldingRegister && register.Type != ModbusObjectType.InputRegister) { throw new ArgumentException("Invalid register type"); } byte[] blob = new[] { register.HiByte, register.LoByte }; if (BitConverter.IsLittleEndian) { Array.Reverse(blob); } return(BitConverter.ToInt16(blob, 0)); }
/// <summary> /// Sets a holding register of a device. /// </summary> /// <param name="deviceId">The device id.</param> /// <param name="register">The register.</param> public void SetHoldingRegister(byte deviceId, ModbusObject register) { try { logger?.LogTrace("ModbusServer.SetHoldingRegister(byte, ModbusObject) enter"); CheckDisposed(); if (register.Type != ModbusObjectType.HoldingRegister) { throw new ArgumentException("Invalid register type set"); } SetHoldingRegister(deviceId, register.Address, register.RegisterValue); } finally { logger?.LogTrace("ModbusServer.SetHoldingRegister(byte, ModbusObject) leave"); } }
/// <summary> /// Sets a discrete input of a device. /// </summary> /// <param name="deviceId">The device id.</param> /// <param name="discreteInput">The discrete input to set.</param> public void SetDiscreteInput(byte deviceId, ModbusObject discreteInput) { try { logger?.LogTrace("ModbusServer.SetDiscreteInput(byte, ModbusObject) enter"); CheckDisposed(); if (discreteInput.Type != ModbusObjectType.DiscreteInput) { throw new ArgumentException("Invalid input type set"); } SetDiscreteInput(deviceId, discreteInput.Address, discreteInput.BoolValue); } finally { logger?.LogTrace("ModbusServer.SetDiscreteInput(byte, ModbusObject) leave"); } }
/// <summary> /// Sets the status of a coild to a device. /// </summary> /// <param name="deviceId">The device id.</param> /// <param name="coil">The coil.</param> public void SetCoil(byte deviceId, ModbusObject coil) { try { logger?.LogTrace("ModbusServer.SetCoil(byte, ModbusObject) enter"); CheckDisposed(); if (coil.Type != ModbusObjectType.Coil) { throw new ArgumentException("Invalid coil type set"); } SetCoil(deviceId, coil.Address, coil.BoolValue); } finally { logger?.LogTrace("ModbusServer.SetCoil(byte, ModbusObject) leave"); } }