复制 (COP) - 同步复制 (CPS)
此信息适用于
CompactLogix
5370、ControlLogix
5570、Compact GuardLogix
5370、GuardLogix
5570、Compact GuardLogix
5380、CompactLogix
5380、ControlLogix
5580、GuardLogix
5580 和 ControlLogix 5590 控制器。在适用的情况下会注明控制器的差异。COP 和 CPS 指令用于将 Source 中的值复制到 Dest 的值中。Source 保持不变。
可用语言
梯形图


功能块
此指令不可用于功能块中。
结构化文本
COP(Source,Dest,Length);
CPS(Source,Dest,Length);
操作数
重要提示:
以下情况下会导致运行出现意外:
- 输出标签操作数被覆盖。
- 结构操作数的成员被覆盖。
- 除非另外指定,否则结构操作数由多条指令共用。
梯形图
操作数 | 数据类型 CompactLogix 5370、ControlLogix 5570、Compact GuardLogix 5370 和 GuardLogix 5570 控制器 | 数据类型 CompactLogix 5380、ControlLogix 5580、Compact GuardLogix 5380、GuardLogix 5580 和 ControlLogix 5590 控制器 | 格式 | 说明 |
|---|---|---|---|---|
Source | SINT INT DINT LINT REAL String type structure | SINT INT DINT LINT USINT UINT UDINT ULINT REAL LREAL String type structure DT REF_TO_AXIS_VIRTUAL REF_TO_AXIS_CONSUMED REF_TO_AXIS_GENERIC_DRIVE REF_TO_AXIS_SERVO REF_TO_AXIS_SERVO_DRIVE | 标签 | 要复制的初始元素。 对于支持 REF_TO 运动数据类型的控制器,支持的轴操作数类型可以替换为等效的 REF_TO 类型。参照 (REF) 指令将参照与轴或坐标系具体标签相关联。 |
Dest | SINT INT DINT LINT REAL String type structure | SINT INT DINT LINT USINT UINT UDINT ULINT REAL LREAL String type structure DT | 标签 | 将被源覆盖的初始元素 |
Length | SINT INT DINT | SINT INT DINT | 立即数标签 | 要复制的目标元素数目 |
结构化文本
操作数 | 数据类型 CompactLogix 5370、ControlLogix 5570、Compact GuardLogix 5370 和 GuardLogix 5570 控制器 | 数据类型 CompactLogix 5380、ControlLogix 5580、Compact GuardLogix 5380、GuardLogix 5580 和 ControlLogix 5590 控制器 | 格式 | 说明 |
|---|---|---|---|---|
Source | SINT INT DINT LINT REAL String type structure | SINT INT DINT LINT USINT UINT UDINT ULINT REAL LREAL String type structure DT REF_TO_AXIS_VIRTUAL REF_TO_AXIS_CONSUMED REF_TO_AXIS_GENERIC_DRIVE REF_TO_AXIS_SERVO REF_TO_AXIS_SERVO_DRIVE REF_TO_AXIS_CIP_DRIVE | 标签 | 要复制的初始元素 |
Dest | SINT INT DINT LINT REAL String type structure | SINT INT DINT LINT USINT UINT UDINT ULINT REAL LREAL String type structure DT | 标签 | 将被源覆盖的初始元素 |
Length | SINT INT DINT | SINT INT DINT | 立即数 标签 | 要复制的目标元素数目 |
有关结构化文本中表达式语法的详细信息,请参阅结构化文本语法。
影响数学状态标志
否
严重/轻微故障
没有特定于此指令的故障。对于数组索引故障,请参阅 数组索引编制。
执行
梯形图
条件/状态 | 执行的操作 |
|---|---|
预扫描 | 不适用 |
梯级输入条件为假 | 将梯级输出条件设置为梯级输入条件。 |
梯级输入条件为真 | 将梯级输出条件设置为梯级输入条件。 该指令会复制数据。 |
后扫描 | 不适用 |
结构化文本
条件/状态 | 执行的操作 |
|---|---|
预扫描 | 请参见“梯形图”表中的“预扫描”行 |
正常执行 | 请参见“梯形图”表中的“梯级输入条件为真”行。 |
后扫描 | 请参见“梯形图”表中的“后扫描”行。 |
在 COP 和 CPS 指令执行期间,其他控制器操作可能会尝试中断复制操作并更改源:
如果源标签或目标标签为: | 并且需要: | 则选择: | 备注 |
|---|---|---|---|
| 防止源数据在复制操作期间发生更改 | CPS | 尝试中断 CPS 指令的任务会被延迟,直到指令执行完成。 如需估算 CPS 指令的执行时间,请参见 ControlLogix 系统用户手册,出版号 1756-UM001。互锁应用程序代码用于确保在 CPS 指令执行期间远程客户端未更新源。 |
允许源数据在复制操作期间发生更改 | COP | ||
其他情况 | ---------------> | COP |
COP 和 CPS 指令对连续内存进行操作,逐字节执行直接的内存复制操作。
当 Source 和 Dest 数据类型不同时,复制的字节数等于以下数量的较小者:
- 等于长度 x(目标元素中的字节数)的请求的数量
- 目标标签中的字节数
- 对于Compact GuardLogix5380、CompactLogix5380、ControlLogix5580、GuardLogix5580 或 ControlLogix 5590 控制器:源标签中的字节数小贴士: 目标或源标签的末尾定义为基本标签的最后一个字节。如果标签是一个结构,则标签的末尾为该结构最后一个元素的最后一个字节。这表示 COP 和 CPS 指令可能会超过成员数组的末尾执行写操作,但决不会超过基本标签的末尾执行写操作。
重要提示:
需测试并确认指令不会更改不应更改的数据。
示例
示例 1
复制一个数组。
使能后,COP 指令会将 array_4 中的 40 个字节复制到 array_5。
array_4 采用 DINT 类型(每个元素 4 个字节),其中包含 10 个元素(总大小 = 40 字节)
array_5 采用 DINT 类型(每个元素 4 个字节),其中包含 10 个元素(总大小 = 40 个字节)。
Length 表示要复制 10 个目标元素,因此需复制 40 个字节。
梯形图

