SimplePID SimplePID Icon

Examples.SimplePID

Usage

DiscreteComponents.Examples.SimplePID()

Behavior

31-element Vector{Symbolics.Equation}:
 connect(constant1.y(t), discretepidstandard.u_s(t))
 connect(discretepidstandard.y(t), zeroorderhold.u(t))
 connect(zeroorderhold.y(t), secondorder.u(t))
 connect(secondorder.y(t), samplewithadeffects.u(t))
 connect(samplewithadeffects.y(t), discretepidstandard.u_m(t), periodicclock.y(t))
 zeroorderhold₊y(t) ~ ModelingToolkitBase.Hold()(zeroorderhold₊u(t))
 discretepidstandard₊y(t) ~ clamp(discretepidstandard₊v(t), discretepidstandard₊y_min, discretepidstandard₊y_max)
 discretepidstandard₊e(t) ~ -discretepidstandard₊u_m(t) + discretepidstandard₊u_s(t)
 discretepidstandard₊uff(t) ~ 0
 discretepidstandard₊eI(t) ~ discretepidstandard₊e(t) + (-discretepidstandard₊v(t) + discretepidstandard₊y(t)) / (discretepidstandard₊K*discretepidstandard₊Ni)
 ⋮
 connect(add.y(t), quantization.u(t))
 samplewithadeffects₊normalnoise₊td(t) ~ samplewithadeffects₊normalnoise₊sampler₊y(t)
 samplewithadeffects₊normalnoise₊y(t) ~ samplewithadeffects₊normalnoise₊mu + samplewithadeffects₊normalnoise₊sigma*DiscreteComponents.seeded_randn(samplewithadeffects₊normalnoise₊seed, samplewithadeffects₊normalnoise₊td(t))
 connect(continuousclock.y(t), sampler.u(t))
 samplewithadeffects₊normalnoise₊sampler₊y(t) ~ Sample(InferredClock.InferredDiscrete(0))(samplewithadeffects₊normalnoise₊sampler₊u(t))
 samplewithadeffects₊normalnoise₊continuousclock₊y(t) ~ ifelse(samplewithadeffects₊normalnoise₊continuousclock₊start_time < t, samplewithadeffects₊normalnoise₊continuousclock₊offset - samplewithadeffects₊normalnoise₊continuousclock₊start_time + t, samplewithadeffects₊normalnoise₊continuousclock₊offset)
 samplewithadeffects₊quantization₊y(t) ~ ifelse(samplewithadeffects₊quantization₊quantized, DiscreteComponents.quantize(samplewithadeffects₊quantization₊u(t), samplewithadeffects₊quantization₊bits, samplewithadeffects₊quantization₊y_min, samplewithadeffects₊quantization₊y_max, true), samplewithadeffects₊quantization₊u(t))
 samplewithadeffects₊add₊y(t) ~ samplewithadeffects₊add₊k1*samplewithadeffects₊add₊u1(t) + samplewithadeffects₊add₊k2*samplewithadeffects₊add₊u2(t)
 samplewithadeffects₊sampler₊y(t) ~ Sample(InferredClock.InferredDiscrete(0))(samplewithadeffects₊sampler₊u(t))

Source

component SimplePID
  zeroorderhold = DiscreteComponents.ZeroOrderHold() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 440, "y1": 440, "x2": 540, "y2": 540, "rot": 0}
      },
      "tags": []
    }
  }
  discretepidstandard = DiscreteComponents.DiscretePIDStandard(Imethod = DiscretizationMethod.Forward(), Dmethod = DiscretizationMethod.Backward(), with_I = true, with_D = true) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 250, "y1": 440, "x2": 350, "y2": 540, "rot": 0}
      },
      "tags": []
    }
  }
  constant1 = BlockComponents.Sources.Constant(k = 2) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 50, "y1": 410, "x2": 150, "y2": 510, "rot": 0}
      },
      "tags": []
    }
  }
  secondorder = BlockComponents.Continuous.SecondOrder() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 580, "y1": 440, "x2": 680, "y2": 540, "rot": 0}
      },
      "tags": []
    }
  }
  samplewithadeffects = DiscreteComponents.SampleWithADEffects(y_max = 10, y_min = -10) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 540, "y1": 630, "x2": 440, "y2": 730, "rot": 0}
      },
      "tags": []
    }
  }
  periodicclock = DiscreteComponents.PeriodicClock(dt = 0.1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 440, "y1": 760, "x2": 540, "y2": 860, "rot": 0}
      },
      "tags": []
    }
  }
