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)

   @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)

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 PSS3B (future)

IEEE PSS4B (future)