河南理工大学电气学院117:33本章主要内容1.S7-1200PLC工作模式(掌握)三种运行模式2.存储器及其寻址(掌握)存储器代码,两种寻址方式,强制输入/输出,保持性3.数据格式及数据类型(理解)把握常见数据格式特点及所占空间4.编程方法(重点)三种结构模式5.程序结构(重点)OB,FC,FB,各自特点及区别第3章S7-1200程序设计基础17:332第3章S7-1200PLC程序设计基础3.1S7-1200PLC工作模式(掌握)3.2存储器及其寻址(掌握)3.3数据格式及数据类型(理解)3.4编程方法(重点)3.5程序结构(重点)第3章S7-1200程序设计基础17:3333.1CPU的工作模式CPU有三种工作模式:在STOP模式下,CPU不执行任何程序,而用户可以下载项目。在STARTUP模式下,执行一次启动OB(如果存在)。在RUN模式下,重复执行扫描周期。中断事件可能会在程序循环阶段的任何点发生并进行处理。处于RUN模式下时,无法下载任何项目。在RUN模式的启动阶段,不处理任何中断事件。第3章S7-1200程序设计基础17:334在STOP模式下:CPU①处理所有通信请求(如果适用)并②执行自诊断。CPU不执行用户程序,过程映像也不会自动更新。3.1CPU的工作模式第3章S7-1200程序设计基础17:335上电后CPU进入STARTUP模式,进行上电诊断和系统初始化,检查到某些错误时,将禁止CPU进入RUN模式,保持在STOP。STARTUP:A复位I存储区B使用上一次RUN模式最后的值或替换值初始化输出C执行启动OBD将物理输入的状态复制到I存储器E将所有中断事件存储到要在RUN模式下处理的队列中F将过程映像输出区(Q区)的值写到物理输出3.1CPU的工作模式第3章S7-1200程序设计基础17:336启动阶段结束后,进入RUN模式,CPU执行下图所示的任务:RUN①将过程映像输出区(Q区)的值写到物理输出②将物理输入的状态复制到I存储器③执行程序循环OB④处理通信请求和进行自诊断⑤在扫描周期的任何阶段处理中断和通信3.1CPU的工作模式第3章S7-1200程序设计基础17:337PLC使用的物理存储器类型:RAM,ROM,FlashEPROM(简称为FEPROM)用户存储器:非易失性的存储区,用于保存用户程序(项目等)、数据和组态信息。所有的CPU都有内部的装载存储器,CPU插入存储卡后,用存储卡做装载存储器。类似于计算机的硬盘,具有断电保持功能。工作存储器:易失性,集成在CPU中的高速存取的RAM。用于在执行用户程序时存储用户项目的某些内容。CPU也会将一些项目内容从装载存储器复制到工作存储器中。类似于计算机的内存,断电时内容丢失,而在恢复供电时由CPU恢复。系统存储器:用来存储用户程序的操作数据,被划分为若干个地址区域,如过程映像输入/输出,位存储器,数据块,局部数据,I/O输入输出区域和诊断缓冲区等。使用指令可以在相应的地址区域内对数据直接进行寻址。用来防止在电源关闭时丢失数据,可以用不同方法设置变量的断电保持功能。3.2存储器及其寻址第3章S7-1200程序设计基础17:338第3章S7-1200程序设计基础17:3393.2存储器及其寻址地址区说明输入过程映像I每一位对应一个数字量输入点。在每个扫描周期的开始阶段,CPU对输入点进行采样,并将采样值存于输入映像寄存器中。CPU在本周期内不再改变本区数据。输出过程映像Q每一位对应一个数字量输出点。在每个扫描周期的最开始,CPU将输出过程映像区的数据传送给输出模块,并驱动外部负载。位存储区M用来保存控制继电器的中间操作状态或其他控制信息。数据块DB在程序执行过程中存放中间结果,或用来保存于工序或任务有关的其他数据。需要定义:全局数据块(所有程序可访问),背景数据块(制定的FB或SFB)局部数据L暂时存储器或给子程序传递参数,局部变量只能在本单元有效。I/O输入区域可以直接访问集中式和分布式输入模块I/O输出区域可以直接访问集中式和分布式输入模块第3章S7-1200程序设计基础17:3310不管使用变量(例如,“Start”或“Stop”)还是绝对地址(例如,“I0.3”或“Q1.7”),对输入(I)或输出(Q)存储区的引用都会访问过程映像而非物理输出。要立即访问或强制用户程序中的物理(外围设备)输入或输出,请在引用后面添加“:P”例如,“Stop:P”或“Q0.3:P”)。局部数据L:只要调用代码块,CPU就会分配要在执行块期间使用的临时或本地存储器(L)。代码块执行完毕后,CPU将重新分配本地存储器,以用于执行其它代码块。3.2存储器及其寻址第3章S7-1200程序设计基础17:3311存储区描述强制保持过程映像输入(I)在扫描循环开始时,从物理输入复制的输入值NoNo物理输入(I_:P)通过该区域立即读取物理输入YesNo过程映像出(Q)在扫描循环开始时,将输出值写入物理输出NoNo物理输出(Q_:P)通过该区域立即写物理输出YesNo位存储器(M)用于存储用户程序的中间运算结果或标志位NoYes临时局部存储器(L)块的临时局部数据,只能供块内部使用,只可以通过符合方式来访问NoNo数据块(DB)数据存储器与FB的参数存储器NoYes3.2存储器及其寻址第3章S7-1200程序设计基础17:3312“字节.位”寻址方式:如I3.2,首位字母表示存储器标识符,I表示输入过程映像区8位二进制数组成1个字节(Byte):MB100703.2存储器及其寻址S7CPU可以按照位、字节、字和双字对存储单元寻址。第3章S7-1200程序设计基础17:3313以起始字节的地址作为字和双字的地址。起始字节为最高位的字节。MB100150MB101高有效字节低有效字节MB10031MB101最高有效字节MB1020MB103最低有效字节MW100MD1003.2存储器及其寻址存储器寻址方式第3章S7-1200程序设计基础17:33143.3系统存储区与数据类型——基本数据类型变量类型符号位数取值范围常数举例位Bool11,0TRUE,FALSE或1,0字节Byte816#0016#FF16#12,16#AB字Word1616#000016#FFFF16#ABCD,16#0001双字DWord3216#0000000016#FFFFFFFF16#02468ACE字符Char816#0016#FF‘A’,‘t’,‘@’有符号字节SInt8-128127123,-123整数Int16-3276832767123,-123双整数Dint32-21474836482147483647123,-123无符号字节USInt80255123无符号整数UInt16065535123无符号双整数UDInt3204294967295123浮点数(实数)Real321.17549510-383.402823103812.45,-3.4,-1.2E+3双精度浮点数LReal642.225073858507202010-3081.79769313486231571030812345.12345-1,2E+40时间Time321T#-24d20h31m23s648msT#24d20h31m23s648msT#1d_2h_15m_30s_45ms第3章S7-1200程序设计基础17:33153.4程序结构创建用于自动化任务的用户程序时,需要将程序的指令插入代码块中:第3章S7-1200程序设计基础17:3316创建用于自动化任务的用户程序时,需要将程序的指令插入代码块中:●组织块(OB)对应于CPU中的特定事件,并可中断用户程序的执行。用于循环执行用户程序的默认组织块(OB1)为用户程序提供基本结构,是唯一一个用户必需的代码块。如果程序中包括其它OB,这些OB会中断OB1的执行。其它OB可执行特定功能,如用于启动任务、用于处理中断和错误或者用于按特定的时间间隔执行特定的程序代码。●功能块(FB)是从另一个代码块(OB、FB或FC)进行调用时执行的子例程。调用块将参数传递到FB,并标识可存储特定调用数据或该FB实例的特定数据块(DB)。更改背景DB可使通用FB控制一组设备的运行。例如,借助包含每个泵或阀门的特定运行参数的不同背景DB,一个FB可控制多个泵或阀。●功能(FC)是从另一个代码块(OB、FB或FC)进行调用时执行的子例程。FC不具有相关的背景DB。调用块将参数传递给FC。FC中的输出值必须写入存储器地址或全局DB中。3.4程序结构第3章S7-1200程序设计基础17:3317功能块(FB)与功能(FC)检验FC、FB重要指标是可移植性(可重用性)。如果内部全部使用局部变量,不用全局变量,不作任何修改,就可以将它们移植到其他项目,通过调用与被调用的关系,可以迅速生成新的项目程序。把相同功能的工作编制成FB,然后在FC里调用,程序修改起来方便。例子:有10台电机,编制启动,停止逻辑,报警,复位逻辑。FB+FC:FB+背景数据块+FC调用(把这些电机对应的I/O点添到FB的管脚上)FC:1)要写10遍,2)如果你用粘贴和复制的话,有可能有的I/O点忘记修改或其他一些错误,3)程序的结构性不强,维护起来浪费时间。如果子程序的任务不能在一个扫描周期完成,需要在两次调用之间保存某些变量的值,则应选用FB,而不是FC。因为这种情况下FC需要用全局变量(例如共享数据块和M区)来保存这些变量的值,但是这样会影响FC的可移植性。如果块的内部使用了全局变量,在移植时需要考虑每个块使用的全局变量是否会与别的块产生地址冲突(同一地址重复使用)。如果这样的FC很多,移植是附加的工作量将会很大,也很容易出错。3.4程序结构第3章S7-1200程序设计基础17:3318创建用于自动化任务的用户程序时,需要将程序的指令插入代码块中:●组织块(OB)●功能块(FB)●功能(FC)●数据块(DB)用于存放执行用户程序时所需的变量数据的数据区。用户程序中除了逻辑程序外,还需要对存储过程状态和信号信息的数据进行处理,数据是以变量的形式存储,通过存储地址和数据类型来确定数据的唯一性。3.4程序结构第3章S7-1200程序设计基础17:33193.5编程方法线性化编程模块化编程结构化编程第3章S7-1200程序设计基础17:33203.5编程方法根据实际应用要求,可选择线性,模块化或结构化用于创建用户程序:●线性程序按顺序逐条执行用于自动化任务的所有指令。通常,线性程序将所有程序指令都放入用于循环执行程序的OB(OB1)中。第3章S7-1200程序设计基础17:33213.5编程方法线性化编程结构简单,不带分支,一个程序包含了所有指令。所有的指令都在OB1中----每个扫描周期都要扫描执行所有的指令,不断循环执行。即使某些不用的部分代码也需要执行。因此CPU效率低,没有充分利用。需要多次执行相同或类似的操作,需要重复编写相同或类似的程序。程序结构不清晰----管理和测试不便大型程序编写时避免采用线性化编程第3章S7-1200程序设计基础17:33223.5编程方法根据实际应用要求,可选择线性,模块化或结构化用于创建用户程序:●线性程序●模块化程序调用可执行特定任务的特定代码块。要创建模块化结构,需要将复杂的自动化任务划分为与过程的工艺功能相对应的更小的次级任务。每个代码块都为每个次级任务提供程序段。通过从另一个块中调用其中一个代码块来构建程序。第3章S7-1200程序设计基础17:33233.5编程方法模块化程序根据功能分为不同的逻辑块。在OB1中可根据条件决定块的调用和执行;特点是控制任务被分成不同的块,易于团队分工合作同时编程,调试方便;不同的程序块只有在需要时OB1才去调用,因此每次循环中不是所有的块都执行,CPU利用效率高。模块化编程中,被调用快和调用快之间没有数据交换。第3章S7-1200程序设计基础17:33243.5编