Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

PID Controller

连续时间或离散时间 PID 控制器

  • 库:
  • Simulink / Continuous

说明

PID Controller 模块实现一个 PID 控制器(PID、PI、PD、仅 P 或仅 I)。该模块与 Time domain 参数设置为 “Continuous-time” 的 Discrete PID Controller 模块相同。

此模块的输出是输入信号、输入信号积分和输入信号导数的加权和。权重为比例、积分和导数增益参数。通过一阶极点筛选导数操作。

该模块支持多种控制器类型和结构体。此模块中可配置的选项包括:

  • 控制器类型(PID、PI、PD、仅 P 或仅 I)- 请参阅 Controller 参数。

  • 控制器形式(Parallel 或 Ideal)- 请参阅 Form 参数。

  • 时域(连续或离散)- 请参阅 Time domain 参数。

  • 初始条件和重置触发器 - 请参阅 SourceExternal reset 参数。

  • 输出饱和限制和内置抗饱和机制 - 请参阅 Limit output 参数。

  • 无扰动切换和多环控制的信号跟踪 - 请参阅 Enable tracking mode 参数。

当您更改这些选项时,模块的内部结构体会通过激活不同的可变子系统而发生更改。(请参阅 Variant Subsystems。)要检查模块及其可变子系统的内部结构体,请右键点击该模块,然后选择 Mask > Look Under Mask

控制配置

在一个常见的实现中,PID Controller 模块在反馈回路的前馈路径中运行。

模块的输入通常是一个误差信号,这是参考信号与系统输出之间的误差。有关允许设定点加权的双输入模块,请参阅 PID Controller (2DOF)

PID 增益调整

PID 控制器系数可手动或自动调整。自动调整需要 Simulink® Control Design™ 软件。有关自动调整的详细信息,请参阅 Select tuning method 参数。

端口

输入

全部展开

参考信号与受控系统输出之间的差异,如下图所示。

当误差信号是向量时,该模块分别对每个信号起作用,从而向量化 PID 系数并产生相同维度的向量输出信号。您可以将 PID 系数和一些其他参数指定为与输入信号具有相同维度的向量。这样做相当于为输入信号中的每一项指定单独的 PID 控制器。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

比例增益,从模块外部的信源提供。外部增益输入非常有用,例如,当您希望将不同的 PID 参数化映射到模块的 PID 增益时。您还可以使用外部增益输入来实现增益调度 PID 控制。在增益调度控制中,您可以通过模型中的逻辑或其他计算确定 PID 系数,并将它们提供给模块。

Dependencies

要启用此端口,请将 Controller parameters Source 设置为 “external”。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

积分增益,由模块外部的信源提供。外部增益输入非常有用,例如,当您希望将不同的 PID 参数化映射到模块的 PID 增益时。您还可以使用外部增益输入来实现增益调度 PID 控制。在增益调度控制中,您可以通过模型中的逻辑或其他计算确定 PID 系数,并将它们提供给模块。

当您从外部提供增益时,还会对积分增益中的时变进行积分。这是由于 PID 增益是在模块内实现而造成的。有关详细信息,请参阅 Controller parameters Source 参数。

Dependencies

要启用此端口,请将 Controller parameters Source 设置为 “external”,并将 Controller 设置为具有积分动作的控制器类型。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

导数增益,由模块外部的信源提供。外部增益输入非常有用,例如,当您希望将不同的 PID 参数化映射到模块的 PID 增益时。您还可以使用外部增益输入来实现增益调度 PID 控制。在增益调度控制中,您可以通过模型中的逻辑或其他计算确定 PID 系数,并将它们提供给模块。

当您从外部提供增益时,还会对导数增益中的时变进行微分。这是由于 PID 增益是在模块内实现而造成的。有关详细信息,请参阅 Controller parameters Source 参数。

Dependencies

要启用此端口,请将 Controller parameters Source 设置为 “external”,并将 Controller 设置为具有导数动作的控制器类型。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

导数滤波器系数,由模块外部的信源提供。外部系数输入非常有用,例如,当您希望将不同的 PID 参数化映射到模块的 PID 增益时。您还可以使用外部输入来实现增益调度 PID 控制。在增益调度控制中,您可以通过模型中的逻辑或其他计算确定 PID 系数,并将它们提供给模块。

Dependencies

要启用此端口,请将 Controller parameters Source 设置为 “external”,并将 Controller 设置为具有滤波后的导数的控制器类型。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

用于将积分器和滤波器重置为其初始条件的触发器。External reset 参数的值确定重置发生在上升信号、下降信号还是水平信号上。端口图标指示所选触发器类型。例如,下图显示 External reset 设置为 “rising” 的连续时间 PID 模块。

当触发事件发生时,模块将积分器和滤波器重置为由 Integrator Initial conditionFilter Initial condition 参数或 I0D0 端口指定的初始条件。

注意

为了符合汽车行业软件可靠性协会 (MISRA®) 的软件标准,您的模型必须使用布尔值信号来驱动 PID controller 模块的外部重置端口。

