internal AnalogOutput(NeuronGroup neuronGroup, int number, ushort registerNumber, NeuronSpiConnector spiConnector, DriverLogger logger)
        {
            _registerNumber = registerNumber;
            _logger         = logger;
            _logger.LogInstantiating(this);
            _neuronGroup  = neuronGroup;
            _spiConnector = spiConnector;

            UniqueIdentifyer = new UniqueIdentifier(neuronGroup, NeuronResource.AnalogOutput, number);

            var vOffset = _spiConnector.GetSingleRegisterValue(neuronGroup, 1021);
            var vDef    = _spiConnector.GetSingleRegisterValue(neuronGroup, 1020);
            var vRef    = _spiConnector.GetSingleRegisterValue(neuronGroup, 1009);
            var vRefInt = _spiConnector.GetSingleRegisterValue(neuronGroup, 5);

            if (vRefInt == null || vRef == null || vOffset == null || vDef == null)
            {
                throw new Exception("failure while getting the calibration Values from the Registers!");
            }

            _vOffset = BitConverter.ToInt16(BitConverter.GetBytes(vOffset.Value), 0);
            _vDev    = BitConverter.ToInt16(BitConverter.GetBytes(vDef.Value), 0);

            _vRealInt = 3.3 * ((double)vRef / (double)vRefInt);
        }
Example #2
0
        internal NeuronGroupBoardBase(NeuronGroup neuronGroup, IBoardInformation boardSystemInformation, NeuronSpiConnector spiConnector, I2CConnector i2CConnector, DriverLogger logger)
        {
            NeuronGroup  = neuronGroup;
            SpiConnector = spiConnector;
            I2CConnector = i2CConnector;
            Logger       = logger;

            _observeLocker = new object();

            _registersToObserve = new Dictionary <ushort, List <IObservedRegisterObject> >();

            BoardSystemInformation = boardSystemInformation;

            DigitalInputDictionary      = new Dictionary <IUniqueIdentifier, IDigitalInput>();
            DigitalOutputsDictionary    = new Dictionary <IUniqueIdentifier, IDigitalOutput>();
            RelayOutputsDictionary      = new Dictionary <IUniqueIdentifier, IDigitalOutput>();
            UserLedsDictionary          = new Dictionary <IUniqueIdentifier, IUserLed>();
            AnalogInputsDictionary      = new Dictionary <IUniqueIdentifier, IAnalogInput>();
            AnalogOutputsDictionary     = new Dictionary <IUniqueIdentifier, IAnalogOutput>();
            OneWireConnectorsDictionary = new Dictionary <IUniqueIdentifier, IOneWireConnector>();
            ModbusConnectorsDictionary  = new Dictionary <IUniqueIdentifier, IModbusConnector>();

            _pollInProgess = false;
            _pollingTimer  = new Timer(PollInformation, new object(), 50, 50);
        }
Example #3
0
        internal UserLed(int ledNumber, NeuronGroup neuronGroup, ushort coilNumber, NeuronSpiConnector neuronSpiConnector, ushort registerNumber, ushort bitNumber)
        {
            UniqueIdentifyer = new UniqueIdentifier(neuronGroup, NeuronResource.UserLed, ledNumber);

            _coilNumber         = coilNumber;
            _neuronSpiConnector = neuronSpiConnector;
            _registerNumber     = registerNumber;
            _bitNumber          = bitNumber;
            _currentValue       = OnOffValue.Unknown;
        }
        public NeuronDevice(bool autoInitialize = false)
        {
            _boards = new List <INeuronGroupBoard>();

            _driverLogger = new DriverLogger(LogLevel.Debug);

            _driverLogger.OnLogInformation += OnLogInformation;

            _spiConnector = new NeuronSpiConnector(_driverLogger);
            _i2CConnector = new I2CConnector(_driverLogger);

            if (autoInitialize)
            {
                Task.Factory?.StartNew(Initialize);
            }
        }
        internal DigitalOutput(int numberOfOutputOnGroup, NeuronGroup neuronGroup, ushort coilNumber, NeuronSpiConnector neuronSpiConnector, DriverLogger logger, DigitalRelayOutputType digitalRelayOutputType, ushort registerNumber, ushort bitNumber)
        {
            _neuronGroup        = neuronGroup;
            _coilNumber         = coilNumber;
            _neuronSpiConnector = neuronSpiConnector;
            _registerNumber     = registerNumber;
            _bitNumber          = bitNumber;
            logger.LogInstantiating(this);


            UniqueIdentifyer = digitalRelayOutputType == DigitalRelayOutputType.DigitalOutput ?
                               new UniqueIdentifier(_neuronGroup, NeuronResource.DigitalOutput, numberOfOutputOnGroup) :
                               new UniqueIdentifier(_neuronGroup, NeuronResource.RelayOutput, numberOfOutputOnGroup);

            UpdateLocalValue();
        }
