# tunablePID
可调 PID 控制器
函数库: TyControlSystems
# 描述
创建一自由度 PID 控制器的模型对象。tunablePID 参数化可调 SISO PID 控制器,从而用于参数研究。
tunablePID 是参数化模型的控制设计块系列的一部分。其他控制设计模块包括 tunablePID2、tunableTF、tunableSS 和 tunableGain。
# 属性
Kp, Ki, Kd, Tf - PID 增益及滤波时间常数的参数化结构体
PID 控制器增益 Kp、Ki、Kd 以及滤波时间常数 Tf 的参数化,指定为结构体。
当对模块进行调优时,可以使用 blk.Kp,blk.Ki,blk.Kd 和 blk.Tf 的如下字段:
| 字段 | 描述 |
|---|---|
| Value | 参数的当前值。 |
| Free | 确定参数是固定参数还是可调参数的逻辑值。例如 - 如果 blk.Kp.Free[ ] = True,那么 blk.Kp.Value 是可调的; - 如果 blk.Kp.Free[ ] = False,那么 blk.Kp.Value 是固定的。 |
| Minimum | 参数的最小值。此属性对参数的调优值设置了下界。例如,设置 blk.Kp.Minimum = 0 确保 Kp 保持为正。blk.Kp.Minimum 的最小值必须总是正的。 |
| Maximum | 该参数的最大值。此属性对参数的调优值设置了上限。例如,设置 blk.Tf.Maximum = 100 确保过滤器时间常数不超过 100。 |
IFormula, DFormula - 离散时间积分公式字符串
积分项
| 取值 | |
|---|---|
| "ForwardEuler" | |
| "BackwardEuler" | |
| "Trapezoidal" |
数据类型: String
Ts - 采样时间正实数 | 0(默认) | -1
系统的采样时间,指定为正实数(表示离散系统)、0(表示连续系统)或 -1(表示未指定)。
更改此属性不会使模型离散化或重新采样。
数据类型: Float | Int
TimeUnit - 时间单位字符串
模型中时间变量、采样时间 Ts 和任意时延的单位,指定为字符串。可用的时间单位包括:
- "nanoseconds"
- "microseconds"
- "milliseconds"
- "seconds"
- "minutes"
- "hours"
- "days"
- "weeks"
- "months"
- "years"
更改 TimeUnit 对其他属性没有影响,因此不会改变整个系统的行为。
数据类型: String
InputName - 输入通道名称向量
可调模型的输入通道名称,指定为由字符串构成的向量。
数据类型: String
InputUnit - 输入通道单位向量
可调模型的输入通道单位,指定为由字符串构成的向量。
数据类型: String
InputGroup - 输入通道组字典
输入通道组,指定为由输入通道索引构成的字典。InputGroup 属性将 MIMO 系统的输入通道按名称分配到组中。例如,
sys.InputGroup = Dict([("controls",[1,2]),("noise",[3,5])])
创建名为 controls 和 noise 的输入组,分别包括输入通道 1,2 和 3,5。
OutputName - 输出通道名称向量
可调模型的输出通道名称,指定为由字符串构成的向量。
数据类型: String
OutputUnit - 输出通道单位向量
可调模型的输出通道单位,指定为由字符串构成的向量。
数据类型: String
OutputGroup - 输出通道组字典
输出通道组,指定为由输入通道索引构成的字典。OutputGroup 属性将 MIMO 系统的输出通道按名称分配到组中。例如,
sys.OutputGroup= Dict([("temperature",[1]),("measurement ",[3,5])])
创建名为 temperature 和 measurement 的输出组,分别包括输入通道 1 和 3,5。
Name - 模型名称字符串
模型名称,指定为字符串。
数据类型: String
Notes - 提示文本字符串
要与系统关联的任何文本,指定为字符串。
数据类型: String
UserData - 用户数据任意类型
与系统关联的用户数据,指定为任意 Julia 数据类型。
# 语法
blk = tunablePID(name, type)
blk = tunablePID(name, type, Ts)
# 说明
blk = tunablePID(name, type) 创建一自由度连续时间PID控制器:
其中,
blk = tunablePID(name, type, Ts) 创建采样时间为 Ts 的一自由度离散时间PID控制器:
其中,
# 示例
参数固定的可调控制器
创建一个可调 PD 控制器。
using TyControlSystems
blk = tunablePID("pdblock","PD")
可调连续时间 PID 控制器 pdblock,公式:
s
Kp + Kd * --------
Tf*s+1
具有可调参数 Kp, Kd, Tf。
键入 pid(blk) 可查看当前值,键入 get(blk) 可查看所有属性。
随后,初始化参数值并设置滤波器时间常数。
blk.Kp.Value = 4; # 初始化 Kp 为 4
blk.Kd.Value = 0.7; # 初始化 Kd 为 0.7
blk.Tf.Value = 0.01; # 设置 Tf 为 0.01
blk.Tf.Free[1] = false; # 固定 Tf 为该值
查看 blk 的当前值。
pid(blk)
名称: pdblock
s
Kp + Kd * --------
Tf*s+1
且Kp = 4.0, kd = 0.7
并联型的连续时间 PDF 控制器
如果为采样时间为 0.005 s 的离散时间系统,可以按如下方式创建。
blk = tunablePID("pdblock","PD", 0.005)
可调离散时间 PID 控制器 pdblock,公式:
1
Kp + Kd * -----------
Tf+Ts/(z-1)
具有可调参数 Kp, Kd, Tf。
键入 pid(blk) 可查看当前值,键入 get(blk) 可查看所有属性。
blk.Kp.Value = 4; # 初始化 Kp 为 4
blk.Kd.Value = 0.7; # 初始化 Kd 为 0.7
blk.Tf.Value = 0.01; # 设置 Tf 为 0.01
blk.Tf.Free[1] = false; # 固定 Tf 为该值
查看 blk 的当前值。
pid(blk)
名称: pdblock
1
Kp + Kd * -----------
Tf+Ts/(z-1)
且 Kp = 4.0, Kd = 0.7, Tf = 0.01, Ts = 0.005
Sample Time: 0.005 (seconds)
并联型的离散时间 PDF 控制器
带有输入输出名称的控制器
创建一个可调 PID 控制器,并为输入和输出指定名称。
using TyControlSystems
blk = tunablePID("pidblock","PID")
可调连续时间 PID 控制器 pidblock,公式:
1 s
Kp + Ki * --- + Kd * --------
s Tf*s+1
具有可调参数 Kp, Ki, Kd, Tf。
键入 pid(blk) 可查看当前值,键入 get(blk) 可查看所有属性。
blk.InputName = "error";
blk.OutputName = "control";
查看 blk 的所有属性:
get(blk)
Kp: 1-by-1 结构体
Ki: 1-by-1 结构体
Kd: 1-by-1 结构体
Tf: 1-by-1 结构体
IFormula: "ForwardEuler"
DFormula: "ForwardEuler"
Name: "pidblock"
Ts: 0.0
TimeUnit: "seconds"
InputName: "error"
InputUnit: ""
InputGroup: Dict{Any, Any}()
OutputName: "control"
OutputUnit: ""
OutputGroup: Dict{Any, Any}()
Notes: ""
UserData: Any[]
# 输入参数
name - PID 控制器名称字符串
可调 PID 控制器 blk 的名称,指定为字符串。
数据类型: String
type - 控制器类型字符串
控制器 blk 的类型,指定为字符串。其取值如下表所示,最多可指定 3 个 PID 控制器参数。
| type 取值 | 控制器类型 | 对PID参数的影响 |
|---|---|---|
| "P" | 比例 | |
| "PI" | 比例-积分 | |
| "PD" | 比例-微分(微分作用带有一节滤波器) | |
| "PID" | 比例-积分-微分(微分作用带有一节滤波器) |
数据类型: String
Ts - 采样时间正实数 | 0(默认) | -1
采样时间,指定为正实数(表示离散系统)、0(表示连续系统)或 -1(表示未指定)。
数据类型: Float | Int
# 输出参数
blk - 可调 PID 控制器模块可调 PID 控制器
由 tunablePID 创建得到的可调 PID 控制器模块。
# 其他描述
- 通过固定或者释放任意参数(
, , 和 )来调整 PID 的结构。例如,使用字段 blk.TF.Free = false 让 TF 固定为当前值; - 要将一个 tunablePID 参数模型转化为一个数字(非可调)模型,可以使用 pid、tf、zpk 或 ss 模型创建命令。
# 另请参阅
pid | tunablePID2 | tunableGain | tunableTF | tunableSS