资源描述
第五章 程序结构
三种编程方法:
(一)线性编程
线性编程将整个用户程序写在一个指令连续的块中,处理器线性地或
顺序地扫描程序的每条指令。
(二)分部编程
分部式编程将用户程序分成相对独立的指令块、每个块包含给定的部
件组或作业组的控制逻辑。
(三)结构化编程
结构化编程要求用户程序提供一些通用的指令块,以便控制一类相似
或相同的部件,给通用指令提供的参数进一步说明各部件的控制差异。
为了支持结构化程序设计,STEP 7将用户程序分类归并为不同的块,
根据程序要求,可选用组织块(OB)、功能块(FB)、或功能(FC)
三种类型的逻辑块,而数据块(DB)或(DI)则用来存储执行用户程
序时所需的数据。
5.1 数据块及其数据结构
5.1.1数据块
用户程序运行所需的大量数据或变量存储在数据块中,数据块也是实现各逻辑块之间交换、传递和共享数据的重要途径。
对于CPU 314,用作数据块的存储器最多8KB,用户定义的数据总量不能超过这个限制。对于数据块必须遵循先定义后使用的原则。
1. 定义数据块
定义内容包括数据块号及块中的变量(包括:变量符号名,数据类型以
及初始值等)。数据块在使用前,必须作为用户程序的一部分下载到CPU
中。
2. 访问数据块
访问时需要明确数据块号和数据块中的数据类型与位置。根据明确数据
块号的不同方法,可以用以多种方法访问数据块中的数据。
(一)直接在访问指令中写明数据块号,如:
L DB10.DBW 0
L DB10.DBW 2
XOW
T DB10.DBW 4
(二)“先打开后访问”
OPN DB 5
L DBW 10
OPN DB 10
T DBW 20
由于有两个数据块寄存器(DB和DI寄存器),所以,最多可以同时打
开两个数据块。一个作为背景数据块,数据块的起始地址存储在DI寄存
器中;另一个作为共享数据块,数据块的起始地址存储在DB寄存器中。
打开背景数据块,在调用FB时可以自动实现,由于调用FB时使用DI
寄存器,所以,一般不在FB程序中用OPN DI n指令打开数据块。
3. 背景数据块和共享数据块
任何FB、FC或OB均可读写存放在共享数据块中的数据。背景数据块
是FB运行时的工作存储区,它存放FB的部分运行变量。调用FB时,
必须指定一个相关的背景数据块。作为规则,只有FB块才能访问存放
在背景数据块中的数据。一般情况下,每个FB都有一个对应的背景数
据块,一个FB也可以使用不同的背景数据块。如果几个FB需要的背景
数据完全相同,为节省存储器,则可以定义成一个背景数据块,供它们
分别使用。
5.1.2 数据结构
基本数据类型
数据结构形式 复式数据类型
复式数据类型
名称
类型
说明
日期-时间
DATE_AND_TIME
长度8Byte
字符串
STRING
占用256Byte
数组
ARRAY
可定义6维数组
构造
STRUCT
由多种数据类型组成的数据集合
5.1.3 用户数据类型
STEP 7允许将基本或复式组合成“用户”自已定义的数据类型,这种类
型称为用户数据类型(UDT)。用户数据类型必须首先单独建立,并存放
在称为UDT的特殊数据块中。
建立用户数据类型的目的,是为了将UDT作为一种数据类型使用,以方
便定义多个结构相同的构造变量。
5.2 功能块编程及调用
一个程序由许多部分(子程序)组成,STEP 7将这些部分称为逻辑块,并允许块间相互调用。
功能块由两个主要部分组成:一部分是每个功能块的变量声明表,变量
声表声明此块的局部数据;另一部分是逻辑指令组成的程序,程序要用到变
量声明表中给出的局部数据。
当调用功能块时,需要提供块执行时要用到的数据或变量,也就是将外
部数据传递给功能块,这称为参数传递。
5.2.1 变量声明表(局部数据)
局部数据分为参数和局部变量两大类,局部变量又包括静态变量和临时
变量(暂态变量)两种。参数是在调用块和被调用块间传递的数据。静态变
量和临时变量是仅供逻辑块本身使用的数据。
局部数据类型
变量名
类型
说明
输入参数
In
由调用逻辑块的块提供数据,输入给逻辑块的指令
输出参数
Out
向调用逻辑块的块返回参数,即从逻辑块输出结果数据
I/O参数
In_Out
参数的值由调用块的块提供,由逻辑块处理修改,然后返回
静态变量
Stat
静态变量存储在背景数据块中,块调用结束后,其内容被保留
状态变量
Temp
临时变量存储在L堆栈中,块执行结束变量的值因被其它内容覆盖而丢失
5.2.2 逻辑块局部数据的数据类型
在变量声明表中,要明确局部数据的数据类型,这样操作系统才能给变
量分配确定的存储空间。局部数据可以是基本数据类型或是复式数据类型,
也可以是专门用于参数传递的所谓“参数类型”。
参数类型
大小
说明
定时器
2 Byte
在功能块中定义一个定时器形参,调用时赋予定时器实参
计数器
2 Byte
在功能块中定义一个计数器形参,调用时赋予定时器实参
块:
Block_FB
Block_FC
Block_DB
Block_SDB
2 Byte
在功能块中定义一个功能块或数据块形参变量,调用时给功能块类或数据块类形参赋予实际的功能块或数据块编号
指针
6 Byte
在功能块中定义一个形参,该形参说明的是内存的地址指针。例如,调用时可给形参赋予实参:P#M50.0,以访问内存M500.0
ANY
10 Byte
当实参的数据未知时,可以使用该类型
STEP 7对分配给块局部数据(在变量声明表中)的数据类型(基本、复式、
参数)是有一定限制的。
声明类型
基本类型
复式类型
参数类型
定时器 计数器 块 指针 ANY
OB局部变量有效的数据类型
Temp
可以
可以
可以
FB局部变量有效的数据类型
In
可以
可以
可以
可以
可以
可以
可以
Out
可以
可以
In-Out
可以
可以
Stat
可以
可以
Temp
可以
可以
可以
FC局部变量有效的数据类型
In
可以
可以
可以
可以
可以
可以
可以
Out
可以
可以
可以
可以
In-Out
可以
可以
可以
可以
Temp
可以
可以
可以
STEP 7允许用物理地址(绝对地址)或符号地址或常数等形式作为实参给形参赋值,但对于不同的形参类型,STEP 7限制了赋值形式。
声明类型
绝对地址
符号地址
块局部符号
常数
基本数据类型
In
可以
可以
可以
可以
Out
可以
可以
可以
不可
In-Out
可以
可以
可以
不可
复式数据类型
In
不可
可以
可以
不可
Out
不可
可以
可以
不可
In-Out
不可
可以
可以
不可
5.2.3 功能块编程与调用举例
对功能块编程分两步进行:第一步工作是定义局部变量(填写局部变量
表);第二步是编写要执行的程序。
写功能块程序时,可以两种方式使用局部变量:①使用变量名,此时变
量名前缀“#”,以区别于在符号表中定义的符号地址,增量方式下,前缀
会自动产生;②直接使用局部变量的地址,这种方式只对背景数据块和L堆
栈有效。
例一 二分频器
二分频器是一种具有一个输入端和一个输出端的功能单元,输出频率为输入
频率的一半。
(1)FC1的变量声明表
(2)FC1梯形图程序
(3)OB1调用梯形图程序
例二 时钟脉冲发生器
使用定时器实现自由设定时钟脉冲发生器功能(脉冲占空系数1:1)。
(1)FC1变量声明表
(2)FC1梯形图程序
(3)OB1调用梯形图程序
第六章 可编程序控制器应用设计
PLC系统设计步骤:
西门子自动化产品在城市供水中的应用
城市供水作为城市管理工程的一个主要设施,它直接影响着一个城市正常的生产和生活,随着科学的发展与进步,人们对饮用水的要求越来越高,相应对供水系统的自动化程度要求也越来越高,所以,近几年来自动化产品在供水行业中的应用较为普及。
一、工艺描述
安徽省六安市第二自来水厂座落在该项市南郊的淠河旁边,因第一自来水厂已经停用,所以该厂目前成为六安市唯一的供水厂。该厂原设计供水能力10万吨/天,通过扩建改造达到14万吨/天。
同大部分水厂一样,其工艺流程图如下图所示:
●源水泵房:用来将源水送到预处理的沉淀池中
●加药:将配好的矾液添加到源水中进行混合
●平流沉淀池:添加矾液经混合后,用于将水中絮凝物沉淀出来的池子
●滤池:池内的主要物质为石英砂,对从沉淀池来的水进行过滤,加氯之后,流入清水池
●加氯:将水中通入氯,主要作用是杀菌、消毒
●送水泵房:将清水池的水通过恒压供水装置送入自来水管网
二、控制任务
为提高供水系统的安全性、可靠性,采用了以下的改造方案
●加药系统,使其具有自动加药的功能
●通过对滤池反冲洗的改造,使其具有自动反冲洗的功能,省去繁索的人工操作
●增设了自动加氯机,使其根据出水余氯值,自动控制加氯量
●改造低压配电系统,使之对电压、电流、有功功率、无功功率及功率因数具有远程监测、记录、报警的功能
●建立水厂中控室,实现三级自动化监控,通过中控室的通讯工作站一方面将数据送到模拟屏上,另一方面通过无线数传电台将数据送到市自来水公司
三、控制方式介绍
整个六安二水厂的控制网络如下图
2台上位机监控主站通过5613卡与下面3台PLC分站通讯,通讯方式采用PROFIBUS-FMS总线方式,每个PLC分站选用S7-300,CPU为315-2DP,FMS通讯模块选用的是CP343-5,并且每个分站通过MPI口连接一个TP27-10”的触摸屏。
滤池分站PLC1通过集成的PROFIBUS-DP下面连了16个S7-200滤池子站和1个S7-200反冲洗子站。每个滤池子站通过编程口挂一个TP070触摸屏,每个滤池子站控制每格滤池的运行。反冲洗子站的S7-200通过自由口协议与反冲洗泵变频器MM430进行通讯。
出水泵房分站PLC2通过接口模块IM360和IM361扩展了两个机架,在CPU的MPI口又连了一台工控机,作为泵房的监控站,工控机的通讯卡为CP5611卡。通过集成的PROFIBUS-DP口连了一个ET200M分布式I/O和一个S7-200,ET200M安装在取水泵站,用以对取水泵及进水阀的控制,S7-200为CPU226,通过自由口与出水泵的变频器通讯。CP340模块利用RS485口与配电中心的电量监测仪表HC6000相连,通过Modbus协议进行通讯。将采集的电量参数送给监控计算机。
加药分站PLC3配置了一块CP340、一块CP341及一些I/O模块。CP340与10台电机保护仪通过RS-485口进行通讯,CP341与二台加氯机进行通讯,加氯机的通讯波特率为19200bit/s,而CP340的最大速度为9600 bit/s,所以选择了CP341与加氯机通讯。
两台监控主站通过网络交换机与通讯工作站组成以太网,通讯工作站的计算机采集监控计算机的数据。一方面通过串口1与模拟屏(6×2.8米)通讯,将水厂参数实时在模拟屏上显示;另一方面通过串口2与数传电台相连,将数据经电台传送至自来水公司的通讯主机上。
整个水厂的控制方式分三级,现地、分站控制、远程控制。当现地的转换手柄置于现地操作方式时,此时的优先级最高,禁止上位对其操作;当转换手柄转换至远程时,此时由中控室的监控主机进行控制,主机可以选择是否让触摸屏操作,也可随时取消触摸屏的操作。
四、控制难点
自动加药一般是水厂控制的一个难点,因为加药控制主要是控制加药量,也就是控制计量泵的转速,本方案采用出水浊度仪的输出信号(4~20mA)作为计泵泵的反馈,但因从加药到出水,中间需要较长的时间,所以在控制方面有较大的滞后,为解决这个问题,通过对过去的加药经验和现实已知的对象状况(原水浊度、温度、流量、PH值等)的分析,推断出目前实际需要的加药量,根据出水浊度对投药量作微调,结合实际水流量将数据送至执行机构,该方案充分利用工控机的运算能力。
中控室两个监控主站的应用软件采用的是WICC组态软件,利用Profibus-FMS与下面3个PLC分站通讯,当运行一台监控主机时,只能读到PLC1和PLC3子站,PLC2的数据读不到,检查线路也没有问题,如果两台上位机同时运行,有一台主机能读到PLC1和PLC3站,另一台主机却只能读到PLC3站。经咨询西门子技术支持和查阅有关资料,判断可能原因是CPU的通讯资源有限,选用的CPU为6ES7 315-2AF03-OABO,我也做过一个试验,如果将PLC2的触摸屏去掉,监控主机就可采集到该站的数据,所以证实上述的分析。
解决的办法:更换新的CPU(6ES7 315-2AG10-OABO)后,并在编程软件STEP7 5.1的硬件配置中更换CPU的配置,随后将CPU的属性打开,在Communication选项中将OP Communication中的默认值1改为4,S7 Standard默认值12改为8即可。最后将硬件配置下载到CPU后,下面每个站的数据都能读取,因为新的CPU支持最大16个连接点,
四、结束语
该自动控制系统充分利用了西门产品分散式结构和多界面的网络功能,应用十分灵活。经使用一年多的使用,系统运行较稳定,未出现异常。
参考文献:
1、S7-300可编程控制器产品目录
2、西门子工业通讯及现场设备产品目录2001
3、STEP7 5.1编程手册
展开阅读全文