西门子S7-1200/1500PLC学习手册:基于LAD和SCL编程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

5.1 S7-1200/1500 PLC的编程基础知识

5.1.1 数制

PLC的是一种特殊的工业控制计算机,学习计算机必须掌握数制,对于PLC更是如此。

(1)二进制

二进制数的1位(bit)只能取0和1两个不同的值,可以用来表示开关量的两种不同的状态,例如触点的断开和接通、线圈的通电和断电、灯的亮和灭等。在梯形图中,如果该位是1可以表示常开触点的闭合和线圈的得电,反之,该位是0可以表示常闭触点的断开和线圈的断电。西门子的二进制表示方法是在数值前加前缀2#,例如2#1001 1101 1001 1101就是16位二进制常数。十进制的运算规则是逢10进1,二进制的运算规则是逢2进1。

(2)十六进制

十六进制的十六个数字是0~9和A~F(对应于十进制中的10~15,不区分大小写),每个十六进制数字可用4位二进制表示,例如16#A用二进制表示为2#1010。B#16#、W#16#和DW#16#分别表示十六进制的字节、字和双字。十六进制的运算规则是逢16进1。掌握二进制和十六进制之间的转化,对于学习西门子PLC来说是十分重要的。

(3)BCD码

BCD码用4位二进制数(或者1位十六进制数)表示一位十进制数,例如一位十进制数9的BCD码是1001。4位二进制有16种组合,但BCD码只用到前十个,而后六个(1010~1111)没有在BCD码中使用。十进制的数字转换成BCD码是很容易的,例如十进制数366转换成十六进制BCD码则是W#16#0366。

文本框开始##【关键点】十进制数366转换成十六进制数是W#16#16E,这是要特别注意的。文本框结束$$

BCD码的最高4位二进制数用来表示符号,16位BCD码字的范围是-999~+999。32位BCD码双字的范围是-9999999~+9999999。不同数制的数的表示方法见表5-1。

表5-1 不同数制的数的表示方法

5.1.2 数据类型

数据是程序处理和控制的对象,在程序运行过程中,数据是通过变量来存储和传递的。变量有两个要素:名称和数据类型。对程序块或者数据块的变量声明时,都要包括这两个要素。

数据的类型决定了数据的属性,例如数据长度和取值范围等。TIA博途软件中的数据类型分为三大类:基本数据类型、复合数据类型和其他数据类型。

5.1.2.1 基本数据类型

基本数据类型是根据IEC61131-3(国际电工委员会指定的PLC编程语言标准)来定义的,每个基本数据类型具有固定的长度且不超过64位。

基本数据类型最为常用,细分为位数据类型、整数数据类型、字符数据类型、定时器数据类型及日期和时间数据类型。每一种数据类型都具备关键字、数据长度、取值范围和常数表等格式属性。以下分别介绍。

(1)位数据类型

位数据类型包括布尔型(Bool)、字节型(Byte)、字型(Word)、双字型(DWord)和长字型(LWord)。对于S7-300/400PLC仅支持前4种数据类型。TIA博途软件的位数据类型见表5-2。

表5-2 位数据类型

注:在TIA博图软件中,关键字不区分大小写,如Bool和BOOL都是合法的,不必严格区分。

(2)整数和浮点数数据类型

整数数据类型包括有符号整数和无符号整数。有符号整数包括:短整数型(SInt)、整数型(Int)、双整数型(DInt)和长整数型(LInt)。无符号整数包括:无符号短整数型(USInt)、无符号整数型(UInt)、无符号双整数型(UDInt)和无符号长整数型(ULInt)。整数没有小数点。对于S7-300/400PLC仅支持整数型(Int)和双整数型(DInt)。

实数数据类型包括实数(Real)和长实数(LReal),实数也称为浮点数。对于S7-300/400PLC仅支持实数(Real)。浮点数有正负且带小数点。TIA博途软件的整数和浮点数数据类型见表5-3。

表5-3 整数和浮点数数据类型

(3)字符数据类型

字符数据类型有Char和WChar,数据类型Char的操作数长度为8个位,在存储器中占用1个Byte。Char数据类型以ASCII格式存储单个字符。

