复制 (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 保持不变。
可用语言
梯形图
RSL5K_CPS Ladder Diagram_v31
RSL5K_CPS Ladder Diagram 2_v31
功能块
此指令不可用于功能块中。
结构化文本
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_AXIS_CIP_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 指令执行期间,其他控制器操作可能会尝试中断复制操作并更改源:
如果源标签或目标标签为:
并且需要:
则选择:
备注
  • 生产型标签
  • 消费型标签
  • I/O 数据
  • 其他任务可能覆盖的数据
  • 由远程设备写入的非原子标签
防止源数据在复制操作期间发生更改
CPS
尝试中断 CPS 指令的任务会被延迟,直到指令执行完成。
如需估算 CPS 指令的执行时间,请参见
ControlLogix
系统用户手册,出版号 1756-UM001。
互锁应用程序代码用于确保在 CPS 指令执行期间远程客户端未更新源。
允许源数据在复制操作期间发生更改
COP
其他情况
--------------->
COP
COP 和 CPS 指令对连续内存进行操作,逐字节执行直接的内存复制操作。
当 Source 和 Dest 数据类型不同时,复制的字节数等于以下数量的较小者:
  • 等于长度 x(目标元素中的字节数)的请求的数量
  • 目标标签中的字节数
  • 对于
    Compact GuardLogix
    5380、
    CompactLogix
    5380、
    ControlLogix
    5580、
    GuardLogix
    5580 或 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 个字节。
梯形图
RSL5K_COP and CPS Ladder Diagram Example 1_v31
结构化文本
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 个字节。
梯形图
RSL5K_COP and CPS Ladder Diagram Example 2_v31
结构化文本
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 个字节。
梯形图
RSL5K_COP and CPS Ladder Diagram Example 3_v31
结构化文本
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 个字节。
梯形图
RSL5K_COP and CPS Ladder Diagram Example 4_v31
结构化文本
CPS(Local:0:I.Data[0], input_buffer[0], 20);
示例 5
初始化一个数组结构,初始化第一个元素,然后使用 COP 指令将其复制到数组的其余部分。
COP and CPS Example 5
本示例用于对数组或计时器结构进行初始化。使能后,MOVE 指令会对第一个 array_timer 元素的 .PRE 和 .ACC 值进行初始化。使能后,COP 指令会从 array_timer[0] 开始复制一个连续的字节块。长度为九个计时器结构。
array_timer 为 TIMER 结构(每个元素 12 个字节),其中包含 15 个元素(总大小 = 180 字节)
Length 表示要复制 10 个目标元素,因此需复制 120 个字节。
梯形图
RSL5K_COP and CPS Ladder Diagram Example 5_v38
结构化文本
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 个字节。
梯形图
RSL5K_COP and CPS Ladder Diagram Example 1_v31
结构化文本
COP(array_4[0],array_5[0],10);
提供反馈
对本文档有问题或反馈吗? 请在这里提交您的反馈
Normal