Example #6
0
 public GeneralFactory(I2CConnector i2CConnector, NeuronSpiConnector spiConnector, DriverLogger logger)
 {
     _i2CConnector = i2CConnector;
     _spiConnector = spiConnector;
     _logger       = logger;
 }
        public UniversalNeuronGroupDiRoBoard(int digitalInCount, int relayOutCount, NeuronGroup neuronGroup, IBoardInformation boardSystemInformation, NeuronSpiConnector spiConnector, I2CConnector i2CConnector, DriverLogger logger) : base(neuronGroup, boardSystemInformation, spiConnector, i2CConnector, logger)
        {
            #region Digital Inputs

            for (ushort i = 0; i < digitalInCount; i++)
            {
                var input = new DigitalInput(i + 1, neuronGroup, 0, i);
                SetObservation(0, input);
                DigitalInputDictionary.Add(input.UniqueIdentifyer, input);
            }

            #endregion Digital Inputs

            #region Relay Outputs

            for (ushort i = 0; i < relayOutCount; i++)
            {
                var digitalOutput = new DigitalOutput(1 + i, neuronGroup, i, spiConnector, logger, DigitalRelayOutputType.RelayOutput, 1, i);
                DigitalOutputsDictionary.Add(digitalOutput.UniqueIdentifyer, digitalOutput);
            }

            #endregion Relay Outputs
        }
Example #8
0
        internal AnalogInput(NeuronGroup neuronGroup, int number, ushort registerNumber, NeuronSpiConnector spiConnector)
        {
            _registerNumber  = registerNumber;
            UniqueIdentifyer = new UniqueIdentifier(neuronGroup, NeuronResource.AnalogInput, number);

            var value = spiConnector.GetSingleRegisterValue(neuronGroup, 1021);

            if (value == null)
            {
                throw new Exception("failure while getting Voffset from registers");
            }


            var vRef = spiConnector.GetSingleRegisterValue(neuronGroup, 1009);

            var vRefInt = spiConnector.GetSingleRegisterValue(neuronGroup, 5);

            var aI1Vdev   = spiConnector.GetSingleRegisterValue(neuronGroup, 1025);
            var ai1Offset = spiConnector.GetSingleRegisterValue(neuronGroup, 1026);

            if (vRefInt == null || vRef == null || aI1Vdev == null || ai1Offset == null)
            {
                throw new Exception("failure while getting the calibration values from the Registers!");
            }

            _aI1Vdev   = BitConverter.ToInt16(BitConverter.GetBytes(aI1Vdev.Value), 0);
            _ai1Offset = BitConverter.ToInt16(BitConverter.GetBytes(ai1Offset.Value), 0);
            _vRealInt  = 3.3 * ((double)vRef / (double)vRefInt);
        }
Example #9
0
        public B10001GroupBoard(NeuronGroup neuronGroup, IBoardInformation boardSystemInformation, NeuronSpiConnector spiConnector, I2CConnector i2CConnector, DriverLogger logger) : base(neuronGroup, boardSystemInformation, spiConnector, i2CConnector, logger)
        {
            #region Digital Inputs

            for (ushort i = 0; i < AnzahlDigitalInputs; i++)
            {
                var input = new DigitalInput(i + 1, neuronGroup, 0, i);
                SetObservation(0, input);
                DigitalInputDictionary.Add(input.UniqueIdentifyer, input);
            }

            #endregion Digital Inputs

            #region Digital Outputs

            for (ushort i = 0; i < AnzahlDigitalOutputs; i++)
            {
                var digitalOutput = new DigitalOutput(1 + i, neuronGroup, i, spiConnector, logger, DigitalRelayOutputType.DigitalOutput, 1, i);
                DigitalOutputsDictionary.Add(digitalOutput.UniqueIdentifyer, digitalOutput);
            }

            #endregion Digital Outputs

            #region One Wire

            var oneWireConnector = new OneWireConnector(neuronGroup, 1, Logger, I2CConnector);
            OneWireConnectorsDictionary.Add(oneWireConnector.UniqueIdentifyer, oneWireConnector);

            #endregion One Wire

            #region User LED's

            for (ushort i = 0; i < UserLedsCount; i++)
            {
                var userLed = new UserLed(i + 1, neuronGroup, (ushort)(8 + i), spiConnector, 20, i);
                UserLedsDictionary.Add(userLed.UniqueIdentifyer, userLed);
            }

            #endregion User LED's

            #region Analog Output

            var analogOutput = new AnalogOutput(neuronGroup, 1, 2, spiConnector, logger);
            AnalogOutputsDictionary.Add(analogOutput.UniqueIdentifyer, analogOutput);

            #endregion Analog Output

            #region Analog Input

            var analogInput = new AnalogInput(neuronGroup, 1, 3, spiConnector);
            SetObservation(3, analogInput);
            AnalogInputsDictionary.Add(analogInput.UniqueIdentifyer, analogInput);

            #endregion Analog Input
        }