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数据。(如下图所示)。不注意的话容易造成计算错误。
PLC编程基础——进制介绍
1 PLC编程基础
1.1 数据格式及要求
数据格式:即指数据的长度和表示方式。
要求:S7-200 SMART对数据的格式有一定的要求,指令与数据之间的格式一致才能正常工作。
用一位二进制数表示开关量
一位二进制数:一位二进制数有0(OFF)和1(ON)两种不同的取值,分别对应于开关量(或数字量)的两种不同的状态。
位数据的数据类型:布尔(Bool)型。
位地址:由存储器标识符、字节地址和位号组成,如I3.4等。
其它CPU存储区的地址格式:由存储器标识符和起始字节号(一般取偶字节)组成,如V B 100、V W 100、V D 100等。
1.1.1 十进制数
包含0~9共10个数字,以上10个数可以任意组合。规则:逢十进一。例:9+1=10,19+1=20,99+1=100.
1.1.2 八进制数
包含0~7共8个数字,以上8个数可以任意组合。规则:逢八进一。例:7+1=10,17+1=20,77+1=100。注意:S7-200 PLC的输入输出点都是按八进制进行排列。例如:I0.0~I0.7,I1.0~I1.7
1.1.3 二进制数
包含0~1共2个数字,以上2个数可以任意组合。规则:逢二进一。 例:1+1=10,,11+1=100。二进制又叫计算机语言或机器码
数及数制:数用于表示一个量的具体大小。根据计数方式的不同,有十进制(D)、二进制(B)、十六进制(H)和八进制等不同的计数方式。
二进制数的表示:在S7-200中用2#来表示二进制常数,例如 “2# 10111010 ”。
二进制数的大小:将二进制数的各位(从右往左第n位)乘以对应的位权(×2n-1),并将结果累加求和可得其大小。例如:2# 10111010 = 1×2 8-1 +0×2 7-1 +1×2 6-1 +1×2 5-1 +1×2 4-1 +0×2 3-1 +1×2 2-1 +0×2 1-1 = 186
1.1.4 十六进制数
包含0~9共10个数字加上A、B、C、D、E、F共6个字母,合计一起总共16个符号,以上16个数可以任意组合。规则:逢十六进一。例:9+1=A,F+1=10,1F+1=20,FF+1=100 。
十六进制数的引入:将二进制数从右往左每4位用一个十六进制数表示,可以实现对多位二进制数的快速准确的读写。
十六进制数的表示:在S7-200中用16#来表示十六进制常数,例如 “2# 1010 1110 1111 0111 可转换为16# AEF7 ”。
十六进制数的大小:将十六进制数的各位(从右往左第n位)乘以对应的位权(×16n-1),并将结果累加求和可得其大小。例如:16#2F = 2×16 2-1 +15×16 1-1 = 47
1.1.5 BCD码
BCD码释义:BCD码就是用四位二进制数的组合来表示1位十进制数,即用二进制编码的十进制数(Binary Coded Decimal Number)缩写。 例如 十进制数 23 的BCD码为 2# 0010 0011 或表示为 16# 23 ,但其8421码为 2# 00010111 。
BCD码的应用:BCD码常用于输入输出设备,例如拨码开关输入的是BCD码,送给七段显示器的数字也是BCD码。
1.1.6 负数(有符号数)的表示方法
负数的表示:PLC一般用二进制的补码来表示有符号数,其最高位为符号位(0 ——正数、1 ——负数)。
绝对值相等的正负有符号数间的关系:正数的补码是它本身。
相关问答
汇川plc出现1111报错是什么情况?
你好啊!在汇川PLC中,1111错误通常表示程序中出现了未定义的标签或变量。具体来说,可能是因为以下原因导致该错误:1.代码中使用了未定义的变量或标签。2....
PLC的常数是什么意思?
PLC的常数就是我们在编程的时候就设定好的,以后在运行的过程中不会改变的数,象我们设定某个计时器的时间为10s,那么10就是常数,相对常数就是变量,变量是可以...
三菱PLC指令TOK4K0H1111K1是什么意思?
TOK4K0H1111K1是将16进制的H1111值写进位置4的模块的0号缓冲存储器,作为设定参数用。K4:模块位置4(取值0---7,也就是主机右边第5个特殊...TOK4K0H...
三菱PLC中TOPK0K0H3111K1是什么意思,请重点解释H3111是什么意思?
把K0这个值,也就是十进制的0,穿送给地址为D101这个寄存器。台达的指令,和三菱高度相似。把K0这个值,也就是十进制的0,穿送给地址为D101这个寄存器。台达...
西门子plc编程时,以下这指令和16#F8是什么意思?-ZOL问答
16#F8指的是十六进制F8(与二进制11111000十进制248等值大小),我认为你在程序中用MOV_B把16#F8传送到SMB37/SMB47/SMB57/SMB137/SMB147/SMB1...
三菱k8x0什么意思?
在FX系列中,K8X0代表X0~X37这32位组成的存储空间与十进制常数-1进行比较.在L,Q系列中,K8X0代表X0~X1F这32位组成的存储空间与十进制常数-1进行比较.因为十进制...
三菱plc32位运算?
32位乘法是FFFF(S1+1)FFFF(S1)XFFFF(S2+1)FFFF(S2)=FFFF(D+1)FFFF(D)。F=1111(Bit)32位乘法是FFFF(S1+1)...
为何主机灯亮一下就灭了呢-ZOL问答
PLC的步进程序加计时器很容易就完成了。有用(0)回复问题可能好几个方面,建议先看看开关键是不是短路了有用(0)回复用什么品牌的PLC,每一种品牌编程语言不...
三菱的这步怎么理解d100k0
[回答]WAND是逻辑“字与”指令:第1组操作数:3ff表示0000001111111111第2组操作数:K4X0表示起始位置为X0。即X0~X7,X11~X17共16位第1组和第2组操作...
苹果手机死机,应用程序打不开,应该怎么办-ZOL问答
chengren1111你可以直接关机,如果还是动不了的你试一下按home和开关5秒,然后...西门子s7-200smartplc怎么样改系统时间3760浏览笔记本键盘打斜线怎么打出....