运动计算凸轮廓线 (Motion Calculated Cam Profile, MCCP)
此信息适用于
CompactLogix
5370、ControlLogix
5570、Compact GuardLogix
5370、GuardLogix
5570、Compact GuardLogix
5380、CompactLogix
5380、ControlLogix
5580、GuardLogix
5580 和 ControlLogix 5590 控制器。运动计算凸轮廓线 (MCCP) 指令根据凸轮点数组计算凸轮廓线。可通过编程建立凸轮点数组,也可以使用凸轮廓线编辑器建立凸轮点数组。凸轮数组中的每个凸轮点由从轴位置值、主轴位置值(位置凸轮)或时间值(时间凸轮)以及插补类型(线性或三次)组成。“运动轴位置凸轮”(MAPC) 或“运动轴时间凸轮”(MATC) 指令可使用生成的凸轮廓线,根据主轴位置或时间控制从轴运动。
此为跳变指令。使用时,请遵循以下步骤:
- 在梯形逻辑中,插入一个指令,以便在每次执行该指令时,梯级输入条件均会由假切换为真。
- 在结构化文本例程中,插入指令的条件以便仅在转换时执行。
可用语言
梯形图

功能块
此指令不可用于功能块中。
结构化文本
MCCP(MotionControl,Cam,Length,StartSlope,EndSlope,CamProfile);
操作数
梯形图
操作数 | 类型 | 格式 | 说明 |
|---|---|---|---|
Motion Control | MOTION_INSTRUCTION | 标签 | 用于访问块状态参数的结构。 |
Cam | CAM, CAM_EXTENDED | 数组 | 用于计算凸轮廓线的凸轮数组的标签名称。数值数组索引指示在凸轮廓线计算中使用的数组中的起始凸轮元素。单击省略号可打开凸轮廓线编辑器。 此操作数的 CAM_EXTENDED 类型用于实现双精度(64 位 LREAL)凸轮数据成员访问。如果使用,凸轮廓线操作数的类型必须为 CAM_PROFILE_EXTENDED。 |
Length | UINT | 立即数或标签 | 确定在凸轮廓线计算中使用的数组中的凸轮元素数。 |
Start Slope | REAL | 立即数或标签 | 此为曲线初始斜率的边界条件。它仅适用于三次插补的第一段,并用于指定经过第一个点的斜率。 |
End Slope | REAL | 立即数或标签 | 此为曲线结束斜率的边界条件。它仅适用于三次插补的最后一段,并用于指定经过最后一个点的斜率。 |
Cam Profile | CAM_PROFILE, CAM_PROFILE_EXTENDED
小贴士:
CAM_PROFILE_EXTENDED 仅受 Compact GuardLogix 5580 和 CompactLogix 5380 控制器支持。
| 数组 | 用作 MAPC 和 MATC 指令的输入的计算凸轮廓线数组标签的名称。凸轮廓线数组仅可使用零数组元素 ([0])。单击省略号可打开凸轮廓线编辑器。 此操作数的 CAM_PROFILE_EXTENDED 类型用于实现双精度(64 位 LREAL)凸轮数据成员访问。如果使用,凸轮操作数的类型必须为 CAM_EXTENDED。 |
结构化文本
操作数 | 类型 | 格式 | 说明 |
|---|---|---|---|
Source | SINT INT DINT REAL STRING 结构 | 标签 | 要复制的初始元素
重要提示:
源操作数和目标操作数的数据类型应相同,否则可能会出现意外的结果。
|
Destination | SINT INT DINT REAL STRING LINT 结构 | 标签 | 将被源覆盖的初始元素
重要提示:
源操作数和目标操作数的数据类型应相同,否则可能会出现意外的结果。
|
Length | DINT | 立即数 标签 | 要复制的目标元素数目。 |
有关结构化文本中表达式语法的详细信息,请参见“结构化文本语法”部分。
操作数与继电器梯形图 MCCP 指令的操作数相同。对于数组操作数,无需包含数组索引。如果不包含索引,指令将从数组中的第一个元素 ([0]) 开始执行。
MOTION_INSTRUCTION 结构
助记符 | 说明 |
|---|---|
.EN (Enable) Bit 31 | 此使能位在梯级由假跳变为真时置位,并在完成位置位且梯级变为假前保持置位状态。 |
.DN (Done) Bit 29 | 此完成位在计算凸轮指令执行并计算出凸轮廓线数组后置位。 |
.ER (Error) Bit 28 | 此错误位在指令检测到错误(例如凸轮数组的长度非法)时进行指示。 |
说明
MCCP 指令根据指定凸轮数组中给定的一组点来计算凸轮廓线。后续的“运动轴位置凸轮”(MAPC) 或“运动轴时间凸轮”(MATC) 凸轮传动指令可使用 MCCP 指令生成的凸轮廓线,针对主轴位置或时间提供复杂从轴运动。
由于凸轮廓线可直接通过
Logix Designer
凸轮廓线编辑器进行计算,因此 MCCP 指令的主要用途是基于相应凸轮数组的编程变化,提供实时计算凸轮廓线的方法。指定一个凸轮数组
为执行 MCCP 指令,必须使用 RSLogix 标签编辑器或凸轮廓线编辑器创建凸轮数组标签。下图说明了如何建立凸轮数组标签并将其用作 MCCP 指令的输入。
凸轮数组元素由从轴 (yp) 和主轴 (xp) 点对以及插补类型组成。由于与特定轴位置或时间无关,因此 x 和 y 点值没有单位。可以将每个点的插补类型指定为线性或三次插补。
MCCP 指令支持两种类型的凸轮数组:CAM 和 CAM_EXTENDED。CAM 数组用于计算 CAM_PROFILE 类型的凸轮廓线标签。CAM_EXTENDED 数组用于计算 CAM_PROFILE_EXTENDED 类型的凸轮廓线标签,它会提供更高的精度。
指定凸轮廓线标签
要执行 MAPC 指令,还必须创建凸轮廓线数组标签。凸轮廓线数组标签可通过
Logix Designer
标签编辑器创建,也可通过 MAPC/MATC 指令使用内置凸轮廓线编辑器创建。编译期间,可使用凸轮廓线编辑器修改凸轮廓线数组中的数据,运行期间则可使用 MCCP 指令进行修改。要在运行期间更改数据,必须创建可以使用 MCCP 指令的凸轮数组。
状态参数用于指示计算出的凸轮廓线数组元素。如果尝试在凸轮廓线中使用任何未计算的元素时执行凸轮传动指令,则 MAPC 或 MATC 指令会发生错误。类型参数决定应用于该凸轮数组元素和下一凸轮元素之间的插补类型。
MCCP 指令支持两种类型的凸轮廓线数组:CAM_PROFILE 和 CAM_PROFILE_EXTENDED。CAM_PROFILE 通过 CAM 数组计算而得出。CAM_PROFILE_EXTENDED 通过 CAM_EXTENDED 数组计算而得出,该数组提供更高的精度。
凸轮廓线数组状态成员
凸轮廓线数组中第一个元素的状态成员为特殊成员,用于检查数据完整性。为此,MCCP 必须始终指定起始索引设置为 0 的凸轮廓线。第一个凸轮廓线元素状态成员可能具有以下值。
状态变量 | 说明 |
|---|---|
0 | 未计算凸轮廓线元素。 |
1 | 正在计算凸轮廓线元素。 |
2 | 已计算凸轮廓线元素。 |
n | 已计算凸轮廓线元素,且当前正在由 (n-2) 或 MATC 指令使用。 |
线性和三次样条插补
计算所得的凸轮廓线已完全插补。这意味着,如果当前主轴位置或时间未正好对应于生成凸轮廓线所使用的凸轮数组中的点,则从轴位置将通过相邻点之间的线性或三次插补确定。如此一来,可以尽可能地实现最平滑的从轴运动。MCCP 指令通过计算用于确定从轴位置(是主轴位置或时间的函数)的多项式方程的系数来实现上述运动。
计算凸轮廓线
在计算指定轴上的凸轮廓线之前,MCCP 指令首先会检查第一个凸轮廓线元素的状态成员值,确定是否已计算凸轮廓线数组。如果状态值为 0 或 2,则 MCCP 将继续计算凸轮廓线。如果已完成凸轮廓线数组计算,MCCP 指令会将第一个凸轮廓线元素的状态值设置为正在计算(或 1),然后将所有其他凸轮廓线元素的状态值设置为正在计算。随着计算的进行,各个凸轮廓线成员的状态值均会被设置为已计算(或 2)。计算完凸轮廓线数组中的所有元素后,第一个凸轮廓线元素的状态值也设置为已计算。
但是,如果在初始凸轮廓线状态值为 1 时执行某个 MCCP 指令,则凸轮廓线当前正在由另一个 MCCP 指令进行计算,此 MCCP 指令将发生错误。如果状态值 >2,则凸轮廓线正在由 MAPC 或 MATC 指令过程主动使用,MCCP 指令将发生错误。
起始斜率和结束斜率
为便于平滑进入和离开三次凸轮廓线,提供了斜率控制。起始斜率和结束斜率参数确定从轴相对于主轴的初始变化率。这些值用于基于凸轮数组执行的三次样条计算。主轴与从轴斜率关系如下图所示。