Dependencies

要启用此端口,请将 External reset 设置为 “none” 以外的任何值。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point | Boolean

积分器初始条件,由模块外部的信源提供。

Dependencies

要启用此端口,请将 Initial conditions Source 设置为 “external”,并将 Controller 设置为具有积分动作的控制器类型。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

导数滤波器的初始条件,由模块外部的信源提供。

Dependencies

要启用此端口,请将 Initial conditions Source 设置为 “external”,并将 Controller 设置为具有导数动作的控制器类型。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

控制器输出要跟踪的信号。激活信号跟踪后,跟踪信号与模块输出之间的差异将反馈给积分器输入。信号跟踪可用于实现系统在两个控制器之间的无扰动切换。它也可用于在多回路控制系统中防止模块饱和。有关详细信息,请参阅 Enable tracking mode 参数。

Dependencies

要启用此端口,请选择 Enable tracking mode 参数。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

离散积分器时间,作为标量提供给模块。您可以使用自己的离散时间积分器采样时间值来定义该模块在 Simulink 中或外部硬件上运行的速率。当在条件执行子系统中使用该模块时,离散时间积分器时间的值应与外部中断的平均采样率相匹配。

换句话说,您可以为以下任何积分器方法指定 Ts,使该值与外部中断的平均采样率相匹配。在离散时间内,控制器传递函数的导数项为:

D[N1+Nα(z)],

其中 α(z) 取决于您使用此参数指定的积分器方法。

Forward Euler

α(z)=Tsz1.

Backward Euler

α(z)=Tszz1.

Trapezoidal

α(z)=Ts2z+1z1.

有关离散时间积分的详细信息,请参阅 Discrete-Time Integrator 模块参考页。有关条件执行子系统的详细信息,请参阅条件执行子系统概述

依存关系

要启用此端口,请将 Time Domain 设置为 “Discrete-time” 并选择 PID Controller is inside a conditionally executed subsystem 选项。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

输出

全部展开

控制器输出,通常基于输入信号、输入信号的积分和输入信号的导数,经由比例、积分和导数增益参数加权求和。通过一阶极点筛选导数操作。控制器信号中存在哪些项取决于您为 Controller 参数选择的内容。当前设置的基本控制器传递函数显示在模块参数的 Compensator formula 部分中和封装下。其他参数修改模块输出,例如 Upper LimitLower Limit 饱和参数指定的饱和限制。

当任一输入为向量信号时,控制器输出是向量信号。在这种情况下,模块充当 N 个独立 PID 控制器,其中 N 是输入向量中的信号数。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

参数

全部展开

指定在控制器中包含比例项、积分项和导数项中的哪些项。

PID

比例、积分和导数动作。

PI

仅比例和积分动作。

PD

仅比例和导数动作。

P

仅比例动作。

I

仅积分动作。

提示

当前设置的控制器传递函数显示在模块参数的 Compensator formula 部分中和封装下。

编程用法

模块参数Controller
类型:字符串、字符向量
值:"PID""PI""PD""P""I"
默认值:"PID"

指定控制器结构是 Parallel 还是 Ideal。

Parallel

控制器输出是比例、积分和导数动作的总和,三者分别用 PID 独立进行加权。例如,对于连续时间并行形式 PID 控制器,传递函数为:

Cpar(s)=P+I(1s)+D(Nss+N).

对于离散时间并行形式的控制器,传递函数为:

Cpar(z)=P+Iα(z)+D[N1+Nβ(z)],

其中 Integrator methodFilter method 参数分别确定 α(z) 和 β(z)。

Ideal

比例增益 P 作用于所有动作的总和。例如,对于连续时间理想形式 PID 控制器,传递函数为:

Cid(s)=P[1+I(1s)+D(Nss+N)].

对于离散时间理想形式的控制器,传递函数为:

Cid(z)=P[1+Iα(z)+DN1+Nβ(z)],

其中 Integrator methodFilter method 参数分别确定 a(z) 和 b(z)。

提示

当前设置的控制器传递函数显示在模块参数的 Compensator formula 部分中和封装下。

编程用法

模块参数Controller
类型:字符串、字符向量
值:"Parallel""Ideal"
默认值"Parallel"

选择 “Discrete-time” 时,建议您为模块指定显式采样时间。请参阅 Sample time (-1 for inherited) 参数。选择 “Discrete-time” 也会启用 Integrator methodFilter method 参数。

PID Controller 模块位于具有同步状态控件(请参阅 State Control (HDL Coder) 模块)的模型中时,您不能选择 “Continuous-time”。

注意

PID ControllerDiscrete PID Controller 模块是相同的,只是此参数的默认值不同。

编程用法

模块参数TimeDomain
类型:字符串、字符向量
值:"Continuous-time""Discrete-time"
默认值"Continuous-time"

对于离散时间 PID 控制器,启用离散时间积分器端口以使用您自己的离散时间积分器采样时间值。为确保正确积分,请使用 TDTI 端口提供标量值 Δt,用于精确的离散时间积分。

