摘要
在一个操作中复制存储器。地址数量数据被复制到复制目标字地址,该字地址从源数据的第一个字地址开始。可以使用的地址数量在1至640之间。
格式
memcpy (复制目的地地址, 复制源地址, 字数量)
表达式示例:
memcpy ([w:[PLC1]D0200], [w:[PLC1]D0100], 10)
在上例中,数据从D0100-D0109被复制到D0200-D0209。
只能在需要时从外接设备中读取源复制数据一次。如果在数据读取过程中发生通讯故障,人机界面的内部特殊继电器LS2032的位12会置ON。当正常完成数据读取时,位12为OFF。
可在一次操作中完成从源复制数据中读取数据和将数据写入目标,也可以将数据分成几个项目,项目的数量与用于源复制数据的地址数相等。如果在数据读取过程中发生通讯故障,数据复制的结果会根据数据是在一次操作中处理还是在几个项目中处理而有如下不同:(数据写操作结果,O:写入完成,X:未能写入)
随着地址数量的增加,向PLC写入数据需要更多时间。根据地址数,可能需要20秒到几分钟的时间。
如果要写入的数据超出了指定地址范围,就会发生通讯错误。在这种情况下,您必须将GP关机后再开机,使GP从错误中复位。
当用复制存储器(memcpy)函数将数据写入LS区时,只能将数据写入用户区。不能将数据写入系统区(LS0000至LS0019)、特殊区(LS2032至LS2047)或保留区(LS2048至LS2095)。但是,可以从这些区中读取数据。
如果使用D脚本向16位寄存器复制32位寄存器数据,并将位长指定为16,则只会复制低16位的数据。
例如,memcpy ([w:[PLC1]w30.0100], [w:[PLC1]BD0100], 3)
此外,将16位寄存器数据复制32位寄存器时,会将数据复制到低16位,并将高16位置“0”。
例如,memcpy ([w:[PLC1]BD0100], [w:[PLC1]w30.0100], 3)
将32位寄存器数据复制到16位寄存器或将16位寄存器数据复制到32位寄存器时,脚本中指定的D脚本位长度指定为32个位,复制过程如下。如果其中的一个寄存器是32位,其他寄存器是16位,memcpy( ) 函数将使用16位作为其数据长度参数。
例如, memcpy ([w:[PLC1]w30.0100], [w:[PLC1]BD0100], 4)
例如,memcpy ([w:[PLC1]BD0100], [w:[PLC1]w30.0100], 4)
如果原始和目标数据范围重叠,所有重叠数据都将按照如下方式被重写。
例如,将D101-D104复制到D100-D103
数据被复制到以地址0开始的地址(较小地址)。
例如,将D101-D103复制到D100-D104
数据被复制到编号较大的地址。
尽管本示例函数指定了两个地址,但不把这些地址作为D脚本地址。
当使用寄存器地址进行分配时,与控制器/PLC的通讯会使分配值的过程有少许延迟。