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); }
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); }
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(); }
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 }
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); }
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 }