S 曲线 (SCRV)
此信息适用于
CompactLogix
5370、ControlLogix
5570、Compact GuardLogix
5370、GuardLogix
5570、CompactLogix
5380、ControlLogix
5580 和 ControlLogix 5590 控制器。SCRV 指令执行具有附加急动度的斜坡函数。急动度是将输出经过斜坡处理为输入时使用的变化率的最大变化率。
可用语言
梯形图
此指令不可用于梯形图中。
功能块

结构化文本
SCRV(SCRV_tag);
操作数
功能块
操作数 | 类型 | 格式 | 说明 |
|---|---|---|---|
SCRV tag | S_CURVE | 结构 | SCRV 结构 |
结构化文本
操作数 | 类型 | 格式 | 说明 |
|---|---|---|---|
SCRV tag | S_CURVE | 结构 | SCRV 结构 |
有关结构化文本中表达式语法的更多信息,请参见“结构化文本语法”部分。
S_CURVE 结构
输入参数 | 数据类型 | 说明 |
|---|---|---|
EnableIn | BOOL | 启用输入。如果此参数清零,指令不会执行,也不会更新输出。 默认置位。 |
In | REAL | 指令的模拟信号输入。 有效值 = 任意浮点值 默认值 = 0.0 |
Initialize | BOOL | 指令的初始化输入。该参数置位时,指令保持 Out = InitialValue 默认清零。 |
InitialValue | REAL | S 曲线的初始值。当设置 Initialize 时,Out = InitialValue。 有效值 = 任意浮点值 默认值 = 0.0 |
AbsAlgRamp | BOOL | 斜坡类型。置位时,指令将用作绝对值斜坡。清零时,指令将用作代数斜坡。 默认置位 |
AccelRate | REAL | 加速度,单位为输入单位/秒 2 。零值可阻止 Out 加速。当 AccelRate < 0 时,该指令会假定 AccelRate = 0,并将 Status 中的相应位置位。有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
DecelRate | REAL | 减速度,单位为输入单位/秒 2 。零值可阻止 Out 减速。当 DecelRate < 0 时,该指令会假定 DecelRate = 0,并将 Status 中的相应位置位。有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
JerkRate | REAL | 急动度,单位为输入单位/秒 3 。指定将斜坡输出转换为输入时加速度和减速度的最大变化率。当 (JerkRate * DeltaT) S AccelRate 或 DecelRate 时,加速度和减速度不受限制。在此情况下,该指令的作用相当于一个斜坡函数。当 JerkRate < 0 时,该指令会假定 JerkRate = 0,并将 Status 中的相应位置位。有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
HoldMode | BOOL | S 曲线保持模式参数。该参数与 HoldEnable 参数一起使用。如果在 HoldEnable 置位且 Rate = 0 时 HoldMode 置位,指令将使 Out 保持不变。在这种情况下,只要 HoldEnable 置位指令就会使 Out 保持不变,JerkRate 会被忽略,而且 Out 曲线中将生成“拐点”。如果 HoldMode 在 HoldEnable 置位时清零,指令将使用 JerkRate 将 Out 变为常数值。当 Rate = 0 时,Out 保持不变。一旦 HoldEnable 置位,请勿更改 HoldMode,因为指令将忽略此更改。 默认清零。 |
HoldEnable | BOOL | S 曲线保持启用参数。置位时,Out 保持不变。清零时,Out 从当前值开始变化,直到等于 In。 默认清零。 |
TimingMode | DINT | 选择时序执行模式。 0 = 周期性模式 1 = 过采样模式 2 = 实时采样模式 有关时序模式的更多信息,请参见“功能块属性”部分。 有效值 = 0 至 2 默认值 = 0 |
OversampleDT | REAL | 过采样模式的执行时间。 有效值 = 0 到 4194.303 秒 默认值 = 0 |
RTSTime | DINT | 实时采样模式的模块更新周期 有效值 = 1 至 32,767 ms 默认值 = 1 |
RTSTimeStamp | DINT | 实时采样模式的模块时戳值。 有效值 = 0 至 32,767 ms 默认值 = 0 |
输出参数 | 数据类型 | 说明 |
|---|---|---|
EnableOut | BOOL | 启用输出。 |
S_Mode | BOOL | S_Mode 输出。当 (Jerk * DeltaT) Rate 且Rate < Accel 或 Decel 时,设置 S_Mode。否则,S_Mode 清零。 |
Out | REAL | S 曲线指令的输出。将该输出的数学状态标志置位。 |
Rate | REAL | Out 的内部变化,以单位/秒表示。 |
DeltaT | REAL | 两次更新间隔的时间。控制算法计算过程输出所用的时间(秒)。 |
Status | DINT | 功能块的状态。 |
InstructFault (Status.0) | BOOL | 该指令检测到以下执行错误之一。这不是轻微或严重的控制器错误。检查其他状态位以确定发生的情况。 |
AcceRateInv (Status.1) | BOOL | AccelRate 为负数。 |
DecelRateInv (Status.2) | BOOL | DecelRate 为负数。 |
JerkRateInv (Status.3) | BOOL | JerkRate 为负数。 |
TimingModeInv (Status.27) | BOOL | 计时模式无效。 有关时序模式的更多信息,请参见“功能块属性”部分。 |
RTSMissed (Status.28) | BOOL | 仅用于实时采样模式。当 ABS | DeltaT - RTSTime | > 1(0.001 秒)时置位。 |
RTSTimeInv (Status.29) | BOOL | RTSTime 值无效。 |
RTSTimeStampInv (Status.30) | BOOL | RTSTimeStamp 值无效。 |
DeltaT (Status.31) | BOOL | DeltaT 值无效。 |
说明
SCRV 指令的主要要求是确保变化率的变化决不超过指定的急动度。
用户可以将 SCRV 指令配置为针对阶跃输入生成 S 曲线轨迹或斜坡曲线。
S 曲线轨迹
要生成 S 曲线轨迹,可对 JerkRate 进行设置,使 (JerkRate * DeltaT) < AccelRate 和/或 DecelRate。
在 S 曲线轨迹模式下,SCRV 指令可确保变化率的变化决不超过指定的 JerkRate。用于生成 S 曲线轨迹的算法旨在针对阶跃输入生成一条光滑且对称的 S 曲线。为简化此过程,算法中引入了 Out 的梯形积分。因此,曲线各个部分的 Rate 变化都将小于 JerkRate。
当输入发生阶跃变化时,变化率会增加到设定的 AccelRate 或 DecelRate。AccelRate 或 DecelRate 保持不变,直到为了在变化率到达零时使输出等于输入而必须降低变化率。
某些情况下,根据加速度、减速度和急动度值的不同,在变化率必须按急动度开始降低之前,可能还没有达到加速度或减速度。
对于非常小的阶跃变化,SCRV 指令不会尝试生成“S”曲线。在此模式下,将输出整个阶跃,并且 Rate 会反映输出的变化。如果 Out = In 并且 In 的下一个阶跃变化能够以小于或等于所设定 JerkRate 的变化率输出,则会出现这种情况。
SCRV 指令支持代数斜坡和绝对值斜坡。对于代数斜坡,加速条件由朝正向增大的输入定义,而减速条件则由朝负向减小的输入定义。对于绝对值斜坡,加速条件由逐渐远离零的输入定义,而减速条件则由逐渐接近零的输入定义。
斜坡曲线
要生成斜坡曲线,可对 JerkRate 进行设置,使 (JerkRate * DeltaT)
AccelRate 和/或 DecelRate。
AccelRate 和/或 DecelRate。在斜坡曲线模式下,SCRV 指令始终生成与设定的 AccelRate 或 DecelRate 相等的变化率,直到为了到达终点 Out 和 In 的差值需要小于 AccelRate 或 DecelRate。
HoldMode = 0 时的工作方式与 HoldMode = 1 相同。当 HoldEnable 置位时,Out 立即保持不变,Rate 将变为零。
下图展示指令修改 Out 的方式。

