Improve electric utils code.
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 12 Apr 2021 07:26:21 +0000 (09:26 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 12 Apr 2021 07:26:21 +0000 (09:26 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
src/charging-station/ChargingStation.ts
src/charging-station/ocpp/1.6/OCPP16RequestService.ts
src/utils/ElectricUtils.ts

index 411c452217e7e166bf77a47a1bf486836054616c..15cac9b530875089e1e83d995ae0985bd7e4aa05 100644 (file)
@@ -322,16 +322,16 @@ export default class ChargingStation {
 
   public addToMessageQueue(message: string): void {
     let dups = false;
-    // Handle dups in buffer
+    // Handle dups in message queue
     for (const bufferedMessage of this.messageQueue) {
-      // Same message
+      // Message already in the queue
       if (message === bufferedMessage) {
         dups = true;
         break;
       }
     }
     if (!dups) {
-      // Buffer message
+      // Queue message
       this.messageQueue.push(message);
     }
   }
index 4e82845307b2dc0ddc6ae77e27d12512911026cb..e9f7ee6dbb6dfe3df4a74542f83605cb967cbe6e 100644 (file)
@@ -2,8 +2,8 @@ import { AuthorizeRequest, OCPP16AuthorizeResponse, OCPP16StartTransactionRespon
 import { HeartbeatRequest, OCPP16BootNotificationRequest, OCPP16IncomingRequestCommand, OCPP16RequestCommand, StatusNotificationRequest } from '../../../types/ocpp/1.6/Requests';
 import { MeterValue, MeterValueLocation, MeterValuePhase, MeterValueUnit, MeterValuesRequest, OCPP16MeterValueMeasurand, OCPP16SampledValue } from '../../../types/ocpp/1.6/MeterValues';
 
+import { ACElectricUtils } from '../../../utils/ElectricUtils';
 import Constants from '../../../utils/Constants';
-import ElectricUtils from '../../../utils/ElectricUtils';
 import MeasurandValues from '../../../types/MeasurandValues';
 import { MessageType } from '../../../types/ocpp/MessageType';
 import { OCPP16BootNotificationResponse } from '../../../types/ocpp/1.6/Responses';
@@ -226,7 +226,7 @@ export default class OCPP16RequestService extends OCPPRequestService {
           let maxAmperage: number;
           switch (self.chargingStation.getPowerOutType()) {
             case PowerOutType.AC:
-              maxAmperage = ElectricUtils.ampPerPhaseFromPower(self.chargingStation.getNumberOfPhases(), self.chargingStation.stationInfo.maxPower / self.chargingStation.stationInfo.powerDivider, self.chargingStation.getVoltageOut());
+              maxAmperage = ACElectricUtils.amperagePerPhaseFromPower(self.chargingStation.getNumberOfPhases(), self.chargingStation.stationInfo.maxPower / self.chargingStation.stationInfo.powerDivider, self.chargingStation.getVoltageOut());
               if (Utils.isUndefined(meterValuesTemplate[index].value)) {
                 currentMeasurandValues.L1 = Utils.getRandomFloatRounded(maxAmperage);
                 currentMeasurandValues.L2 = 0;
@@ -239,7 +239,7 @@ export default class OCPP16RequestService extends OCPPRequestService {
               }
               break;
             case PowerOutType.DC:
-              maxAmperage = ElectricUtils.ampTotalFromPower(self.chargingStation.stationInfo.maxPower / self.chargingStation.stationInfo.powerDivider, self.chargingStation.getVoltageOut());
+              maxAmperage = ACElectricUtils.amperageTotalFromPower(self.chargingStation.stationInfo.maxPower / self.chargingStation.stationInfo.powerDivider, self.chargingStation.getVoltageOut());
               if (Utils.isUndefined(meterValuesTemplate[index].value)) {
                 currentMeasurandValues.allPhases = Utils.getRandomFloatRounded(maxAmperage);
               }
index dba823abc5f16edea664453572920386e3cc5976..5adf4bc783cdbfe09cde884336704b082e4b0ae8 100644 (file)
@@ -1,10 +1,12 @@
 /**
  * Rationale: https://wiki.piment-noir.org/doku.php/en:cs:modelling_multi-phased_electrical_system_interconnexion
+ */
+
+/**
  * Targeted to AC related values calculation.
- * To use for DC, always consider cosPhi = 1 and do not use per phase helpers
  */
-export default class ElectricUtils {
-  static ampTotal(nbOfPhases: number, Iph: number): number {
+export class ACElectricUtils {
+  static amperageTotal(nbOfPhases: number, Iph: number): number {
     return nbOfPhases * Iph;
   }
 
@@ -17,23 +19,40 @@ export default class ElectricUtils {
   }
 
   static powerTotal(nbOfPhases: number, V: number, Iph: number, cosPhi = 1): number {
-    return nbOfPhases * ElectricUtils.powerPerPhase(V, Iph, cosPhi);
+    return nbOfPhases * ACElectricUtils.powerPerPhase(V, Iph, cosPhi);
   }
 
-  static ampTotalFromPower(P: number, V: number, cosPhi = 1): number {
-    const power = P / (V * cosPhi);
+  static amperageTotalFromPower(P: number, V: number, cosPhi = 1): number {
+    const amperage = P / (V * cosPhi);
     if (cosPhi === 1 && P % V === 0) {
-      return power;
+      return amperage;
     }
-    return Math.round(power);
+    return Math.round(amperage);
   }
 
-  static ampPerPhaseFromPower(nbOfPhases: number, P: number, V: number, cosPhi = 1): number {
-    const power = ElectricUtils.ampTotalFromPower(P, V, cosPhi);
-    const powerPerPhase = power / nbOfPhases;
-    if (power % nbOfPhases === 0) {
-      return powerPerPhase;
+  static amperagePerPhaseFromPower(nbOfPhases: number, P: number, V: number, cosPhi = 1): number {
+    const amperage = ACElectricUtils.amperageTotalFromPower(P, V, cosPhi);
+    const amperagePerPhase = amperage / nbOfPhases;
+    if (amperage % nbOfPhases === 0) {
+      return amperagePerPhase;
     }
-    return Math.round(powerPerPhase);
+    return Math.round(amperagePerPhase);
+  }
+}
+
+/**
+ * Targeted to DC related values calculation.
+ */
+export class DCElectricUtils {
+  static power(V: number, I: number): number {
+    return V * I;
+  }
+
+  static amperage(P: number, V: number): number {
+    const amperage = P / V;
+    if (P % V === 0) {
+      return amperage;
+    }
+    return Math.round(amperage);
   }
 }