如果写入一个由指令创建的 DB时,“WRIT_DBL”指令则不能更改用户程序的校验和。在写入已装载的 DB 时,此 DB中的第一个条目会更改用户程序的校验和。 说明“WRIT_DBL”不适用于频繁地(或循环)将变量写入装载存储器中。这是因为,存储卡的工艺 限制了对此卡的写访问次数。使用“WRIT_DBL”在工艺对象中写入重新启动相关值有关使用“WRIT_DBL”在工艺对象中写入重新启动相关值时需遵循的规则,请参见 “AUTOHOTSPOT”。 功能描述“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 BOOLI、Q、M、D、L BUSY = 1:写入过程尚未完成。 DSTBLK Output VARIANT D指向装载存储器中待写入数据块的指针 有关有效数据类型的更多信息,请参见“有效数据类型概述。
在以下示例中,将工作存储器中的数据块内容传送到装载存储器的一个数据块中。要验证传输是否成功,则可数据工作存储器中另一个数据块中的内容。 要存储互连数据,需在全局数据块中创建 5 个变量。 要存待传送的数据,需创建3 个全局数据块并分别带有一个“myData”变量(数据类型 Array of INT): • 一个数据块用于发送工作存储器中的数据(SLI_srcDB_WRIT_DBL)。 • 一个数据块用于接收装载存储器中的数据 (SLI_dstDB_WRIT_DBL)。 •一个数据块用于接收工作存储器中的数据 (SLI_finDB_WRIT_DBL)。 程序段 1:互连“WRIT_DBL”指令的参数,如下所示指令“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)中的数据,并显示已发送的数据。ATTR_DB: 读取数据块属性 (S7-1200, S7-1500) 说明可使用指令“ATTR_DB”获取有关 CPU 的工作存储器中某个数据块 (DB) 的信息。该指令可决 定所选 DB 的 ATTRIB参数中的属性集。 对于优化访问类型的数据块和仅位于装载存储器中的数据块,其长度无法读取。此时,参数 DB_LENGTH 的值为“0”。请勿将 ATTR_DB 应用于具有优化访问且激活了预留存储空间的数据块。请勿通过指令“ATTR_DB”读取运动控制数据块。将输出错误代码 80B2。 参数 下表列出了“ATTR_DB”指令的参数:参数 声明 数据类型 存储区 说明 REQ Input BOOL I、Q、M、D、L 或常 量 REQ = 1:块属性读取请求DB_NUMBE R Input DB_ANY I、Q、M、D、L 或常 量 要测试的 DB 的编号 RET_VAL OutputINT I、Q、M、D、L 错误信息DB_LENGT H Output UDINT I、Q、M、D、L • 所选 DB中的数据字节数。 • “0”表示优化访问的数据块和仅位于装载存储 器中的数据块。 ATTRIB Output BYTEI、Q、M、D、L DB 属性: • 第 0* 位 = 0:未设置属性“仅存储在装载内 存中”(Only store in loadmemory)。 • 第 0 位* = 1:已设置属性“仅存储在装载内 存中”(Only store in load memory)。• 位 1 = 0:未设置属性“在设备中写保护数据 块”(Data block write-protected in thedevice)。 • 位 1 = 1:已设置属性“在设备中写保护数据 块”(Data block write-protected inthe device)。 如果第 0 位 = 1,则第 2 位不受影响,并且值为 1。 • 位 2 = 0:保持型 -如果至少一个值设置为保 持型,则数据块将被视为保持型。 • 位 2 = 1:非保持型 - 整个 DB 都不是保持型。 • 位 3 *= 0:该 DB 在装载存储器(第 0 位 = 1)或工作存储器(第 0 位 = 0)中。 • 位 3 * =1:装载存储器和工作存储器中均会 生成该 DB * 将在指令“CREATE_DB:创建数据块(页 3347)”的参数中说明位 0 和位 3 之间的关系。有关有效数据类型的更多信息,请参见“有效数据类型概述。函数块“SLI_FB_ATTR_DB”)的结果如果常开触点(“startAttr”)的信号状态为“TRUE”,则执行“ATTR_DB”指令。通过输入参数DB_NUMBER(“SLI_srcDB_ATTR_DB”),可存储待评估数据块的编号。指令“ATTR_DB”将基于该编号调用数据块,并在输出参数 ATTRIB(“#statAttrByte”)中输出当前状态。在输出参 数DB_LENGTH(“readLenByte”)处,将输出 BYTE 中数据块所读取数据 (4 INT) 的长度(值 “8”)。通过函数“SLI_itemiseByte_ATTR_DB”,将输出参数 ATTRIB 中的十六进制值转换为一个位字符串。位序列“00110000”(位 0 到 7)表示: • 不仅仅只存在于装载存储器中的数据块。 • 未写保护的数据块。 •非保持性数据块。 • 在装载存储器和工作存储器中均生成的数据块。 输出参数RET_VAL(“attrRetVal”)用于指示处理无错误。DELETE_DB:删除数据块 (S7-1200, S7-1500)说明 说明 “DELETE_DB”与 S7-1500R/H-CPU 结合使用 仅固件版本为 V3.0 及更高版本的 SIMATICS7-1500R/H-CPU 支持指令“DELETE_DB”。 “DELETE_DB”指令用于删除通过调用“CREATE_DB(页 3347)”指令由用户程序创建的数据块 (DB)。 如果数据块不是通过“CREATE_DB”创建的,将通过参数RET_VAL 输出错误代码 W#16#80B5。 选定的数据块不是立即删除,而是在执行循环 OB 后的循环控制点处删除。 功能描述“DELETE_DB”为异步执行指令,可以跨多个调用执行。在 REQ = 1 时调用该指令,将开始中 断传送。 输出参数 BUSY和输出参数 RET_VAL 的第 2 个和第 3 个字节用于显示作业状态。 当输出参数 BUSY 的值为 FALSE时,数据块的删除操作完成。 参数 下表列出了“DELETE_DB”指令的参数: 参数 声明 数据类型 存储区 说明 REQ InputBOOL I、Q、M、D、L 或常量 REQ =1:请求删除参数 DB_NUMBER 中该编 号的数据块 DB_NUMBERInput UINT I、Q、M、D、L 或常量 要删除的 DB 的 编号 RET_VAL Output INT I、Q、M、D、L错误信息(请参见“RET_VAL 参数”) BUSY Output BOOL I、Q、M、D、L BUSY =1:该过程尚未完成。有关有效数据类型的更多信息,请参见“有效数据类型概述。CREATE 函数的编程示例 (S7-1200, S7-1500) 简介在以下示例中,在装载存储器中创建一个数据块,读取该数据块中的内容后将其删除。互连参数:“SLI_itemiseByte_CRDfunctions”函数创建函数“SLI_itemiseByte_CRDfunctions”,将变量“setAttrBool”的值转换为变量“#statAttByte”。 在该函数中创建以下局部变量。 程序段 1:根据程序段 1 中的示例,为该局部变量中的所有位(0..7) 创建互连。程序段 1 的结果 函数“SLI_itemiseByte_CRDfunctions”用于转换 BOOL数据类型 BYTE(“#statAttByte”)数组 的 DB 属性(“setAttrBool”)。 程序段 2 的结果 -“CREATE_DB”指令如果常开触点(“startCreate”)的信号状态为“TRUE”,则执行“CREATE_DB”指令。在该过程 中,将基于输入参数COUNT(“setLenByte”)创建一个长度为 8 个字节的新数据块。通过输 入参数 LOW_LIMIT(“lowLim”)或UP_LIMIT(“hiLim”),可指定待创建数据块的编号。用 于创建数据块的属性(位于 BYTE)存储在输入参数ATTR(“#statAttByte”)中。仅在装载存 储器中创建数据块,并填充所定义的数据。数据块将存储在输入参数 SRCBLK(“SLI_srcDB_CREATE_DB.myData”)中,并用作新数据块的内容模板。 输出参数RET_VAL(“CreateRetVal”)用于指示处理无错误。指令“CREATE_DB”执行后将保持为未激活状态(“createRetVal”的值为“16#7000”)。执行结束后,将立即在输出参数DB_NUM(“#nbrNewDB”)中输出新数据块的编号。