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,否则将会出错。
CPU的程序分为操作系统和用户程序。操作系统用来处理plc的启动、刷新过程映像输入/输出区、调用用户程序、处理中断和错误、管理存储区和通信等任务。
用户程序由用户生成,用来实现用户要求的自动化任务。STEP 7将用户编写的程序和程序所需的数据放置在块中,功能块FB和功能FC是用户编写的子程序,系统功能块SFB和系统功能SFC是操作系统提供给用户使用的标准子程序,它们和组织块OB统称为逻辑块。
PLC得电或由S**模式切换到RUN模式时,CPU执行启动操作,将没有断电保持功能的位存储器、定时器和计数器清零,清除中断堆栈和块堆栈的内容,复位保存的硬件中断等。此外还要执行一次用户生成的“系统启动”组织块OB100,完成用户*的初始化操作。以后PLC采用循环执行用户程序的方式,这种运行方式也称为扫描工作方式。
在PLC的存储器中,设置了一片区域用来存放输入信号和输出信号的状态,它们分别称为过程映像输入区和过程映像输出区。PLC梯形图中的其他编程元件也有对应的存储区。
下面是循环处理的各个阶段的任务(见图):
1)操作系统启动循环时间监控。
2) CPU将过程映像输出区的数据写到输出模块。
3) CPU读取输入模块的输入状态,并存入过程映像输入区。
4) CPU处理用户程序,执行用户程序中的指令。
5)在循环结束时,操作系统执行其他任务,例如下载和删除块,接收和发送全局数据等。
图 扫描过程
6) CPL返回*一阶段,重新启动循环时间监控。
在启动完成后,每次循环都要调用一次组织块OB1。OB1是用户程序中的主程序,它可以调用别的逻辑块(FB、FC、SFB或SFC)。循环程序处理过程可以被某些事件中断。如果有中断事件出现,当前正在执行的块被暂停执行,并自动调用分配给该事件的组织块。该组织块被执行完后,被暂停执行的块将从被中断的地方开始继续执行。
在循环程序处理过程中,CPU并不直接访问I/O模块中的输入地址区和输出地址区,而是访问CPU内部的过程映像区。
在读输入模块阶段,PLC把所有外部输入电路的接通/断开状态读人过程映像输入区。
外部输入电路接通时,对应的过程映像输入位为1状态,梯形图中该输入位的常开触点接通,常闭触点断开。外部输入电路断开时,对应的过程映像输入位为0状态,梯形图中该输入位的常开触点断开,常闭触点接通。
某一编程元件对应的位为1状态时,称该编程元件的状态为ON,该位为0状态时,称该编程元件的状态为OFF。在程序执行阶段,即使外部输入电路的状态发生了变化,过程映像输入位的状态也不会随之而变,输入信号变化了的状态只能在下一个扫描循环周期的读取输入模块阶段被读入过程映像输入区。
PLC的用户程序由若干条指令组成,指令在存储器中顺序排列。在没有跳转指令和块调用指令时,CPU从*一条指令开始,逐条顺序地执行用户程序,直到用户程序结束之处。在执行指令时,从过程映像输入区或别的存储区中将有关编程元件的0、1状态读出来,并根据指令的要求执行相应的逻辑运算,运算的结果写入到对应的存储区中,因此,各编程元件的存储区的内容随着程序的执行而变化。
在数字量(或称开关量)控制系统中,变量仅有两种相反的工作状态,例如高电平和低电平、继电器线圈的通电和断电,可以分别用逻辑代数中的1和0来表示这些状态,在波形图中,用高电平表示1状态,用低电平表示0状态。
使用继电器电路、数字电路或plc的梯形图都可以实现数字量的逻辑运算。图的上面是PLC的梯形图,下面是对应的数字门电路。
图中的I0.0~I0.4为数字输入变量,Q4.0~Q4.2为数字输出变量,它们之间的“与”、“或”、“非”逻辑运算关系如表1-1所示。“与”运算仅在输入均为1时输出才为1,“或”运算仅在输入均为0时输出才为0。“非”运算的输出与输入的状态总是相反,非运算又称为“取反”。
表 逻辑运算关系表
逻辑运算关系表
逻辑运算关系表
基本逻辑运算
基本逻辑运算
图 基本逻辑运算
a)与b)或c)非
用继电器电路或梯形图可以实现基本的逻辑运算,触点的串联可以实现“与”运算,触点的并联可以实现“或”运算,用常闭触点控制线圈可以实现“非”运算。
多个触点的串、并联电路可以实现复杂的逻辑运算,例如图中的继电器电路实现的逻辑运算可以用逻辑代数表达式表示为
式中的加号表示逻辑或,乘号(·)或星号(*)表示逻辑与,变量上面的横线表示“非”运算。与普通算术运算“先乘除后加减”类似,逻辑运算的规则为先“与”后“或”。为了先作“或”运算(触点的并联),用括号将“或”运算式括起来,括号中的运算优先执行。