This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Compiler/TMS320F280049: Proper Optimization Settings for fast control

Part Number: TMS320F280049
Other Parts Discussed in Thread: SFRA, C2000WARE-DIGITALPOWER-SDK, C2000WARE

Tool/software: TI C/C++ Compiler

C2000 Team,

I'm trying to get my F280049 to run a the 2P2Z macro (CNTL_2P2Z_F_C.h)  From the solar lib documentation it says it should execute in about 42 cycles.  The disassembly looks much longer than that and the process takes roughly 900 ns (twice as long as I would expect).  See below for more detail.

I'm running the function out of RAMLS4 and both the control and the vars are called out as volatile.  

I've tried multiple different optimizations from the project properties and nothing seems to have helped.

I've compile the same code with various processors 28377/ 28075 and the disassembly looks the same.

For reference, I am using compiler 18.1.4.LTS...  Is there another compiler I should be using, is there a better way to use this function that runs faster (set optimizations), does it need to run out a certain memory location to run faster, or anything else I'm missing.

Thanks,

Kyle

******************

I'm testing it by making a pin go high, calling the macro, then forcing the pin low...

The disassembly for the macro looks like the following (which doesn't at look like 42:


volatile CNTL_2P2Z_F_C_Coeffs Control_Coef;

volatile CNTL_2P2Z_F_C_Vars Control_Var;

CNTL_2P2Z_F_C(Control_Coef, Control_Var);
00a8c2:   E2AF0002    MOV32        R0H, @0x2, UNCF
00a8c4:   E2AF0100    MOV32        R1H, @0x0, UNCF
00a8c6:   E7200008    SUBF32       R0H, R1H, R0H
00a8c8:   7700        NOP          
00a8c9:   E2030004    MOV32        @0x4, R0H
00a8cb:   761F0054    MOVW         DP, #0x54
00a8cd:   E2AF0026    MOV32        R0H, @0x26, UNCF
00a8cf:   761F0055    MOVW         DP, #0x55
00a8d1:   E2AF010E    MOV32        R1H, @0xe, UNCF
00a8d3:   761F0054    MOVW         DP, #0x54
00a8d5:   E3004128    MPYF32       R0H, R1H, R0H
                   || MOV32        R1H, @0x28
00a8d7:   761F0055    MOVW         DP, #0x55
00a8d9:   E2AF020C    MOV32        R2H, @0xc, UNCF
00a8db:   E7000051    MPYF32       R1H, R2H, R1H
00a8dd:   761F0054    MOVW         DP, #0x54
00a8df:   E3120120    ADDF32       R0H, R0H, R1H
                   || MOV32        R1H, @0x20
00a8e1:   761F0055    MOVW         DP, #0x55
00a8e3:   E2AF0208    MOV32        R2H, @0x8, UNCF
00a8e5:   E7000051    MPYF32       R1H, R2H, R1H
00a8e7:   761F0054    MOVW         DP, #0x54
00a8e9:   E3120122    ADDF32       R0H, R0H, R1H
                   || MOV32        R1H, @0x22
00a8eb:   761F0055    MOVW         DP, #0x55
00a8ed:   E2AF0206    MOV32        R2H, @0x6, UNCF
00a8ef:   E7000051    MPYF32       R1H, R2H, R1H
00a8f1:   761F0054    MOVW         DP, #0x54
00a8f3:   E3120124    ADDF32       R0H, R0H, R1H
                   || MOV32        R1H, @0x24
00a8f5:   761F0055    MOVW         DP, #0x55
00a8f7:   E2AF0204    MOV32        R2H, @0x4, UNCF
00a8f9:   E7000051    MPYF32       R1H, R2H, R1H
00a8fb:   7700        NOP          
00a8fc:   E7100040    ADDF32       R0H, R0H, R1H
00a8fe:   7700        NOP          
00a8ff:   E2030010    MOV32        @0x10, R0H
00a901:   0606        MOVL         ACC, @0x6
00a902:   1E08        MOVL         @0x8, ACC
00a903:   0604        MOVL         ACC, @0x4
00a904:   1E06        MOVL         @0x6, ACC
00a905:   0610        MOVL         ACC, @0x10
00a906:   1E0A        MOVL         @0xa, ACC
00a907:   761F0054    MOVW         DP, #0x54
00a909:   E2AF002A    MOV32        R0H, @0x2a, UNCF
00a90b:   761F0055    MOVW         DP, #0x55
00a90d:   E2AF010A    MOV32        R1H, @0xa, UNCF
00a90f:   E6940001    CMPF32       R1H, R0H
00a911:   AD14        MOVST0       NF,ZF
00a912:   6405        SB           C$L235, LT
00a913:   761F0054    MOVW         DP, #0x54
00a915:   062A        MOVL         ACC, @0x2a
00a916:   6F02        SB           C$L236, UNC
        C$L235:
00a917:   060A        MOVL         ACC, @0xa
        C$L236:
00a918:   761F0055    MOVW         DP, #0x55
00a91a:   1E0A        MOVL         @0xa, ACC
00a91b:   761F0054    MOVW         DP, #0x54
00a91d:   E2AF002C    MOV32        R0H, @0x2c, UNCF
00a91f:   761F0055    MOVW         DP, #0x55
00a921:   E2AF010A    MOV32        R1H, @0xa, UNCF
00a923:   E6940001    CMPF32       R1H, R0H
00a925:   AD14        MOVST0       NF,ZF
00a926:   6205        SB           C$L237, GT
00a927:   761F0054    MOVW         DP, #0x54
00a929:   062C        MOVL         ACC, @0x2c
00a92a:   6F02        SB           C$L238, UNC
        C$L237:
00a92b:   060A        MOVL         ACC, @0xa
        C$L238:
00a92c:   761F0055    MOVW         DP, #0x55
00a92e:   1E0A        MOVL         @0xa, ACC
00a92f:   060C        MOVL         ACC, @0xc
00a930:   1E0E        MOVL         @0xe, ACC
00a931:   060A        MOVL         ACC, @0xa
00a932:   1E0C        MOVL         @0xc, ACC
00a933:   761F0054    MOVW         DP, #0x54
00a935:   E2AF002E    MOV32        R0H, @0x2e, UNCF
00a937:   761F0055    MOVW         DP, #0x55
00a939:   E2AF010A    MOV32        R1H, @0xa, UNCF
00a93b:   E6940001    CMPF32       R1H, R0H
00a93d:   AD14        MOVST0       NF,ZF
00a93e:   6205        SB           C$L239, GT
00a93f:   761F0054    MOVW         DP, #0x54
00a941:   062E        MOVL         ACC, @0x2e
00a942:   6F02        SB           C$L240, UNC
        C$L239:
00a943:   060A        MOVL         ACC, @0xa
        C$L240:
00a944:   761F0055    MOVW         DP, #0x55
00a946:   1E0A        MOVL         @0xa, ACC
00a947:   761F0300    MOVW         DP, #0x300

  • Kyle,

    You should profile without the volatile. 

    In a good software architecture, you do not need the volatile's.

    Also putting the vars and coeff in different RAM blocks will save you a couple of cycles as well. 

    regards

    Manish Bhardwaj 

  • Manish,

    Thanks for the help.   I removed the volatile.

    I put Vars in Ram M1 and Coefs in Ram GS0  (also tried this the other way too),  Function Called from RAM LS4...

    No change.  Disassembly is below.

    Any other ideas?

    This is being called from an interrupt...  would that cause a problem or would it be better to call a function from the interrupt? (there is usually a minor penalty for adding a function, so I would prefer not to do it).

    Thanks,

    Kyle

    2018    		CNTL_2P2Z_F_C(ontrol_Coef, Control_Var);
            C$L52:
    00a8b3:   761F0019    MOVW         DP, #0x19
    00a8b5:   E2AF0002    MOV32        R0H, @0x2, UNCF
    00a8b7:   E2AF0100    MOV32        R1H, @0x0, UNCF
    00a8b9:   E7200008    SUBF32       R0H, R1H, R0H
    00a8bb:   7700        NOP          
    00a8bc:   E2030004    MOV32        @0x4, R0H
    00a8be:   761F0300    MOVW         DP, #0x300
    00a8c0:   E2AF0006    MOV32        R0H, @0x6, UNCF
    00a8c2:   761F0019    MOVW         DP, #0x19
    00a8c4:   E2AF040E    MOV32        R4H, @0xe, UNCF
    00a8c6:   761F0300    MOVW         DP, #0x300
    00a8c8:   E2AF0108    MOV32        R1H, @0x8, UNCF
    00a8ca:   761F0019    MOVW         DP, #0x19
    00a8cc:   E2AF030C    MOV32        R3H, @0xc, UNCF
    00a8ce:   761F0300    MOVW         DP, #0x300
    00a8d0:   E2AF0200    MOV32        R2H, @0x0, UNCF
    00a8d2:   761F0019    MOVW         DP, #0x19
    00a8d4:   E3010508    MPYF32       R0H, R4H, R0H
                       || MOV32        R5H, @0x8
    00a8d6:   761F0300    MOVW         DP, #0x300
    00a8d8:   E302CB02    MPYF32       R1H, R3H, R1H
                       || MOV32        R3H, @0x2
    00a8da:   761F0019    MOVW         DP, #0x19
    00a8dc:   E3055406    MPYF32       R2H, R5H, R2H
                       || MOV32        R4H, @0x6
    00a8de:   761F0300    MOVW         DP, #0x300
    00a8e0:   E3120504    ADDF32       R0H, R0H, R1H
                       || MOV32        R5H, @0x4
    00a8e2:   761F0019    MOVW         DP, #0x19
    00a8e4:   E74100E1    MPYF32       R1H, R4H, R3H
                       || ADDF32       R0H, R0H, R2H
    00a8e6:   E2AF0604    MOV32        R6H, @0x4, UNCF
    00a8e8:   E7408172    MPYF32       R2H, R6H, R5H
                       || ADDF32       R0H, R0H, R1H
    00a8ea:   7700        NOP          
    00a8eb:   E7100080    ADDF32       R0H, R0H, R2H
    00a8ed:   7700        NOP          
    00a8ee:   E2030010    MOV32        @0x10, R0H
    00a8f0:   0606        MOVL         ACC, @0x6
    00a8f1:   1E08        MOVL         @0x8, ACC
    00a8f2:   0604        MOVL         ACC, @0x4
    00a8f3:   1E06        MOVL         @0x6, ACC
    00a8f4:   0610        MOVL         ACC, @0x10
    00a8f5:   761F0300    MOVW         DP, #0x300
    00a8f7:   E2AF000A    MOV32        R0H, @0xa, UNCF
    00a8f9:   761F0019    MOVW         DP, #0x19
    00a8fb:   1E0A        MOVL         @0xa, ACC
    00a8fc:   E2AF010A    MOV32        R1H, @0xa, UNCF
    00a8fe:   E6940001    CMPF32       R1H, R0H
    00a900:   AD14        MOVST0       NF,ZF
    00a901:   6404        SB           C$L53, LT
    00a902:   761F0300    MOVW         DP, #0x300
    00a904:   060A        MOVL         ACC, @0xa
            C$L53:
    00a905:   761F0019    MOVW         DP, #0x19
    00a907:   1E0A        MOVL         @0xa, ACC
    00a908:   761F0300    MOVW         DP, #0x300
    00a90a:   E2AF000C    MOV32        R0H, @0xc, UNCF
    00a90c:   761F0019    MOVW         DP, #0x19
    00a90e:   E2AF010A    MOV32        R1H, @0xa, UNCF
    00a910:   E6940001    CMPF32       R1H, R0H
    00a912:   AD14        MOVST0       NF,ZF
    00a913:   6204        SB           C$L54, GT
    00a914:   761F0300    MOVW         DP, #0x300
    00a916:   060C        MOVL         ACC, @0xc
            C$L54:
    00a917:   761F0019    MOVW         DP, #0x19
    00a919:   1E0A        MOVL         @0xa, ACC
    00a91a:   060C        MOVL         ACC, @0xc
    00a91b:   1E0E        MOVL         @0xe, ACC
    00a91c:   060A        MOVL         ACC, @0xa
    00a91d:   761F0300    MOVW         DP, #0x300
    00a91f:   E2AF000E    MOV32        R0H, @0xe, UNCF
    00a921:   761F0019    MOVW         DP, #0x19
    00a923:   1E0C        MOVL         @0xc, ACC
    00a924:   E2AF010A    MOV32        R1H, @0xa, UNCF
    00a926:   E6940001    CMPF32       R1H, R0H
    00a928:   AD14        MOVST0       NF,ZF
    00a929:   6503        SB           C$L55, LEQ
    00a92a:   060A        MOVL         ACC, @0xa
    00a92b:   6F04        SB           C$L56, UNC
            C$L55:
    00a92c:   761F0300    MOVW         DP, #0x300
    00a92e:   060E        MOVL         ACC, @0xe
            C$L56:
    00a92f:   761F0019    MOVW         DP, #0x19
    00a931:   1E0A        MOVL         @0xa, ACC

  • Manish,
    Trying a few other things.

    Setting the optimization settings to "2-Global Optimizations" (or above) and setting the size vs speed to at least 2... seemed to help a lot.

    Those options didn't seem to help without your previous recommendations.

    It's still not down to the 42 cycles advertised, but it's much closer.


    2023 CNTL_2P2Z_F_C(Control_Coef, Control_Var);
    00a765: E2AF0516 MOV32 R5H, @0x16, UNCF
    00a767: E30A9418 MPYF32 R2H, R2H, R5H
    || MOV32 R4H, @0x18
    00a769: E700011C MPYF32 R4H, R3H, R4H
    00a76b: BDA60F2A MOV32 R6H, @XAR6
    00a76d: E7100112 ADDF32 R2H, R2H, R4H
    00a76f: BDA70F22 MOV32 R4H, @XAR7
    00a771: 7700 NOP
    00a772: E2AF0110 MOV32 R1H, @0x10, UNCF
    00a774: E7000071 MPYF32 R1H, R6H, R1H
    00a776: E2AF0512 MOV32 R5H, @0x12, UNCF
    00a778: E7411365 MPYF32 R5H, R4H, R5H
    || ADDF32 R1H, R1H, R2H
    00a77a: E2AF0614 MOV32 R6H, @0x14, UNCF
    00a77c: E7429382 MPYF32 R2H, R0H, R6H
    || ADDF32 R1H, R1H, R5H
    00a77e: 7700 NOP
    00a77f: E312AE1A ADDF32 R5H, R2H, R1H
    || MOV32 R6H, @0x1a
    00a781: E2AF021C MOV32 R2H, @0x1c, UNCF
    00a783: E6CF0029 MOV32 R1H, R5H, UNCF
    00a785: E6970031 MINF32 R1H, R6H
    00a787: E2AF061E MOV32 R6H, @0x1e, UNCF
    00a789: E6960011 MAXF32 R1H, R2H
    00a78b: 761F0019 MOVW DP, #0x19
    00a78d: E6CF000A MOV32 R2H, R1H, UNCF
    00a78f: E2030004 MOV32 @0x4, R0H
    00a791: C308 MOVL @0x8, XAR7
    00a792: E2030006 MOV32 @0x6, R0H
    00a794: E203030E MOV32 @0xe, R3H
    00a796: E203010C MOV32 @0xc, R1H
    00a798: E2030510 MOV32 @0x10, R5H
    00a79a: E6960032 MAXF32 R2H, R6H
    00a79c: 6F47 SB C$L178, UNC
    C$L177:
    00a79d: 761F0300 MOVW DP, #0x300
  • With macros, profiling is not exact or repeatable because of surrounding code affecting the code compiled. 

    I re-profiles and am getting 43 cycles 

    ;***************************************************************
    ;* FNAME: _CNTL_2P2Z_F_Routine          FR SIZE:   4           *
    ;*                                                             *
    ;* FUNCTION ENVIRONMENT                                        *
    ;*                                                             *
    ;* FUNCTION PROPERTIES                                         *
    ;*                            0 Parameter,  0 Auto,  4 SOE     *
    ;***************************************************************
    
    _CNTL_2P2Z_F_Routine:
    ;* R3H   assigned to $O$C1
    ;* R1H   assigned to $O$v4
    ;* R0H   assigned to $O$v3
    ;* R2H   assigned to $O$v1
    	.dwcfi	cfa_offset, -2
    	.dwcfi	save_reg_to_mem, 26, 0
            MOVW      DP,#_cntl_2p2z_vars1+12 ; [CPU_ARAU] 
    	.dwpsn	file "../Float_Profiling-Routines.c",line 215,column 3,is_stmt,isa 0
            MOV32     R0H,@_cntl_2p2z_vars1+12 ; [CPU_FPU] |215| 
            MOV32     R1H,@_cntl_2p2z_vars1+10 ; [CPU_FPU] |215| 
    
            SUBF32    R2H,R1H,R0H           ; [CPU_FPU] |215| 
    ||      MOV32     R3H,@_cntl_2p2z_vars1+6 ; [CPU_FPU] |215| 
    
            MOV32     *SP++,R4H             ; [CPU_FPU] 
    	.dwcfi	save_reg_to_mem, 60, 2
    	.dwcfi	cfa_offset, -4
            MOV32     @_cntl_2p2z_vars1+4,R2H ; [CPU_FPU] |215| 
            MOVW      DP,#_cntl_2p2z_coeffs1+6 ; [CPU_ARAU] 
            MOV32     R0H,@_cntl_2p2z_coeffs1+6 ; [CPU_FPU] |215| 
            MOVW      DP,#_cntl_2p2z_vars1+2 ; [CPU_ARAU] 
            MOV32     R4H,@_cntl_2p2z_vars1+2 ; [CPU_FPU] |215| 
            MOVD32    R1H,@_cntl_2p2z_vars1 ; [CPU_FPU] |215| 
            MOVW      DP,#_cntl_2p2z_coeffs1+8 ; [CPU_ARAU] 
    
            MOV32     R4H,@_cntl_2p2z_coeffs1+8 ; [CPU_FPU] |215| 
    ||      MPYF32    R0H,R4H,R0H           ; [CPU_FPU] |215| 
    
            MPYF32    R4H,R1H,R4H           ; [CPU_FPU] |215| 
            MOV32     *SP++,R5H             ; [CPU_FPU] 
    	.dwcfi	save_reg_to_mem, 64, 4
    	.dwcfi	cfa_offset, -6
    
            MOV32     R4H,@_cntl_2p2z_coeffs1 ; [CPU_FPU] |215| 
    ||      ADDF32    R0H,R0H,R4H           ; [CPU_FPU] |215| 
    
            MOVW      DP,#_cntl_2p2z_vars1+8 ; [CPU_ARAU] 
            MOV32     R5H,@_cntl_2p2z_vars1+8 ; [CPU_FPU] |215| 
            MPYF32    R4H,R5H,R4H           ; [CPU_FPU] |215| 
            MOVW      DP,#_cntl_2p2z_coeffs1+2 ; [CPU_ARAU] 
    
            MOV32     R4H,@_cntl_2p2z_coeffs1+2 ; [CPU_FPU] |215| 
    ||      ADDF32    R0H,R0H,R4H           ; [CPU_FPU] |215| 
    
            MPYF32    R4H,R3H,R4H           ; [CPU_FPU] |215| 
            NOP       ; [CPU_ALU] 
    
            MOV32     R4H,@_cntl_2p2z_coeffs1+4 ; [CPU_FPU] |215| 
    ||      ADDF32    R0H,R0H,R4H           ; [CPU_FPU] |215| 
    
            MOVW      DP,#_cntl_2p2z_vars1+8 ; [CPU_ARAU] 
            MOV32     @_cntl_2p2z_vars1+8,R3H ; [CPU_FPU] |215| 
    
            MOV32     @_cntl_2p2z_vars1+6,R2H ; [CPU_FPU] |215| 
    ||      MPYF32    R4H,R2H,R4H           ; [CPU_FPU] |215| 
    
            MOVW      DP,#_cntl_2p2z_coeffs1+10 ; [CPU_ARAU] 
            ADDF32    R0H,R0H,R4H           ; [CPU_FPU] |215| 
            MOV32     R2H,@_cntl_2p2z_coeffs1+10 ; [CPU_FPU] |215| 
            MINF32    R0H,R2H               ; [CPU_FPU] |215| 
            MOV32     R2H,@_cntl_2p2z_coeffs1+12 ; [CPU_FPU] |215| 
            MOVW      DP,#_cntl_2p2z_vars1  ; [CPU_ARAU] 
            MAXF32    R0H,R2H               ; [CPU_FPU] |215| 
            MOV32     @_cntl_2p2z_vars1,R0H ; [CPU_FPU] |215| 
            MOVW      DP,#_cntl_2p2z_coeffs1+14 ; [CPU_ARAU] 
            MOV32     R1H,@_cntl_2p2z_coeffs1+14 ; [CPU_FPU] |215| 
            MOVW      DP,#_cntl_2p2z_vars1+14 ; [CPU_ARAU] 
            MAXF32    R0H,R1H               ; [CPU_FPU] |215| 
            MOV32     @_cntl_2p2z_vars1+14,R0H ; [CPU_FPU] |215| 
            MOV32     R5H,*--SP             ; [CPU_FPU] 
    	.dwcfi	cfa_offset, -4
    	.dwcfi	restore_reg, 64
            MOV32     R4H,*--SP             ; [CPU_FPU] 
    	.dwcfi	cfa_offset, -2
    	.dwcfi	restore_reg, 60
    $C$DW$88	.dwtag  DW_TAG_TI_branch
    	.dwattr $C$DW$88, DW_AT_low_pc(0x00)
    	.dwattr $C$DW$88, DW_AT_TI_return
    
            LRETR     ; [CPU_ALU] 

    Also please note macros are not the best way to program , we do have some legacy modules such as the one you are referring to. However they are in non maintained state. 

    We have now moved to DCL or the Digital Controller Library which is much more feature rich and well tested that these modules. I will highly recommend using that as that is being actively maintained and supported.  

  • Manish,

    Thanks.  I'll move toward the DCL library.

    One quick questions on it:

    I'm assuming that the same coefficients (a1, 12, b0, b1, b3, etc...) match the previous 2P2Z.  Looking at the equations,  that appears to be the case.  I want to double check.

    Also,  Anything I need to know about SFRA and if plan on changing that around.  It works well, but if you plan one make changes, let me know.

    Thank you for the help,

    Kyle

  • Kyle,

    1. the denominator coefficient will have a sign change when moving from solar lib to DCL , this was done to be more consistent with tools like MATLAB etc.
    2. In the 2p2z style modules there is no internal saturation like we have in the solar lib modules for 2p2z

    Other than that they will function similarly.

    For SFRA please use the latest version from the C2000Ware-DIGITALPOWER-SDK.

    Also note for DCL use the latest version from C2000Ware, you will also get a copy of C2000Ware with the SDK so you could access it from there as well.

    SFRA itself has been changed slightly to match our new coding guidelines. Please refer to the release notes located here

    C:\ti\C2000Ware_DigitalPower_SDK_1_02_00_00\libraries\sfra

    -Manish
  • Manish,
    I think you have an issue with your CompDesigner GUI.

    Your Frequency is off. Even with your example file (SFRAData.csv) from the folder the plant has has a crossover of about 1.2kHz. The Comp designer shows ~0.25 kHz. (Using C2000Ware_DigitalPower_SDK_1_02_00_00)

    I checked it versus an old version and the data looks fine.

    The Magnitdue shows up correctly, just the frequency looks to have a scaling factor applied to it and is for some reason connected to the Control ISR frequency... I can't see how this would be correct...
  • Kyle, 

    I just opened the compensation designer on my end and it looks ok to me. 

    The crossover that the GUI reports is of the open loop gain , which is affected by the control frequency and hence that is expected. 

    Can you post some snapshot of what you are seeing to enable me to debug what you are observing?

    -Manish

  • The crossover of the open loop certainly.

    But what I'm seeing is that the plant data is being changed as well (red line).  That should be static. 

    Below is a screenshot of the "SFRAData.csv" that gets installed with version 1.02. 

    On the left: is the data in the old compensation designer with the knee in the plant about 1.2kHz... Crossover at 4kHz

    On the right: is the new compensation designer  with the same data and same poles and zeros..  notice the red line has moved and the knee is now at 200Hz...  and this obviously affects the Open Loop crossover as well.  This is incorrect.  The plant should be fixed.  

    The data clearly shows that the knee is about 1.2kHz .  The plant doesn't move with control frequency (you might lose phase, or gain near the control frequency, but not like this).

    This doesn't match your documentation which shows this data correctly (plant knee at ~1.2kHz.  So at some point it worked well...  It does not on my machine after a fresh install.

    I also added the same controller a 2P2Z with the same poles, zeros, and magnitude and get totally different graphs and the B coefficients are different (accounting for the sign change you mentioned in the A coefficients).

    The second image is just the compensator using the same values...  that doesn't even match...

    If it helps the File Version from windows details says 2.1.0.0, and Product version is 2.01.0.0  (old version is 1.10.0.0 and 1.10.0.0 respectively).

  • Kyle thanks for the details. I will look into this and reply back. But considering holiday schedule it may only in the next year.
  • Kyle,

    I checked back at this and am unable to repeat the issue.

    Can you confirm both the GUI's are pointing to the same SFRA data.csv

    For example I pointed them both to the SFRA data.csv and with all the settings correct I am able to get the same results.

  • I believe the issue you might be seeing is that in the new compensation designer Kdc is no londer in dB ??
  • Confirmed, same file (and files... I tried this with multiple files).  I wouldn't go through the trouble of saying there is an issue if I did do this.  

    I can see your plant is identical between the two.  That is not the case with mine... this is where there is something off.  Please post a zip file with your compensation designer and the associated DLL to make it run.  I'm attaching a zip of my non-working one with the example plant that data shows 1.2kHz knee, but shows up as 202Hz in the comp designer.

    In no case should the plant ever change.  Those are measure values and will not shift.  The fact that mine are moving is incorrect.

    NonWorkingCompDesigner.zip

  • This would be the case as to why the compensation is different... I get that. But still, the plant should never move... that is the bigger issue.
  • Kyle,

    I was able to re-create the issue with the files you sent.

    It is coming because of transition from compensator designer mode to SFRA based tuning mode in the Compensation Designer.

    The compensator designer mode sets the freq steps to be 1- fsw/2, however when one switches to the SFRA based tuning it is not re-adjusting the freq steps arrays which is based on the SFRA measured data and causing an error.

    A workaround to this issue is, open Compensation Designer, browse to a valid SFRA data.csv file and open (I understand the data might look incorrect at this very instant).

    Next, click "save Comp", then close the compensation designer.

    re-open the compensation designer, as now a valid SFRA data path is available, it will open in SFRA tuning mode and it will not show the weirdness we discussed above.

    I will file a bug against it [SFRALIB-42]. This was a new feature we added in the v2. We did not notice this bug, as we had a valid path in Comp.xml that was on my machine and never transitions to SFRA tuning from compensation designer mode.

    Sorry for the inconvenience it may have caused.

    Happy new year to you!

    -Manish

  • Manish,
    Good, I'm not crazy.

    The save comp didn't fix the issue, but manually changing the path in the XML file to the SFRA directory did. Not sure why the save comp button didn't work, but either way it appears to work now.

    And now time to migrate and try these newer control functions.

    Thanks,
    Kyle