购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.1 S7-1500 PLC数据类型

数据是所有能输入到S7-1500 PLC中并被程序处理的信息总称。数据的传递和存储都是通过一个有名称的连续存储空间来实现的。这个存储空间就是变量。变量由名称和数据类型组成。所有变量在声明使用时都指定数据类型,以决定能够存储哪种数据。数据类型是把数据分成所需内存大小不同的数据,编程时可根据需要数据的属性来选择合适的数据类型。

在博途V15软件中,常用的有效数据类型有基本数据类型、复杂数据类型、用户自定义数据类型(PLC数据类型UDT)、指针、参数类型、系统数据类型和硬件数据类型等。

4.1.1 常用数制及转换

1. 基本概念

(1)数码:数制中表示基本数值大小的不同数字符号。例如,二进制有2个数码:0、1;十进制有10个数码:0、1、2、3、4、5、6、7、8、9。

(2)基数:数制中所使用数码的个数。例如,二进制的基数为2;十进制的基数为10。

(3)位权:数制中某一位上的1所表示数值的大小。例如,十进制的123,1的位权是100,2的位权是10,3的位权是1;二进制中的1011,从高位开始,第一个1的位权是8,0的位权是4,第二个1的位权是2,第三个1的位权是1。

2. 常用的基本数制

在计数规则中,表示数的符号在不同位置上所代表的数值是不同的。

(1)十进制

十进制是最熟悉的进位计数制,是一种以10为基数的计数法,用0、1、2、3、4、5、6、7、8、9这10个符号来描述。计数规则:逢十进一。

(2)二进制

二进制是在计算机系统中采用的进位计数制,是一种以2为基数的计数法,采用0、1两个数值。计数规则:逢二进一。在二进制中,用0和1两个符号来描述,可以表示开和关两种不同的状态,如触点的闭合与断开,线圈的通电与断电,指示灯的亮与灭等。在PLC梯形图中,如果某位为1,则表示该位触点闭合、线圈通电;如果某位为0,则表示该位触点断开、线圈断电;在西门子PLC中,二进制用前缀2#加数值来表示,如2#0001110就是8位的二进制。

(3)八进制

八进制是一种以8为基数的计数法,采用0、1、2、3、4、5、6、7这8个符号来描述。计数规则:逢八进一。PLC输入与输出的地址编号用八进制数表示,例如I0.0、I0.1、…、I0.7。

(4)十六进制

十六进制是在计算机指令代码和数据的书写中经常使用的数制,是一种以16为基数的计数法,采用0、1、…、9、 A、B、…、F 等16个符号来描述。计数规则:逢十六进一。在西门子PLC中,十六进制用前缀16#加数值来表示,例如16#0 A

(5)BCD码

BCD码是用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式。BCD码和4位自然二进制码不同,只选用4位二进制码中前10组代码,即用0000~1001分别代表所对应的十进制数,余下的6组代码不用,例如十进制数中6的BCD码是0110。

3. 常用的码制

原码是用“符号+数值”表示的,对于正数,符号位为0,对于负数,符号位为1,其余各位表示数值部分。

在反码中,对于正数,其反码表示与原码表示相同;对于负数,符号位为1,其余各位是将原码数值按位取反。

在补码中,对于正数,其补码表示与原码表示相同;对于负数,符号位为1,其余各位是在补码数值的末位加1。

4. 数制转换

(1)将二进制转换为十进制

首先将二进制数按权位展开,然后将各项相加,即可得到相应的十进制数,例如将二进制数11010转换为十进制数的方法为

(11010) 2 =1×2 4 +1×2 3 +0×2 2 +1×2 1 +0×2 0 =16+8+2=(26) 10

(2)将十进制转换为其他进制

首先将十进制数除以新进制的基数,把余数作为新进制的最低位;然后将得到的商再除以新进制的基数,把余数作为新进制的次低位;依此类推,直到商为0,此时的余数就是新进制的最高位。例如,将十进制数58转化为二进制数,需要连除以2取余数,即

(58) 10 =(111010) 2

(3)将二进制与八进制、十六进制相互转换

将二进制转换为八进制、十六进制的方法:它们之间满足2 3 和2 4 的关系,首先将要转换的二进制数从低位到高位每3位或4位为一组,高位不足时在有效位前面添0,然后将每组二进制数转换成八进制数或十六进制数即可

