7.11.3 复制任意类型元素
功能
COPY_BLK指令将一个存储区(源范围)的数据移动到另一个存储区(目标范围)中。可以将一个完整变量或一个数组的部分成员复制到另一个完整变量或一个数组的部分成员中。
LD图形
接口变量 | 声明 | 数据类型 | 说明 |
---|---|---|---|
COUNT | Input | UDINT | 待复制的源元素数目 如果源实参中未指定任何数组,则用户需要将实参COUNT的值设置为“1”;否则拷贝失败 |
SOUTCE_IDX | Input | DINT | 确定要复制存储区的起点: SOURCE_IDX参数将从0开始计算; 对应原数组的第一个元素 如果SOURCE实参中未指定ARRAY或者仅指定了ARRAY的某个元素,则用户需要将SOURCE_IDX实参的值赋值为"0”;否则拷贝失败 |
SOURCE | Input | ANY_TYPE | 待复制的源变量名 |
DEST_IDX | Input | DINT | 确定目标存储区的起点: DEXT_IDX参数将从0开始计算; 对应目标数组的第一个元素; 如果DEST实参中未指定任何ARRAY或者仅指定了ARRAY的某个元素,则用户需要将DEST_IDX实参的值赋值为"0”;否则拷贝失败 |
DEST | IN_OUT | ANY_TYPE | 源块中内容将复制到的目标区域的变量名 |
函数名称 | 返回值 | INT | 函数执行反馈错误信息 |
注意
- 本函数支持STRING,UDT类型等任意类型变量(ANY_TYPE不含FB类型),及数组的拷贝
- 变量或数组成员变量类型不一致时慎用,可能会数据不对齐引起数据混乱
- 复制元素数量不允许超过所选源范围和目标范围,如超出范围将不执行数据拷贝
对应语法
- COUNT:复制的元素个数
- SOURCE_IDX:复制元素总数的起点
- DEST_IDX:目标存储区起点
返回值错误码说明
错误代码(16进制码) | 说明 |
---|---|
0000 | COPY完成;复制的元素数量不超过所选源范围和目标范围,且源和目标数据类型一致 |
0001 | COPY完成;复制的元素数量不超过所选源范围和目标范围,但源和目标数据类型不一致 |
8151 | 无法访问SOURCE参数。无法拷贝 |
8153 | 参数SOURCE在生成代码时出错。无法拷贝 |
8281 | 参数COUNT的值小于等于0。无法拷贝 |
8282 | 参数COUNT的值大于SOURCE数组元素个数。无法拷贝 |
8283 | SOURCE不是数组变量,且参数COUNT的值不等于1。无法拷贝 |
8381 | 参数SOURCE_IDX的值小于0。无法拷贝 |
8382 | 参数SOURCE_IDX的值超出SOURCE数组的上限。无法拷贝 |
8383 | SOURCE不是数组变量,且参数SOURCE_IDX的值不等于0。无法拷贝 |
8284 | 参数COUNT的值+参数SOURCE_IDX的值大于SOURCE数组元素个数。无法拷贝 |
8481 | 参数DEST_IDX的值小于 0。无法拷贝 |
8482 | 参数DEST_IDX值超出DEST数组的限值。无法拷贝 |
8483 | 参数DEST不是数组变量,且参数DEST_IDX的值不等于0。无法拷贝 |
8484 | 对于待复制的数据而言, DEST参数指向的变量目标范围小于待拷贝的源范围。无法拷贝 |
8551 | 无法访问DEST参数。无法拷贝 |
8552 | 参数 DEST 在生成代码时出错。无法拷贝 |
示例
- LD示例图片如下图所示:
- ST示例如下代码所示:
ss:=COPY_BLK(
COUNT:=1,
SOURCE_IDX:=sarr[11],
SOURCE:=sarr,
DEST_IDX:=darr[3],
DEST:=darr
);