数据类型WChar(宽字符)的操作数长度为16位,在存储器中占用2个Byte。WChar数据类型存储以Unicode格式存储的扩展字符集中的单个字符,但只涉及整个Unicode范围的一部分。控制字符在输入时,以美元符号表示。TIA博途软件的字符数据类型见表5-4。

表5-4 字符数据类型

(4)定时器数据类型

定时器数据类型主要包括时间(Time)、S5时间(S5Time)和长时间(LTime)数据类型。对于S7-300/400PLC仅支持前2种数据类型。

S5时间数据类型(S5Time)以BCD格式保存持续时间,用于数据长度为16位S5定时器。持续时间由0~999(2H_46M_30S)范围内的时间值和时间基线决定。时间基线指示定时器时间值按步长1减少直至为“0”的时间间隔。时间的分辨率可以通过时间基线来控制。

时间数据类型(Time)的操作数内容以毫秒表示,用于数据长度为32位的IEC定时器。表示信息包括天(d)、小时(h)、分钟(m)、秒(s)和毫秒(ms)。

长时间数据类型(LTime)的操作数内容以纳秒表示,用于数据长度为64位的IEC定时器。表示信息包括天(d)、小时(h)、分钟(m)、秒(s)、毫秒(ms)、微秒(μs)和纳秒(ns)。TIA博途软件的定时器数据类型见表5-5。

表5-5 定时器数据类型

(5)日期和时间数据类型

日期和时间数据类型包括:日期(Date)、日时间(TOD)、长日时间(LTOD)、日期时间(Date_And_Time)、日期长时间(Date_And_LTime)和长日期时间(DTL),以下分别介绍如下。

①日期(Date) Date数据类型将日期作为无符号整数保存。表示法中包括年、月和日。数据类型Date的操作数为十六进制形式,对应于自1990年1月1日以后的日期值。

②日时间(TOD) TOD(Time_Of_Day)数据类型占用1个双字,存储从当天0:00h开始的毫秒数,为无符号整数。

③长日时间(LTOD) LTOD(LTime_Of_Day)数据类型占用2个双字,存储从当天0:00h开始的纳秒数,为无符号整数。

④日期时间(Date_And_Time) 数据类型DT(Date_And_Time)存储日期和时间信息,格式为BCD。

⑤日期长时间(Date_And_LTime) 数据类型LDT(Date_And_LTime)可存储自1970年1月1日0:0以来的日期和时间信息(单位为ns)。

⑥长日期时间(DTL) 数据类型DTL的操作数长度为12个字节,以预定义结构存储日期和时间信息。TIA博途软件的日期和时间数据类型见表5-6。

表5-6 日期和时间数据类型

5.1.2.2 复合数据类型

复合数据类型是一种由其他数据类型组合而成的,或者长度超过32位的数据类型,TIA博途软件中的复合数据类型包含:String(字符串)、WString(宽字符串)、Array(数组类型)、Struct(结构类型)和UDT(PLC数据类型),复合数据类型相对较难理解和掌握,以下分别介绍。

(1)字符串和宽字符串

①String(字符串) 其长度最多有254个字符的组(数据类型Char)。为字符串保留的标准区域是256个字节长。这是保存254个字符和2个字节的标题所需要的空间。可以通过定义即将存储在字符串中的字符数目来减少字符串所需要的存储空间(例如:String[10]'Siemens')。

②WString(宽字符串) 数据类型为WString(宽字符串)的操作数存储一个字符串中多个数据类型为WChar的Unicode字符。如果不指定长度,则字符串的长度为预置的254个字符。在字符串中,可使用所有Unicode格式的字符。这意味着也可在字符串中使用中文字符。

(2)Array(数组类型)

Array(数组类型)表示一个由固定数目的同一种数据类型元素组成的数据结构。允许使用除了Array之外的所有数据类型。

数组元素通过下标进行寻址。在数组声明中,下标限值定义在Array关键字之后的方括号中。下限值必须小于或等于上限值。一个数组最多可以包含6维,并使用逗号隔开维度限值。

