Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        /// <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));
        }
Exemplo n.º 6
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");
            }
        }
Exemplo n.º 7
0
        /// <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");
            }
        }
Exemplo n.º 8
0
        /// <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");
            }
        }