八进制数、十六进制数转换为二进制数时,将上面的过程逆过来即可,例如

几种常用进制之间的对应关系见表4.1。

表4.1 几种常用进制之间的对应关系

4.1.2 基本数据类型

基本数据类型是PLC程序中最常用的数据类型。每一个基本数据类型的数据都具备关键字、数据长度、取值范围和常用表达格式等属性。常用的基本数据类型有位数据类型、整数和浮点数数据类型、定时器数据类型、日期和时间数据类型、字符数据类型等。

1. 位数据类型

位数据类型主要包括布尔型(Bool)、字节型(Byte)、字型(Word)、双字型(DWord)、长字型(LWord)等,见表4.2。

表4.2 位数据类型的属性

(1)位(bit)

位数据的数据类型为Bool。在博途V15软件中,布尔值用TRUE和FALSE来表示,输入时可以直接将1或0自动转换为TRUE和FALSE。

位存储单元的地址由字节地址和位地址组成,如图4.1所示,例如I0.1、Q1.0、M10.0等。

图4.1 字节.位

(2)字节(Byte)

一个字节由8位二进制组成,例如QB0由Q0.0~Q0.7组成,如图4.2所示。

图4.2 字节

(3)字(Word)

一个字由相邻的两个字节组成,也就是由连续的16位二进制组成,每4位为一组,例如MW100由MB100和MB101组成,如图4.3所示。

图4.3 字

(4)双字(DWord)

一个双字由两个连续的字(或4个字节)组成,例如MD100由MW100、MW102两个字或MB100~M103 4个字节组成,如图4.4所示。

图4.4 双字

(5)长字型(LWord)

S7-1500 PLC支持64位长字型,由4个双字或8个字节组成。

2. 整数数据类型

整数数据类型有8位短整数SINT、16位整数INT、32位双整数DINT和64位整数LINT等,见表4.3。

表4.3 整数数据类型的属性

所有整数都有有符号整数和无符号整数两种:带U的为无符号整数;不带U的为有符号整数。在有符号整数中,最高位为符号位,最高位为0时表示为正数,为1时表示为负数。例如,INT是一个有符号整数,由16位组成,在存储器中占用一个字(Word)的空间,第0位~第14位表示数值的大小,最高位第15位表示数值的正负符号位,如图4.5所示。

图4.5 INT有符号整数

SINT、INT、DINT和LINT虽然变量长度不同,但都表示有符号整数,表示方法一样,即最高位为符号位;USINT、UINT、UDINT和ULINT均为无符号整数,无符号位。

3. 浮点数数据类型(REAL)

浮点数又称实数,有32位浮点数(REAL)和64位浮点数(LREAL),有正负之分且带小数点,最高位为符号位,见表4.4。

表4.4 浮点数数据类型的属性

在PLC编程软件中,一个REAL类型的数占用4个字节的空间,一个长浮点数数据类型(LREAL)的数占用8个字节的空间,用十进制小数来输入或显示浮点数,例如21是整数,21.0是浮点数。

4. 定时器数据类型

定时器数据类型主要有IEC时间(Time)、S5定时器(S5Time)和长时间(LTime)等数据类型,见表4.5。

表4.5 定时器数据类型的属性

(1)IEC时间数据类型(Time)

IEC时间数据类型采用IEC标准时间格式,是32位的有符号双整数,占用4个字节,格式为T#Xd_Xh_Xm_Xs_Xms,操作数内容以毫秒为单位。其中,d表示天;h表示小时;m表示分钟;s表示秒;ms表示毫秒。

(2)长时间数据类型(LTime)

长时间数据类型采用IEC标准时间格式,是64位的有符号双整数,数据类型长度为8个字节,格式为LT#Xd_Xh_Xm_Xs_Xms_Xμs_Xns,操作数内容以纳秒为单位,LINT数据每增加1,时间值增加1ns。其中,d表示天;h表示小时;m表示分钟;s表示秒;ms表示毫秒;μs表示微秒;ns表示纳秒。

(3)S5定时器数据类型(S5Time)

S5定量器数据类型采用3位BCD码的时间格式,计时时间值范围为0~999,数据长度为16位,格式为S5T#Xh_Xm_Xs_Xms。其中,h表示小时;m表示分钟;s表示秒;ms表示毫秒。