例如:数组Array[1..20]of Real的含义是包括20个元素的一维数组,元素数据类型为Real;数组Array[1..2,3..4] of Char含义是包括4个元素的二维数组,元素数据类型为Char。

创建数组的方法。在项目视图的项目树中,双击“添加新块”选项,弹出新建块界面,新建“数据块_1”,在“名称”栏中输入“A1”,在“数据类型”栏中输入“Array[1..20]of Real”,如图5-1所示,数组创建完成。单击A1前面的三角符号,可以查看到数组的所有元素,还可以修改每个元素的“启动值”(初始值),如图5-2所示。

图5-1 创建数组

图5-2 查看数组元素

(3)Struct(结构类型)

该类型是由不同数据类型组成的复合型数据,通常用来定义一组相关数据。例如电动机的一组数据可以按照如图5-3所示的方式定义,在“数据块_1”的“名称”栏中输入“Motor”,在“数据类型”栏中输入“Struct”(也可以点击下拉三角选取),之后可创建结构的其他元素,如本例的“Speed”。

图5-3 创建结构

(4)UDT(PLC数据类型)

UDT是由不同数据类型组成的复合型数据,与Struct不同的是,UDT是一个模版,可以用来定义其他的变量,UDT在经典STEP 7中称为自定义数据类型。PLC数据类型的创建方法如下。

①在项目视图的项目树中,双击“添加新数据类型”选项,弹出如图5-4所示界面,创建一个名称为“MotorA”的结构,并将新建的PLC数据类型名称重命名为“MotorA”。

图5-4 创建PLC数据类型(1)

②在“数据块_1”的“名称”栏中输入“MotorA1”和“MotorA2”,在“数据类型”栏中输入“MotorA”,这样操作后,“MotorA1”和“MotorA2”的数据类型变成了“MotorA”,如图5-5所示。

图5-5 创建PLC数据类型(2)

使用PLC数据类型给编程带来较大的便利性,较为重要,相关内容在后续章节还要介绍。

5.1.2.3 其他数据类型

对于S7-1200/1500 PLC,除了基本数据类型和复合数据类型外,还有包括指针、参数类型、系统数据类型和硬件数据类型等,以下分别介绍。

(1)指针类型

S7-1500 PLC支持Pointer、Any和Variant三种类型指针,S7-300/400PLC只支持前两种,S7-1200 PLC只支持Variant类型。

①Pointer Pointer类型的参数是一个可指向特定变量的指针。它在存储器中占用6个字节(48位),可能包含变量信息有:数据块编号或0(若数据块中没有存储数据)和CPU中的存储区和变量地址,在图5-6中,显示了Pointer指针的结构。

图5-6 Pointer指针的结构

②Any Any类型的参数指向数据区的起始位置,并指定其长度。Any指针使用存储器中的10个字节,可能包含的信息有:数据类型、重复系数、DB编号、存储区、数据的起始地址(格式为“字节.位”)和零指针。在图5-7中,显示了Any指针的结构。

图5-7 Any指针的结构

③Variant Variant类型的参数是一个可以指向不同数据类型变量(而不是实例)的指针。Variant指针可以是一个元素数据类型的对象,例如INT或Real。也可以是一个String、DTL、Struct数组、UDT或UDT数组。Variant指针可以识别结构,并指向各个结构元素。Variant数据类型的操作数在背景DB或L堆栈中不占用任何空间,但是将占用CPU上的存储空间。

Variant类型的变量不是一个对象,而是对另一个对象的引用。Variant类型的各元素只能在函数的块接口中声明,因此,不能在数据块或函数块的块接口静态部分中声明。例如,因为各元素的大小未知,所引用对象的大小可以更改。Variant数据类型只能在块接口的形参中定义。

(2)参数类型

参数类型是传递给被调用块的形参的数据类型。参数类型还可以是PLC数据类型。参数数据类型及其用途见表5-7。

表5-7 参数数据类型及其用途

(3)系统数据类型

系统数据类型(SDT)由系统提供并具有预定义的结构。系统数据类型的结构由固定数目的可具有各种数据类型的元素构成。不能更改系统数据类型的结构。系统数据类型只能用于特定指令。系统数据类型及其用途见表5-8。

