Ejemplo n.º 1
0
        public void SimulateSOCCan()
        {
            CanService.Instance.ConnectViaLoopBack();

            CMU cmu = new CMU(0x203, true);

            Assert.IsNull(cmu.CellTemp);
            Assert.AreEqual(cmu.State, CanReceivingNode.STATE_NA);

            CanPacket PCBcanPacket = new CanPacket(0x203);

            PCBcanPacket.SetInt16(2, 520);  // PCB Temp
            PCBcanPacket.SetInt16(3, 320);  // PCB Temp
            cmu.TestCanPacketReceived(PCBcanPacket);
            Assert.AreEqual(cmu.PCBTemp, 52);
            Assert.AreEqual(cmu.CellTemp, 32);
            Assert.AreEqual(cmu.State, CanReceivingNode.STATE_ON);

            CanPacket Battery1canPacket = new CanPacket(0x204);

            Battery1canPacket.SetUint16(0, 1);
            Battery1canPacket.SetUint16(1, 11);
            Battery1canPacket.SetUint16(2, 21);
            Battery1canPacket.SetUint16(3, 31);
            cmu.TestCanPacketReceived(Battery1canPacket);

            CanPacket Battery2canPacket = new CanPacket(0x205);

            Battery2canPacket.SetUint16(0, 41);
            Battery2canPacket.SetUint16(1, 51);
            Battery2canPacket.SetUint16(2, 61);
            Battery2canPacket.SetUint16(3, 71);
            cmu.TestCanPacketReceived(Battery2canPacket);

            Assert.AreEqual(cmu.Cell0mV, (uint)1);
            Assert.AreEqual(cmu.Cell1mV, (uint)11);
            Assert.AreEqual(cmu.Cell2mV, (uint)21);
            Assert.AreEqual(cmu.Cell3mV, (uint)31);
            Assert.AreEqual(cmu.Cell4mV, (uint)41);
            Assert.AreEqual(cmu.Cell5mV, (uint)51);
            Assert.AreEqual(cmu.Cell6mV, (uint)61);
            Assert.AreEqual(cmu.Cell7mV, (uint)71);
            Assert.AreEqual(cmu.State, CanReceivingNode.STATE_ON);

            CanService.Instance.Disconnect();
        }
Ejemplo n.º 2
0
        private BatteryService()
        {
            BatteryData = new Battery(TimeoutApplies);

            // Set up the heartbeat for the battery so that we are ready to go
            CanPacket ControlPacket500 = new CanPacket(0x500); // 0x500

            ControlPacket500.SetInt16(0, 4098);
            ControlPacket500.SetInt16(2, 1);
            CanService.Instance.SetCanToSendAt10Hertz(ControlPacket500);

            // If we are not currently sending x505s then lets start as the battery likes them
            if (!CanService.Instance.IsPacketCurrent(0x505, 1000))
            {
                CanPacket ControlPacket505 = new CanPacket(0x505); // 0x505
                ControlPacket505.SetInt8(0, 0);
                CanService.Instance.SetCanToSendAt10Hertz(ControlPacket505);
            }
        }
Ejemplo n.º 3
0
        private void SetChargeVoltageError(Battery battery, int voltageError, int cellTempMargin)
        {
            CanPacket ccVEOne = new CanPacket(0x6F6);
            CanPacket ccVETwo = new CanPacket(0x2F6);

            ccVEOne.SetInt16(0, voltageError);
            ccVETwo.SetInt16(0, voltageError);
            ccVEOne.SetInt16(1, cellTempMargin);
            ccVETwo.SetInt16(1, cellTempMargin);

            if (battery.GetBMU(0) != null)
            {
                battery.GetBMU(0).CanPacketReceived(ccVEOne);
            }
            if (battery.GetBMU(1) != null)
            {
                battery.GetBMU(1).CanPacketReceived(ccVETwo);
            }
        }
Ejemplo n.º 4
0
        private void SetCellVoltages(Battery battery, uint voltages)
        {
            uint baseCanId = 0x601;

            CanPacket PCBcanPacket = new CanPacket(baseCanId);

            PCBcanPacket.SetInt16(2, 520);  // PCB Temp
            PCBcanPacket.SetInt16(3, 320);  // PCB Temp

            CanPacket Battery1canPacket1 = new CanPacket(baseCanId + 1);

            Battery1canPacket1.SetUint16(0, voltages);
            Battery1canPacket1.SetUint16(1, voltages);
            Battery1canPacket1.SetUint16(2, voltages);
            Battery1canPacket1.SetUint16(3, voltages);

            CanPacket Battery1canPacket2 = new CanPacket(baseCanId + 2);

            Battery1canPacket2.SetUint16(0, voltages);
            Battery1canPacket2.SetUint16(1, voltages);
            Battery1canPacket2.SetUint16(2, voltages);
            Battery1canPacket2.SetUint16(3, voltages);

            if (battery.GetBMU(0) != null)
            {
                battery.GetBMU(0).GetCMU(0).TestCanPacketReceived(PCBcanPacket);
            }
            if (battery.GetBMU(0) != null)
            {
                battery.GetBMU(0).GetCMU(0).TestCanPacketReceived(Battery1canPacket1);
            }
            if (battery.GetBMU(0) != null)
            {
                battery.GetBMU(0).GetCMU(0).TestCanPacketReceived(Battery1canPacket2);
            }

            baseCanId = 0x201;

            CanPacket PCBcanPacket2 = new CanPacket(baseCanId);

            PCBcanPacket.SetInt16(2, 520);  // PCB Temp
            PCBcanPacket.SetInt16(3, 320);  // PCB Temp

            CanPacket Battery2canPacket1 = new CanPacket(baseCanId + 1);

            Battery2canPacket1.SetUint16(0, voltages);
            Battery2canPacket1.SetUint16(1, voltages);
            Battery2canPacket1.SetUint16(2, voltages);
            Battery2canPacket1.SetUint16(3, voltages);

            CanPacket Battery2canPacket2 = new CanPacket(baseCanId + 2);

            Battery2canPacket2.SetUint16(0, voltages);
            Battery2canPacket2.SetUint16(1, voltages);
            Battery2canPacket2.SetUint16(2, voltages);
            Battery2canPacket2.SetUint16(3, voltages);

            if (battery.GetBMU(1) != null)
            {
                battery.GetBMU(1).GetCMU(0).TestCanPacketReceived(PCBcanPacket2);
            }
            if (battery.GetBMU(1) != null)
            {
                battery.GetBMU(1).GetCMU(0).TestCanPacketReceived(Battery2canPacket1);
            }
            if (battery.GetBMU(1) != null)
            {
                battery.GetBMU(1).GetCMU(0).TestCanPacketReceived(Battery2canPacket2);
            }
        }