Please Note: Type CMLFieldType has been changed to CMLFieldEnum. For example, CMLFieldType.ControlBlock has been changed to CMLFieldEnum.ControlBlock.
@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
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