(1)
当 Initialize 置位时,指令将设置以下各项:Outn = InitialValue
Outn-1 = Outn
Raten = 0
Raten-1 = 0
(2)
当 HoldMode 清零时,Out 朝 In 变化并且 HoldEnable 置位,变化率开始按急动度逐渐减小为零。由于 JerkRate 的作用,Out 会保持在变化率达到零时对应的值。当 Out 最终保持不变时,其值与 HoldEnable 置位时的瞬时值不同。当 HoldMode 置位时,Out 朝 In 变化,HoldEnable 置位,变化率立即设置为 0。Out 保持在 HoldEnable 置位时对应的值。
在转换期间减小 JerkRate 可能会使 Out 超出 In。如果出现这种情况,是因强制使用输入的 JerkRate 引起的。若在调谐过程中以小步长减小 JerkRate,或者在 Out = In(非转换期间)时更改 JerkRate,可避免出现这种情况。
Out 达到与输入变化相等所需的时间与 AccelRate、JerkRate 以及 In 和 Out 之间差值相关。
计算输出值和变化率值
从初始值转换为最终值的过程中,Out 共经过三个区域。在区域 1 和区域 3 中,Out 的变化率取决于 JerkRate。在区域 2 中,Out 的变化率取决于 AccelRate 或 DecelRate。

