quote:以下是引用Automann在2013-10-16 08:26:36的发言:
STEP7 V12中的数据类型转换
1.数据类型转换的分类
在STEP7 V12中,分配或提供块参数的实参时,必须确保数据类型是兼容的。如果操作数不是同一数据类型,则必须进行转换。
数据类型的转换方式分为隐式转换和显式转换。
如果操作数的数据类型是兼容的,则自动执行隐式转换。编程语言 LAD、FBD、SCL 和 GRAPH 支持隐式转换。STL不支持隐式转换。
2.IEC检查
IEC检查用于操作数的数据类型兼容性检查。如果激活“IEC 检查”,则应用较严格的条件。
1)为项目中的所有新块设置IEC检查:
在设置窗口的“PLC 编程 > 常规”组的“新块的默认设置”组中,选中或清除“IEC检查”复选框。
2)为某个块设置IEC检查:
打开块,打开巡视窗口的“属性”选项卡。在区域导航中选择“常规”组的“属性”,选中或清除“IEC检查”复选框。
3.隐形转换
隐形转换可以根据设定的严格或较宽松的条件来进行兼容性测试。
1) 进行 IEC 检查
在已经设置了IEC检查的情况下,下列规则适用于LAD、FBD和GRAPH 编程语言:
可以进行隐式转换的数据类型仅有BYTE和WORD。
源数据类型的位长度不能超过目标数据类型的位长度。例如,无法为预计为 BYTE 数据类型的参数指定 WORD 数据类型的操作数。
在已经设置了IEC 检查的情况下,下列规则适用于SCL编程语言:
无法将位字符串隐式转换为其它数据类型。例如,无法为预计为 INT 数据类型的参数指定 WORD数据类型的操作数。
源数据类型的位长度不能超过目标数据类型的位长度。例如,无法为预计为 BYTE 数据类型的参数指定 WORD 数据类型的操作数。
2) 不进行IEC检查(默认的设置)
在未设置 IEC 检查的情况下,下列规则适用于 LAD、FBD 和 GRAPH 编程语言:
可以对 BYTE、WORD、DWORD、INT、DINT、TIME、S5TIME、TOD、DATE 和 CHAR 数据类型进行隐式转换。
源数据类型的位长度不能超过目标数据类型的位长度。 例如,无法为预计为 WORD 数据类型的参数指定 DWORD 数据类型的操作数。
在未设置 IEC 检查的情况下,下列规则适用于 SCL 编程语言:
位字符串可以被隐式转换为其它数据类型。例如,可以对预期为 WORD 数据类型的参数提供 WORD 数据类型的操作数。
位字符串无法被隐式转换为浮点数。例如,无法为预计为 REAL 数据类型的参数指定 WORD 数据类型的操作数。
如果位长度相同,那么位字符串只能被隐式转换为 TIME、TOD、DATE 和 CHAR 数据类型。例如,无法为预计为 DATE 数据类型的参数指定 DWORD 数据类型的操作数。
源数据类型的位长度不能超过目标数据类型的位长度。 例如,无法为预计为 INT 数据类型的参数指定 DINT 数据类型的操作数。
在到达/离去参数处输入的操作数位长度必须与为所述参数设定的位长度相同。
4.显式转换
如果因操作数不兼容而不能进行隐式转换,则可以使用显式转换指令。可以在“指令”任务卡中找到转换指令。
在使能输出 ENO 上将显示所有溢出。例如,如果源数据类型的值大于目标数据类型的值,则会发生溢出。
STEP7 V12的在线帮助给出了S7-300/400、S7-1500和S7-1200设置或未设置IEC检查时,各种数据类型相互之间是否允许隐式转换或显示转换的详细信息,并给出了显式转换使用的指令。