依存关系

要启用此参数,请将 Time Domain 设置为 “Discrete-time”。

编程用法

模块参数UseExternalTs
类型:字符串、字符向量
值:"on""off"
默认值"off"

通过输入正标量值(例如 0.1)指定采样时间。默认的离散采样时间为 -1,表示该模块从上游模块继承其采样时间。但是,建议您显式设置控制器采样时间,尤其是在您预计上游模块的采样时间会发生变化时。控制器系数 P、I、D 和 N 的影响取决于采样时间。因此,对于给定的一组系数值,更改采样时间会更改控制器的性能。

有关详细信息,请参阅 指定采样时间

要实现连续时间控制器,请将 Time domain 设置为 “Continuous-time”。

提示

如果要使用外部指定的或可变的采样时间运行模块,请将此参数设置为 -1 并将模块放在 Triggered Subsystem 中。然后,在所需的采样时间触发该子系统。

Dependencies

要启用此参数,请将 Time domain 设置为 “Discrete-time”。

编程用法

模块参数:SampleTime
类型:标量
值: -1、正标量
默认值: -1

在离散时间内,控制器传递函数的积分项为 Iα(z),其中 α(z) 取决于您使用此参数指定的积分器方法。

Forward Euler

正向矩形(左手)逼近方法,

α(z)=Tsz1.

这种方法最适合较小的采样时间,此时 Nyquist 限制与控制器带宽相比来说比较大。对于较大的采样时间,“Forward Euler” 方法可能带来不稳定性,即使离散的是在连续时间下表现稳定的系统。

Backward Euler

反向矩形(右手)逼近方法,

α(z)=Tszz1.

Backward Euler” 方法的一个优点是:使用这种方法离散稳定的连续时间系统始终会生成稳定的离散时间结果。

Trapezoidal

双线性逼近法。

α(z)=Ts2z+1z1.

Trapezoidal” 方法的一个优点是:使用这种方法离散稳定的连续时间系统始终会生成稳定的离散时间结果。在所有可用的积分方法中,“Trapezoidal” 方法可在离散化系统与对应的连续时间系统的频域属性之间生成最接近的匹配。

提示

当前设置的控制器公式显示在模块参数的 Compensator formula 部分中和封装下。

注意

对于 “BackwardEuler” 或 “Trapezoidal” 方法,如果出现以下情况之一,则不能为模块生成 HDL 代码:

  • 选择了 Limit outputAnti-Windup Method 为 “none” 以外的值。

  • 选择了 Enable tracking mode

有关离散时间积分的详细信息,请参阅Discrete-Time Integrator模块参考页。

Dependencies

要启用此参数,请将 Time Domain 设置为 “Discrete-time”,并将 Controller 设置为具有积分动作的控制器类型。

编程用法

模块参数:IntegratorMethod
类型:字符串、字符向量
值:"Forward Euler""Backward Euler""Trapezoidal"
默认值"Forward Euler"

在离散时间内,控制器传递函数的导数项为:

D[N1+Nα(z)],

其中 α(z) 取决于您使用此参数指定的滤波器方法。

Forward Euler

正向矩形(左手)逼近方法,

α(z)=Tsz1.

这种方法最适合较小的采样时间,此时 Nyquist 限制与控制器带宽相比来说比较大。对于较大的采样时间,“Forward Euler” 方法可能带来不稳定性,即使离散的是在连续时间下表现稳定的系统。

Backward Euler

反向矩形(右手)逼近方法,

α(z)=Tszz1.

Backward Euler” 方法的一个优点是:使用这种方法离散稳定的连续时间系统始终会生成稳定的离散时间结果。

Trapezoidal

双线性逼近法。

α(z)=Ts2z+1z1.

Trapezoidal” 方法的一个优点是:使用这种方法离散稳定的连续时间系统始终会生成稳定的离散时间结果。在所有可用的积分方法中,“Trapezoidal” 方法可在离散化系统与对应的连续时间系统的频域属性之间生成最接近的匹配。

提示

当前设置的控制器公式显示在模块参数的 Compensator formula 部分中和封装下。

有关离散时间积分的详细信息,请参阅Discrete-Time Integrator模块参考页。

Dependencies

要启用此参数,请将 Time Domain 设置为 “Discrete-time” 并启用 Use filtered derivative

编程用法

模块参数FilterMethod
类型:字符串、字符向量
值:"Forward Euler""Backward Euler""Trapezoidal"
默认值"Forward Euler"

Main

如果为参数启用外部输入,您可以在模块外部计算 PID 增益和滤波器系数,并将它们作为信号输入提供给模块。

internal

使用模块参数 PIDN 指定控制器增益和滤波器系数。

external

使用模块输入从外部指定 PID 增益和滤波器系数。对于当前控制器类型需要的每个参数,模块上会出现一个额外的输入端口。

