2.2 程序设计基础
2.2.1 关于S7-1200编程
1.PLC编程语言的国际标准
为了电子技术能够更好地发展,国际电工委员会为其定制了国际标准,名称为IEC61131。它由5部分组成,分别是:通用信息、设备与测试要求、编程语言、用户指南和通信。
在IEC 61131中的第三部分(IEC 61131-3)是PLC的编程语言标准。IEC 61131-3是世界上第一个,也是至今为止唯一的工业控制系统的编程语言标准。
目前已有越来越多的生产PLC的厂家提供符合IEC 61131-3标准的产品,IEC 61131-3已经成为DCS(集散控制系统)、IPC(工业控制计算机)、FCS(现场总线控制系统)、SCADA(数据采集与监视控制)和运动控制系统事实上的软件标准。
有的厂家推出的在个人计算机上运行的“软件PLC”软件包也是按IEC 61131-3标准设计的。IEC 61131-3详细地说明了句法、语义和下述5种编程语言:
1)指令表(Instruction List,IL)。
2)结构文本(Structured Text,ST)。
3)梯形图(Ladder Diagram,LD):西门子公司简称为LAD。
4)功能块图(Function Block Diagram,FBD)。
5)顺序功能图(Sequential Function Chart,SFC)。
2.S7-1200的编程语言
S7-200只有梯形图和功能块图这两种编程语言。
(1)梯形图
梯形图(LAD)是使用得最多的PLC图形编程语言。有时把梯形图称为电路或程序。
由第1章的介绍可以知道,梯形图由触点、线圈和用方框表示的指令框组成。触点代表逻辑输入条件,例如外部的开关、按钮和内部条件等。线圈通常代表逻辑运算的结果,常用它控制外部的负载和内部的标志位等。指令框用来表示定时器、计数器或者数学运算等指令。使用编程软件可以直接生成和编辑梯形图,并将它下载到PLC。触点和线圈等组成的电路称为程序段,英语名称为Network(网络),STEP 7 Basic自动地为程序段编号。
为了程序的可读性,可以在程序段编号的右边加上程序段的标题,在程序段编号的下面为程序段加上注释,加入后如图2-6所示。
图2-6 梯形图
单击编辑器工具栏上的按钮,可以显示或关闭程序段的注释。本书中的梯形图一般没有标出程序段编号。
在分析梯形图的逻辑关系时,为了借用继电器电路图的分析方法,可以想象在梯形图的左右两侧垂直“电源线”之间有一个左正右负的直流电源电压,当图2-6中I0.0与I0.1的触点同时接通,或Q0.0与I0.1的触点同时接通时,有一个假想的“能流”(Power Flow)流过Q0.0的线圈。利用能流这一概念,可以借用继电器电路的术语和分析方法,帮助我们更好地理解和分析梯形图。
程序段内的逻辑运算按从左往右的方向执行,与能流的方向一致。如果没有跳转指令,程序段之间按从上到下的顺序执行,执行完所有的程序段后,下一次扫描循环返回最上面的程序段1,重新开始执行。
(2)功能块图
由第1章的介绍可知,在功能块图中,用类似于与门(带有符号“&”)、或门(带有符号“>=1”)的方框来表示逻辑运算关系,方框的左边为输入变量,右边为逻辑运算的输出变量,输入、输出端的小圆圈表示“非”运算,方框被“导线”连接在一起,信号自左向右流动。指令框用来表示一些复杂的功能,例如数学运算等。图2-7是图2-6中的梯形图对应的功能块图,图2-7同时显示绝对地址和符号地址。
3.在编程软件中切换编程语言
在编程软件的项目树窗口,单击PLC的“程序块”文件夹,双击其中的某个代码块,打开程序编辑器,在工作区下面的巡视窗口的“属性”选项卡中出现如图2-8所示窗口,可以用“语言”下拉式列表改变打开的块使用的编程语言。
图2-7 功能块图
图2-8 设置块的编程语言
2.2.2 关于数据类型与存储区
1.数制与数据类型
(1)数制
1)二进制数。二进制数的1位(bit)只能取0和1这两个不同的值,可以用来表示开关量(或称数字量)的两种不同的状态,例如触点的断开和接通、线圈的断电和通电等。如果该位为1,则表示梯形图中对应的位编程元件(例如位存储器M和过程映像输出位Q)的线圈“通电”,其常开触点接通,常闭触点断开,以后称该编程元件为1状态,或称该编程元件ON(接通)。
如果该位为0,则对应的编程元件的线圈和触点的状态与上述的情况相反,称该编程元件为0状态,或称该编程元件OFF(断开)。在编程软件中,位编程元件的1状态和0状态用TRUE和FALSE来表示。
2)多位二进制数。计算机和PLC用多位二进制数来表示数字,二进制数遵循逢二进一的运算规则,从右往左的第n位(最低位为第0位)的权值为2n。二进制常数以2#开始,用下式计算2#1100对应的十进制数:
1×23+1×22+0×21+0×20=8+4=12
表2-4给出了不同进制数的表示方法。
表2-4 不同进制数的表示方法
3)十六进制数。多位二进制数的书写和阅读很不方便。为了解决这一问题,可以用十六进制数来取代二进制数,每个十六进制数对应于4位二进制数。十六进制数的16个数字是0~9和A~F(对应于十进制数10~15)。B#16#、w#16#和DW#16#分别用来表示十六进制字节、字和双字常数,例如W#16#13AF。在数字后面加“H”也可以表示十六进制数,例如16#13AF可以表示为13AFH。
(2)数据类型
数据类型用来描述数据的长度(即二进制的位数)和属性。本节介绍基本数据类型,其他数据类型主要在5.2.1节介绍。
很多指令和代码块的参数支持多种数据类型。将鼠标的光标放在某条指令未输入地址或常数的参数域,过一会儿在出现的黄色背景的小方框中,可以看到该参数支持的数据类型。
(3)数据对象的长度
不同的任务使用不同长度的数据对象,例如位指令使用位数据,传送指令使用字节、字和双字。字节、字和双字分别由8位、16位和32位二进制数组成。
(4)基本数据类型
表2-5给出了基本数据类型的属性。
表2-5 基本数据类型
(续)
(5)位
位数据的数据类型为Bool(布尔)型,在编程软件中,Bool变量的值1和0用英语单词TRUE(真)和FALSE(假)来表示。位存储单元的地址由字节地址和位地址组成,例如I3.2中的区域标志符“I”表示输入(Input),字节地址为3,位地址为2(见图2-9)。这种存取方式称为“字节.位”寻址方式。
(6)字节
8位二进制数组成1个字节(Byte,见图2-9),例如I3.0~I3.7组成了输入字节IB3(B是Byte的缩写)。数据类型Byte是十六进制数,Char为单个ASCII字符,SInt为有符号字节,USInt为无符号字节。
图2-9 字节与位
(7)字
相邻的两个字节组成一个字,例如字MW100由字节MB100和MB101组成(见图2-10b)。MW100中的M为区域标志符,W表示字。需要注意以下两点:
图2-10 字节、字和双字
1)用组成字的编号最小的字节MB100的编号作为字MW100的编号。
2)组成字MW100的编号最小的字节MB100为MW100的高位字节,编号最大的字节MB101为MW100的低位字节。双字也有类似的特点。
数据类型Word是十六进制的字,Int为有符号的字(整数),UInt为无符号的字。
整数和双整数的最高位为符号位,最高位为0时为正数,为1时为负数。整数用补码来表示,正数的补码就是它的本身,将一个二进制正整数的各位取反后加1,得到绝对值与它相同的负数的补码。
(8)双字
两个字(或4个字节)组成一个双字,双字MD100由字节MB100~MB103或字MW100、MW102组成(见图2-10c),D表示双字,100为组成双字MD100的起始字节MB100的编号。MB100是MD100中的最高位字节。
数据类型DWord为十六进制的双字,DInt为有符号双字(双整数),UDInt为无符号双字。
(9)浮点数
32位的浮点数又称为实数(Real),最高位(第31位)为浮点数的符号位(见图2-11),正数时为0,负数时为1。规定尾数的整数部分总是为1,第0~22位为尾数的小数部分。8位指数加上偏移量127后(1~255),占第23~30位。
图2-11 浮点数的结构
浮点数的优点是用很小的存储空间(4B)可以表示非常大和非常小的数。PLC输入和输出的数值大多是整数,例如模拟量输入值和模拟量输出值,用浮点数来处理这些数据需要进行整数和浮点数之间的相互转换,浮点数的运算速度比整数的运算速度慢一些。
在编程软件中,用十进制小数来输入或显示浮点数,例如50是整数,而50.0为浮点数。LReal为64位的双精度浮点数,它只能在设置了仅使用符号寻址的块中使用。LReal的最高位(第63位)为浮点数的符号位,11位指数占第52~62位。尾数的整数部分总是为1,第0~51位为尾数的小数部分。
(10)复杂数据类型
1)数组(ARRAY)由相同数据类型的元素组合而成,4.3.3节介绍了在数据块中生成数组的方法。
2)字符串(Sting)是由字符组成的一维数组,每个字节存放1个字符。第1个字节是字符串的最大字符长度,第2个字节是字符串当前有效字符的个数,字符从第3个字节开始存放,一个字符串最多有254个字符。
用单引号表示字符串常数,例如‘ABC’是有3个字符的字符串常数。
3)DTL用来表示日期时间值,它由12B组成,其详细的结构见4.8.1节。
4)结构(STRUCT)可以由不同数据类型的元素组成(见5.2.2节)。
2.物理存储器
物理存储器是指在实质的PLC设备中,它能够帮PLC的操作系统使PLC具有基本的智能,能够完成PLC设计者规定的各种工作。用户程序由用户设计,它使PLC能完成用户要求的特定功能。
(1)PLC使用的物理存储器
1)随机存取存储器。CPU可以读出随机存取存储器(RAM)中的数据,也可以将数据写入RAM。它是易失性的存储器,电源中断后,存储的信息将会丢失。
RAM的工作速度高,价格便宜,改写方便。在关断PLC的外部电源后,可以用锂电池保存RAM中的用户程序和某些数据。
2)只读存储器。只读存储器(ROM)的内容只能读出,不能写入。它是非易失的,电源消失后,仍能保存存储的内容,ROM一般用来存放PLC的操作系统。
3)快闪存储器和可电擦除可编程只读存储器。快闪存储器(Flash EPROM)简称为FEPROM,可电擦除可编程的只读存储器简称为EEPROM。它们是非易失性的,可以用编程装置对它们编程,兼有ROM的非易失性和RAM的随机存取优点,但是将信息写入它们所需的时间比RAM长得多。它们用来存放用户程序和断电时需要保存的重要数据。
(2)微存储卡
SIMATIC微存储卡基于FEPROM,用于在断电时保存用户程序和某些数据。微存储卡用来作装载存储器(Load Memory)或作便携式媒体。
(3)装载存储器与工作存储器
1)装载存储器。装载存储器是非易失性的存储器,用于保存用户程序、数据和组态信息。所有的CPU都有内部的装载存储器,CPU插入存储卡后,用存储卡作装载存储器。项目下载到CPU时,保存在装载存储器中。装载存储器具有断电保持功能。
2)工作存储器。工作存储器是集成在CPU中的高速存取的RAM。为了提高运行速度,CPU将用户程序中与程序执行有关的部分,例如组织块、功能块、功能和数据块从装载存储器复制到工作存储器。装载存储器类似于计算机的硬盘,工作存储器类似于计算机的内存条。CPU断电时,工作存储器中的内容将会丢失。
(4)断电保持存储器
断电保持存储器(保持性存储器)用来防止在电源关闭时丢失数据,暖启动后断电保持存储区中的数据保持不变。冷启动时断电保持存储器的值被清除。
CPU提供了2048B的保持存储器,可以在断电时,将工作存储器的某些数据(例如数据块或位存储器M)的值永久保存在保持存储器中。断电时CPU有足够的时间来保存数量有限的指定的存储单元的值。断电时选择的工作存储器的值被复制到保持存储器,首先进行求和运算,保存校验和之后,被保持的值写入非易失存储器。校验和与CPU的操作系统需要保持的其他值不会占用给用户使用的2048B保持存储器。电源恢复后,系统将保持存储器保存的断电之前工作存储器的数据,恢复到原来的存储单元。需要保存的数据如果超过2048B,将被拒绝。
在暖启动时,所有非保持的位存储器被删除,非保持的数据块的内容被复位为装载存储器中的初始值。保持存储器和有保持功能的数据块的内容被保持。可以用下列方法设置变量的断电保持属性:
1)位存储器中的变量:可以在PLC变量表或分配表(见5.5.2节)中,定义从MBO开始的有断电保持功能的位存储器的地址范围。
2)FB的局部变量:如果生成FB时激活了“仅符号访问”属性,可以在FB的界面区定义单个变量是否有保持功能。如果没有激活FB的该属性,只能在指定的背景数据块中定义所有的变量是否有断电保持属性。
3)全局数据块中的变量:如果激活了“仅符号访问”属性,则可以对每个变量单独设置断电保持属性。如果禁止了DB的该属性,则只能设置DB中所有的变量是否有断电保持属性。
在线时可以用CPU操作员面板上的“MRES”按钮复位存储器,只能在STOP模式复位存储器。存储器复位使CPU进入所谓的“初始状态”,清除所有的工作存储器,包括保持和非保持的存储区,将装载存储器的内容复制给工作存储器,数据块中变量的值被初始值替代。编程设备与CPU的在线连接被中断,诊断缓冲区、时间、IP地址、硬件组态和激活的强制任务保持不变。
如果在CPU断电时更换了存储卡,CPU上电时将复位存储器。
(5)存储卡
可选的SIMATIC存储卡用于存储用户程序,或用于传送程序。CPU仅支持预先格式化的SIMATIC存储卡。打开CPU的顶盖后,将存储卡插入到插槽中。应将存储卡上的写保护开关滑动到离开“Lock”位置。可以设置存储卡用作程序卡或传送卡:
1)使用传送卡可将项目复制到多个CPU,而无需使用STEP 7 Basic。传送卡将存储的项目从卡中复制到CPU的存储器,复制后必须取出传送卡。
2)程序卡可以替代CPU的存储器,所有CPU的功能都由程序卡进行控制。插入程序卡会擦除CPU内部装载存储器的所有内容(包括用户程序和被强制的I/O),CPU然后会执行程序卡中的用户程序。
程序卡必须保留在CPU中。如果取出程序卡,CPU将切换到STOP模式。
(6)查看存储器的使用情况
用鼠标右键单击项目树中的某个PLC,执行出现的快捷菜单中的“资源”命令,可以查看当前项目的存储器使用情况。
双击项目树中某个PLC文件夹内的“在线和诊断”,打开工作区左边窗口的“诊断”文件夹,选中“存储器”(见图5-61),也可以查看PLC运行时存储器的使用情况。
3.系统存储区
(1)过程映像输入/输出
过程映像输入在用户程序中的标识符为I,它是PLC接收外部输入的数字量信号的窗口。输入端可以外接常开触点或常闭触点,也可以接多个触点组成的串并联电路。在每次扫描循环开始时,CPU读取数字量输入模块的外部输入电路的状态,并将它们存入过程映像输入区(见表2-6)。
表2-6 系统存储区
过程映像输出在用户程序中的标识符为Q,每次循环周期开始时,CPU将过程映像输出的数据传送给输出模块,再由后者驱动外部负载。用户程序访问PLC的输入和输出地址区时,不是去读、写数字量模块中信号的状态,而是访问CPU的过程映像区。在扫描循环中,用户程序计算输出值,并将它们存入过程映像输出区。在下一循环扫描开始时,将过程映像输出区的内容写到数字量输出模块。
对存储器的“读写”、“访问”、“存取”这3个词的意思基本上相同。
I和Q均可以按位、字节、字和双字来访问,例如.I0.0、IB0、IW0和ID0。
(2)物理输入
在I/O点的地址或符号地址的后边附加+P”,可以立即访问物理输入或物理输出。通过给输入点的地址附加“:+P”,例如I0.3:P或“Stop:P”,可以立即读取CPU、信号板和信号模块的数字量输入和模拟量输入。访问时使用I:P取代I的区别在于前者的数字直接来自被访问的输入点,而不是来自过程映像输入。因为数据从信号源被立即读取,而不是从最后一次被刷新的过程映像输入中复制,这种访问被称为“立即读”访问。
由于物理输入点从直接连接在该点的现场设备接收数据值,因此写物理输入点是被禁止的,即I:P访问是只读的。I:P访问还受到硬件支持的输入长度的限制。以被组态为从14.0开始的2 DI/2 DO信号板的输入点为例,可以访问I4.0:P、I4.1:P或IB4:P,但是不能访问I4.2:P~I4.7:P,因为没有使用这些输入点。也不能访问IW4:P和ID4:P,因为它们超过了信号板使用的字节范围。用I:P访问物理输入不会影响存储在过程映像输入区中的对应值。
(3)物理输出
在输出点的地址后面附加“:P”(例如Q0.3:P),可以立即写CPU、信号板和信号模块的数字量和模拟量输出。访问时使用Q_:P取代Q的区别在于前者的数字直接写给被访问的物理输出点,同时写给过程映像输出。这种访问被称为“立即写”,因为数据被立即写给目标点,不用等到下一次刷新时将过程映像输出中的数据传送给目标点。
由于物理输入点直接控制与该点连接的现场设备,因此读物理输出点是被禁止的,即Q_:P访问是只写的。与此相反,可以读写Q区的数据。Q:P访问还受到硬件支持的输出长度的限制。以被组态为从Q4.0开始的2 DI/2 DQ信号板的输出点为例,可以访问Q4.0:P、Q4.1:P或QB4:P,但是不能访问Q4.2:P~Q4.7:P,因为没有使用这些输出点。也不能访问QW4:P和QD4:P,因为它们超过了信号板使用的字节范围。用Q_:P访问物理输出同时影响物理输出点和存储在过程映像输出区中的对应值。
(4)位存储器区
位存储器区(M存储器)用来存储运算的中间操作状态或其他控制信息。可以用位、字节、字或双字读/写位存储器区。
(5)数据块
数据块(Data Block)简称为DB,用来存储代码块使用的各种类型的数据,包括中间操作状态、其他控制信息,以及某些指令(例如定时器、计数器指令)需要的数据结构。可以设置数据块有写保护功能。
数据块关闭后,或有关的代码块的执行开始或结束后,数据块中存放的数据不会丢失。有两种类型的数据块:
1)全局数据块:存储的数据可以被所有的代码块访问(见图2-12)。
图2-12 全局数据块与背景数据块
2)背景(Instance)数据块:存储的数据供指定的功能块(FB)使用,其结构取决于FB的界面(Interface)区的参数(见图6-6和图6-7)。
(6)临时存储器
临时存储器用于存储代码块被处理时使用的临时数据。
PLC为3个OB的优先级组(见表5-3)分别提供临时存储器:
1)启动和程序循环(包括有关的FB和FC)16KB。
2)标准的中断事件(包括有关的FB和FC)4KB。
3)时间错误中断事件(包括有关的FB和FC)4KB。
临时存储器类似于M存储器,两者的主要区别在于M存储器是全局的,而临时存储器是局部的:
1)所有的OB、FC和FB都可以访问M存储器中的数据,即这些数据可以供用户程序中所有的代码块全局性地使用。
2)在OB、FC和FB的界面区生成临时变量(Temp)。它们具有局部性,只能在生成它们的代码块内使用,不能与其他代码块共享。即使OB调用FC,FC也不能访问调用它的OB临时存储器。
CPU按照按需访问的策略分配临时存储器。CPU在代码块被启动(对于OB)或被调用(对于FC和FB)时,将临时存储器分配给代码块。
代码块执行结束后,CPU将它使用的临时存储器区重新分配给其他要执行的代码块使用。CPU不对在分配时可能包含数值的临时存储单元初始化,只能通过符号地址访问临时存储器。
2.2.3 STEP 7 Basic的帮助功能
为帮助用户获得更多信息或快速高效地解决问题,STEP 7 Basic提供了丰富全面的在线信息和帮助系统。
1.弹出项
将鼠标的光标放在STEP 7 Basic的某个对象上(例如文本框、工具栏上的按钮和图标),将会出现黄色背景的弹出项方框(见图2-13),方框内是对象的简要说明或帮助信息。
图2-13 弹出帮助信息
设置RS-485通信接口的等待时间时,如果超过了允许的范围,“等待时间”文本框的背景色变为浅红色,同时弹出红色背景的错误消息(见图2-14)。
将光标放在指令的地址区的<??,?>上,将会出现该参数允许的所有的数据类型。将光标放在指令已输入的绝对地址或符号地址上,将会显示另一种格式的地址和变量的数据类型。
图2-14 弹出错误信息提示
2.层叠工具提示
下面是使用层叠工具提示的例子:将光标放在程序编辑器的收藏夹的按钮上(见图2-15),出现的黄色背景的工具提示框中表示有更多信息。鼠标指针短暂停留在按钮上,或单击图标,工具提示框出现图中第2行的蓝色有下划线的层叠项,它是指向相应帮助主题的链接。单击该链接,将会打开帮助系统,并显示相应的主题。
图2-15 工具提示框
3.帮助系统
帮助系统又称为信息系统,可以通过以下方式打开帮助系统(见图2-16)。
1)执行菜单命令“帮助”→“显示帮助”。
2)选中某个对象(例如某条指令)后,按“F1”键。
3)点击工具提示框层叠项中的链接,可以直接转到帮助系统中的对应位置。
单击信息系统工具栏的“显示/隐藏目录”按钮,可以显示/隐藏左边的导航区域,如图2-17所示。用信息系统的“索引”和“搜索”选项卡,可以快速查找到需要的帮助信息,也可以通过目录查找到感兴趣的帮助信息。
图2-16 打开帮助信息
图2-17 显示/隐藏目录