从TIA 博途 V12,S7-1200 V2.0开始,支持DB_ANY类型。
DB_ANY 数据类型用来标识任意数据块。对于 S7-1200,可以选择访问编程期间尚不可用的数据块。为此,在访问块的块接口中创建一个 DB_ANY 数据类型的块参数。数据块名称或先前分配给数据块名称的 DB_ANY 数据类型的变量将在运行期间传送到此参数。
DB_ANY目前有4种用法以及2个隐藏指令:
1. 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类型变量
图8 DB_ANY类型变量的定义
DB_ANY作为输出、输入输出形参,调用参数的时候只能参考图7的方式。
根据(1)中的程序,计算结果都是一样的,如图9所示。
图9 计算结果
2. TIA 博途 V13SP1,S7-1200 V4.0开始,如果DB_ANY指向通过PLC数据类型(UDT)或者系统数据类型(例如IEC_TIMER等)建立的DB块,此时S7-1200在SCL中提供了两个指令用于DB_ANY和Variant类型之间进行转化,如图10所示,如图11-12所示为指令参数:
图10 指令位置
参数