简介
从地址中读取定义字节数的数据,并将数据写入定义的文件。数据存储模式包括“新建”、“附加”或“覆盖”,如存储格式概况表中所示。
格式
_CF_write/_SD_write/_USB_write (文件夹名称, 文件名, 读取源地址, 偏移, 字节数, 模式)
参数1
文件夹名称:固定字符串(最大长度:32个单字节字符)
参数2
文件名称:固定字符串(最大长度:32个单字节字符)、内部寄存器(最大长度:14个单字节字符)、用偏移量指定的内部寄存器(内部寄存器 +临时地址,最大长度:14个单字节字符)
参数3
读取源地址:寄存器地址、寄存器地址 + 临时地址
参数4
偏移量:数值、寄存器地址、临时地址(可以指定的最大数量:16位长度为65,535,32位长度为4,294,967,295)
参数5
字节数:数值、寄存器地址、临时地址(最大长度:1280)
参数6
模式:数值、寄存器地址、临时地址(可用值:0, 1, 2)
存储格式概述
模式 |
名称 |
描述 |
0 |
新建 |
创建一个新文件。如果存在一个具有相同名称的文件,它将被删除。 |
1 |
添加 |
向指定文件添加数据。如果指定文件不存在,将会创建一个新文件。 |
2 |
覆盖 |
覆盖部分文件。如果指定偏移大于文件大小,将用0填充剩余区域,并将数据写入该区的后面。如果将偏移指定为文件数据的末尾,就相当于向文件添加数据。如果文件不存在,则会发生错误。有关该错误的更多信息,请参阅22.11.7.7 标签设置。 |
表达式示例:
[w:[#INTERNAL]LS0200] = 0 //偏移量(当模式为“新建”时为“0”)
[w:[#INTERNAL]LS0202] = 100 // 字节数 (100 bytes)。
[w:[#INTERNAL]LS0204] = 0 //模式(新建)。
_CF_write ("\DATA", "DATA0001.BIN", [w:[#INTERNAL]LS0100], [w:[#INTERNAL]LS0200],[w:[#INTERNAL]LS0202], [w:[#INTERNAL]:LS0204])
上例中,从LS0100中读取100字节的数据,以DATA0001.BIN为名保存在\DATA文件夹中。可以通过定义内部寄存器的偏移、字节数和模式间接定义字节数和模式。
用一个内部寄存器定义文件名
_CF_write ("\DATA", [w:[#INTERNAL]LS0100], [w:[#INTERNAL]LS0200], 0, 100, 0)
通过将文件名保存在LS0100中,可间接指定文件名。在本例中,按如下方式将文件名保存在LS0100至LS0106中。
例如,文本数据模式 = 1
上述表达式从LS0200中读取100字节的数据,并新建文件(“\DATA\DATA0001.BIN”)用于保存数据。
关于数据存储顺序的信息,请参阅以下内容。
22.10.7 数据存储模式
保存访问外部存储器或文件操作过程中发生的任何错误状态。即使发生了错误,处理也会继续。因此,使用文件操作功能时,请务必写一个用于检查错误的脚本。
22.11.7.7 标签设置
文件名只能使用8.3格式(最大12个字符,其中8个字符用于文件名、点号,3个字符用于扩展名)。不能使用长度大于12个字符的文件名。
要指定根文件夹,请将“ ”(空字符串)指定为文件夹名称。
参数1文件夹名称的最大长度是32个单字节字符。
文件夹名称可以附加到参数2文件名。参数2文件夹名称+文件名的最大长度是32个单字节字符。
例如,\DATA\01\DATA.bin
可以为第二个参数(文件名)指定内部寄存器。指定内部寄存器可允许文件名间接地址指定。此外,使用内部寄存器时,文件夹名称+文件名的最大长度为14个单字节字符。
如果指定内部寄存器来保存文件名,文件名的存储顺序将以文本数据模式的定义为依据。
7.9.1 [系统设置] - [控制器/PLC]设置指南
偏移设置只在“覆盖”模式下有效。在“新建”和“添加”模式下禁用偏移设置。在非“覆盖”模式下将偏移值设置为“0”。
当指定“新建”模式且已经存在一个具有相同文件名的文件时,它会被覆盖。
当为“文件名”指定内部寄存器时,读取源地址不作为D脚本地址。
当为“读取源地址”指定PLC时,函数执行时仅从PLC中读取一次数据。数据读取过程中如果发生错误,将生成外部存储器错误状态:[s:CF_ERR_STAT]/[s:SD_ERR_STAT]/[s:USB_ERR_STAT]。当成功完成数据读取时该错误被清除。
数据被分成若干项目并从源地址中被读取,尽管这取决于要读取的字节数。因此,即便是数据读取过程中发生了通讯故障,仍可能已将数据部分地写入到了指定文件。
要为文件名指定完整路径,请将文件夹名指定为“*”(星号)。例如, _CF_read ("*", "\DATA\DATA0001.BIN", [w:[#INTERNAL]LS0100], 0, 10)
存储格式表达式示例
当指定“新建”模式时
在上例中,从LS0100中读取100字节的数据,DATA0001.BIN文件刚在\DATA文件夹中创建。
当指定“附加”模式时
如果指定文件(如例子中的DATA0001.BIN)已经存在且执行了上面的语句,会从LS0100和之后区域中读取100个字节的数据并将其写入\DATA文件夹中的DATA0001.BIN文件。
当指定“覆盖”模式时(1)
如果指定文件(如例子中的DATA0001.BIN)已经存在且执行了上面的语句,就会读取保存在LS0100和之后区域的10个字节的数据,并覆盖保存在\DATA文件夹下DATA0001.BIN文件中的偏移之后第17个及之后的10个字节的数据。
当指定“覆盖”模式时(2)
(将被覆盖的文件小于偏移值和增加字节数总和。)
指定文件(如例子中的DATA0001.BIN)已经存在且文件大小是100字节。如果为覆盖操作将偏移设置为96字节,字节数设置为10字节,会读取保存在LS0100及之后区域中的10字节数据。然后,前4个字节的已读取数据会覆盖保存在文件中的第97个及之后的4字节数据,剩余的6字节数据被添加到文件数据的末尾。最终文件就包含了106字节的数据。
当指定“覆盖”模式时(3)
(要覆盖的文件小于偏移值。)
指定文件(如例子中的DATA0001.BIN)已经存在且文件大小是100字节。如果为覆盖操作将偏移设置为110字节,字节数设置为10字节,则会用0填充第101字节和第110字节之间的区域,从LS0100及之后区域中读取的10字节数据会被写入第111字节及之后的字节中。最终文件就包含了120字节的数据。