From 4c978050f0419724169a5d511d01ad875c40f8c8 Mon Sep 17 00:00:00 2001 From: dongzeliang <2746733890@qq.com> Date: Wed, 22 Nov 2023 09:41:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/muyu/utils/VehicleUtils.java | 11 ++ .../com/muyu/vehicle/VehicleInstance.java | 49 +++++--- .../com/muyu/vehicle/model/VehicleData.java | 116 +++++++++--------- 3 files changed, 95 insertions(+), 81 deletions(-) diff --git a/src/main/java/com/muyu/utils/VehicleUtils.java b/src/main/java/com/muyu/utils/VehicleUtils.java index 44675d2..931fbde 100644 --- a/src/main/java/com/muyu/utils/VehicleUtils.java +++ b/src/main/java/com/muyu/utils/VehicleUtils.java @@ -79,4 +79,15 @@ public class VehicleUtils { num = (double) Math.round(num * 100) / 100; return BigDecimal.valueOf(num); } + + /** + * 给予开始和结束的值生成数据 + * @param start 起始范围 + * @param end 截止范围 + * @return 返回结果 + */ + public static String genValue(int start, int end){ + Random rand = new Random(); + return String.valueOf(rand.nextInt(start, end)); + } } diff --git a/src/main/java/com/muyu/vehicle/VehicleInstance.java b/src/main/java/com/muyu/vehicle/VehicleInstance.java index e46b336..9237f44 100644 --- a/src/main/java/com/muyu/vehicle/VehicleInstance.java +++ b/src/main/java/com/muyu/vehicle/VehicleInstance.java @@ -24,6 +24,8 @@ import java.util.Objects; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledFuture; +import static com.muyu.common.SystemConstant.powerConsumption; + /** * @author DongZeLiang * @version 1.0 @@ -36,28 +38,22 @@ import java.util.concurrent.ScheduledFuture; @AllArgsConstructor public class VehicleInstance { + /** + * 路径队列 + */ + private final LinkedBlockingQueue positionQueue = new LinkedBlockingQueue<>(); /** * 车辆 */ private Vehicle vehicle; - - /** * 实例数据 */ private VehicleData vehicleData; - /** * 上一个定位点 */ private PositionModel lastPosition; - - /** - * 路径队列 - */ - private final LinkedBlockingQueue positionQueue = new LinkedBlockingQueue<>(); - - /** * 车辆工作线程 */ @@ -87,11 +83,11 @@ public class VehicleInstance { * 获取当前车辆VIN * @return VIN */ - public String getVin(){ + public String getVin() { return this.vehicle.getVin(); } - public void sendMsg(String msg){ + public void sendMsg(String msg) { // 创建消息并设置 QoS MqttMessage message = new MqttMessage(msg.getBytes()); message.setQos(this.mqttProperties.getQos()); @@ -103,7 +99,7 @@ public class VehicleInstance { } } - public void initCline(){ + public void initCline() { try { client = new MqttClient(mqttProperties.getBroker(), mqttProperties.getClientId(), new MemoryPersistence()); // 连接参数 @@ -128,7 +124,7 @@ public class VehicleInstance { /** * 初始化线程 */ - public void initVehicleThread(){ + public void initVehicleThread() { VehicleThread vehicleThread = new VehicleThread(); vehicleThread.setVehicleInstance(this); this.setVehicleThread(vehicleThread); @@ -141,28 +137,28 @@ public class VehicleInstance { /** * 开始上报线程 */ - public void startSend(){ + public void startSend() { this.vehicleThread.resume(); } /** * 暂停上报线程 */ - public void pauseSend(){ + public void pauseSend() { this.vehicleThread.pause(); } /** * 结束发送 */ - public void stopSend(){ + public void stopSend() { this.vehicleThread.stop(); } /** * 取消执行 */ - public void cancelExecution () { + public void cancelExecution() { scheduledFuture.cancel(true); this.vehicleThread = null; this.scheduledFuture = null; @@ -171,7 +167,11 @@ public class VehicleInstance { /** * 模拟车辆数据 */ - public void imitateData () { + public void imitateData() { + String gear = this.vehicleData.getGear(); + if (!gear.equals("D")){ + // TODO 不为D档,则无法启动车辆 + } // 获取上一次定位点 PositionModel lastPositionModel = this.lastPosition; // 获取当前定位点 @@ -192,10 +192,19 @@ public class VehicleInstance { // 百公里占比 BigDecimal hundredKMScale = distance.divide(SystemConstant.hundredKilometers).setScale(3, RoundingMode.HALF_UP); // 使用电量 - BigDecimal powerUsage = SystemConstant.powerConsumption.multiply(hundredKMScale) + BigDecimal powerUsage = powerConsumption.multiply(hundredKMScale) .multiply(batteryFloat) .setScale(2, RoundingMode.HALF_UP); + // 剩余电量 vehicleData.setRemainingBattery(vehicleData.getRemainingBattery().subtract(powerUsage)); + // 百公里消耗量 + vehicleData.setFuelConsumptionRate( + powerConsumption.multiply(batteryFloat).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_UP).toString() + ); + // 计算总速度 + vehicleData.setSpeed( + distance.divide(new BigDecimal(10)).multiply(new BigDecimal("3.6")).setScale(2, RoundingMode.HALF_UP).toString() + ); } diff --git a/src/main/java/com/muyu/vehicle/model/VehicleData.java b/src/main/java/com/muyu/vehicle/model/VehicleData.java index 1f9b83e..fc30f2f 100644 --- a/src/main/java/com/muyu/vehicle/model/VehicleData.java +++ b/src/main/java/com/muyu/vehicle/model/VehicleData.java @@ -2,6 +2,7 @@ package com.muyu.vehicle.model; import com.muyu.domain.Vehicle; +import com.muyu.utils.VehicleUtils; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -9,6 +10,8 @@ import lombok.NoArgsConstructor; import java.math.BigDecimal; +import static com.muyu.utils.VehicleUtils.genValue; + /** * @author 牧鱼 * @Classname VehicleData @@ -396,74 +399,65 @@ public class VehicleData { } /** - VIN - vin; - 行驶路线 - drivingRoute; - 经度 - longitude; - 维度 - latitude; - 速度 - speed; - 里程 - mileage; - 总电压 - voltage; - 总电流 - current; - 绝缘电阻 - resistance; - 档位 - gear; - 加速踏板行程值 - accelerationPedal; - 制动踏板行程值 - brakePedal; - 燃料消耗率 - fuelConsumptionRate; + * 模拟基础项 */ + public void imitateBase(){ + // 总电压 + this.voltage = genValue(110, 750); + // 总电流 + this.current = genValue(3, 50); + // 绝缘电阻 + this.resistance = genValue(0,30000); + // 加速踏板行程值 + this.accelerationPedal = genValue(0, 10); + // 制动踏板行程值 + this.brakePedal = genValue(0, 10); + } + /** - 电机控制器温度 - motorControllerTemperature; - 电机转速 - motorSpeed; - 电机转矩 - motorTorque; - 电机温度 - motorTemperature; - 电机电压 - motorVoltage; - 电机电流 - motorCurrent; + * 模拟电机数据 */ + public void imitateMotor(){ + // 电机控制器温度 + this.motorControllerTemperature = genValue(0, 100); + // 电机转速 + this.motorSpeed = genValue(0, 99999); + // 电机转矩 + this.motorTorque = genValue(0, 1000); + // 电机温度 + this.motorTemperature = genValue(0, 150); + // 电机电压 + this.motorVoltage = genValue(110, 300); + // 电机电流 + this.motorCurrent = genValue(0, 15000); + } /** - 动力电池剩余电量SOC - remainingBattery; - 当前状态允许的最大反馈功率 - maximumFeedbackPower; - 当前状态允许最大放电功率 - maximumDischargePower; - BMS自检计数器 - selfCheckCounter; - 动力电池充放电电流 - totalBatteryCurrent; - 动力电池负载端总电压V3 - totalBatteryVoltage; - 单次最大电压 - singleBatteryMaxVoltage; - 单体电池最低电压 - singleBatteryMinVoltage; - 单体电池最高温度 - singleBatteryMaxTemperature; - 单体电池最低温度 - singleBatteryMinTemperature; - 动力电池可用容量 - availableBatteryCapacity; + * 模拟电池包数据 */ - + public void imitateBatteryPack(){ + // 当前状态允许的最大反馈功率 + this.maximumFeedbackPower = genValue(0, 100); + // 当前状态允许最大放电功率 + this.maximumDischargePower = genValue(0, 100); + // BMS自检计数器 + this.selfCheckCounter = genValue(0, 15); + // 动力电池充放电电流 + this.totalBatteryCurrent = genValue(0, 15); + // 动力电池负载端总电压V3 + this.totalBatteryVoltage = genValue(220, 750); + // 单体电池最高电压 + this.singleBatteryMaxVoltage = genValue(3, 5); + // 单体电池最低电压 + this.singleBatteryMinVoltage = genValue(3, 5); + // 单体电池最高温度 + this.singleBatteryMaxTemperature = genValue(0, 100); + // 单体电池最低温度 + this.singleBatteryMinTemperature = genValue(0, 100); + // 动力电池可用容量 + this.availableBatteryCapacity = genValue(0,100 ); + } /** 车辆状态 vehicleStatus;