外部增益输入非常有用,例如,当您希望将不同的 PID 参数化映射到模块的 PID 增益时。您还可以使用外部增益输入来实现增益调度 PID 控制。在增益调度控制中,您可以通过模型中的逻辑或其他计算确定 PID 增益,并将它们提供给模块。

如果从外部提供增益,则会分别对积分和导数增益值的时变进行积分和微分。出现这种结果是因为在连续时间和离散时间中,增益都会在积分或微分之前应用于信号。例如,对于采用外部输入的连续时间 PID 控制器,积分项的实现方式如下图所示。

在进行积分之前,系统会在模块内将输入信号 u 乘以外部提供的积分增益 I。此实现的结果为:

yi=uIdt.

因此,积分增益包含在积分中。类似地,在模块的导数项中,进行微分之前会乘以导数增益,从而导致导数增益 D 被微分。

编程用法

模块参数ControllerParametersSource
类型:字符串、字符向量
值:"internal""external"
默认值"internal"

为比例增益指定有限实数增益值。Controller form 可以是:

  • Parallel” - 比例动作独立于积分和导数动作。例如,对于连续时间并行 PID 控制器,传递函数为:

    Cpar(s)=P+I(1s)+D(Nss+N).

    对于离散时间并行形式的控制器,传递函数为:

    Cpar(z)=P+Iα(z)+D[N1+Nβ(z)],

    其中 Integrator methodFilter method 参数分别确定 α(z) 和 β(z)。

  • Ideal” - 比例增益乘以积分和导数项。例如,对于连续时间理想 PID 控制器,传递函数为:

    Cid(s)=P[1+I(1s)+D(Nss+N)].

    对于离散时间理想形式的控制器,传递函数为:

    Cid(z)=P[1+Iα(z)+DN1+Nβ(z)],

    其中 Integrator methodFilter method 参数分别确定 α(z) 和 β(z)。

可调: Yes

Dependencies

要启用此参数,请在 Main 选项卡中,将控制器参数 Source 设置为 “internal”,并将 Controller 设置为 “PID”、“PD”、“PI” 或 “P”。

编程用法

模块参数P
类型:标量、向量
默认值:1

为积分增益指定有限实数增益值。

可调: Yes

Dependencies

要启用此参数,请在 Main 选项卡中将控制器参数 Source 设置为 “internal”,并将 Controller 设置为具有积分动作的类型。

编程用法

模块参数I
类型:标量、向量
默认值:1

为导数增益指定有限实数增益值。

可调: Yes

Dependencies

要启用此参数,请在 Main 选项卡中将控制器参数 Source 设置为 “internal”,并将 Controller 设置为 “PID” 或 “PD”。

编程用法

模块参数:D
类型:标量、向量
默认值:0

仅针对离散时间 PID 控制器,取消选中此选项以将滤波后的导数替换为未过滤的离散时间微分器。执行此操作时,控制器传递函数的导数项变为:

Dz1zTs.

对于连续时间 PID 控制器,始终过滤导数项。

Dependencies

要启用此参数,请将 Time domain 设置为 “Discrete-time”,并将 Controller 设置为具有导数动作的类型。

编程用法

模块参数UseFilter
类型:字符串、字符向量
值:"on""off"
默认值"on"

为滤波器系数指定有限实数增益值。滤波器系数确定滤波器在模块的导数动作中的极点位置。滤波器极点的位置取决于 Time domain 参数。

  • Time domain 为 “Continuous-time” 时,极点位置为 s = -N

  • Time domain 为 “Discrete-time” 时,极点位置取决于 Filter method 参数。

    滤波器方法滤波器极点的位置
    Forward Eulerzpole=1NTs
    Backward Eulerzpole=11+NTs
    Trapezoidalzpole=1NTs/21+NTs/2

模块不支持 N = Inf(理想的未过滤导数)。当 Time domain 为 “Discrete-time” 时,可以清除 Use filtered derivative 以删除导数滤波器。

可调: Yes

Dependencies

要启用此参数,请在 Main 选项卡中将控制器参数 Source 设置为 “internal”,并将 Controller 设置为 “PID” 或 “PD”。

编程用法

模块参数N
类型:标量、向量
默认值:100

如果您有 Simulink Control Design 软件,则可以自动调整 PID 系数。为此,请使用此参数选择调整工具,然后点击 Tune

Transfer Function Based (PID Tuner App)

使用 PID Tuner,您可以在检查相关系统响应以验证性能的同时交互调整 PID 系数。默认情况下,这种 PID Tuner 适合线性化被控对象模型。对于无法线性化的模型,您可以根据从仿真或测量的响应数据估算出的被控对象模型来调整 PID 系数。有关详细信息,请参阅Introduction to Model-Based PID Tuning in Simulink (Simulink Control Design)

Frequency Response Based

使用 Frequency Response Based PID Tuner,它根据通过仿真获得的频率响应估计数据来调整 PID 控制器系数。这种调整方法特别适用于不可线性化或线性化为零的被控对象。有关详细信息,请参阅Design PID Controller from Plant Frequency-Response Data (Simulink Control Design)

