示例#1
0
        /// <summary>
        /// Check if all registers from (starting_address + quantity_of_registers) are present in device database
        /// </summary>
        /// <param name="unitID">Unit ID</param>
        /// <param name="table">Tabella del database modbus</param>
        /// <param name="startingAddress">Starting address (offset) in database</param>
        /// <param name="numRegisters">Quantity of registers to read/write</param>
        /// <returns>True if register are present, otherwhise False</returns>
        bool IsAllRegistersPresent(byte unitID, ModbusDBTables table, ushort startingAddress, ushort numRegisters)
        {
            bool result = true;

            switch (table)
            {
            case ModbusDBTables.DISCRETE_INPUTS_REGISTERS:
                try
                {
                    ModbusDatabase.Single(x => x.UnitID == unitID).DiscreteInputs.ToList().GetRange(startingAddress, numRegisters);
                }
                catch
                {
                    result = false;
                }
                break;

            case ModbusDBTables.COIL_REGISTERS:
                try
                {
                    ModbusDatabase.Single(x => x.UnitID == unitID).Coils.ToList().GetRange(startingAddress, numRegisters);
                }
                catch
                {
                    result = false;
                }
                break;

            case ModbusDBTables.INPUT_REGISTERS:
                try
                {
                    ModbusDatabase.Single(x => x.UnitID == unitID).InputRegisters.ToList().GetRange(startingAddress, numRegisters);
                }
                catch
                {
                    result = false;
                }
                break;

            case ModbusDBTables.HOLDING_REGISTERS:
                try
                {
                    ModbusDatabase.Single(x => x.UnitID == unitID).HoldingRegisters.ToList().GetRange(startingAddress, numRegisters);
                }
                catch
                {
                    result = false;
                }
                break;

            default:
                result = false;
                break;
            }

            return(result);
        }
示例#2
0
        /// <summary>
        /// Check if all registers from (starting_address + quantity_of_registers) are present in device database
        /// </summary>
        /// <param name="unit_id">Unit ID</param>
        /// <param name="table">Tabella del database modbus</param>
        /// <param name="starting_address">Starting address (offset) in database</param>
        /// <param name="quantity_of_registers">Quantity of registers to read/write</param>
        /// <returns>True if register are present, otherwhise False</returns>
        bool IsAllRegistersPresent(byte unit_id, ModbusDBTables table, ushort starting_address, ushort quantity_of_registers)
        {
            bool ret = true;

            switch (table)
            {
                case ModbusDBTables.DISCRETE_INPUTS_REGISTERS:
                    try
                    {
                        modbus_db.Single(x => x.UnitID == unit_id).DiscreteInputs.ToList().GetRange(starting_address, quantity_of_registers);
                    }
                    catch
                    {
                        ret = false;
                    }
                    break;

                case ModbusDBTables.COIL_REGISTERS:
                    try
                    {
                        modbus_db.Single(x => x.UnitID == unit_id).Coils.ToList().GetRange(starting_address, quantity_of_registers);
                    }
                    catch
                    {
                        ret = false;
                    }
                    break;

                case ModbusDBTables.INPUT_REGISTERS:
                    try
                    {
                        modbus_db.Single(x => x.UnitID == unit_id).InputRegisters.ToList().GetRange(starting_address, quantity_of_registers);
                    }
                    catch
                    {
                        ret = false;
                    }
                    break;

                case ModbusDBTables.HOLDING_REGISTERS:
                    try
                    {
                        modbus_db.Single(x => x.UnitID == unit_id).HoldingRegisters.ToList().GetRange(starting_address, quantity_of_registers);
                    }
                    catch
                    {
                        ret = false;
                    }
                    break;

                default:
                    ret = false;
                    break;
            }

            return ret;
        }