表5-8 系统数据类型及其用途

(4)硬件数据类型

硬件数据类型由CPU提供。可用硬件数据类型的数目取决于CPU。

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

表5-9 部分硬件数据类型及其用途

【例5-1】 请指出以下数据的含义:DINT#58、S5t#58s、58、C#58、t#58s和P#M0.0 Byte 10。

解 ①DINT#58:表示双整数58。

②S5t#58s:表示S5和S7定时器中的定时时间58s.

③58:表示整数58。

④C#58:表示计数器中的预置值58。

⑤t#58s:表示IEC定时器中定时时间58s。

⑥P#M0.0 Byte 10:表示从MB0开始的10个字节。

【关键点】理解【例5-1】中的数据表示方法至关重要,无论对于编写程序还是阅读程序都是必须要掌握的。

5.1.3 S7-1200/1500 PLC的存储区

S7-1200/1500 PLC的存储区由装载存储器、工作存储器和系统存储器组成。工作存储器类似于计算机的内存条,装载存储器类似于计算机的硬盘。以下分别介绍三种存储器。

5.1.3.1 装载存储器

装载存储器用于保存逻辑块、数据块和系统数据。下载程序时,用户程序下载到装载存储器。在PLC上电时,CPU把装载存储器中的可执行的部分复制到工作存储器。而PLC断电时,需要保存的数据自动保存在装载存储器中。

对于S7-300/400PLC符号表、注释不能下载,仍然保存在编程设备中。而对于S7-1200/1500 PLC,符号表、注释可以下载到装载存储器。

5.1.3.2 工作存储器

工作存储器集成在CPU中的高速存取的RAM存储器,用于存储CPU运行时的用户程序和数据,如组织块、功能块等。用模式选择开关复位CPU的存储器时,RAM中程序被清除,但FEPROM中的程序不会被清除。

5.1.3.3 系统存储器

系统存储器是CPU为用户提供的存储组件,用于存储用户程序的操作数据,例如过程映像输入、过程映像输出、位存储、定时器、计数器、块堆栈和诊断缓冲区等。

(1)过程映像输入区(I)

过程映像输入区与输入端相连,它是专门用来接受PLC外部开关信号的元件。在每次扫描周期的开始,CPU对物理输入点进行采样,并将采样值写入过程映像输入区中。可以按位、字节、字或双字来存取过程映像输入区中的数据,输入寄存器等效电路如图5-8所示,真实的回路中当按钮闭合,线圈I0.0得电,经过PLC内部电路的转化,使得梯形图中,常开触点I0.0闭合,理解这一点很重要。

位格式:I[字节地址].[位地址],如I0.0。

字节、字或双字格式:I[长度][起始字节地址],如IB0、IW0、ID0。

图5-8 过程映像输入区I0.0的等效电路

若要存取存储区的某一位,则必须指定地址,包括存储器标识符、字节地址和位号。图5-9是一个位表示法的例子。其中,存储器区、字节地址(I代表输入,2代表字节2)和位地址之间用点号(.)隔开。

图5-9 位表示方法

(2)过程映像输出区(Q)

图5-10 过程映像输出区Q0.0的等效电路

过程映像输出区是用来将PLC内部信号输出传送给外部负载(用户输出设备)。过程映像输出区线圈是由PLC内部程序的指令驱动,其线圈状态传送给输出单元,再由输出单元对应的硬触点来驱动外部负载,输出寄存器等效电路如图5-10所示。当梯形图中的线圈Q0.0得电,经过PLC内部电路的转化,使得真实回路中的常开触点Q0.0闭合,从而使得外部设备线圈得电,理解这一点很重要。

在每次扫描周期的结尾,CPU将过程映像输出区中的数值复制到物理输出点上。可以按位、字节、字或双字来存取过程映像输出区。

位格式:Q[字节地址].[位地址],如Q1.1。

字节、字或双字格式:Q[长度][起始字节地址],如QB5、QW6和QD8。

(3)标识位存储区(M)