S5定时器采用BCD码的计时时间值最大为999,通过选择不同的时基可以改变定时器的定时长度,在编写程序时,可以直接装载设定的时间值,CPU可根据时间值的大小自动选择时基值。如果选择的时间值为一个变量,则需要对时基值进行赋值。

虽然IEC定时器与S5定时器相比更精确,定时时间更长,但是每一个IEC定时器需要占用一个CPU的存储区。

5. 日期和时间数据类型

日期和时间数据类型的属性见表4.6。

(1)IEC日期(DATE)

IEC日期数据类型釆用IEC标准日期格式的16位无符号整数,操作数按十六进制形式,占用2个字节,例如2006年8月12日的表示格式为D#2018-08-12,按年-月-日排序。在规定的取值范围内(S7-1500 PLC日期的取值范围为D#1990-01-01~D#2068-12-31),IEC日期数据类型可以与INT数据类型相互转换(D#1990-01-01对应16#0000),INT数据每增加1,IEC日期值增加1天。

表4.6 日期和时间数据类型的属性

(2)日期时间(DT)

日期时间数据类型用于存储日期和时间信息,是一个8字节的BCD码时间格式,例如DT#19-11-20-12∶30∶20.10。

(3)日期长时间(LDT)

日期长时间数据类型用于存储日期和时间信息,单位是ns。

(4)长日期时间(DTL)

长日期时间数据类型的操作数为12个字节,按照预定的结构存储日期和时间,用于表示完整的日期时间,有固定的结构,定义DTL时,起始值必须包括年、月、日、时、分、秒。博途V15软件会根据年、月、日自行计算星期的值,例如DTL#1998-01-01-00∶00∶00.00。

(5)日时间(TOD)

日时间数据类型占用1个双字节无符号整数,可存储从指定当天的0时0分0秒开始的1天(24小时)内的毫秒数,例如T0D#10∶11∶56.111,按时:分:秒.毫秒排序。

(6)长日时间(LTOD)

长日时间数据类型占用2个双字节无符号整数,可存储从指定当天的0时0分0秒开始的1天(24小时)内的纳秒数。

6. 字符数据类型

字符数据类型有Char和WChar,见表4.7。

表4.7 字符数据类型的属性

Char的操作数长度为1个字节,格式为ASCII字符。字符B表示为Char#'B'。提示:单引号必须是在英文下的单引号。

WChar的操作数长度为2个字节,以Unicode格式存储,可存储所有Unicode格式的字符,包括汉字、阿拉伯字母等所有以Unicode为编码方式的字符,例如汉字“我”用WChar表示为WChar#'我'。

4.1.3 复合数据类型

复合数据类型由基本数据类型的数据组合而成,长度可能超过64位,包括字符串(String)、宽字符串(WString)、数组类型(Array)和结构类型(Struct)等。

1. 字符串(String)

String的操作数包括254个字符,一个字节存放一个字符。实际操作时,String的操作数在内存中占用的字节比指定的多2个字节,即256个字节。这些字节的排列顺序如下。

String字符串的第一个字节表示定义要使用的最大字符长度;第二个字节表示有效字符的个数;第三个字节表示第一个有效字符(数据类型为Char);第四个字节表示第二个有效字符(数据类型为Char);依此类推。

String字符串可以在DB、OB、FC、FB接口区定义,在操作数的声明过程中,可使用方括号指定字符串的最大长度,如String[4],如图4.6所示;也可以使用局部或全局常量声明字符串的最大长度。如果未指定最大长度,则相应操作数的长度默认为标准的254个字符。使用String字符串常数时,书写格式为'字符串',例如'12'。

图4.6 指定最大长度

最大长度为4个字符的String字符串只包含两个字符'AB',其中A占用字节2,B占用字节3,字节4和字节5无定义,再加上定义String字符串最大长度的字节0和定义String字符串实际长度的字节1,实际共占用6个字节,字节排列如图4.7所示。

图4.7 String字符串的字节排列

2. 宽字符串(WString)

宽字符串数量类型用来存储多个数据类型WChar的Unicode字符(长度为16位的宽字符,包括汉字),使用时,如果不指定长度,在默认情况下的最大长度为256个字符,可声明最多16382个字符的长度(WString[16382])。使用WString常数时,前面必须使用WString#,软件可自动生成,例如输入'西门子'后,其前面会自动添加WString#,即WString#'西门子'。

3. 数组类型(Array)

