# piddata

Access coefficients of parallel-form PID controller

## Syntax

```[Kp,Ki,Kd,Tf] = piddata(sys) [Kp,Ki,Kd,Tf,Ts] = piddata(sys) [Kp,Ki,Kd,Tf,Ts] = piddata(sys,J1,...,JN) ```

## Description

```[Kp,Ki,Kd,Tf] = piddata(sys)``` returns the PID gains `Kp`,`Ki`, `Kd` and the filter time constant `Tf` of the parallel-form controller represented by the dynamic system `sys`.

```[Kp,Ki,Kd,Tf,Ts] = piddata(sys)``` also returns the sample time `Ts`.

```[Kp,Ki,Kd,Tf,Ts] = piddata(sys,J1,...,JN)``` extracts the data for a subset of entries in `sys`, where `sys` is an N-dimensional array of dynamic systems. The indices `J` specify the array entry to extract.

## Input Arguments

 `sys` SISO dynamic system or array of SISO dynamic systems. If `sys` is not a `pid` object, it must represent a valid PID controller that can be written in parallel PID form. `J` Integer indices of N entries in the array `sys` of dynamic systems. For example, suppose `sys` is a 4-by-5 (two-dimensional) array of `pid` controllers or dynamic system models that represent PID controllers. The following command extracts the data for entry (2,3) in the array. `[Kp,Ki,Kd,Tf,Ts] = piddata(sys,2,3);`

## Output Arguments

 `Kp` Proportional gain of the parallel-form PID controller represented by dynamic system `sys`. If `sys` is a `pid` controller object, the output `Kp` is equal to the `Kp` value of `sys`. If `sys` is not a `pid` object, `Kp` is the proportional gain of a parallel PID controller equivalent to `sys`. If `sys` is an array of dynamic systems, `Kp` is an array of the same dimensions as `sys`. `Ki` Integral gain of the parallel-form PID controller represented by dynamic system `sys`. If `sys` is a `pid` controller object, then the output `Ki` is equal to the `Ki` value of `sys`. If `sys` is not a `pid` object, then `Ki` is the integral gain of a parallel PID controller equivalent to `sys`. If `sys` is an array of dynamic systems, then `Ki` is an array of the same dimensions as `sys`. `Kd` Derivative gain of the parallel-form PID controller represented by dynamic system `sys`. If `sys` is a `pid` controller object, then the output `Kd` is equal to the `Kd` value of `sys`. If `sys` is not a `pid` object, then `Kd` is the derivative gain of a parallel PID controller equivalent to `sys`. If `sys` is an array of dynamic systems, then `Kd` is an array of the same dimensions as `sys`. `Tf` Filter time constant of the parallel-form PID controller represented by dynamic system `sys`. If `sys` is a `pid` controller object, the output `Tf` is equal to the `Tf` value of `sys`. If `sys` is not a `pid` object, `Tf` is the filter time constant of a parallel PID controller equivalent to `sys`. If `sys` is an array of dynamic systems, `Tf` is an array of the same dimensions as `sys`. `Ts` Sample time of the dynamic system `sys`. `Ts` is always a scalar value.

## Examples

Extract the proportional, integral, and derivative gains and the filter time constant from a parallel-form `pid` controller.

For the following `pid` object:

`sys = pid(1,4,0.3,10);`

you can extract the parameter values from `sys` by entering:

`[Kp Ki Kd Tf] = piddata(sys);`

Extract the parallel form proportional and integral gains from an equivalent standard-form PI controller.

For a standard-form PI controller, such as:

`sys = pidstd(2,3);`

you can extract the gains of an equivalent parallel-form PI controller by entering:

`[Kp Ki] = piddata(sys)`

These commands return the result:

```Kp = 2 Ki = 0.6667```

Extract parameters from a dynamic system that represents a PID controller.

The dynamic system

`$H\left(z\right)=\frac{\left(z-0.5\right)\left(z-0.6\right)}{\left(z-1\right)\left(z+0.8\right)}$`

represents a discrete-time PID controller with a derivative filter. Use `piddata` to extract the parallel-form PID parameters.

```H = zpk([0.5 0.6],[1,-0.8],1,0.1); % sample time Ts = 0.1s [Kp Ki Kd Tf Ts] = piddata(H);```

the `piddata` function uses the default `ForwardEuler` discrete integrator formula for `IFormula` and `DFormula` to compute the parameter values.

Extract the gains from an array of PI controllers.

```sys = pid(rand(2,3),rand(2,3)); % 2-by-3 array of PI controllers [Kp Ki Kd Tf] = piddata(sys);```

The parameters `Kp`, `Ki`, `Kd`, and `Tf` are also 2-by-3 arrays.

Use the index input `J` to extract the parameters of a subset of `sys`.

`[Kp Ki Kd Tf] = piddata(sys,5);`

## Tips

If `sys` is not a `pid` controller object, `piddata` returns the PID gains `Kp`, `Ki`, `Kd` and the filter time constant `Tf` of a parallel-form controller equivalent to `sys`.

For discrete-time `sys`, `piddata` returns the parameters of an equivalent parallel-form controller. This controller has discrete integrator formulas `IFormula` and `DFormula` set to `ForwardEuler`. See the `pid` reference page for more information about discrete integrator formulas.