这两种调整方法都采用单回路控制配置。Simulink Control Design 软件提供适合更复杂配置的其他调整方法。有关调整 PID Controller 模块的其他方法的信息,请参阅Choose a Control Design Approach (Simulink Control Design)

过零检测可以准确无误地确定信号的不连续性,而无需检测特别小的时间步,因为这样可能会大大延长仿真时间。如果在 PID Controller 模块中选择 Limit output 或者激活 External reset,激活过零检测可以缩短仿真时的计算时间。选择此参数可在以下时间激活过零检测:

  • 在初始状态重置时

  • 在进入上限或下限饱和状态时

  • 在退出上限或下限饱和状态时

有关过零检测的详细信息,请参阅过零检测

编程用法

模块参数:ZeroCross
类型:字符串、字符向量
值:"on""off"
默认值"on"

初始化:

Simulink 使用初始条件在仿真开始时或在指定的触发事件发生时初始化积分器和导数滤波器(或未过滤的导数)输出。(请参阅 External reset 参数。)这些初始条件确定初始模块输出。使用此参数选择如何向模块提供初始条件值。

internal

使用 Integrator Initial conditionFilter Initial condition 参数指定初始条件。如果未选择 Use filtered derivative,请使用 Differentiator 参数指定未过滤的微分器的初始条件,而不是滤波器初始条件。

external

使用模块输入从外部指定初始条件。额外的输入端口 IoDo 出现在模块中。如果未选择 Use filtered derivative,请在 Do 处提供未滤波的微分器的初始条件,而不是滤波器初始条件。

编程用法

模块参数:InitialConditionSource
类型:字符串、字符向量
值:"internal""external"
默认值"internal"

Simulink 在仿真一开始或在发生指定的触发事件时(请参阅 External reset)使用积分器初始条件来初始化积分器。积分器初始条件与滤波器初始条件一起确定 PID controller 模块的初始输出。

积分器初始条件不能是 NaNInf

Dependencies

要使用此参数,请在 Initialization 选项卡中将 Source 设置为 “internal”,然后将 Controller 设置为具有积分动作的类型。

编程用法

模块参数InitialConditionForIntegrator
类型:标量、向量
默认值:0

Simulink 在仿真一开始或在发生指定的触发事件时(请参阅 External reset)使用滤波器初始条件来初始化导数滤波器。积分器初始条件与滤波器初始条件一起确定 PID controller 模块的初始输出。

滤波器初始条件不能是 NaNInf

Dependencies

要使用此参数,请在 Initialization 选项卡中将 Source 设置为 “internal”,并使用具有导数滤波器的控制器。

编程用法

模块参数InitialConditionForFilter
类型:标量、向量
默认值:0

使用未过滤的导数时,Simulink 使用此参数在仿真一开始或在发生指定的触发事件时(请参阅 External reset)初始化微分器。积分器初始条件和导数初始条件一起确定 PID controller 模块的初始输出。

导数初始条件不能是 NaNInf

Dependencies

要使用此参数,请将 Time domain 设置为 “Discrete-time”,清除 Use filtered derivative 复选框,然后在 Initialization 选项卡中,将 Source 设置为 “internal”。

编程用法

模块参数DifferentiatorICPrevScaledInput
类型:标量、向量
默认值:0

使用此参数指定是否将 Integrator Initial conditionFilter Initial condition 参数应用于对应的模块状态或输出。您只能在命令行中使用 set_param 设置模块的 InitialConditionSetting 参数来更改此参数。

State (most efficient)

除非模块在触发子系统或函数调用子系统中且启用了简化初始化模式,否则其他所有情况下均使用此选项。

Output

当模块在触发子系统或函数调用子系统中且启用了简化初始化模式时,使用此选项。

有关 Initial condition setting 参数的详细信息,请参阅 Discrete-Time Integrator 模块。

此参数只能通过编程用法访问。

编程用法

模块参数InitialConditionSetting
类型:字符串、字符向量
值:"state""output"
默认值"state"

指定使模块将积分器和滤波器重置为初始条件的触发条件。(如果未选择 Use filtered derivative,则触发器会将积分器和微分器重置为初始条件。)选择 “none” 之外的任何选项都将在模块上启用 Reset 端口以接收外部重置信号。

none

积分器和滤波器(或微分器)输出在仿真开始时设置为初始条件,在仿真期间不会重置。

rising

当重置信号具有上升沿时重置输出。

falling

当重置信号具有下降沿时重置输出。

either

当重置信号上升或下降时重置输出。

level

当重置信号具有以下情况之一时重置输出:

  • 在当前时间步为非零值时

  • 从上一时间步的非零更改为当前时间步的零时

此选项在重置信号非零时使输出保持在初始条件。

依存关系

要启用此参数,请将 Controller 设置为具有导数或积分动作的类型。

编程用法

