在STEP 7-Micro/WIN中编程时,在下列两种情况下您必须识别并使用数据类型:
?如果您以IEC 1131-3模式编程,则必须为全局符号表中的所有数值选择数据类型。
?如果您在局部变量表中赋值,则必须为每个局部变量定义数据类型。
当您明确地为数值指定数据类型时,您为STEP 7-Micro/WIN提供清晰的指令,指明需要为数值分配多少内存空间(例如,数值100可被存储为字节、字或双字)以及如何表示数值(将0视作布尔值还是数字值?)。
每个SIMATIC和IEC 1131-3指令或参数化子程序均由精确定义识别。该定义可被称为签名。对于所有的标准指令,每个指令操作数允许使用的数据类型集均从签名获得。对于参数化子程序,用户通过局部变量表建立子程序签名。
STEP 7-Micro/WIN V3.0编程软件为SIMATIC模式执行简单的数据类型检查,为IEC 1131-3模式执行细致的数据类型检查。这意味着为局部或全局变量指定一种数据类型时,软件在下表所列的每个等级中确保操作数数据类型与指令签名相匹配。
基本数据类型 数据类型大小 说明 范围
布尔 1位 布尔 0至1
字节 8位 不带符号的字节 0至255
字节 8位 带符号的字节(SIMATIC模式仅限用于SHRB指令) -128至+127
字 16位 不带符号的整数 0至65,535
整数 16位 带符号的整数 -32768至+32767
双字 32位 不带符号的双整数 0至4294967295
双整数 32位 带符号的双整数 -2147483648至+2147483647
实数 32位 IEEE 32 位浮点 +1.175495E-38至+3.402823E+38-1.175495E-38至3.402823E+38
字符串 2至255字节 ASCII字符串照原样存储在PLC内存中,形式为1字符串长度接ASCII数据字节 ASCII字符代码128至255
复杂数据类型 说明 范围
TON 打开接通延时定时器 1 ms10 ms100 ms T32, T96T33 - T36, T97 - T100T37 - T63, T101 -T255
TOF 关闭接通延时定时器 1 ms10 ms100 ms T32, T96T33 - T36, T97 - T100T37 - T63, T101 - 255
TP 脉冲定时器(参阅注释1) 1 ms10 ms100 ms T32, T96T33 - T36, T97 - T100T37 - T63, T101 - 255
CTU 向上计数器 0至255
CTD 向下计数器 0至255
CTUD 向上/向下计数器 0至255
SR 设置主要双稳态触发器 无关
RS 复原主要双稳态触发器 无关
STEP 7-Micro/WIN 提供三级数据类型检查
1. IEC编辑器具有细致数据类型检查。在该模式中,参数数据类型必须与符号或变量的数据类型完全匹配。欲支持细致数据类型检查,过载指令除外,每个正式参数只有一种数据类型。例如,SRW(字向右移位)指令的IN参数的数据类型为字。在细致数据类型检查中,只有被指定字数据类型的变量才能成功编译。使用细致数据类型检查时,数据类型为整数的变量对字指令参数无效。细致数据类型检查仅在IEC 1131-3模式中进行。
用户选择的数据类型 等同数据类型
布尔 布尔
字节 字节
字 字
整数 整数
双字 双字
双整数 双整数
实数 实数
字符串 字符串
2. 处于SIMATIC模式中的局部变量表具有简单数据类型检查。在该模式中,当符号或变量被指定一个数据类型时,同时自动指定与所选数据类型位大小相匹配的所有数据类型。例如,如果用户选择双整数作为数据类型,局部变量会自动指定数据类型双字,因为二者均为32位数据类型。不自动指定实数数据类型,虽然实数也是32位数据类型。实数数据类型被定义为无其他等同数据类型,总是独特的类型。使用局部变量时,只在 SIMATIC模式中执行简单数据类型检查。
用户选择的数据类型 等同数据类型
布尔 布尔
字节 字节
字 字、整数
整数 字、整数
双字 双字、双整数
双整数 双字、双整数
实数 实数
字符串 字符串
3. SIMATIC符号编辑器无数据类型检查。该模式仅限用于无法选择数据类型的SIMATIC全局变量。在该模式中,所有相同大小的数据类型被自动指定给符号。例如,编程软件将自动为赋予VD100地址的符号指定下列数据类型:双字、双整数和实数。
为SIMATIC全局符号由大小决定的数据类型
用户选择的地址 指定等同的数据类型
V0.0 布尔
VB0 字节、字符串
VW0 字、整数
VD0 双字、双整数、实数
数据类型检查的益处
数据类型检查的益处是帮助用户避免常见编程错误。例如,如果指令支持带符号的数字,则在使用不带符号的数字作为指令操作数时,软件为该用法设置旗标会有益处。例如,关系比较<I是带符号的指令,显然,对于带符号的数据类型操作数,-1小于0。但当<I指令允许支持不带符号的数据类型时,程序员需确保绝不会发生下列情况。在程序运行时,对于<I指令,不带符号的数值40,000实际上小于0。程序员需确保对带符号的指令使用不带符号的数字不会超越正负数界限,否则会出现无法预测的结果。
警告您应当确保带符号的数字用作不带符号的指令时不得超出正负数界限。若无法确保不
带符号的数字用作带符号的指令时不超出正负数界限,可能致使程序或控制器操作出现无法预测的结果。无法预测的控制器操作可能导致人员死亡或严重伤害及/或财产严重损坏。 请务必核实不带符号的数字用作带符号的指令时不得超出正负数界限。
总之,在IEC 1131-3编辑模式中,细致数据类型检查通过对指令的非法数据类型生成错误,帮助程序员在编译过程中发现这些 错误。
SIMATIC编辑器不具有此一功能。
在SIMATIC与IEC1131-3之间移植程序
因为IEC1131-3属于细致数据类型,而SIMATIC不属于此一类型,STEP 7-Micro/WIN不提供在两种不同编辑模式之间移动程序的能力。程序员必须选择一种希望使用的编辑模式。
过载指令
过载指令支持一系列数据类型。仍然应用细致数据类型检查,在成功编译指令之前所有的操作数数据类型必须匹配。例如,请参阅下表中用于IEC过载ADD(加)指令。
指令 允许使用的数据类型(细致数据类型检查) 允许使用的数据类型(数据类型检查) 编译指令
ADD 整数 字、整数 ADD_I(加整数)
ADD 双整数 双字、双整数 ADD_D(加双整数)
ADD 实数 实数 ADD_R(加实数)
当所有操作数的数据类型均为双整数时,编译器生成"加双整数"指令。如果过载指令数据类型混合,会出现编译错误。根据数据类型检查的等级决定哪些为非法。在下例中,如果使用细致数据类型检查,则生成编译程序错误,但如果使用简单数据类型检查则成功编译。
ADD IN1 = INT, IN2 = WORD, IN3 = INT.
细致数据类型检查:引起编译错误。
简单数据类型检查:成功编译至ADD_I(加整数)。
简单数据类型检查不会阻止出现常见运行时间编程错误。例如,使用简单数据类型检查时,编译程序不能帮助避免在运行时间发生以下常见编程错误:ADD 40000,1被解释为负数,而不是不带符号的40,001。
在IEC中为过载指令使用直接编址
IEC-1131编程模式也允许使用直接表示的内存位置,作为指令参数配置的一部分。参数中可使用变量和内存位置。但是,使用直接表示的内存位置时必须清楚地识别数据类型的隐含意义,因为这些位置不包含明确的类型信息。另外,不能从任何过载IEC指令决定类型信息,因为过载指令接收多种数据类型。
直接表示的参数数据类型通过检查指令中包含的其他类型的参数来决定。当指令参数配置使用某一指定类型的变量时,则假定所有直接表示的参数均为该类型。
名称 地址 数据类型 注解
Var1 实数 这是浮点数变量。
Var2 双整数 这是双整数变量。
Var3 整数 这是整数变量。
举例 说明
假定VD100和VD200为实数类型,因为Var1是实数类型。
VD300和VD400为双整数类型,因为Var2是双整数类型。
假定VW500和VW600为整数类型,因为Var3是整数类型。
假定AC0和AC1为实数类型,因为Var1是实数类型。
这种配置被视作非法,因为无法确定类型。累加器中的数据类型可为双整数或实数。
这种配置被视作非法,因为无法确定类型。累加器指针中的数据类型可为双整数或实数。
使用数据类型转换指令
转换指令允许从一种数据类型移至另一种数据类型。STEP 7-Micro/WIN支持在下列简单数据类型之间的移动数值转换指令。
转换指令 IEC细致数据类型检查允许的操作数 SIMATIC局部变量表中的简单数据类型检查允许的操作数
字节至整数 入: 字节出: 整数 入: 字节出: 字、整数
整数至字节 入: 整数出: 字节 入: 字、整数出: 字节
整数至双整数 入: 整数出: 双整数 入: 字、整数出: 双字、双整数
双整数至整数 入: 双整数出: 整数 入: 双字、双整数出: 字、整数
双整数至实数 入: 双整数出: 实数 入: 双字、双整数出: 实数
实数至双整数(取整) 入: 实数出: 双整数 入: 实数出: 双字、双整数
字符串至整数 入: 字符串 双字 (* 指向字符串的指针)出: 整数 入: 字符串, 双字 (* 指向字符串的指针)出: 字、整数
整数至字符串 入: 整数出: 用双字代表的字符串 (* 指向字符串的指针) 入: 字、整数出: 用双字代表的字符串 (* 指向字符串的指针)
parameter数据类型字符串至双整数 入: 字符串 双字 (* 指向字符串的指针)出: 双整数 入: 字符串, 双字 (* 指向字符串的指针)出: 双字、双整数
双整数至字符串 入: 双整数出: 用双字代表的字符串 (* 指向字符串的指针) 入: 双字、双整数出: 用双字代表的字符串 (* 指向字符串的指针)
字符串至实数 入: 字符串 双字 (* 指向字符串的指针)出: 实数 入: : 字符串 双字 (* 指向字符串的指针)出: 实数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论