DoubleContinuousPIDSystem.java
/*
* Created on 2012/07/10
* Copyright (C) 2012 Koga Laboratory. All rights reserved.
*
*/
package org.mklab.tool.control.system.continuous;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.tool.control.DoubleLinearSystemFactory;
/**
* 連続時間PIDシステムを表すクラスです。
*
* @author esumi
* @version $Revision$, 2012/07/23
*/
public class DoubleContinuousPIDSystem extends DoubleContinuousLinearDynamicSystem {
/** 連続PIDコントローラのタイプ */
private ContinuousPIDType pidType = ContinuousPIDType.PARALELL;
/**
* 連続PIDコントローラのタイプを設定します。
*
* @param pidType 連続PIDコントローラのタイプ
*/
public void setPidType(ContinuousPIDType pidType) {
this.pidType = pidType;
}
/**
* PIDシステムを設定します。
*
* @param p 比例項P
* @param i 積分項I
* @param d 微分項D
* @param n フィルターN
*/
public void setLinearSystem(double p, double i, double d, double n) {
DoubleMatrix A;
DoubleMatrix B;
DoubleMatrix C;
DoubleMatrix D;
switch (this.pidType) {
case PARALELL:
A = new DoubleMatrix(new double[][] { {0, 0}, {0, -n}});
B = new DoubleMatrix(new double[][] { {i}, {n * d}});
C = new DoubleMatrix(new double[][] {{1, -n}});
D = new DoubleMatrix(new double[][] {{p + n * d}});
break;
case IDEAL:
A = new DoubleMatrix(new double[][] { {0, 0}, {0, -n}});
B = new DoubleMatrix(new double[][] { {i}, {n * d}});
C = new DoubleMatrix(new double[][] {{p, -p * n}});
D = new DoubleMatrix(new double[][] {{p + p * n * d}});
break;
default:
throw new IllegalArgumentException();
}
setLinearSystem(DoubleLinearSystemFactory.createLinearSystem(A, B, C, D));
}
}