标识位存储区是PLC中数量较多的一种存储区,一般的标识位存储区与继电器控制系统中的中间继电器相似。标识位存储区不能直接驱动外部负载,负载只能由过程映像输出区的外部触点驱动。标识位存储区的常开与常闭触点在PLC内部编程时,可无限次使用。M的数量根据不同型号而不同。可以用位存储区作为控制继电器来存储中间操作状态和控制信息,并且可以按位、字节、字或双字来存取位存储区。

位格式:M[字节地址].[位地址],如M2.7。

字节、字或双字格式:M[长度][起始字节地址],如MB10、MW10、MD10。

(4)定时器(T)

定时器存储区位于CPU的系统存储器中,其地址标识符为“T”,定时器的数量与CPU的型号有关。定时器的表示方法是Tx,T表示地址标识符,x表示第几个定时器。定时器的作用主要用于定时,与继电器控制系统中的时间继电器相似。

格式:T[定时器号],如T1。

(5)计数器存储区(C)

计数器存储区位于CPU的系统存储器中,其地址标识符为“C”,计数器的数量与CPU的型号有关。计数器的表示方法是Cx,C表示地址标识符,x表示第几个计数器。计数器的作用主要用于计数,与继电器控制系统中的计数器相似。

格式:C[计数器号],如C1。

(6)数据块存储区(DB)

数据块可以存储在装载存储器、工作存储器以及系统存储器中(块堆栈),共享数据块的标识符为“DB”,函数块FB的背景数据块的标识符为“DI”。数据块的大小与CPU的型号相关。数据块默认为掉电保持,不需要额外设置。

注意:在语句表中,通过“DB”和“DI”区分两个打开的数据块,在其他应用中函数块FB的背景数据块也可以用“DB”表示。

(7)本地数据区(L)

本地数据区位于CPU的系统存储器中,其地址标识符为“L”。包括函数、函数块的临时变量、组织块中的开始信息、参数传递信息以及梯形图的内部结果。在程序中访问本地数据区的表示法与输入相同。本地数据区的数量与CPU的型号有关。

本地数据区和标识位存储区M很相似,但只有一个区别:标识位存储区M是全局有效的,而本地数据区只在局部有效。全局是指同一个存储区可以被任何程序存取(包括主程序、子程序和中断服务程序),局部是指存储器区和特定的程序相关联。

位格式:L[字节地址].[位地址],如L0.0。

字节、字或双字格式:L[长度][起始字节地址],如LB3。

(8)物理输入区

物理输入区位于CPU的系统存储器中,其地址标识符为“:P”,加在过程映像区地址的后面。与过程映像区功能相反,不经过过程映像区的扫描,程序访问物理区时,直接将输入模块的信息读入,并作为逻辑运算的条件。

位格式:I[字节地址].[位地址],如I2.7:P。

字或双字格式:I[长度][起始字节地址]:P,如IW8:P。

(9)物理输出区

物理输出区位于CPU的系统存储器中,其地址标识符为“:P”,加在过程映像区地址的后面。与过程映像区功能相反,不经过过程映像区的扫描,程序访问物理区时,直接将逻辑运算的结果(写出信息)写出到输出模块。

位格式:Q[字节地址].[位地址],如Q2.7:P。

字或双字格式:Q[长度][起始字节地址]:P,如QW8:P。

以上各存储器的存储区及功能见表5-10。

表5-10 存储区及功能

【例5-2】 如果MD0=16#1F,那么,MB0、MB1、MB2、MB3、M0.0和M3.0的数值是多少?

解 根据图5-11,MB0=0;MB1=0;MB2=0;MB3=16#1F;M0.0=0;M3.0=1。这点不同于三菱PLC,读者要注意区分。如不理解此知识点,在编写通信程序时,如DCS与S7-1200/1500 PLC交换数据时,容易出错。

【关键点】在MD0中,由MB0、MB1、MB2和MB3四个字节组成,MB0是高字节,而MB3是低字节,字节、字和双字的起始地址如图5-11所示。

图5-11 字节、字和双字的起始地址

【例5-3】 如图5-12所示的梯形图,是某初学者编写的,请查看有无错误。