结构化文本
COP(array_4[0],array_5[0],10);
示例 2
复制一个结构。
使能后,COP 指令会将结构 timer_1 复制到 array_timer 的元素 5。
timer_1 为 TIMER 结构(总大小 = 12 字节)。
array_timer 为 TIMER 结构(每个元素 12 个字节),其中包含 10 个元素(总大小 = 120 字节)
Length 表示要复制 1 个目标元素,因此需复制 12 个字节。
梯形图

结构化文本
COP(timer_1,array_timer[5],1);
示例 3
复制数组数据,同时在复制操作完成前,防止数据发生更改。
project_data 数组(100 个元素)用于存储应用程序中在不同时间发生更改的各种值。如需将某一实例中 project_data 的完整映像及时发送到另一控制器,可使用 CPS 指令将 project_data 复制到 produced_array。CPS 指令复制数据时,没有任何 I/O 更新或其他任务可以更改数据。produced_array 标签在 ControlNet 网络上生成数据,供其他控制器使用。
project_data 采用 DINT 类型(每个元素 4 个字节),其中包含 100 个元素(总大小 = 400 个字节)
project_array 采用 DINT 类型(每个元素 4 个字节),其中包含 100 个元素(总大小 = 400 字节)
Length 表示要复制 100 个目标元素,因此需复制 400 个字节。
梯形图

结构化文本
CPS(project_data[0],produced_array[0],100);
示例 4
将数据复制到生产型标签,同时在复制操作完成前防止发送数据。
Local:0:I.Data 用于存储与插槽 0 中 1756-DNB 模块相连的 DeviceNet 网络的输入数据。若要将这些输入与应用程序同步,可使用 CPS 指令将输入数据复制到 input_buffer。CPS 指令复制数据时,没有任何 I/O 更新可以更改数据。应用程序执行时,该指令将其输入数据放入 input_buffer。
Local:O:I.Data 采用 DINT 类型(每个元素 4 个字节),其中包含 2 个元素(总大小 = 8 字节)
input_buffer 采用 DINT 类型(每个元素 4 个字节),其中包含 20 个元素(总大小 = 80 字节)。
Length 应复制 20 个目标元素(4 X 20 = 80 字节)。不过源标签只能提供 8 字节,因此只复制 8 个字节。
梯形图

结构化文本
CPS(Local:0:I.Data[0], input_buffer[0], 20);
示例 5
初始化一个数组结构,初始化第一个元素,然后使用 COP 指令将其复制到数组的其余部分。

本示例用于对数组或计时器结构进行初始化。使能后,MOVE 指令会对第一个 array_timer 元素的 .PRE 和 .ACC 值进行初始化。使能后,COP 指令会从 array_timer[0] 开始复制一个连续的字节块。长度为九个计时器结构。
array_timer 为 TIMER 结构(每个元素 12 个字节),其中包含 15 个元素(总大小 = 180 字节)
Length 表示要复制 10 个目标元素,因此需复制 120 个字节。
梯形图

结构化文本
IF S:FS THEN
array_timer[0].pre := 500;
array_timer[0].acc := 0;
COP(array_timer[0],array_timer[1],10);
END_IF;
示例 6
复制大小不同的数组。
使能后,COP 指令会将 SINT array_4 中的字节复制到 DINT array_5。
array_4 采用 SINT 类型(每个元素 1 个字节),其中包含 5 个元素(总大小 = 5 字节)
array_5 采用 DINT 类型(每个元素 4 个字节),其中包含 10 个元素(总大小 = 40 个字节)。
Length 应复制 20 个目标元素(4 X 20 = 80 字节)。然而,目标标签只能接受 40 个字节,源标签只能提供 5 个字节,因此只会复制 5 个字节。
梯形图

结构化文本
COP(array_4[0],array_5[0],10);
提供反馈