各个区域的 Out 值计算如下:

各个区域对应的公式如下:
区域 | 公式 |
|---|---|
区域 1 | ![]() |
区域 2 | ![]() |
区域 3 | ![]() |
以下情况下:

SCRV 功能块未达到 AccelRate 或 DecelRate。Out 如下所示:

其中:

影响数学状态标志
否
故障条件
在以下情况下发生轻微故障 | 故障类型 | 故障代码 |
|---|---|---|
功能已启用并检测到溢出。 | 4 | 4 |
有关操作数相关的故障,请参阅 通用属性。
执行
功能块
条件 | 功能块操作 |
|---|---|
预扫描 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为假 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为真 | EnableIn 和 EnableOut 位设置为真 指令执行。 |
指令首次运行 | 不适用 |
指令首次扫描 | 清除之前的扫描数据。 |
后扫描 | EnableIn 和 EnableOut 位设置为假 |
结构化文本
条件/状态 | 执行的操作 |
|---|---|
预扫描 | 请参见“功能块”表中的“预扫描”行。 |
正常执行 | 请参见“功能块”表中的“Tag.EnableIn 为真”行。 |
后扫描 | 请参见“功能块”表中的“后扫描”行。 |
示例
在大多数协调驱动应用中,整个驱动器组的线速度都由一个主基准值控制。选择不同基准值后,驱动器的速度基准值不能出现“步长”变化,因为负载惯量、电机扭矩和调节存在差异时不允许各个驱动器部分以协调一致的方式工作。SCRV 指令专用于对各驱动器部分的基准信号进行斜坡处理,从而使加速度、减速度和急动度(加速度的导数)得到控制。该指令提供了一种机制,可以使驱动器的基准值达到指定的基准值设置点,同时在此过程中可避免对所连接的机器和设备产生过度压力和影响。
功能块

结构化文本
SSUM_01.In1 := Master_reference;
SSUM_01.Select1 := master_select;
SSUM_01.In2 := Jog_reference;
SSUM_01.Select2 := jog_select;
SSUM(SSUM_01);
select_out := SSUM_01.Out;
SCRV_01.In := select_out;
SCRV_01.AccelRate := accel;
SCRV_01.DecelRate := accel;
SCRV_01.JerkRate := jerk_rate;
SCRV(SCRV_01);
scurve_out := SCRV_01.Out
提供反馈