图5-12 梯形图

这个程序的逻辑是正确的,但这个程序在实际运行时,并不能采集数据的。程序段1是启停控制,当M10.0常开触点闭合后开始采集数据,而且AD转换的结果存放在MW10中,MW10包含2个字节MB10和MB11,而MB10包含8个位,即M10.0~M10.7。只要采集的数据经过AD转换,造成M10.0位为0,整个数据采集过程自动停止。初学者很容易犯类似的错误。读者可将M10.0改为M12.0即可,只要避开MW10中包含的16个位(M10.0~M10.7和M11.0~M11.7)都可行。

5.1.4 全局变量与区域变量

(1)全局变量

全局变量可以在CPU的整个范围内被所有的程序块调用,例如OB(组织块)、FC(函数)、FB(函数块)中使用,在某一个程序块中赋值后,在其他的程序块中可以读出,没有使用限制。全局变量包括I、Q、M、T、C、DB、I:P和Q:P等数据区。

(2)区域变量

也称为局部变量。区域变量只能在所属块(OB、FC和FB)范围内调用,在程序块调用时有效,程序块调用完成后被释放,所以不能被其他程序块调用,本地数据区(L)中的变量为区域变量,例如每个程序块中的临时变量都属于区域变量。

5.1.5 编程语言

(1)PLC 编程语言的国际标准

IEC 61131是PLC的国际标准,1992~1995年发布了IEC 61131标准中的1~4部分,我国在1995年11月发布了GB/T15969-1/2/3/4(等同于IEC 61131-1/2/3/4)。

IEC 61131-3广泛地应用于PLC、DCS、工控机、“软件PLC”、数控系统和RTU等产品。其定义了5种编程语言,分别是指令表(Instruction list,IL)、结构文本(Structured text,ST)、梯形图(Ladder diagram,LD)、功能块图(Function block diagram,FBD)和顺序功能图(Sequential function chart,SFC)。

(2)TIA博途软件中的编程语言

TIA博途软件中有梯形图、语句表、功能块图、SCL和Graph,共5种基本编程语言。以下简要介绍。

①顺序功能图(SFC) TIA博途软件中为S7-Graph,S7-Graph是针对顺序控制系统进行编程的图形编程语言,特别适合顺序控制程序编写。

②梯形图(LAD) 梯形图直观易懂,适合于数字量逻辑控制。梯形图适合于熟悉继电器电路的人员使用。设计复杂的触点电路时适合用梯形图,其应用广泛。

③语句表(STL) 语句表的功能比梯形图或功能块图的功能强。语句表可供擅长用汇编语言编程的用户使用。语句表输入快,可以在每条语句后面加上注释。语句表有被淘汰的趋势。

④功能块图(FBD) “LOGO!”系列微型PLC使用功能块图编程。功能块图适合于熟悉数字电路的人员使用。

⑤结构文本(ST) 在TIA博途软件中称为S7-SCL(结构化控制语言),它符合EN61131-3标准。S7-SCL适合于复杂的公式计算、复杂的计算任务和最优化算法或管理大量的数据等。S7-SCL编程语言适合于熟悉高级编程语言(例如PASCAL或C语言)的人员使用。S7-SCL编程语言的使用将越来越广泛。

⑥S7-HiGraph编程语言 图形编程语言S7-HiGraph属于可选软件包,它用状态图(State Graphs)来描述异步、非顺序过程的编程语言。HiGraph适合于异步非顺序过程的编程。S7-HiGraph可用于S7-300/400PLC,在S7-1200/1500 PLC中不能使用。

⑦S7-CFC编程语言 可选软件包CFC(Continuous Function Chart,连续功能图)用图形方式连接程序库中以块的形式提供的各种功能。CFC适合于连续过程控制的编程。S7-HiGraph可用于S7-300/400PLC,在S7-1200/1500 PLC中不能使用。

在TIA博途软件中,如果程序块没有错误,并且被正确地划分为网络,在梯形图和功能块图之间可以相互转换,但梯形图和指令表不可相互转换。注意:在经典STEP 7中梯形图、功能块、语句表之间可以相互转换。