模块参数:ExternalReset
类型:字符串、字符向量
值:"none""rising""falling""either""level"
默认值"none"

选择此项可强制 Simulink 和 Simulink Control Design 线性化命令忽略在 External reset 参数中指定的任何重置机制。忽略重置状态将允许您围绕某个工作点对模型进行线性化,即使该工作点会导致模块重置也一样。

编程用法

模块参数:IgnoreLimit
类型:字符串、字符向量
值:"off""on"
默认值"off"

信号跟踪使模块输出能够跟随您在 TR 端口提供的跟踪信号。激活信号跟踪后,跟踪信号与模块输出之间的差异将反馈给由 Tracking gain (Kt) 参数指定的增益为 Kt 的积分器输入。跟踪信号具有多种应用,包括无扰动切换和避免多回路控制结构中的饱和。

无扰动切换

使用信号跟踪可以实现系统在两个控制器之间切换时的无扰动切换。假设您要在 PID 控制器和另一个控制器之间转移控制权。为此,将控制器输出连接到 TR 输入,如下图所示。

有关详细信息,请参阅 Bumpless Control Transfer

Multiloop control

使用信号跟踪来防止多回路控制方法中的模块饱和,如以下模型中所示。

Inner Loop 子系统包含下图所示的模块。

由于 PID 控制器跟踪内环的输出,因此其输出永远不会超过饱和内环输出。有关详细信息,请参阅Prevent Block Windup in Multiloop Control

Dependencies

要启用此参数,请将 Controller 设置为具有积分动作的类型。

编程用法

模块参数TrackingMode
类型:字符串、字符向量
值:"off""on"
默认值"off"

选择 Enable tracking mode 时,信号 TR 与模块输出之间的差异将反馈到具有增益 Kt 的积分器输入。使用此参数指定该反馈回路中的增益。

依存关系

要启用此参数,请选择 Enable tracking mode

编程用法

模块参数Kt
类型:标量
默认值:1

输出饱和

激活此选项可将模块输出限制在模块内部,因此无需在控制器后面另加 Saturation 模块。它还允许您激活模块内置的抗饱和机制(请参阅 Anti-windup method 参数)。使用 Lower saturation limitUpper saturation limit 参数指定饱和限制。

编程用法

模块参数LimitOutput
类型:字符串、字符向量
值:"off""on"
默认值"off"

指定模块输出的上限值。一旦比例、积分和导数动作的加权和高于 Upper saturation limit,模块输出将保持在该上限值。

依存关系

要启用此参数,请选择 Limit output

编程用法

模块参数:UpperSaturationLimit
类型:标量
默认值Inf

指定模块输出的下限。一旦比例、积分和微分操作的加权和低于 Lower saturation limit 时,模块输出将保持在该下界值。

依存关系

要启用此参数,请选择 Limit output

编程用法

模块参数:LowerSaturationLimit
类型:标量
默认值-Inf

强制 Simulink 和 Simulink Control Design 线性化命令忽略在 Upper limitLower limit 参数中指定的模块输出限制。忽略输出限制允许您围绕某个工作点对模型进行线性化,即使该工作点会导致模块超出输出限制也一样。

依存关系

要启用此参数,请选择 Limit output 参数。

编程用法

模块参数LinearizeAsGain
类型:字符串、字符向量
值:"off""on"
默认值"off"

如果选中了 Limit output 且控制器组件的加权和超出了指定的输出限制,模块输出将保持在指定的限制值。但是,积分器输出可以继续增加(积分器饱和),从而加大了模块输出与模块组件之和之间的差距。换句话说,即使输出看起来在饱和界限范围内,模块中的内部信号也可以无限大。如果没有积分器抗饱和机制,可能会产生以下两种结果:

  • 输入信号的符号永远不变,积分器继续计算积分,直到溢出。溢出值是积分器输出的数据类型的最大值或最小值。

  • 如果输入信号的符号在加权和超出输出界限时发生改变,它将需要很长时间来防止积分器饱和,并返回位于模块饱和界限范围内的加权和。

无论哪种情况,控制器性能都会受到影响。要在没有抗饱和机制的情况下消除饱和效果,可能需要解调控制器(例如,通过减小控制器增益),从而导致控制器速度缓慢。要避免此问题,请使用此参数激活抗饱和机制。

none

不使用抗饱和机制。

back-calculation

当模块输出饱和时,通过将饱和控制信号与非饱和控制信号之间的差异反馈给积分器来防止积分器饱和。下图表示连续时间控制器的反算反馈电路。要查看控制器配置的实际反馈电路,请右键点击该模块,然后选择 Mask > Look Under Mask

使用 Back-calculation coefficient (Kb) 参数指定抗饱和反馈电路的增益。通常,设置 Kb = I(对于具有导数动作的控制器,设置 Kb = sqrt(I*D))是恰当的。对于饱和时间相对较长的被控对象,反算很有效。[1]

clamping