起始斜率和结束斜率的默认值为 0,以便于使凸轮廓线从静止状态平滑开始和平滑结束。但是,如果轴已在进行凸轮传动,则可以指定适当的非零起始斜率,以匹配当前正在执行的凸轮的结束斜率,进而将两个凸轮廓线无缝混合。
开始或结束采用线性插补的凸轮廓线时,起始斜率和结束斜率值不适用。
重要提示:
MCCP 指令在单次扫描中执行完成。因此,应将该指令置于单独的任务中,以免影响用户程序的扫描时间。
此为跳变指令:
- 在继电器梯形图中,每次要执行该指令时,梯级输入条件均会由假切换为真。
- 在结构化文本中,为指令设置限定条件,以便仅在出现跳变时才执行此指令。
影响数学状态标志
否
严重/轻微故障
没有特定于此指令的故障。有关操作数相关的故障,请参阅 通用属性。
执行
梯形图
条件/状态 | 执行的操作 |
|---|---|
预扫描 | .EN、.DN、.ER 和 .IP 位设置为假。 |
梯级输入条件为假 | 如果 .DN 或 .ER 位为真,则 .EN 位设置为假。 |
梯级输入条件为真 | .EN 位设置为真,指令执行。 |
后扫描 | 不适用 |
结构化文本
条件/状态 | 执行的操作 |
|---|---|
预扫描 | 请参阅“梯形图”表中的“预扫描”行。 |
正常执行 | 请参见“梯形图”表中的“梯级输入条件为假”行,然后参见“梯级输入条件为真”行。 |
后扫描 | 请参见“梯形图”表中的“后扫描”行。 |
扩展错误代码
“扩展错误代码”针对不足以用于指出问题所在的“错误代码”提供指令特定的附加信息。当 MCCP 指令接收到非法凸轮长度 (26) 错误信息,以此来确定长度输入参数与指令预期的长度不相符时,相应的“扩展错误代码”会提供凸轮标签中为指令提供的凸轮数。当 MCCP 指令接收到非法凸轮廓线长度 (27) 错误信息,以此来确定长度输入参数与指令预期的长度不相符时,相应的“扩展错误代码”会提供指令尝试生成的凸轮点数。有关运动指令,请参阅 运动错误代码 .ERR。
MCCP 状态位变化
否
示例
示例 1
梯形图

结构化文本
MCCP(MCCP_1,Cam_1[0],30,1.0,1.0,Cam_pro1[0]);
示例 2
梯形图

结构化文本
MCCP(mccp_motion_ctrl,cam[0],2,2,10,cam_profile[0]);
提供反馈