摘要
在指定偏移后读取文件中指定字节数的数据并将它写入目标地址。有关数据存储顺序的更多信息,请参阅下面的“数据存储模式”一节。
格式
_CF_read/_USB_read (文件夹名称、文件名、目标地址、偏移量、字节数)
参数1
文件夹名称:固定字符串(最大长度:32个单字节字符)
参数2
文件名称:固定字符串(最大长度:32个单字节字符)、内部寄存器(最大长度:14个单字节字符)、用偏移量指定的内部寄存器(内部寄存器 +临时地址,最大长度:14个单字节字符)
参数3
写入地址:寄存器地址、用偏移量指定的内部寄存器
参数4
偏移:数值、寄存器地址、临时地址(可以指定的最大数量:16位长度为65,535,32位长度为4,294,967,295)
参数5
字节数:数值、寄存器地址、临时地址(最大长度:1280)
表达式示例:
定义文件名的文本,从偏移16读取16字节
_CF_read ("\DATA", "DATA0001.BIN", [w:[#INTERNAL]LS0100], 16, 16)
在上面的例子中,将“\DATA\DATA0001.BIN”文件中从第17个字节开始的16字节数据写入从LS0100开始的区。
定义文件名的内部寄存器,从偏移0读取10字节
_CF_read ("\DATA", [w:LS0100], [w:LS0200], 0, 10)
通过将文件名保存在LS0100中,可间接指定文件名。在本例中,文件名被保存在从LS0100到LS0106的地址中,如下所示。
在上例中“\DATA\DATA0001.BIN”文件开始处的10字节数据被读取并写入从LS0200开始的区域。
文件名只能使用8.3格式(最大12个字符,其中8个字符用于文件名、点号,3个字符用于扩展名)。不能使用长度大于12个字符的文件名。
参数1文件夹名称的最大长度是32个单字节字符。
文件夹名称可以附加到参数2文件名。参数2文件夹名称的最大长度+文件名是32个单字节字符。
例如,\DATA\01\DATA.bin
可以为第二个参数(文件名)指定内部寄存器。指定内部寄存器可允许文件名间接地址指定。此外,使用内部寄存器时,文件夹名称+文件名的最大长度为14个单字节字符。
会将成功读取的字节数写入CF卡/USB存储器已读取字节[s:CF_READ_NUM]/[s:USB_READ_NUM]。更多信息,请参阅22.11.6.7 标签设置。
“文件名”和“写入地址”中指定的内部寄存器不作为D脚本地址。
如果将PLC寄存器指定为写入地址,当字数(字节数)增加时,向PLC写入数据需要更多时间。根据字数的多少,可能需要几秒钟的时间。
如果从文件中读取的数据超出了PLC的指定地址范围,就会发生通讯错误。在这种情况下,您必须关闭PLC的电源然后再次打开,将PLC从错误中复位。
如果将PLC寄存器指定为目标,由于人机界面与PLC的通讯需要一定时间,值不会被即写入。
例如,
在以下脚本中,语句(1)从文件中读取10字节的数据并将数据写入[w:D0100]。但由于通讯时间的原因,在执行语句(2)时,数据还未被写入[w:[PLC1]D0100]。
_CF_read ("\DATA", "DATA0001.BIN", [w:[PLC1]D0100], 0, 10) // (1)
[w:[PLC1]D0200] = [w:[PLC1]D0100] + 1 // (2)
在这种情况下,请先保存到内部寄存器,然后再执行,如下所示。
_CF_read ("\DATA", "DATA0001.BIN", [w:[PLC1]D0100], 0, 10)
memcpy ([w:[#INTERNAL]LS0100], [w:[PLC1]D0100], 10)
[w:[PLC1]D0200] = [w:[#INTERNAL]LS0100] + 1