IEEE Std 421.5 Stabilizer Models
Please Note: Type CMLFieldType has been changed to CMLFieldEnum. For example, CMLFieldType.ControlBlock has been changed to CMLFieldEnum.ControlBlock.
IEEE PSS1A (Source)
IEEE PSS1A (Source)
@AnController(
input="mach.speed",
output="this.filterBlock2.y",
refPoint="1.0",
display= {"str.Vpss, this.output"}
)
public double one = 1.0, t6 = 0.05;
@AnControllerField(
type= CMLFieldEnum.ControlBlock,
input="mach.speed - this.refPoint",
parameter={"type.NoLimit", "this.one", "this.t6"},
y0="this.washoutBlock.u0" )
DelayControlBlock delayBlock;
public double ks = 1.0, t5 = 0.1;
@AnControllerField(
type= CMLFieldEnum.ControlBlock,
input="this.delayBlock.y",
parameter={"type.NoLimit", "this.ks", "this.t5"},
y0="this.order2ndBlock.u0" )
WashoutControlBlock washoutBlock;
public double a1 = 0.05, a2 = 0.5;
@AnControllerField(
type= CMLFieldEnum.ControlBlock,
input="this.washoutBlock.y",
parameter={"type.NoLimit", "this.one", "this.a1", "this.a2"},
y0="this.filterBlock1.u0" )
TFunc2ndOrderBlock order2ndBlock;
public double k1 = 10.0, t1 = 0.05, t2 = 0.5;
@AnControllerField(
type= CMLFieldEnum.ControlBlock,
input="this.order2ndBlock.y",
parameter={"type.NoLimit", "this.k1", "this.t1", "this.t2"},
y0="this.filterBlock2.u0" )
FilterControlBlock filterBlock1;
public double k2 = 1.0, t3 = 0.05, t4 = 0.25, vmax = 0.2, vmin = -0.2;
@AnControllerField(
type= CMLFieldEnum.ControlBlock,
input="this.filterBlock1.y",
parameter={"type.Limit", "this.k2", "this.t3", "this.t4", "this.vmax", "this.vmin"},
y0="pss.vs" )
FilterControlBlock filterBlock2;
Default Parameter
IEEE PSS2A (Source)
IEEE PSS2A (Source)
First the following custom controller is implemented:
@AnController( )
class CustomExciter extends AbstractChildAnnotateController {
public CustomExciter(double tw1, double tw2, double k, double t) {
super();
this.tw1 = tw1;
this.tw2 = tw2;
this.k = k;
this.t1 = t;
}
public double one = 1.0, tw1 = 0.05;
@AnControllerField(
type= CMLFieldEnum.ControlBlock,
input="this.input - this.refPoint",
parameter={"type.NoLimit", "this.one", "this.tw1"},
y0="this.washoutBlock2.u0" )
WashoutControlBlock washoutBlock1;
public double tw2 = 0.05;
@AnControllerField(
type= CMLFieldEnum.ControlBlock,
input="this.washoutBlock1.y",
parameter={"type.NoLimit", "this.one", "this.tw2"},
y0="this.delayBlock.u0" )
WashoutControlBlock washoutBlock2;
public double k = 1.0, t1 = 0.05;
@AnControllerField(
type= CMLFieldEnum.ControlBlock,
input="this.washoutBlock2.y",
parameter={"type.NoLimit", "this.k", "this.t1"},
y0="this.output" )
DelayControlBlock delayBlock;
public AnController getAnController() {
return (AnController)getClass().getAnnotation(AnController.class); }
public Field getField(String fieldName) throws Exception {
return getClass().getField(fieldName); }
public Object getFieldObject(Field field) throws Exception {
return field.get(this); }
}
Then the stabilizer can be expressed in term of the custom controller as follows:
@AnController(
input="mach.speed",
output="this.filterBlock2.y",
refPoint="0.0",
display= {"str.CustomBlock1, this.customBlock1.y",
"str.CustomBlock2, this.customBlock2.y",
"str.NthOrderFilter, this.filterNthBlock.y" }
)
public double tw1 = 0.1, tw2 = 0.05, t6 = 0.05;
@AnControllerField(
type= CMLFieldEnum.Controller,
input="mach.speed",
y0="0.0",
initOrderNumber=-2 )
public CustomExciter customBlock1 = new CustomExciter(tw1, tw2, 1.0, t6);
public double tw3 = 0.1, tw4 = 0.05, t7 = 0.05, ks2 = 1.0;
@AnControllerField(
type= CMLFieldEnum.Controller,
input="mach.pe",
y0="0.0",
initOrderNumber=-3 )
public CustomExciter customBlock2 = new CustomExciter(tw3, tw4, ks2, t7);
public double t8 = 0.1, t9 = 0.05, ks3 = 1.0;
public int m = 1, n = 1;
@AnControllerField(
type= CMLFieldEnum.ControlBlock,
input="this.customBlock1.y + this.ks3*this.customBlock2.y",
parameter={"type.t8", "this.t9", "this.m", "this.n"},
y0="this.filterBlock1.u0 - this.refPoint + this.customBlock2.y" )
FilterNthOrderBlock filterNthBlock;
public double k1 = 10.0, t1 = 0.05, t2 = 0.5;
@AnControllerField(
type= CMLFieldEnum.ControlBlock,
input="this.refPoint + this.filterNthBlock.y - this.customBlock2.y",
parameter={"type.NoLimit", "this.k1", "this.t1", "this.t2"},
y0="this.filterBlock2.u0" )
FilterControlBlock filterBlock1;
public double k2 = 1.0, t3 = 0.05, t4 = 0.25, vmax = 0.2, vmin = -0.2;
@AnControllerField(
type= CMLFieldEnum.ControlBlock,
input="this.filterBlock1.y",
parameter={"type.Limit", "this.k2", "this.t3", "this.t4", "this.vmax", "this.vmin"},
y0="pss.vs" )
FilterControlBlock filterBlock2;
Default Parameter
IEEE PSS2B (future)
IEEE PSS2B (future)
IEEE PSS3B (future)
IEEE PSS3B (future)
IEEE PSS4B (future)
IEEE PSS4B (future)