PLC基本数据类型的解读(避免在使用中的误解)
有网友对学习PLC过程中对于数据类型有很多疑问,利用本文再对PLC中的基本数据类型跟大家进行一下解读。
对于数据类型的解释在手册中是这么说的:
“数据类型用于指定数据元素的大小以及如何解释数据。每个指令参数至少支持一种数据类型,而有些参数支持多种数据类型。将光标停在指令的参数域上方,便可看到给定参数所支持的数据类型”。
从上面的手册解释来说就是在编程中要对程序中用的数据给指定一个数据类型,要能满足数据大小(长度),让程序能进行计算,所以,要能明白你所使用的数据是什么类型,长度有多大,这样你才能在程序中准确进行逻辑运算、数学运算及数据传输等,同时,也要看你所使用的指令可以使用哪些数据类型,根据指令需要进行一些数据类型的转换。
一、基本数据类型包含哪些?
以西门子TIA S7-1200为例来说,1200的基本数据类型包括:二进制数、整数、浮点数、定时器数据、时间和日期、字符串等。下面主要以容易混淆的二进制数、整数和浮点数进行解读:
1、二进制数(BOOL、BYTE、WORD、DWORD、LWORD)
(1)BOOL型:布尔,是表示1位的值,就是说0或1。
(2)BYTE:字节,是位字符串,占有8位,举例说2#0 到 2#1111_1111,对应16进数就是16#00—16#FF。如IB2、MB10、DB1.DBB4
(3)WORD:字,是位字符串,占有16位,举例说:2#0到2#1111 1111 1111 1111,对应的16进制数就是16#0—16#FFFF。如MW10、DB2.DBW1。
(4)DWORD:双字,是位字符串占有32位,举例说:2#0到2#1111 1111 1111 1111 1111 1111 1111 1111,对应的16进制数就是16#0—16#FFFF FFFF。如MD10、DB2.DBD1。
2、整数(SINT、USINT、INT、UINT、DINT、UDINT、LINT、ULINT),这里的S代表短,U代表无符号、D代表双。
(1)SINT和USINT
这两种相同的是短整形数,占8位,地址举例:MB0,DB1.DBB0。但是这两种的取值范围是不同的。
SINT:有符号短整形,取值范围-128—127,2#0—2#0111 1111,最高位为符号位,
USINT:无符号短整形,取值范围0—255,2#0—2#1111 1111
(2)INT和UINT
这两种相同的是整形数,占16位,地址举例:MW0,DB1.DBW0。但是这两种的取值范围是不同的。
INT:有符号整形,取值范围-32768—32767,2#0—2#0111 1111 1111 1111,最高位为符号位,
USINT:无符号短整形,取值范围0—65535,2#0—2#1111 1111 1111 1111
(3)LDNT和UDINT
这两种相同的是双整形数,占32位,地址举例:MD0,DB1.DBD0。但是这两种的取值范围是不同的。
DINT:有符号整形,取值范围-2,147,483,648—2,147,483,647,2#0—2#0111 1111 1111 1111 1111 1111 1111 1111,最高位为符号位,
UDINT:无符号整形,取值范围0—4,294,967,295,2#0—2#1111 1111 1111 1111 1111 1111 1111 1111
3、浮点数
实(或浮点)数以 32 位单精度数 (Real) 或 64位双精度数 (LReal) 表示。单精度浮点数的精度最高为 6位有效数字,而双精度浮点数的精度最高为 15 位有效数字。
在输入浮点常数时,最多可以指定 6 位 (Real) 或 15 位 (LReal) 有效数字来保持精度。
总结下:上述数据类型是我们在编程中最常用到的数据类型,通过上面的介绍大家应该对它们有一定的了解,虽然可能不同数据类型的数据占有的字节数是相同,但是它们的数据其实是不同的,比如,INT和WORD都是16位,但是它们包含数据内容是不同的,在编程中一定要注意。通常来说,WORD常用于逻辑计算,INT常用于数学计算,对于博途TIA S7-1200使用SCL编程时区分是比较严格的。
二、如何定义数据类型
在编程中我们一般要先定义好数据类型,比如在数据块中定义数据类型,下面以在DB块中定义数据类型为例,看看不同的数据类型地址有什么变化。
建立如下数据块,并建立一下数据包含不同数据类型:
从上图看不到偏移量,这时因为TIA中的DB块默认勾选“优化的块访问”,只能显示符号地址,而没有偏移量,可以在块属性中将“优化的块访问”去掉即可,
下面就看看不同数据类型的地址:
从上图大家能发现什么?
(1)BOOL型,虽然只有一位,但是也要占一个字节。
(2)SINT USINT 和BYTE都是1个字节,但是它们的初始值的格式是不同的。同样WORD和INT也是一样2个字节,所以,在数据类型分类,将WORD归到二进制数中,一般用于逻辑运算,而INT用于数学运算。
(3)REAL是4个字节,在进行数学计算时要注意,比如,我前面写转换指令文章#跟我一起看1200手册之基本指令(转换指令)如何使用中用到的求平方根指令,就是对REAL型数据进行计算,所以,在选择数据时我使用的DINT数据。(如下图所示)。不注意的话容易造成计算错误。