9
用户在编写程序时,变量的格式必须与指令的数据类型相匹配。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′
长度/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'
长度/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数据类型的属性
Time数据类型的属性
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数据类型的属性
S5Time数据类型的属性
S5Time数据类型的属性
S5 Time时间格式
S5 Time时间格式
图1 S5 Time时间格式
长时间( LTime)数据类型为64位IEC定时器类型,操作数内容以纳秒(ns)为单位的长整数表示,可以是正数或负数。表示信息包括天(d)、小时(h)、分钟(m)、秒(s)、毫秒( ms)、微秒(μS)和纳秒(ns)。常数表示格式为时间前加LT#,如LT#11ns。表6列出了LTime数据类型的属性。
间接寻址方法,本文提到的主要是西门子S7-300plc.
1.区域内间接寻址
指针的较高位(*31位)x为0时为区域内的间接寻址,此时区域标示号rrr也为0,地址指针的格式与存储器间接寻址的相同。下面是区域内间接寻址的例子:
L P#5.0 //将间接寻址的指针装入累加器1
LAR1 //将累加器1的内容送AR1
A M[AR1, P#2.3] //AR1中的P#5.0加偏移量P#2.3,对M7.3进行操作
= Q[AR1, P#0.2] //逻辑运算的结果送Q5.2,P#5.0+P#0.2=P#5.2
L MW[AR1, P#19.0] //将MW24装入累加器1
方括号内为操作数的地址,它等于AR1中的地址值P#5.0加上逗号后面的地址偏移量,例如*3条指令中操作数的地址为P#5.0+P#2.3=P#7.3,即操作数为M7.3。
2.区域之间的间接寻址
指针的较高位(*31位)x = 1时为区域间的间接寻址,下面是区域间的间接寻址的例子:
L P#M 6.0 //将M6.0的双字地址装入累加器1
LAR1 //将累加器1的内容送到AR1
L W [AR1,P#20.0] //将MW26的内容传送到累加器1
P#M6.0对应的二进制数为2#1000 0011 0000 0000 0000 0000 0011 0000。因为地址指针P#M6.0已经包含有区域信息(rrr=2#011表示M区),*3条指令“L W[AR1, P#50.0]”没有必要再使用地址标识符M。
用地址指针读写字、字节或双字时,指针中小数点右边的位编号必须为0,否则将会出错。
为主要讲授对象。西门子的PLC以其较高的性能价格比,在**国内市场占有很大的份额,在我国的各行各业得到了广泛的应用。S7-300/400属于模块式PLC,主要由机架、CPU模块、信号模块、功能模块、接口模块、通信处理器、
电源
模块和编程计算机组成,各种模块安装在机架上。通过CPU模块或通信模块上的通信接口,PLC被连接到通信网络,可以与计算机、其他PLC或其他设备通信。
1.CPU模块
CPU模块主要由微处理器(CPU芯片)和存储器组成。在PLC控制系统中,CPU模块相当于人的大脑和心脏,它不断地采集输入信号,执行用户程序,刷新系统的输出;存储器用来储存程序和数据。S7 - 300/400将CPU模块简称为CPU。
2.信号模块
输入( Input)模块和输出(Output)模块简称为I/O模块,开关量输入、开关量输出模块简称为DI模块和DO模块,模拟量输入、模拟量输出模块简称为AI模块和AO模块,它们统称为信号模块。信号模块是系统的眼、耳、手、脚,是联系外部现场设备和CPU模块的桥梁。
输入模块用来接收和采集输入信号,开关量输入模块用来接收从按钮、选择开关、数字拨码开关、限位开关、
接近开关
、光电开关、压力
继电器
等来的开关量输入信号。模拟量输入模块用来接收电位器、测速发电机和各种变送器提供的连续变化的模拟量电流、电压信号,或者直接接收热电阻、热电偶提供的温度信号。
开关量输出模块用来控制
接触器
、电磁阀、电磁铁、指示灯、数字显示装置和报警装置等输出设备,模拟量输出模块用来控制电动调节阀、
变频器
等执行器。
CPU模块内部的工作电压一般是DC 5V,而PLC的外部输入/输出信号电压一般较高,例如DC 24V或AC 220V。从外部引入的尖峰电压和干扰噪声可能损坏CPU模块中的
元器件
,或使PLC不能正常工作。在信号模块中,用光耦合器和小型继电器等器件来隔离PLC的内部电路和外部的输入、输出电路。信号模块除了传递信号外,还有电平转换与隔离的作用。
3.功能模块
为了增强PLC的功能,扩大其应用领域,减轻CPU的负担,PLC厂家开发了各种各样的功能模块。它们主要用于完成某些对实时性和存储容量要求很高的控制任务,例如高速计数、位置控制和闭环控制等。
4.接口模块
CPU模块所在的机架称为*机架,如果一个机架不能容纳全部模块,可以增设一个或多个扩展机架。接口模块(简称为IM)用来实现*机架与扩展机架之间的通信。
5.通信处理器
通信处理器(简称为CP)用于PLC之间、PLC与远程I/O之间、PLC与计算机和其他智能设备之间的通信,可以将S7 - 300/400接入各种通信网络,CP也用于实现点对点通信等。CPU模块集成有MPI通信接口,有的CPU模块还集成了其他通信接口。
6.电源模块
电源模块(简称为PS)用于将输入的AC 220V电源或DC 24V电压转换为稳定的DC 24V和DC 5V电压,供其他模块和输出模块的负载使用。
7.编程设备
S7 - 300/400一般使用安装了编程软件STEP 7的个人计算机作为编程设备,可以生成和编辑各种文本程序或图形程序。程序被编译后下载到PLC,也可以将PLC中的程序上传到计算机。编程软件还有对网络和硬件组态、参数设置、监控和故障诊断等功能。
使用该指令是将地址寄存器AR1的内容加上作为地址偏移量的累加器1中低字的内容,或加上指令中的16位常数,结果在AR1( AR2)中。首先将整数(16位)扩展为符号正确的24位,然后将其加到AR1的较低有效的24位(AR1中的相对地址的部分)。在AR1( AR2)中,区域ID的部分(*24~ 26位)保持不变。要加到AR1、AR2的内容中的整数(16位)由ACCU 1的低字中的值*。允许值的范围为-32768~+32767。参数P#Byte. Bit(被加到AR1或AR2上的地址)的数据类型为指针常数。要加到AR1、AR2的内容中的偏移量由参数P#Byte,Bit地址*。指令的执行与状态位无关,而且对状态位没有影响。
+AR1:加地址寄存器1中内容的整数(16位)通过累加器1低字中的数值定义,允许范围为-32768~+32767。
+AR1<P#Byte. Bit>:要加上的偏移量通过<P#Byte. Bit>地址定义。
编程示例1:
L +300 说明:将数值装入累加器1低字中
+AR1 将累加器1低字中的内容(整数,16位)加到地址寄存器1
编程示例2:
+ AR1 P#300.0 说明:将偏移量300.0加到地址寄存器1
2.+AR2加累加器1至地址寄存器2*(+AR2、+LAR2<P#Byte. Bit>)
使用该指令,可以将语句中或累加器1低字中定义的偏移量加至地址寄存器2。首先将整数(16位)扩展为带有其正确符号的2位数,然后加到地址寄存器2的较低有效24位(地址寄存器2中部分相关地址)。地址寄存器2中ID区部分(位24、25和26)保持不变。指令的执行与状态位无关,而且对状态位没有影响。
①STL形式的打开数据块指令“OPN<数据块>”。使用打开数据块指令,可以打开一个数据块作为共享数据块或背景数据块,可以同时打开一个共享数据块和一个背景数据块。访问已打开的数据块内的存储单元时,其地址中不必指明是哪一个数据块的存储单元,如打开数据DB10后,DB10. DBW35可简写为DBW35。
编程示例:
OPN DB10 说明:打开数据块DB10作为共享数据块
L DBW35 将打开数据块的数据字DBW35装入累加器1低字中
T MW22 将累加器1低字中的内容传送到存储字MW22
OPN DB20 打开数据块DB20作为背景数据块
L DIB12 将打开背景数据块的数据字节12装入累加器1低字中
T DBB37 将累加器1低字中的内容传送到打开共享数据块的数据字
节DBB37
②LDA形式的打开数据块指令“-(OPN)”。“-(OPN)”(打开数据块指令)可以打开一个共享数据块( DB)或背景数据块(DI)。“-( OPN)”功能是一种数据块无条件调用功能。数据块的编号被传送到DB或DI寄存器。在此之后,DB和DI指令根据寄存器的内容访问相应的数据块。
编程示例如图所示:数据块10( DB10)被打开。接点地址( DBX0.0)指的是数据块DB10中包含的当前数据记录的数据字节0的0位。该位的信号状态被赋值给输出Q4.0。
打开数据块指令使用示例
打开数据块指令使用示例
图 打开数据块指令使用示例
CDB交换共享数据块和背景数据块
使用该指令,可以交换共享数据块和背景数据块。该指令可以交换数据块寄存器。一个共享数据块可转换为一个背景数据块,反之亦然。