数组类型表示一个变量由多个固定数目且数据类型相同的元素组成的数据结构。这些元素可使用除Array之外的所有数据类型。定义一个数组时,需要声明数组的元素类型、维数和每一维的索引范围。一个数组最多可包含6个维度,各维度的限值使用逗号分隔。

一维变量的格式:Array[下限..上限]of<数据类型>,结构形式如图4.8所示。

图4.8 一维变量的结构形式

在创建数据块中的Array变量时,将在方括号内定义小标的限值,并在关键字of之后定义数据类型,创建一维数组如图4.9所示。Array限值可使用整数或全局/局部常量定义的固定值,也可定义为块的形参或使用Array[*]定义,下限值必须小于或等于上限值。

图4.9 创建一维数组

二维数组的格式:Array[1..3,1..5]of<数据类型>。创建二维数组如图4.10所示。

图4.10 创建二维数组

4. 结构类型(Struct)

结构类型是由多个不同数据类型元素组成的复合型数据结构,通常用来将一个过程控制系统中相关的数据统一组织在一个结构体中,可作为一个数据单元来传送参数。S7-1500 PLC的一个数据块中最多有252个结构,如果需要更多的结构,则必须重新构造程序。例如,可以在多个全局数据块中创建结构,结构类型可以在DB块、OB块、FC函数、FB函数块等块接口区和PLC数据类型中定义。

在数据块_1中定义一组电动机的数据如图4.11所示。

图4.11 定义一组电动机的数据

4.1.4 PLC数据类型

PLC数据类型(UDT)是一种复杂的用户自定义数据类型,用于声明一个变量,是一个由多个不同数据类型元素组成的数据结构。各元素可源自其他PLC数据类型、Array,也可直接使用关键字Struct声明为一个结构,并作为一个整体的变量模板在DB块、FB函数块、FC函数中多次使用。PLC数据类型可以相互嵌套,嵌套深度限制为8级。

PLC数据类型(UDT)可在程序代码中统一更改和重复使用,使用位置由系统自动更新。

PLC数据类型的应用优势如下:

(1)可用作逻辑块中的变量声明或数据块中的变量数据类型,通过块接口,在多个块中进行数据交换。

(2)根据过程控制对数据进行分组。

(3)将参数作为一个数据单元进行传送。

(4)可用作模板,创建数据结构化的PLC变量。

【实例4.1】 PLC数据类型的创建及调用。

【操作步骤】

1. 创建用户数据类型_UDT

双击“项目树”中的“PLC数据类型”选项可新建一个“用户数据类型_UDT”。在“用户数据类型_UDT”界面可定义一个MOTOR的数据结构,如图4.12所示。

图4.12 定义一个MOTOR的数据结构

2. 在DB块中调用UDT

用户数据类型_UDT可以作为模板在DB块或FB函数块、FC函数中添加变量。在DB块中调用UDT添加三台电动机的变量,如图4.13所示。变量类型选择“用户数据类型_UDT”。

图4.13 在DB块中调用UDT

3. 在程序中的调用

定义的UDT变量可以整体使用,也可以单独使用变量中的某元素,如图4.14所示。

图4.14 在程序中调用UDT

4.1.5 参数类型

参数类型是专用于FC函数或FB函数块的接口参数数据类型,是传递给被调用块的形参的数据类型,可以是PLC数据类型。表4.8为参数类型及其用途。

表4.8 参数类型及其用途

4.1.6 系统数据类型

系统数据类型(SDT)由系统提供并具有预定义的结构,由固定数目的具有各种数据类型的元素构成,结构不能更改,仅当系统数据类型相同且名称匹配时才可相互分配。这一规则同样适用于由系统生成的PLC数据类型,如IEC_Timer等。

系统数据类型只能用于特定指令,见表4.9。

表4.9 系统数据类型及其用途

4.1.7 硬件数据类型

硬件数据类型由CPU提供。可用硬件数据类型的数目取决于CPU,根据硬件配置中设置的模块存储特定硬件数据类型的常量,在用户程序中插入用于控制或激活已组态模块的指令时,可将这些常量用作参数。硬件数据类型及其用途见表4.10。

表4.10 硬件数据类型及其用途 XRqAvhYQyw39LNPVZIyclr4Dn4zmVWcFr77TQpqnAtxK7bzC9Wr40X64pMA73c0l

点击中间区域
呼出菜单
上一章
目录
下一章
×