当模块组件之和超出输出限制且积分器输出与模块输入具有相同的符号时,积分停止。当模块组件之和超出输出限制且积分器输出与模块输入具有相反的符号时,积分恢复。钳位有时称为条件积分。

对于饱和时间相对较小的被控对象,钳位可能很有用;但对于饱和时间较大的被控对象,它可能产生不良的瞬时响应。[1]

依存关系

要启用此参数,请选择 Limit output 参数。

编程用法

模块参数AntiWindupMode
类型:字符串、字符向量
值:"none""back-calculation""clamping"
默认值"none"

当模块输出饱和时,back-calculation 抗饱和方法防止积分器饱和。它通过向积分器反馈饱和控制信号与非饱和控制信号之间的差异来实现此目的。使用 Back-calculation coefficient (Kb) 参数指定抗饱和反馈电路的增益。有关详细信息,请参阅 Anti-windup method 参数。

依存关系

要启用此参数,请选择 Limit output 参数,并将 Anti-windup method 参数设置为 “back-calculation”。

编程用法

模块参数Kb
类型:标量
默认值:1

Data Types

此选项卡中的参数主要用于使用 Fixed-Point Designer™ 生成定点代码。它们定义在生成代码时如何存储和处理与模块关联的数值量。

如果需要为定点代码生成配置数据类型,请点击 Open Fixed-Point Tool 并使用该工具配置选项卡中的其余参数。有关使用 Fixed-Point Tool 的信息,请参阅Autoscaling Data Objects Using the Fixed-Point Tool (Fixed-Point Designer)

使用 Fixed-Point Tool 后,在必要时可以使用此选项卡中的参数调整定点数据类型设置。对于与模块关联的每个量,您可以指定:

  • 浮点或定点数据类型,包括数据类型是否继承自模块中的上游值。

  • 量的最小值和最大值,用于确定如何对量进行定标以使用定点表示。

要获取帮助以选择适当的值,请点击 以打开对应量的 Data Type Assistant。有关详细信息,请参阅使用 Data Type Assistant 指定数据类型

Data Types 选项卡中具体列出的量取决于您配置 PID 控制器模块的方式。通常,您可以为以下类型的量配置数据类型:

  • 乘积输出 - 存储在模块封装下执行的乘法的结果。例如,P product output 存储增益模块的输出,该输出是模块输入与比例增益 P 的乘积。

  • 参数 - 存储数值模块参数的值,例如 PID

  • 模块输出 - 存储位于 PID 控制器模块封装下的模块的输出。例如,使用 Integrator output 指定名为 Integrator 的模块输出的数据类型。此模块位于 Integrator 子系统中的封装下,并计算控制器操作的积分项。

  • 累加器 - 存储与求和模块关联的值。例如,SumI2 Accumulator 设置与求和模块 SumI2 关联的累加器的数据类型。此模块位于 Anti-Windup 子系统的 Back Calculation 子系统中的封装下。

通常,您可以通过查看 PID Controller 模块封装并检查其子系统来查找与任何列出的参数关联的模块。您还可以使用 Model Explorer 在封装下搜索列出的参数名称,例如 SumI2。(请参阅 Model Explorer。)

匹配输入和内部数据类型

默认情况下,模块中的所有数据类型都设置为 “Inherit:Inherit via internal rule”。使用此设置时,Simulink 在考虑嵌入式目标硬件的属性的同时,会选择相应的数据类型来平衡数值准确性、性能和生成的代码大小。

在某些情况下,模块内的数据类型之间可能会发生不兼容。例如,在连续时间下,封装下的 Integrator 模块只能接受 “double” 类型的信号。如果模块输入信号的类型不能转换为 “double”,例如 “uint16”,则生成代码时类型继承的内部规则会生成错误。

为了避免此类错误,可以使用 Data Types 设置强制进行数据类型转换。例如,您可以将 P product outputI product outputD product output 显式设置为 “double”,确保到达连续时间积分器的信号类型为 “double”。

通常,不建议在连续时间下将模块用于代码生成应用。但是,如果您将某些值显式设置为与模块中的下游信号约束不兼容的数据类型,则在离散时间下会发生类似的数据类型错误。在这种情况下,请使用 Data Types 设置确保所有数据类型在内部兼容。

定点运算参数

指定定点运算的舍入模式。有关详细信息,请参阅Rounding (Fixed-Point Designer)

模块参数始终舍入到最接近的可表示值。要控制模块参数的舍入方法,请在封装字段中使用 MATLAB® 舍入函数输入表达式。

编程用法

模块参数:RndMeth
类型:字符向量
值:'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero'
默认值:'Floor'

指定对溢出是进行饱和处理还是绕回处理。

  • off - 溢出将绕回到数据类型可以表示的合适值。

    例如,数字 130 不适合一个有符号的 8 位整数,因此绕回 -126。

  • on - 将溢出饱和处理为数据类型能够表示的最小值或最大值。

    例如,一个有符号的 8 位整数的溢出可以饱和处理为 -128 或 127。

