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 {}
endTest Cases
No test cases defined.
Related
- Examples
- Experiments
- Analyses