必须使用相同的块访问来创建源和目标块。即,这两个块必须使用“优化的块访问”(Optimized block access) 或必须同时为这两个块禁用优化的访问。
如果源数据块和目标数据块的访问类型均为优化访问,则不支持 STRUCT 数据类型。
如果写入一个由指令创建的 DB 时,“WRIT_DBL”指令则不能更改用户程序的校验和。但是,在写入已装载的 DB 时,此 DB 中的第一个条目会更改用户程序的校验和。
说明 “WRIT_DBL”不适用于频繁地(或循环)将变量写入装载存储器中。这是因为,存储卡的工艺限制了对此卡的写访问次数。 |
功能描述
“WRIT_DBL”为异步执行指令,可以跨多个调用执行。通过调用“WRIT_DBL”,且 REQ = 1,可启动该作业。
输出参数 RET_VAL 和 BUSY 用于指示作业状态。
参数
下表列出了“WRIT_DBL”指令的参数:
参数 | 声明 | 数据类型 | 存储区 | 说明 |
REQ | Input | BOOL | I、Q、M、D、L 或常量 | REQ = 1:写入请求 |
SRCBLK | Input | VARIANT | D | 指向工作存储器中的 DB 的指针,需要从该工作存储器读取数据 |
RET_VAL | Return | INT | I、Q、M、D、L | 错误信息 |
BUSY | Output | BOOL | I、Q、M、D、L | BUSY = 1:写入过程尚未完成。 |
DSTBLK | Output | VARIANT | D | 指向装载存储器中待写入数据块的指针 |
错误代码* | 说明 |
0000 | 无错误 |
0081 | 目标区域大于源区域。 源区域将全部写入目标区域;目标区域的其余字节将保持不变。 |
7000 | 首次调用时,REQ = 0:未激活数据传送;BUSY 的值为“0”。 |
7001 | 首次调用时,REQ = 1:已触发数据传送;BUSY 的值为“1”。 |
7002 | 中间调用(与 REQ
无关):已激活数据传送;BUSY 的值为“1”。 |
8051 | 注:该错误代码仅适用于 S7-1200 CPU。 类型错误数据块。 |
8251 | 注:该错误代码仅适用于 S7-1200 CPU。 源数据块中的数据类型错误 |
8551 | 注:该错误代码仅适用于 S7-1200 CPU。 目标数据块中的数据类型错误 |
8081 | 源区域大于目标区域。 将写满整个目标区域,并忽略源区域中剩余的字节。 |
8082 | 注:该错误代码仅适用于 S7-1500 CPU。 目标 DB 类型与源 DB 类型不同(优化/非优化访问)。 目标和源数据块均创建为优化访问。但由于目标数据块和源数据块所用的结构,将到导致编译后数据排列不一致。(注:请改用 UDT。) |
8093 | 注:该错误代码仅适用于 S7-1500 CPU。 没有为参数 SRCBLK 指定数据块,或指定的数据块不在工作存储器中。 |
80B1 | 注:该错误代码仅适用于 S7-1500 CPU。 在参数 DSTBLK 中,仅允许使用装载存储器中的数据块。 |
82B1 | 注:该错误代码仅适用于 S7-1200 CPU。 SRCBLK 参数未指定数据块。 |
85B1 | 注:该错误代码仅适用于 S7-1200 CPU。 没有为 DSTBLK 参数指定数据块,或在此指定的数据块不在装载存储器中。 |
80B4 | 存储卡受到写保护。 不允许读取具有 F 属性的 DB。 |
80BB | 可用装载存储器空间不足。 |
82C0 | 注:该错误代码仅适用于 S7-1200 CPU。 当前其它指令或通信指令正在处理源 DB。 |
85C0 | 注:该错误代码仅适用于 S7-1200 CPU。 当前其它指令或通信指令正在处理目标 DB。 |
80C3 | 已达到“WRIT_DBL”指令可同时激活的最大数目。 |
常见错误代码 | 另请参见“GET_ERR_ID:获取本地错误 ID” |
* 在程序编辑器中,错误代码将显示为整数或十六进制值。有关切换显示格式的信息,请参见“另请参见”。 |
示例
在以下示例中,将工作存储器中的数据块内容传送到装载存储器的一个数据块中。要验证传输是否成功,则可数据工作存储器中另一个数据块中的内容。
要存储互连数据,需在全局数据块中创建 5 个变量。
要存待传送的数据,需创建 3 个全局数据块并分别带有一个“myData”变量(数据类型 Array of INT):
一个数据块用于发送工作存储器中的数据 (SLI_srcDB_WRIT_DBL)。
一个数据块用于接收装载存储器中的数据 (SLI_dstDB_WRIT_DBL)。
一个数据块用于接收工作存储器中的数据 (SLI_finDB_WRIT_DBL)。
程序段 1:
互连“WRIT_DBL”指令的参数,如下所示:
程序段 2:
互连“READ_DBL”指令的参数,如下所示:
程序段 3:
复位“execute”变量,如下所示:
指令“WRIT_DBL”:
如果常开触点(“execute”)的信号状态为“TRUE”,则执行“WRIT_DBL”指令。该数据块通过输入参数 SRCBLK(“SLI_srcDB_WRIT_DBL.myData”)存储在装载存储器中。该数据块将通过输出参数 DSTBLK(“SLI_dstDB_WRIT_DBL.myData”)存储在装载存储器中。
指令“WRIT_DBL”将调用工作存储器中待传送的数据 (SRCBLK),并将这些数据写入装载存储器的指定位置 (DSTBLK)。输出参数 RET_VAL(“returnValue”)用于指示处理无错误。
指令“READ_DBL”:
如果 WRIT_DBL 的执行无错误且常开触点(“execute”)的信号状态为“TRUE”,则执行“READ_DBL”指令。通过输入参数 SRCBLK(“SLI_dstDB_WRIT_DBL.myData”),将该数据块存储在装载存储器中。该数据块用于接收数据,并通过输出参数 DSTBLK(“SLI_finDB_WRIT_DBL.myData”)进行存储。
指令“READ_DBL”将调用装载存储器中待传送的数据 (SRCBLK),并读取工作存储器中指定位置处的的数据 (DSTBLK)。输出参数 RET_VAL(“readRetVal”)用于指示处理无错误。
该数据块用于接收工作存储器 (SLI_finDB_WRIT_DBL) 中的数据,并显示已发送的数据。
READ_DBL 成功执行后,复位变量“execute”(参见程序段 3)。停止 READ_DBL 和 WRIT_DBL 的执行。
总结:读取数据才能把信息保存出来,是一些临时的东西,以后再再看看有啥更好的应用。