提示

  • 如果您的模型存在可能的溢出,而您希望在生成的代码中进行显式饱和保护,请考虑选中此复选框。

  • 如果您希望优化生成的代码的效率,请考虑清除此复选框。

    清除此复选框还可以帮助您避免过度地指定信号超出范围时的处理方式。有关详细信息,请参阅信号范围错误故障排除

  • 如果选中此复选框,饱和将应用于模块中的每个内部操作,而不仅仅应用于输出或结果。

  • 一般情况下,代码生成进程可以检测到何时不可能发生溢出。在这种情况下,代码生成器不会生成饱和代码。

编程用法

模块参数:SaturateOnIntegerOverflow
类型:字符向量
值:'off' | 'on'
默认值:'off'

选择此参数可防止定点工具覆盖您对此模块指定的数据类型。有关详细信息,请参阅Lock the Output Data Type Setting (Fixed-Point Designer)

编程用法

模块参数:LockScale
类型:字符向量
值:'off' | 'on'
默认值:'off'

State Attributes

此选项卡中的参数主要用于代码生成。

对于连续时间 PID 控制器,为与积分器或滤波器关联的状态分配唯一名称。(有关离散时间 PID 控制器中的状态名称的信息,请参阅 State name 参数。)状态名称的用途举例如下:

  • 用于生成代码中的对应变量

  • 作为在仿真期间记录状态时存储名称的一部分

  • 用于通过线性化模块获得的线性模型中的对应状态

有效的状态名称以字母或下划线字符开始,后跟字母数字或下划线字符。

Dependencies

要启用此参数,请将 Time domain 设置为 “Continuous-time”。

编程用法

参数:IntegratorContinuousStateAttributesFilterContinuousStateAttributes
类型:字符向量
默认值:''

对于离散时间 PID 控制器,为与积分器或滤波器关联的状态分配唯一名称。(有关连续时间 PID 控制器中的状态名称的信息,请参阅 State name (e.g., 'position') 参数。)

有效的状态名称以字母或下划线字符开始,后跟字母数字或下划线字符。状态名称的用途举例如下:

  • 用于生成代码中的对应变量

  • 作为在仿真期间记录状态时存储名称的一部分

  • 用于通过线性化模块获得的线性模型中的对应状态

有关在代码生成中使用状态名称的详细信息,请参阅将存储类应用于单个信号、状态和参数数据元素 (Simulink Coder)

Dependencies

要启用此参数,请将 Time domain 设置为 “Discrete-time”。

编程用法

参数:IntegratorStateIdentifierFilterStateIdentifier
类型:字符串、字符向量
默认值:""

选择此参数会要求将离散时间积分器或滤波器状态名称解析为 Simulink 信号对象。

依存关系

要为离散时间积分器或滤波器状态启用此参数,请执行下列操作:

  1. Time domain 设置为 “Discrete-time”。

  2. 指定积分器或滤波器 State name 的值。

  3. 将模型配置参数 Signal resolution 设置为 “None” 以外的值。

选中此复选框将对相应的积分器或滤波器状态禁用 Code generation storage class

编程用法

模块参数:IntegratorStateMustResolveToSignalObjectFilterStateMustResolveToSignalObject
类型:字符串、字符向量
值:"off""on"
默认值"off"

选择用于代码生成的状态存储类。如果您不需要与外部代码对接,请选择 Auto

有关详细信息,请参阅将存储类应用于单个信号、状态和参数数据元素 (Simulink Coder)Organize Parameter Data into a Structure by Using Struct Storage Class (Embedded Coder)

依存关系

要为离散时间积分器或滤波器状态启用此参数,请执行下列操作:

  1. Time domain 设置为 “Discrete-time”。

  2. 指定积分器或滤波器 State name 的值。

  3. 将模型配置参数 Signal resolution 设置为 “None” 以外的值。

编程用法

模块参数:IntegratorRTWStateStorageClassFilterRTWStateStorageClass
类型:字符串、字符向量
值:"Auto""ExportedGlobal""ImportedExtern" | "ImportedExternPointer"
默认值"Auto"

指定存储类型限定符,如 constvolatile

注意

将来的版本中将删除此参数。要将存储类型限定符应用于数据,请使用自定义存储类和内存段。除非您将基于 ERT 的代码生成目标与 Embedded Coder® 一起使用,否则自定义存储类和内存段不会影响生成的代码。

Dependencies

要启用此参数,请将 Code generation storage class 设置为 “Auto” 以外的任何值。

编程用法

模块参数:IntegratorRTWStateStorageTypeQualifierFilterRTWStateStorageTypeQualifier
类型:字符串、字符向量
值:"""const""volatile"
默认值""

模块特性

数据类型

double | fixed point | integer | single

直接馈通

多维信号

可变大小信号

过零检测

参考

[1] Visioli, A., "Modified Anti-Windup Scheme for PID Controllers," IEE Proceedings - Control Theory and Applications, Vol. 150, Number 1, January 2003

扩展功能

PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。

在 R2009b 中推出