西门子博图编程基础数据类型DB_ANY.doc

西门子博图编程基础数据类型DB_ANY.doc

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

DB_ANY

从TIAPortalV12,S7-1200V2.0开始,支持DB_ANY类型。

DB_ANY数据类型用来标识任意数据块。对于S7-1200,可以选择访问编程期间尚不可用的数据块。为此,在访问块的块接口中创建一个DB_ANY数据类型的块参数。数据块名称或先前分配给数据块名称的DB_ANY数据类型的变量将在运行期间传送到此参数。

DB_ANY目前有5种用法以及2个隐藏指令:

指向非优化DB的DB_ANY

指向UDT或SDT建立的DB块的DB_ANY

与指定数据类型比较

用于运动控制的DB_ANY

用于参数实例的实参

隐藏指令

1.指向非优化DB的DB_ANY

DB_ANY指向非优化DB块,可以在程序中使用DB_ANY.%绝对地址。

这种方法LAD和SCL都可以使用,这种使用方式类似于S7-300/S7-400的BLOCK_DB,如图1、2所示。

图1指令详情

SCL的版本,如图2所示。

图2指令SCL版本

使用这种方式时注意:

(1)CPU编译时不检查数据类型,可能会出现如图3所示的错误。所以请一定核实数据类型。

图3错误的数据类型

(2)不检查地址存在与否。如果调用不存在的地址,CPU会报错如图4所示的区域长度错误,所以敬请注意。

图4区域长度错误

(3)这种绝对地址是不支持变址,例如%DBW[x]不支持。

(4)不支持对符号名的访问,例如Input_1.Static_1不支持。

DB_ANY作为输入形参,调用参数的时候三种方式:

(1)在DB_ANY参数引脚填写DB块号,如图5所示

图5参数为DB块号

(2)在DB_ANY参数引脚填写DB块符号名,如图6所示

图6参数为DB块符号名

(3)在DB_ANY参数引脚填写DB_ANY类型的变量,如图7、8所示

图7参数为DB_ANY类型变量

图8DB_ANY类型变量的定义

DB_ANY作为输出、输入输出形参,调用参数的时候只能参考图7的方式。

根据(1)中的程序,计算结果都是一样的,如图9所示。

图9计算结果

2.指向UDT或SDT建立的DB块的DB_ANY

TIAPortalV13SP1,S7-1200V4.0开始,如果DB_ANY指向通过PLC数据类型(UDT)或者系统数据类型(例如IEC_TIMER等)建立的DB块

S7-1200在SCL中提供了两个指令用于DB_ANY和Variant类型之间进行转化,如图10所示,如图11、12所示为指令参数:

图10指令位置

参数

声明

数据类型

说明

in

Input

DB_ANY

待读写的数据块

err

Output

Int

错误信息

Ret_val

Return

Variant

Variant类型参数

图11DB_ANY_TO_VARIANT参数

参数

声明

数据类型

说明

in

Input

Variant

Variant类型参数

err

Output

Int

错误信息

Ret_val

Return

DB_ANY

Variant实参的DB块号

图12VARIANT_TO_DB_ANY指令参数

对于这两个指令,注意:

1.DB_ANY_TO_VARIANT指令:DB_ANY类型实参一定是通过PLC数据类型(UDT)或者系统数据类型建立的DB块,否则指令会报错,输出的Variant需要指向建在块的Temp区。

2.VARIANT_TO_DB_ANY指令:Variant类型指向的变量类型可以是通过DB_ANY_TO_VARIANT指令转化的Variant类型Temp变量,也可以是通过PLC数据类型(UDT)或者系统数据类型建立的DB块,输出的DB_ANY不受限制,因为该指令输出的DB_ANY只是用于保存DB块号。

3.DB_ANY_TO_VARIANT是目前S7-1200唯一可以初始化FC/FB/OB的Temp中的Variant变量的指令,如果运行正确,则可以使用后续Variant处理指令,例如VariantGet,MOVE_BLK_VARIANT,Serialize等,之后对Variant指向的变量的一切运算最终都会在源DB_ANY上体现。

这种方法的使用场合:

如果每种产品有大量数据,有很多种产品,每种产品的数据都是相同结构。可以基于相同结构建立UDT,每一种产品基于

文档评论(0)

159****5811 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档