relations
  initial secondorder.x = 1
  initial secondorder.xd = 0
  connect(constant1.y, discretepidstandard.u_s) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 190, "y": 460}, {"x": 190, "y": 462}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(discretepidstandard.y, zeroorderhold.u) {"Dyad": {"renderStyle": "standard", "edges": [{"S": 1, "E": 2, "M": []}]}}
  connect(zeroorderhold.y, secondorder.u) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(samplewithadeffects.u, secondorder.y) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 730, "y": 680}, {"x": 730, "y": 490}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(samplewithadeffects.y, discretepidstandard.u_m, periodicclock.y) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [], "E": -1},
        {"S": -1, "M": [{"x": 200, "y": 680}, {"x": 200, "y": 514}], "E": 2},
        {"S": 3, "M": [{"x": 370, "y": 810}], "E": -1}
      ],
      "junctions": [{"x": 370, "y": 680}],
      "renderStyle": "standard"
    }
  }
end
Flattened Source
component SimplePID
  zeroorderhold = DiscreteComponents.ZeroOrderHold() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 440, "y1": 440, "x2": 540, "y2": 540, "rot": 0}
      },
      "tags": []
    }
  }
  discretepidstandard = DiscreteComponents.DiscretePIDStandard(Imethod = DiscretizationMethod.Forward(), Dmethod = DiscretizationMethod.Backward(), with_I = true, with_D = true) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 250, "y1": 440, "x2": 350, "y2": 540, "rot": 0}
      },
      "tags": []
    }
  }
  constant1 = BlockComponents.Sources.Constant(k = 2) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 50, "y1": 410, "x2": 150, "y2": 510, "rot": 0}
      },
      "tags": []
    }
  }
  secondorder = BlockComponents.Continuous.SecondOrder() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 580, "y1": 440, "x2": 680, "y2": 540, "rot": 0}
      },
      "tags": []
    }
  }
  samplewithadeffects = DiscreteComponents.SampleWithADEffects(y_max = 10, y_min = -10) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 540, "y1": 630, "x2": 440, "y2": 730, "rot": 0}
      },
      "tags": []
    }
  }
  periodicclock = DiscreteComponents.PeriodicClock(dt = 0.1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 440, "y1": 760, "x2": 540, "y2": 860, "rot": 0}
      },
      "tags": []
    }
  }
relations
  initial secondorder.x = 1
  initial secondorder.xd = 0
  connect(constant1.y, discretepidstandard.u_s) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 190, "y": 460}, {"x": 190, "y": 462}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(discretepidstandard.y, zeroorderhold.u) {"Dyad": {"renderStyle": "standard", "edges": [{"S": 1, "E": 2, "M": []}]}}
  connect(zeroorderhold.y, secondorder.u) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(samplewithadeffects.u, secondorder.y) {
    "Dyad": {
      "edges": [{"S": 1, "M": [{"x": 730, "y": 680}, {"x": 730, "y": 490}], "E": 2}],
      "renderStyle": "standard"
    }
  }
  connect(samplewithadeffects.y, discretepidstandard.u_m, periodicclock.y) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [], "E": -1},
        {"S": -1, "M": [{"x": 200, "y": 680}, {"x": 200, "y": 514}], "E": 2},
        {"S": 3, "M": [{"x": 370, "y": 810}], "E": -1}
      ],
      "junctions": [{"x": 370, "y": 680}],
      "renderStyle": "standard"
    }
  }
metadata {}
end


Test Cases

No test cases defined.

  • Examples
  • Experiments
  • Analyses