用户在编写程序时,变量的格式必须与指令的数据类型相匹配。s7系列plc的数据类型主要分为基本数据类型、复合数据类型和参数类型,对于s7 - 1500 plc,还包括系统数据类型和硬件数据类型。
基本数据类型的操作数通常是32位以内的数据。基本数据类型分为位数据类型、数学数据类型、字符数据类型、定时器数据类型以及日期和时间数据类型。在日期和时间数据类型中,存在超过32位的数据类型;对于s7 - 1500 plc而言,还增加了许多超过32位的此类数据类型。为方便比较学习,故一并放在基本数据类型中进行介绍。
位数据类型主要有布尔型( bool)、字节型(byte)、字型(word)和双字型( dword),对于s7 -1500 plc,还支持长字型(lword),而s7 - 300/400 plc仅支持前4种。
在位数据类型中,只表示存储器中各位的状态是0 (false)还是1(ture)。其长度可以是一位( bit)、一个字节(byte,8位)、一个字(word,16位)、一个双字(double word,32位)或一个长字(long word,64位),分别对应bool、byte、word、dword和lword类型。位数据类型通常用二进制或十六进制格式赋值,如2# 01010101、16# 283c等。需注意的是,一位布尔型数据类型不能直接赋常数值。
位数据类型的常数表示需要在数据之前根据存储单元长度( byte、word、dword、lword)加上b#、w#、dw#或lw#(bool型除外),所能表示的数据范围见表1。
表1位数据类型的数据表示范围
对于s7 - 1500 plc,数学数据类型主要有整数类型和实数类型(浮点数类型)。
整数类型又分为有符号整数类型和无符号整数类型。有符号整数类型包括短整数型( sint)、整数型(int)、双整数型(dint)和长整数型(llnt);无符号整数类型包括无符号短整数型( usint)、无符号整数型(uint)、无符号双整数型(udint)和无符号长整数型( ulint)。对于s7 - 300/400 plc,仅支持整数型int和双整数型dint。
短整数型、整数型、双整数型和长整数型数据为有符号整数,分别为8位、16位、32位和64位,在存储器中用二进制补码表示,最高位为符号位(0表示正数、1表示负数),其余各位为数值位。而无符号短整数型、无符号整数型、无符号双整数型和无符号长整数型数据均为无符号整数,每一位均为有效数值。
实数类型具体包括实数型( real)和长实数型(lreal),均为有符号的浮点数,分别占用32位和64位,最高位为符号位(0表示正数、1表示负数),接下来的8位(或11位)为指数位,剩余位为尾数位,共同构成实数数值。实数的特点是利用有限的32位或64位可以表示一个很大的数,也可以表示一个很小的数。对于s7 - 300/400 plc,仅支持实数型real。
原有的字符数据类型( char)长度为8 bit,操作数在存储器中占一个字节,以ascii码格式存储单个字符。常量表示时使用单引号,例如常量字符a表示为‘a’或char#′a′。表2列出了char数据类型的属性。
表2 char数据类型的属性
长度/bit
格式
取值范围
输入值示例
8
ascii字符
ascii字符集
'a ',char#′a′
对于s7 - 1500 plc,还支持宽字符类型(wchar),其操作数长度为16 bit,即在存储器中占用2b,以unicode格式存储扩展字符集中的单个字符。但只涉及整个unicode范围的一部分。常量表示时需要加wchar#前缀及单引号,例如常量字符a表示为wchar#‘a’。控制字符在输入时,以美元符号表示。表3列出了wchar数据类型的属性。
表3 wchar数据类型的属性
长度/bit
格式
取值范围
输入值示例
16
unicode字符
$0000~$d7ff
wchar#'a', wchar#'$0041'
定时器数据类型主要包括时间( time)和s5时间(s5time)数据类型。与s7 - 300/400 plc相比,s7 - 1500 plc还支持长时间(ltime)数据类型。
时间( time)数据类型为32位的iec定时器类型,内容用毫秒(ms)为单位的双整数表示,可以是正数或负数,表示信息包括天(d)、小时(h)、分钟(m)、秒(s)和毫秒( ms)。表4列出了time数据类型的属性。
表4 time数据类型的属性
s5时间(s5 time)数据类型变量为16 bit,其中最高两位未用,接下来的两位为时基信息(00表示0. 01 s,01表示0.1 s,10表示1s,11表示10 s),剩余12位为bcd码格式的时间常数,其范围为0~ 999,如图1所示。该格式所表示的时间为时间常数与时基的乘积。s5 time的常数格式为时间之前加s5t#,例如s5t#16sl00 ms,以时基0.1 s表示的时间常数为161,故对应的变量内容为2#0001 0001 0110 0001。
表5 列出了s5 time数据类型的取值范围等属性。
表5 s5time数据类型的属性
图1 s5 time时间格式
长时间( ltime)数据类型为64位iec定时器类型,操作数内容以纳秒(ns)为单位的长整数表示,可以是正数或负数。表示信息包括天(d)、小时(h)、分钟(m)、秒(s)、毫秒( ms)、微秒(μs)和纳秒(ns)。常数表示格式为时间前加lt#,如lt#11ns。表6列出了ltime数据类型的属性。
表6 ltime数据类型的属性