public CoolantFlowMessage(byte[] payload)
        {
            payload.RequireBytes(RequireBytes);

            BatteryCoolantFlowRate    = new LitersPerMinute(BitArrayConverter.ToUInt16(payload, 0, 9) * 0.1m);
            PowerTrainCoolantFlowRate = new LitersPerMinute(BitArrayConverter.ToUInt16(payload, 22, 9) * 0.1m);
        }
        public ChargeDischargeMessage(byte[] payload)
        {
            payload.RequireBytes(RequireBytes);

            TotalDischarge = new KiloWattHour(BitArrayConverter.ToUInt32(payload, 0, 32) * 0.001m);
            TotalCharge    = new KiloWattHour(BitArrayConverter.ToUInt32(payload, 32, 32) * 0.001m);
        }
        public SpeedMessage(byte[] payload)
        {
            payload.RequireBytes(RequireBytes);

            SignedSpeed = new KilometerPerHour(BitArrayConverter.ToUInt16(payload, 12, 12) * 0.08m - 40m);
            UISpeed     = new KilometerPerHour(BitArrayConverter.ToUInt16(payload, 24, 8));
        }
        public PowerLimitsMessage(byte[] payload)
        {
            payload.RequireBytes(RequireBytes);

            RegenPowerLimit     = new KiloWatt(BitArrayConverter.ToUInt16(payload, 0, 16) * 0.01m);
            DischargePowerLimit = new KiloWatt(BitArrayConverter.ToUInt16(payload, 16, 16) * 0.01m);
        }
Exemple #5
0
        public FrontTorqueMessage(byte[] payload)
        {
            payload.RequireBytes(RequireBytes);

            FrontTorqueRequest = new NewtonMeter(BitArrayConverter.ToInt16(payload, 12, 13) * 2m);
            FrontTorque        = new NewtonMeter(BitArrayConverter.ToInt16(payload, 27, 13) * 2m);
            FrontAxleRpm       = new RevolutionsPerMinute(BitArrayConverter.ToInt16(payload, 40, 16) * 0.1m);
        }
        public FastChargeLimitsMessage(byte[] payload)
        {
            payload.RequireBytes(RequireBytes);

            FastChargePowerLimit   = new KiloWatt(Math.Round(BitArrayConverter.ToUInt16(payload, 0, 13) * 0.06226m, 4));
            FastChargeCurrentLimit = new Ampere(Math.Round(BitArrayConverter.ToUInt16(payload, 16, 13) * 0.073242m, 2));
            FastChargeMaxVoltage   = new Volt(Math.Round(BitArrayConverter.ToUInt16(payload, 32, 13) * 0.073242m, 2));
            FastChargeMinVoltage   = new Volt(Math.Round(BitArrayConverter.ToUInt16(payload, 48, 13) * 0.073242m, 2));
        }
        public StateOfChargeMessage(byte[] payload)
        {
            payload.RequireBytes(RequireBytes);

            StateOfChargeUI  = new Percent(BitArrayConverter.ToUInt16(payload, 0, 10) * 0.1m);
            StateOfChargeMin = new Percent(BitArrayConverter.ToUInt16(payload, 10, 10) * 0.1m);
            StateOfChargeMax = new Percent(BitArrayConverter.ToUInt16(payload, 20, 10) * 0.1m);
            StateOfChargeAvg = new Percent(BitArrayConverter.ToUInt16(payload, 30, 10) * 0.1m);
        }
        public TemperatureMessage(byte[] payload)
        {
            payload.RequireBytes(RequireBytes);

            CoolantTempBatteryInlet    = new Celsius(BitArrayConverter.ToUInt16(payload, 0, 10) * 0.125m - 40m);
            CoolantTempPowerTrainInlet = new Celsius(BitArrayConverter.ToUInt16(payload, 10, 10) * 0.125m - 40m);
            AmbientTempRaw             = new Celsius(BitArrayConverter.ToUInt16(payload, 24, 8) * 0.5m - 40m);
            AmbientTempFiltered        = new Celsius(BitArrayConverter.ToUInt16(payload, 40, 8) * 0.5m - 40m);
        }
        public BatteryPowerMessage(byte[] payload)
        {
            payload.RequireBytes(RequireBytes);

            BatteryVoltage       = new Volt(BitArrayConverter.ToUInt16(payload, 0, 16) / 100.0m);
            BatteryCurrentSmooth = new Ampere(BitArrayConverter.ToInt16(payload, 16, 15) * -0.01m);
            BatteryCurrentRaw    = new Ampere(BitArrayConverter.ToInt16(payload, 32, 16) * -0.05m + 500m);
            ChargeTimeRemaining  = TimeSpan.FromMinutes(BitArrayConverter.ToUInt16(payload, 48, 12));
        }
Exemple #10
0
        public BatteryCapacityMessage(byte[] payload)
        {
            payload.RequireBytes(RequireBytes);

            FullBatteryCapacity       = new KiloWattHour(BitArrayConverter.ToUInt16(payload, 0, 10) * 0.1m);
            RemainingBatteryCapacity  = new KiloWattHour(BitArrayConverter.ToUInt16(payload, 10, 10) * 0.1m);
            ExpectedRemainingCapacity = new KiloWattHour(BitArrayConverter.ToUInt16(payload, 20, 10) * 0.1m);
            IdealRemaining            = new KiloWattHour(BitArrayConverter.ToUInt16(payload, 30, 10) * 0.1m);
            ToCompleteCharge          = new KiloWattHour(BitArrayConverter.ToUInt16(payload, 40, 10) * 0.1m);
            EnergyBuffer = new KiloWattHour(BitArrayConverter.ToUInt16(payload, 50, 10) * 0.1m);
        }
        public BatteryInfoMessage(byte[] payload)
        {
            payload.RequireBytes(RequireBytes);

            BmsNumberOfContactors = BitArrayConverter.ToUInt16(payload, 8, 3);
            BmsState                = BitArrayConverter.ToUInt16(payload, 11, 4);
            IsolationResistance     = new KiloOhm(BitArrayConverter.ToInt16(payload, 19, 10));
            BmsChargeStatus         = BitArrayConverter.ToUInt16(payload, 32, 3);
            BmsChargePowerAvailable = new KiloWatt(BitArrayConverter.ToUInt16(payload, 38, 11) * 0.125m);
            MinBatteryTemperature   = new Celsius(BitArrayConverter.ToUInt16(payload, 56, 8) * 0.5m - 40m);
        }
Exemple #12
0
        public void ToUInt32_BitConverter()
        {
            // Arrange
            var array = BitConverter.GetBytes(1234567890);

            // Act
            var result = BitArrayConverter.ToUInt32(array, 0, 32);

            // Assert
            result.Should().Be(1234567890);
        }
Exemple #13
0
        public void ToUInt16_BitConverter()
        {
            // Arrange
            var array = BitConverter.GetBytes(12345);

            // Act
            var result = BitArrayConverter.ToUInt16(array, 0, 16);

            // Assert
            result.Should().Be(12345);
        }