版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。从TIA V13SP1 开始,S7-1200 V4.0开始,支持以下处理Variant类型的变量的指令,如图1-2所示。图1 LAD中Variant类型的变量比较操作指令
图2 SCL中Variant类型的变量比较操作指令
EQ_Type、NE_Type、TypeOf
LAD指令详情
SCL指令:TypeOf(操作数),操作数是FC/FB的Input/Output/InOut/Temp中定义为Variant类型的参数,该语句输出是数据类型,在程序中只能用在IF与CASE进行比较。
用法1:IF指令,操作数对应的实参的类型与一个变量类型的比较,例如:
IF (TypeOf(操作数1) = 变量类型(例如Byte))
...
END_IF;
用法2:IF指令,两个操作数对应的实参的类型比较,例如:
IF (TypeOf(操作数1) = TypeOf(操作数2))
...
END_IF;
用法3:CASE OF指令,操作数对应的实参的类型与多个变量类型的比较,例如:
CASE (TypeOf(操作数)) OF
Byte:
...
Int:
...
ELSE
...
END_CASE;
使用举例:
编写FC,检查输入Variant变量类型,Byte则输出True,其它则输出False,如图3-6所示。
图3 FC6参数定义
图4 程序详情
SCL的版本程序,如图5所示。
图5 SCL版本的程序
OB1多次调用该FC6,可以看到结果,"DB16".Static_1是Byte类型,"DB16".Static_3不是Byte类型。
图6 OB1多次调用FC6
EQ_ElemType、NE_ElemType、TypeOfElements
SCL指令:TypeOfElements(操作数),操作数是FC/FB的Input/Output/InOut/Temp中定义为Variant类型的参数,该语句输出是数据类型,在程序中只能用在IF与CASE进行比较。
比较之前,通常先使用IS_ARRAY检查操作