西门子PLC可编程控制器教材.docx
- 文档编号:8454934
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:29
- 大小:213.31KB
西门子PLC可编程控制器教材.docx
《西门子PLC可编程控制器教材.docx》由会员分享,可在线阅读,更多相关《西门子PLC可编程控制器教材.docx(29页珍藏版)》请在冰豆网上搜索。
西门子PLC可编程控制器教材
第一章PLC锅炉控制程序概述
一个锅炉监控系统主要包含一下几个部分:
设备状态的采集;系统状态的采集;锅炉和各种执行机构的控制。
设备状态的采集主要是锅炉输出的状态点,循环泵和补税泵给出的状态点,以及水箱等其他设备的状态点。
锅炉输出的状态点主要包括锅炉的运行状态点、锅炉故障状态点、锅炉出水温度、锅炉回水温度、锅炉排烟温度;循环泵和补水泵以及辅助其工作的变频设备的状态点一般是由水泵控制柜或变频控制柜中集中取出的。
水箱的液位状态一般直接送到PLC控制柜。
系统状态的采集根据锅炉系统的不同有差别。
一般来讲,目前设计的系统主要分为一次侧与二次侧。
一次侧的是锅炉水循环系统,二次侧水循环系统常用的换热器有两种一种是板式换热器,另一种是容积式换热器。
一次侧采集的状态包括一次侧供水温度、一次侧回水温度、一次侧供水压力、一次侧回水压力;二次侧采集的状态包括二次侧供水温度、二次侧回水温度、二次侧供水压力、二次侧回水压力;如果需要根据室外温度实现锅炉监控系统的自动控制那么还需要增加室外温度的采集。
锅炉和各种执行机构的控制主要是对锅炉本体的启停控制和各种电动阀门的控制。
这里所说的对锅炉本体的启停控制主要是通过锅炉自身的控制器提供的控制点控制锅炉。
锅炉本体自带的控制器这里暂不介绍。
锅炉提供的控制点是开关量控制点,一般是常开点。
根据影响锅炉运行的状态点的组合条件,给出允许锅炉启动信号。
简单的说就是需要什么样的条件锅炉才能启动或停止。
阀门的控制有两种方式,一种是开关量控制阀门打开与关闭,另一种是模拟量输出控制阀门打开与关闭。
图表1系统图
第二章PLC程序设计
第一节程序结构
本文中所采用的PLC是西门子公司的产品S7-200系列,CPU的型号是cpu226cn.
西门子PLC编程工具的使用可以参照西门公司的程序使用手册或者在程序中按F1调出帮助文件参考。
下面介绍一下PLC程序的主要结构。
首先看图表2
图表2PLC程序结构
西门子PLC程序是面向结构的程序语言,结构中的主体子程序想要运行必须在主程序中注册。
本文中的程序结构如图2所示,主程序中包括了初始化子程序,数据转换子程序,锅炉控制子程序,自动控制子程序,发送中断与接收中断。
初始化子程序的作用是通讯断口的设置和一些程序中需要预置的一些常数。
比如数据换算中用到的公式里面的常数或者很长一段时间不需要改动的数值。
数据转换子程序负责将采集模块采集的变量转换成我们需要的数据格式,包括采集和转换2个步骤。
锅炉控制子程序控制锅炉的启动和停止,以及相关的状态输入和输出。
自动控制子程序根据自动控制的理论设计完成锅炉的自动控制。
具体的控制方案需要与实际使用的图纸以及设计需求相结合,总结出一套稳定性和先进性的控制方法。
发送中断和接收中断子程序用于通信时的信息发送与接收。
第二节PLC内存介绍
既然我们知道了需要采集得数据类型和大小,以及设置数据需要得内存大小,那么我们就能够把内存的使用标准化,即是哪类数据就用哪类规定的内存块。
这样作的好处是,即使预先不知道一个内存地址的实际意义,也能知道这个地址显示的是何种数据。
下面我们详细介绍这块内容。
首先我们了解一下PLC内存的地址范围,以西门子S7-200系列PLC为例。
图表3位地址范围
图表4字节地址范围
图表5字地址范围
图表6双子地址范围
我们看到PLC的内存分为这样几个区域
I离散输入和映象寄存器
Q离散输出和映象寄存器
M内部内存位
SM特殊内存位(SM0-SM29为只读内存区)
V变量内存
T定时器当前值和定时器位
C计数器当前值和计数器位
HC高速计数器当前值
AI模拟输入
AQ模拟输出
AC累加器寄存器
L局部变量内存
SSCR
每个区域的具体功能可以参看西门子编程工具自带的帮助文件。
第三节内存标准化分配
我们在上一节中已经知道PLC内存是如何分类的以及各种型号的地址范围,于是我们可以把这些地址按照我们的实际需要分门别类。
本文中主要使用的是西门子公司的PLC,其实其他品牌PLC的内存分类和西门子公司产品的内存分类大同小异,只是名字的叫法不同而已,所以我们可以做到举一反三触类旁通。
下面我们结合实际的例子讲清楚内存如何标准化。
PLC内存中的I区、Q区、AI区和AQ区使用范围的大小一般来说是根据我们在工程中的实际需要配置的。
我们工程中的数字量状态采集用I区,如锅炉的故障状态、水泵运行状态、水箱液位等等这些只有通断信号,没有范围变化的信号。
同理,Q区是数字量的输出,如锅炉的启停、阀门的开关控制信号等等;AI区和AQ区分别是采集和输出连续变化的模拟量通道,例如锅炉排烟温度、电动阀门开度、锅炉压力、系统压力等等。
这些地址的分配是由PLC自动分配的,可以已经连接的PLC上读出。
内存的标准化主要是除I/Q/AI/AQ等区域的标准化。
从现实出发,我们工程中经常用到的就是CPU222、CPU224和CPU226这三个型号的PLC。
如果想让我们的程序在这三个型号的CPU中都能运行,那么我们就必须选内存范围最小的CPU,内存范围最小的是CPU222。
我们就把CPU222中的程序当作模板。
CPU222中VD区的范围是0-2044,MD的范围是0-28,AC的范围是0-3。
我们之所以用VD/MD/AC区来说明范围大小是因为D表示DoubleWord是32位的地址,而1位位地址(如V0.0)、8位字节地址(如VB0)、16位字地址(如VW0)都是包含在这个范围内的。
了解了上述内容后,我们开始进入本中最主要的部分——格式化标准。
一、锅炉及其相关设备的状态格式:
锅炉和阀门的控制使用的是开关量输出,锅炉有启动与停止两种动作,阀门也是开启和关闭两种动作。
所以我们可以把这些控制动作归结在一个字节内表示。
如下表:
控制字节定义如下:
位说明
锅炉启动
锅炉停止
阀门开启
阀门关闭
允许启动
位次序
0
1
2
3
4
5
6
7
图表7控制字节定义
位说明
手动启动
手动停止
自动启动
自动停止
自动手动
位次序
0
1
2
3
4
5
6
图表8自动手动控制
位说明
液位状态
低限报警
液位状态高限报警
锅炉房
燃气报警
计量间
燃气报警
位次序
0
1
2
3
4
5
6
7
图表9报警输出字节
反馈字节的定义如下:
位说明
锅炉运行状态
锅炉故障
流水开关
状态
阀门当前状态
水泵运行状态
水泵故障
位次序
0
1
2
3
4
5
6
7
图表10状态字节定义
位说明
液位状态
低限报警
液位状态高限报警
锅炉房
燃气报警
计量间
燃气报警
位次序
0
1
2
3
4
5
6
7
图表11报警输入字节
锅炉的数量是有限的,于是我们把控制字节和状态字节的使用做数量上的限定和分配。
目前的情况来看,我们一个PLC能控制的锅炉数量最多是10台,理由是我们的PLC上I/O数量是有限的。
所以我们把控制字节规定使用10个字节,状态字节规定10个字节,预留30个字节。
这样我们就标准化了锅炉的控制。
地址范围规定从VB0-VB49,其中VB0-VB9为锅炉控制字节,MB30-MB39为自动或手动控制字节,VB10-VB19为影响锅炉运行的状态字节。
VB20-VB24为报警输出字节,VB25-VB29为报警输入字节,VB40-VB49为预留字节备用。
二、各种模拟的输入输出标准化
接下来我们介绍锅炉控制系统中的各种模拟量如何配置内存。
我们的锅炉系统中存在大量的模拟量信号,这些信号一般来说输入都是由模拟量采集模块将连续的变化量(大部分为4-20mA的电流信号,0-5V或0-10V的电压信号)转换离散的数字量,存储到PLC内存里;输出是由模拟量输出模块将我们要输出的存储在内存中的数字离散信号转换为电压信号或者电流信号。
无论是内存中采集上来的数值还是我们输出的数值都不是我们得到的理想的数值,还需要转换程序将这些量转换成可读懂的数据。
数据的转换我们放在下面的章节介绍。
锅炉控制系统中的模拟量输入值主要是:
锅炉出水温度、锅炉回水温度、锅炉排烟温度、锅炉出水压力、锅炉回水压力、一次供水压力、一次回水压力、一次供水温度、一次回水温度、采暖供水温度、采暖回水温度、采暖供水压力、采暖回水压力、生活供水温度、生活回水温度、生活供水压力、生活回水压力、水流量、供热量、阀门开度、室外温度、变频器频率等等。
根据设计院设计的不同,所需要采集的数据种类不同。
锅炉控制系统中的模拟量输出值主要是:
各中需要模拟量控制的阀门开启值和变频器的给定频率。
了解了上述内容,我们就能够标准化内存使用,具体的内存分配如下所述:
考虑到这些模拟量经过程序转换之后一般为实数类型(REAL)的数值,所以每个数值存储到内存后所占用的内存空间为4个字节,即32位的数值。
那么我们可以这样标准化采集量。
1、锅炉相关的数值内存分配
锅炉出水温度(4个字节)
锅炉回水温度(4个字节)
锅炉出水压力(4个字节)
锅炉回水压力(4个字节)
锅炉排烟温度(4个字节)
一共位20个字节或者说5个双字。
因为一个PLC控制锅炉台数的上限是10台,所以总供需要200个字节。
于是我们把VB100-VB299的内存段分配给与锅炉相关的采集值。
详细的分配是:
数值名称
锅炉台数
锅炉出水温度
锅炉回水温度
锅炉出水压力
锅炉回水压力
锅炉排烟温度
第一台
VD100
VD104
VD108
VD112
VD116
第二台
VD120
VD124
VD128
VD132
VD136
第三台
VD140
VD144
VD148
VD152
VD156
第四台
VD160
VD164
VD168
VD172
VD176
第五台
VD180
VD184
VD188
VD192
VD196
第六台
VD200
VD204
VD208
VD212
VD216
第七台
VD220
VD224
VD228
VD232
VD236
第八台
VD240
VD244
VD248
VD252
VD256
第九台
VD260
VD264
VD268
VD272
VD276
第十台
VD280
VD284
VD288
VD292
VD296
图表12锅炉相关模拟量采集存储地址
2、一次侧采集值内存分配
一次侧采集值总共只有4个
一次出水温度(4个字节)
一次回水温度(4个字节)
一次出水压力(4个字节)
一次回水压力(4个字节)
共16字节,制定分配区域VB300-VB399
数值名称
一次出水温度
一次回水温度
一次出水压力
一次回水压力
起始位置
VD300
VD304
VD308
VD312
图表13一次侧模拟量采集存储地址
3、采暖采集值内存分配
采暖出水温度(4个字节)
采暖回水温度(4个字节)
采暖出水压力(4个字节)
采暖回水压力(4个字节)
采暖区电磁阀开启值(4个字节)
不同的系统设计不同,有些系统分为不同的采暖区域,不过数量上最多不超过10个区域。
每个区域共使用20个字节所占内存空间为200字节。
因此我们制定分配给采暖数据的内存区域为VB400-VB599
数值名称
采暖区
采暖出水温度
采暖回水温度
采暖出水压力
采暖回水压力
阀门开度
采暖一区
VD400
VD404
VD408
VD412
VD416
采暖二区
VD420
VD424
VD428
VD432
VD436
采暖三区
VD440
VD444
VD448
VD452
VD456
采暖四区
VD460
VD464
VD468
VD472
VD476
采暖五区
VD480
VD484
VD488
VD492
VD496
采暖六区
VD500
VD504
VD508
VD512
VD516
采暖七区
VD520
VD524
VD528
VD532
VD536
采暖八区
VD540
VD544
VD548
VD552
VD556
采暖九区
VD560
VD564
VD568
VD572
VD576
采暖十区
VD580
VD584
VD588
VD592
VD596
图表14采暖区模拟量采集存储地址
4、生活热水采集值内存分配
生活热水出水温度(4个字节)
生活热水回水温度(4个字节)
生活热水出水压力(4个字节)
生活热水回水压力(4个字节)
生活热水区电磁阀开启值(4个字节)
不同的系统设计不同,有些系统分为不同的生活区域,不过数量上最多不超过10个区域。
每个区域共使用20个字节所占内存空间为200字节。
因此我们制定分配给生活热水数据的内存区域为VB600-VB799
数值名称
生活区
生活热水
出水温度
生活热水
回水温度
生活热水
出水压力
生活热水
回水压力
阀门开度
生活一区
VD600
VD604
VD608
VD612
VD616
生活二区
VD620
VD624
VD628
VD632
VD636
生活三区
VD640
VD644
VD648
VD652
VD656
生活四区
VD660
VD664
VD668
VD672
VD676
生活五区
VD680
VD684
VD688
VD692
VD696
生活六区
VD700
VD704
VD708
VD712
VD716
生活七区
VD720
VD724
VD728
VD732
VD736
生活八区
VD740
VD744
VD748
VD752
VD756
生活九区
VD760
VD764
VD768
VD772
VD776
生活十区
VD780
VD784
VD788
VD792
VD796
图表15生活区模拟量采集存储地址
5、其他采集值内存分配
这里我们考虑剩余的模拟采集量种类已经不多,而且每类数量也不多。
暂设计每类最多5个数值,分配20个字节。
而且暂时考虑的种类是:
水流量(4个字节)共5个,占用20字节;
供热量(4个字节)共5个,占用20字节;
室外温度(4个字节)共5个,占用20字节;
变频器频率(4个字节)共5个,占用20字节;
上述四个模拟量值只用到变频器频率VB869如需其他采集值内存分配地址顺延.
总分配区域为VB800-VB899
水流量:
值名称
流量一
流量二
流量三
流量四
流量五
起始位置
VD800
VD804
VD808
VD812
VD816
图表16水流量模拟量采集存储地址
供热量:
值名称
供热量一
供热量二
供热量三
供热量四
供热量五
起始位置
VD820
VD824
VD828
VD832
VD836
图表17供热量模拟量采集存储地址
室外温度:
值名称
室外温度一
室外温度二
室外温度三
室外温度四
室外温度五
起始位置
VD840
VD844
VD848
VD852
VD856
图表18室外温度模拟量采集存储地址
变频器频率:
值名称
变频器频率一
变频器频率二
变频器频率三
变频器频率四
变频器频率五
起始位置
VD860
VD864
VD868
VD862
VD866
图表19变频器频率模拟量采集存储地址
6、模拟输出内存分配
模拟量输入分配完后我们开始为输出用的模拟量分配内存。
在锅炉控制系统中,通过模拟两控制的设备无非两种,一种是各种电动阀门,另一种是变频器的频率给定。
而且,这两类设备的数量也是非常有限的。
我们这里考虑各种阀门总共数量最多为10个,变频器数量最多10个。
因此,对于模拟量输出所占用的内存分配共需要内存40个字节,考虑到可能有额外的设备需要控制,所以总共分配100个字节,范围从VB900-VB999
电动阀门开启值:
值名称
阀门一
阀门二
阀门三
阀门四
阀门五
起始位置
VW900
VW904
VW908
VW912
VW916
值名称
阀门六
阀门七
阀门八
阀门九
阀门十
起始位置
VW920
VW924
VW928
VW932
VD936
图表20模拟量输出存储地址
变频器给定值:
值名称
变频器一
变频器二
变频器三
变频器四
变频器五
起始位置
VW940
VW944
VW948
VW952
VW956
值名称
变频器六
变频器七
变频器八
变频器九
变频器十
起始位置
VW960
VW964
VW968
VW972
VW976
图表21模拟量输出存储地址
三、通信程序内存标准化
本文使用的是西门子PLC自由口协议(西门子产品的通信端口设置详见软件帮助或产品手册),尽管不同公司产品的通信口用法不同,但还是有规律可循的。
通信程序一般分为三步分:
1、端口设置部分;
2、发送子程序部分;
3、接收子程序部分。
我们只要在制定的内存填上需要的数据,然后启动通信端口开始通信就可以传输数据了。
详细的通信程序介绍我们放在下面的章节,此处我们先给通信程序分配固定的PLC内存。
在锅炉控制系统中,通信的主要目的是为了上传采集数据和下传设备的给定值(设定值)。
而且通信协议不是很复杂,因此,我们给每个需要和PLC通信的设备分配200个字节的内存。
考虑用到的设备数量最多不超过5个,我们分配VB1000-VB1999,MB0—MB4作为这个5个设备的内存使用区。
实际使用的时候,我们经常会遇到几个设备使用相同的发送区,发送相同的命令。
所以这段内存可以灵活使用。
四、初始化程序内存使用标准化
初始化程序的作用有两个,一个是配置通信端口,另一个是设置初始值。
根据经验,初始化区域分配500个字节的内存已经足够使用。
所以,我们将VB2000-VB2499段的内存分配给初始化程序。
五、自动控制程序内存使用
由于每个系统的设计和结构不同,因而自动控制程序的内容也不同。
我们这里只能根据以往经验分配1500个字节,范围VB2500—VB3999的内存地址给自控程序使用。
对于一般的锅炉控制系统已经足够使用。
自控程序包括:
数据转换程序和锅炉控制程序。
建议VB2500-VB2699作为锅炉控制程序使用,数据转换使用VB3000-VB3999。
我们在代码分析中详细讲解这两个程序。
第四节代码分析与例程讲解
第一部分数据转换程序
首先我们介绍一下为什么要进行数据的转换。
原因就是我们从变送器传送到采集模块的信号为电压信号或电流信号,这些信号经过模数转换程序把原来连续的物理量转换为可被PLC内存存储的离散的数字量。
内存中的数字量的形式也不是我们平常使用的格式,内存中一般为16位的二进制数据,而我们在显示设备上需要的是十进制的数值。
所以就必须通过转换程序把二进制数值转换为我们需要的十进制数值。
下面我们结合代码介绍数据转换程序
一、PLC模拟量模块转换程序
1、程序代码
TITLE=PLC模块数据转换程序
Network1
//采样:
这段代码主要作用是把16位(一个字)的数据转换为实数类型的数据,并且启动计数器和累加器
LDSM0.0
ITDLW0,LD26//16整数转换为32位整数
DTRLD26,LD30//32位整数转换为实数
+RLD30,LD12//启动累加器
INCWLW16//启动计数器
Network2
//滤波与转换:
这段代码通过一系列运算进行数据滤波,并且将数值转换为可读性很好
//的十进制数据。
同时累加器与计数器归零便于下一次采集使用。
LDW>=LW16,LW6//比较当前采样次数是否等于预制采样次数
ITDLW6,LD42
DTRLD42,LD46//将采样次数有16位整数转换位32位实数
MOVRLD12,LD18
/RLD46,LD18//求出采样平均值
MOVR0.0,LD12//清空累加器
MOVW+0,LW16//清空计数器
-R6400.0,LD18
*RLD8,LD18//转换为十进制数值
+RLD2,LD18//修正
Network3
LDSM0.0
MOVRLD18,LD22//输出
Network4
LDSM0.0//返回主程序
CRET
我们可以注意到,这里所使用的内存全部是L内存的。
我们这样做的目的是想把这段程序作为一个可以被其他程序使用的子程序,所以使用的是局部变量。
子程序容易移动;我们可以单独挑出一个功能,并将其复制至其他程序中,而无需或很少需要重复操作。
注释:
V内存的使用限制子程序的可移植性,因为一个程序的V内存地址赋值可能与另一个程序中的赋值发生冲突。
相反,将局部变量表用于所有地址赋值的子程序却很容易移动,因为不必担心会出现编址冲突。
(详细说明参照西门子公司编程工具帮助文件)
2、变量说明
输入:
需要转换的采集量(16位整数)
修正值:
对转换后的数据做修正(实数)
采样次数:
采样的次数(16位整数)
比例值:
通过另外一个子程序计算出来的数值(实数)
累加器:
一个临时存储累加值的内存(实数)
计数器:
一个临时存储当前采样次数的地址(16位整数)
Temp_hits_av:
临时存储输出值的地址(实数)
输出:
我们需要的结果(实数)
3、求比例值的子程序
程序代码:
TITLE=求比例值的子程序
Network1
//根据实际值的上下限和PLC采集值的上下限,计算出实际值与采集值的比例
LDSM0.0
MOVRLD0,LD20
-RLD4,LD20//实际值上限减去实际值下限,求出差值1
MOVRLD8,LD24
-RLD12,LD24//采集值上限减去采集值下限,求出差值2
MOVRLD20,LD16
/RLD24,LD16//差值1除以差值2求出比例值
Network2
LDSM0.0
CRET//返回主程序
4、比例值计算子程序变量说明
H:
实际值上限(实数)
L:
实际值下限(实数)
H_PLC:
PLC采集值上限(实数)
L_PLC:
PLC采集值下限(实数)
Outcome:
输出的比例值(实数)
H和L表示的是实际值上下限,所谓实际值就是变送器的量程范围。
例如:
一个温度传感器的量程是0℃-200℃,那么将200赋值给H,0赋值给L即可。
H_PLC和L_PLC是PL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西门子 PLC 可编程控制器 教材
![提示](https://static.bdocx.com/images/bang_tan.gif)