Skip to content
PowerSensor.md

PowerSensor

Measures the instantaneous electrical power flowing through or consumed by a circuit.

This component utilizes an internal VoltageSensor and an internal CurrentSensor to determine electrical power. The voltage is measured between pins pv (positive voltage) and nv (negative voltage). The current is measured as it flows from pin pc (positive current) to pin nc (negative current). The instantaneous power is calculated as the product of these two measurements:

P=VI

where V is the voltage measured by voltage_sensor.v and I is the current measured by current_sensor.i.

Usage

PowerSensor()

Connectors

  • pc - (Pin)

  • nc - (Pin)

  • pv - (Pin)

  • nv - (Pin)

  • power - This connector represents a real signal as an output from a component (RealOutput)

Behavior

[power(t)=current_sensor.i(t)voltage_sensor.v(t)connect(pv,voltagesensor+p)connect(voltagesensor+n,nv)connect(pc,currentsensor+p)connect(currentsensor+n,nc)voltage_sensor.p.i(t)=0voltage_sensor.n.i(t)=0voltage_sensor.v(t)=voltage_sensor.p.v(t)voltage_sensor.n.v(t)current_sensor.p.v(t)=current_sensor.n.v(t)current_sensor.p.i(t)=current_sensor.i(t)current_sensor.n.i(t)=current_sensor.i(t)]

Source

dyad
# Measures the instantaneous electrical power flowing through or consumed by a circuit.
#
# This component utilizes an internal `VoltageSensor` and an internal `CurrentSensor` to
# determine electrical power. The voltage is measured between pins `pv` (positive voltage)
# and `nv` (negative voltage). The current is measured as it flows from pin `pc`
# (positive current) to pin `nc` (negative current).
# The instantaneous power is calculated as the product of these two measurements:
# ```math
# P = V \cdot I
# ```
# where `V` is the voltage measured by `voltage_sensor.v` and `I` is the
# current measured by `current_sensor.i`.
component PowerSensor
  # Positive pin for current measurement path
  pc = Pin() [{
    "Dyad": {
      "placement": {"icon": {"iconName": "pos", "x1": -50, "y1": 450, "x2": 50, "y2": 550}}
    }
  }]
  # Negative pin for current measurement path
  nc = Pin() [{
    "Dyad": {
      "placement": {"icon": {"iconName": "neg", "x1": 950, "y1": 450, "x2": 1050, "y2": 550}}
    }
  }]
  # Positive pin for voltage measurement
  pv = Pin() [{
    "Dyad": {
      "placement": {"icon": {"iconName": "pos", "x1": 450, "y1": -50, "x2": 550, "y2": 50}}
    }
  }]
  # Negative pin for voltage measurement
  nv = Pin() [{
    "Dyad": {
      "placement": {"icon": {"iconName": "neg", "x1": 450, "y1": 950, "x2": 550, "y2": 1050}}
    }
  }]
  # Internal subcomponent to measure voltage
  voltage_sensor = VoltageSensor()
  # Internal subcomponent to measure current
  current_sensor = CurrentSensor()
  # Output signal representing the calculated instantaneous power
  power = RealOutput() [{
    "Dyad": {
      "placement": {"icon": {"x1": 150, "y1": 950, "x2": 250, "y2": 1050, "rot": 90}}
    }
  }]
relations
  connect(pv, voltage_sensor.p)
  connect(voltage_sensor.n, nv)
  connect(pc, current_sensor.p)
  connect(current_sensor.n, nc)
  power = voltage_sensor.v*current_sensor.i
metadata {
  "Dyad": {
    "labels": [
      {"label": "$(instance)", "x": 500, "y": 1100, "rot": 0},
      {"label": "P", "x": 500, "y": 713, "rot": 0}
    ],
    "icons": {"default": "dyad://ElectricalComponents/PowerSensor.svg"}
  }
}
end
Flattened Source
dyad
# Measures the instantaneous electrical power flowing through or consumed by a circuit.
#
# This component utilizes an internal `VoltageSensor` and an internal `CurrentSensor` to
# determine electrical power. The voltage is measured between pins `pv` (positive voltage)
# and `nv` (negative voltage). The current is measured as it flows from pin `pc`
# (positive current) to pin `nc` (negative current).
# The instantaneous power is calculated as the product of these two measurements:
# ```math
# P = V \cdot I
# ```
# where `V` is the voltage measured by `voltage_sensor.v` and `I` is the
# current measured by `current_sensor.i`.
component PowerSensor
  # Positive pin for current measurement path
  pc = Pin() [{
    "Dyad": {
      "placement": {"icon": {"iconName": "pos", "x1": -50, "y1": 450, "x2": 50, "y2": 550}}
    }
  }]
  # Negative pin for current measurement path
  nc = Pin() [{
    "Dyad": {
      "placement": {"icon": {"iconName": "neg", "x1": 950, "y1": 450, "x2": 1050, "y2": 550}}
    }
  }]
  # Positive pin for voltage measurement
  pv = Pin() [{
    "Dyad": {
      "placement": {"icon": {"iconName": "pos", "x1": 450, "y1": -50, "x2": 550, "y2": 50}}
    }
  }]
  # Negative pin for voltage measurement
  nv = Pin() [{
    "Dyad": {
      "placement": {"icon": {"iconName": "neg", "x1": 450, "y1": 950, "x2": 550, "y2": 1050}}
    }
  }]
  # Internal subcomponent to measure voltage
  voltage_sensor = VoltageSensor()
  # Internal subcomponent to measure current
  current_sensor = CurrentSensor()
  # Output signal representing the calculated instantaneous power
  power = RealOutput() [{
    "Dyad": {
      "placement": {"icon": {"x1": 150, "y1": 950, "x2": 250, "y2": 1050, "rot": 90}}
    }
  }]
relations
  connect(pv, voltage_sensor.p)
  connect(voltage_sensor.n, nv)
  connect(pc, current_sensor.p)
  connect(current_sensor.n, nc)
  power = voltage_sensor.v*current_sensor.i
metadata {
  "Dyad": {
    "labels": [
      {"label": "$(instance)", "x": 500, "y": 1100, "rot": 0},
      {"label": "P", "x": 500, "y": 713, "rot": 0}
    ],
    "icons": {"default": "dyad://ElectricalComponents/PowerSensor.svg"}
  }
}
end


Test Cases

This is setup code, that must be run before each test case.

julia
using ElectricalComponents
using ModelingToolkit, OrdinaryDiffEqDefault
using Plots
using CSV, DataFrames

snapshotsdir = joinpath(dirname(dirname(pathof(ElectricalComponents))), "test", "snapshots")
"/home/actions-runner-10/.julia/packages/ElectricalComponents/bmmPM/test/snapshots"