北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章528 浏览8058252

PLC基础篇之数据类型(Data type)

数据类型(Data type)是数据在PLC(计算机)中的组织形式,它包含了数据的长度及数据所支持的操作方式(支持哪些指令)。编程时给变量(Varibale)指定数据类型后,编译器会给该变量分配一定长度的内存并明确该变量的操作方式。透彻的理解数据类型是程序设计的基本要求。

cover.jpg不同厂家的PLC对数据类型的支持可能会略有出入,但是基本数据类型几乎相同(不仅仅是PLC的编程,在计算机高级语言的编程中,基本数据类型也相同)。这篇文章以西门子S7系列PLC为例,讲解下PLC的基本数据类型。

首先说一说位(bit)”。前一篇文章在讲解数制的时候(参考:PLC基础篇之数制及其表示方法),曾多次提到“位”的概念。“位”,英文名称为“bit”,它是PLC(计算机)的最小存储单位,其取值范围为“0”和“1”两种。

“位”是存储单位,按位存放的数据,在数据类型中,被称为“布尔型”(Bool)。布尔型数据的取值范围为“0”和“1”,可用英文“TRUE”(真)和“FALSE”(假)表示。

在PLC的编程中,布尔型的数据使用频率是很高的。对于数字量的输入或输出,都是以“位”(布尔型)的方式进行操作。比如“I0.0”就是一个布尔型变量,它表示输入缓冲区(Input)的第0个字节的第0位。“位”,也俗称“点”,常把输入通道称为“I点”,把输出通道称为“Q点”。

第二种类型:字节(Byte)。八个“位”组成一个“字节(Byte)”,如下图:

byte.jpg

在PLC中,输入模块和输出模块的通道也是按照字节的顺序来存放的。比如“I0.0~I0.7”,这8个输入“位”组成“IB0”。对于S7-300/400的PLC,Byte类型是无符号数,其取值范围内为 0~255(0xFF)。对于S7-1200/1500PLC的编程(博途平台),Byte类型可以作为有符号数或者无符号数。当作为有符号数时,其取值范围为“-128~+127”;当作为无符号数时,其取值范围为0~255(0xFF)。

第三种类型:字符型(CHAR)。字符型类型的数据也占用一个字节,它内部存放的是该字符的ASCII码值。比如字符“A”,其ASCII码值为66(0x42)。当程序查询到该数据属于字符型,并且内部存储的值为66时,将会在屏幕上显示大写的字符:“A”。

第四种类型:整型(INT)。整型数据占用两个字节(Byte),属于有符号数,其取值范围为:-32768~+32767。整形数据的最高位为符号位,“0”表示正数,“1”表示负数。既然整形数据由两个字节组成,就有字节顺序的问题,哪个字节是高字节呢?西门子S7系列PLC采用大端(Big-Enidan)的存放方式,如下图(关于字节序,请参考文章:给你讲个来自《格列佛游记》的计算机故事):

integer.png

第五种类型:字(WORD)。“字”类型也占用两个字节,但是它表示无符号数,其取值范围为:0~65535(0xFFFF)。与整型数据一样,也采用Big-Endina的方式存放。

在PLC中,用“W”来表示一个“字”类型的变量。比如变量“MW0”,其中“M”表示该变量存放在“M”区,“W”表示它是一个“字”类型的变量,“0”表示其起始地址为0。“MW0”由“MB0”和“MB1”组成,其中“MB0”为高字节(Big-Endian字节序)。

第六种类型:双字(Double WORD)。“双字”由两个“字”组成,因此它包含四个字节,其取值范围为:0~4294967295(0xFFFFFFFF)。在PLC中,“双字”用“D”表示。比如“MD0”,它表示M存储区从地址0开始的4个字节,即:MB0、MB1、MB2和MB3,字节序依然为大端(Big-Endina)。

第六种类型:双整型(Double INT)。“双整型”类型由两个“整型”组成,也占用四个字节,不过它表示的是有符号数,其取值范围为:-2147483648~+2147483648。在PLC中,表示为“DINT”。

第七种类型:实型(Real)。“实型”数据占用四个字节,用来表示浮点数。实型数据总计32个“位”,被分成三个部分:

1)符号位(Sign):最高位(第31位),正数为“0”,负数为“1”。

2)指数位(Exponent):第23位到第30位,用于存储科学计数法中的指数数据,并且采用移位存储;

3)尾数部分(Mantissa):第0位到第22位,表示浮点数的尾数部分;

对于“指数位”,为了处理负指数的需要,其存储的值为实际指数加上偏移量“127”。比如,若实际指数为“0”,则存储值为“127”;若实际指数为“-64”,则存储值为“63”。

real.jpg

实型数据(浮点数)可以使用4个字节的空间,可以表示非常大(10的38次方)和非常小(10的负38次方)的数,但是浮点数的运算速度相对整型会慢一些。在PLC编程中,可以输入小数点来表示浮点数。比如“10”表示整数,“10.0”表示浮点数。

对于S7-1200/1500系列PLC,博途开发环境支持更多的数据类型。比如:UDINT表示无符号双整型;SDINT表示有符号双整型;SINT表示有符号整型;LReal表示双精度浮点数(64位,8个字节)。本文介绍的基本数据类型主要针对S7系列PLC,对其它PLC产品或计算机程序设计可能会略有出入。在某些高级语言中(比如:VB),布尔型变量的取值范围虽然也是“0”和“1”,但是要占用2个字节(Byte),不同的操作系统对数据类型的定义也会有所不同(比如32位的Windows和64位的Windows)。为了防止初学者混淆,建议先搞清楚西门子PLC编程环境下的基本数据类型,如果以后需要在其它开发环境下编程,只要查询下相关手册,便可触类旁通。

关于基本数据类型就先讲到这里了,西门子PLC还支持复杂数据类型,我们后续的文章再介绍。相关参考文章:

PLC基础篇之数制及其表示方法

给你讲个来自《格列佛游记》的计算机故事



已经过安全软件检测无毒,请您放心下载。

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论