【VB开源代码栏目提醒】:以下是网学会员为您推荐的VB开源代码-PLC锅炉控制程序概述 - 技术总结,希望本篇文章对您学习有所帮助。
1 第一章 PLC锅炉控制程序概述 一个锅炉监控系统主要包含一下几个部分设备状态的采集系统状态的采集锅炉和各种执行机构的控制。
设备状态的采集主要是锅炉输出的状态点循环泵和补税泵给出的状态点以及水箱等其他设备的状态点。
锅炉输出的状态点主要包括锅炉的运行状态点、锅炉故障状态点、锅炉出水温度、锅炉回水温度、锅炉排烟温度循环泵和补水泵以及辅助其工作的变频设备的状态点一般是由水泵控制柜或变频控制柜中集中取出的。
水箱的液位状态一般直接送到PLC控制柜。
系统状态的采集根据锅炉系统的不同有差别。
一般来讲目前设计的系统主要分为一次侧与二次侧。
一次侧的是锅炉水循环系统二次侧水循环系统常用的换热器有两种一种是板式换热器另一种是容积式换热器。
一次侧采集的状态包括一次侧供水温度、一次侧回水温度、一次侧供水压力、一次侧回水压力二次侧采集的状态包括二次侧供水温度、二次侧回水温度、二次侧供水压力、二次侧回水压力如果需要根据室外温度实现锅炉监控系统的自动控制那么还需要增加室外温度的采集。
锅炉和各种执行机构的控制主要是对锅炉本体的启停控制和各种电动阀门的控制。
这里所说的对锅炉本体的启停控制主要是通过锅炉自身的控制器提供的控制点控制锅炉。
锅炉本体自带的控制器这里暂不介绍。
锅炉提供的控制点是开关量控制点一般是常开点。
根据影响锅炉运行的状态点的组合条件给出允许锅炉启动信号。
简单的说就是需要什么样的条件锅炉才能启动或停止。
阀门的控制有两种方式一种是开关量控制阀门打开与关闭另一种是模拟量输出控制阀门打开与关闭。
图表 1 系统图RS485LIA001HMIPLC1234512345RM417 2 第二章 PLC程序设计 第一节 程序结构 本文中所采用的PLC是西门子公司的产品S7-200系列CPU的型号是cpu226cn. 西门子PLC编程工具的使用可以参照西门公司的程序使用手册或者在程序中按F1调出帮助文件参考。
下面介绍一下PLC程序的主要结构。
首先看图表2 图表 2 PLC程序结构 西门子PLC程序是面向结构的程序语言结构中的主体子程序想要运行必须在主程序中注册。
本文中的程序结构如图2所示主程序中包括了初始化子程序数据转换子程序锅炉控制子程序自动控制子程序发送中断与接收中断。
初始化子程序的作用是通讯断口的设置和一些程序中需要预置的一些常数。
比如数据换算中用到的公式里面的常数或者很长一段时间不需要改动的数值。
数据转换子程序负责将采集模块采集的变量转换成我们需要的数据格式包括采集和转换2个步骤。
锅炉控制子程序控制锅炉的启动和停止以及相关的状态输入和输出。
自动控制子程序根据自动控制的理论设计完成锅炉的自动控制。
具体的控制方案需要与实际使用的图纸以及设计需求相结合总结出一套稳定性和先进性的控制方法。
发送中断和接收中断子程序用于通信时的信息发送与接收。
PLC主程序 初始化 数据转换 与采集 锅炉控制 自动控制 通讯端口设置 预置常数 锅炉状态采集 系统状态采集 数据转换公式 采集滤波 发送中断 接收中断 3 第二节 PLC内存介绍 既然我们知道了需要采集得数据类型和大小以及设置数据需要得内存大小那么我们就能够把内存的使用标准化即是哪类数据就用哪类规定的内存块。
这样作的好处是即使预先不知道一个内存地址的实际意义也能知道这个地址显示的是何种数据。
下面我们详细介绍这块内容。
首先我们了解一下PLC内存的地址范围以西门子S7-200系列PLC为例。
图表 3 位地址范围 图表 4 字节地址范围 图表 5 字地址范围 4 图表 6 双子地址范围 我们看到PLC的内存分为这样几个区域 I 离散输入和映象寄存器 Q 离散输出和映象寄存器 M 内部内存位 SM 特殊内存位SM0 - SM29为只读内存区 V 变量内存 T 定时器当前值和定时器位 C 计数器当前值和计数器位 HC 高速计数器当前值 AI 模拟输入 AQ 模拟输出 AC 累加器寄存器 L 局部变量内存 S SCR 每个区域的具体功能可以参看西门子编程工具自带的帮助文件。
第三节 内存标准化分配 我们在上一节中已经知道PLC内存是如何分类的以及各种型号的地址范围于是我们可以把这些地址按照我们的实际需要分门别类。
本文中主要使用的是西门子公司的PLC其实其他品牌PLC的内存分类和西门子公司产品的内存分类大同小异只是名字的叫法不同而已所以我们可以做到举一反三触类旁通。
下面我们结合实际的例子讲清楚内存如何标准化。
PLC内存中的I区、Q区、AI区和AQ区使用范围的大小一般来说是根据我们在工程中的实际需要配置的。
我们工程中的数字量状态采集用I区如锅炉的故障状态、水泵运行状态、水箱液位等等这些只有通断信号没有范围变化的信号。
同理Q区是数字量的输出如锅炉的启停、阀门的开关控制信号等等AI区和AQ区分别是采集和输出连续变化的模拟量通道例如锅炉排烟温度、电动阀门开度、锅炉压力、系统压力等等。
这些地址的分配是由PLC自动分配的可以已经连接的PLC上读出。
5 内存的标准化主要是除I/Q/AI/AQ等区域的标准化。
从现实出发我们工程中经常用到的就是CPU222、CPU224和CPU226这三个型号的 PLC。
如果想让我们的程序在这三个型号的CPU中都能运行那么我们就必须选内存范围最小的CPU 内存范围最小的是CPU222。
我们就把CPU222中的程序当作模板。
CPU222中VD区的范围是02044MD的范围是028AC的范围是03。
我们之所以用VD/MD/AC区来说明范围大小是因为D表示Double Word是32位的地址而1位位地址如V0.0、8位字节地址如
VB0、16位字地址如VW0都是包含在这个范围内的。
了解了上述内容后我们开始进入本中最主要的部分——格式化标准。
一、锅炉及其相关设备的状态格式 锅炉和阀门的控制使用的是开关量输出锅炉有启动与停止两种动作阀门也是开启和关闭两种动作。
所以我们可以把这些控制动作归结在一个字节内表示。
如下表 控制字节定义如下 位说明 锅炉启动 锅炉停止 阀门开启 阀门关闭 允许启动 位次序 0 1 2 3 4 5 6 7 图表 7 控制字节定义 位说明 手动启动 手动停止 自动启动 自动停止 自动手动 位次序 0 1 2 3 4 5 6 7 图表 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为报 6 警输入字节
VB40-
VB49为预留字节备用。
二、各种模拟的输入输出标准化 接下来我们介绍锅炉控制系统中的各种模拟量如何配置内存。
我们的锅炉系统中存在大量的模拟量信号这些信号一般来说输入都是由模拟量采集模块将连续的变化量大部分为420mA的电流信号05V或010V的电压信号转换离散的数字量存储到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 7 第十台 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字节。
因此我们制定分配给生活热水数据的内 8 存区域为
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 变频器频率模拟量采集存储地址 9 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
VB1999MB0—MB4作为这个5个设备的内存使用区。
实际使用的时候我们经常会遇到几个设备使用相同的发送区发送相同的命令。
所以这段内存可以灵活使用。
四、初始化程序内存使用标准化 初始化程序的作用有两个一个是配置通信端口另一个是设置初始值。
根据经验初始化区域分配500个字节的内存已经足够使用。
所以我们将
VB2000-
VB2499段的内存分配给初始化程序。
五、自动控制程序内存使用 由于每个系统的设计和结构不同因而自动控制程序的内容也不同。
我们这里只能根据以往经验分配1500个字节范围
VB2500—
VB3999的内存地址给自控程序使用。
对于一般的锅炉控制系统已经足够使用。
自控程序包括数据转换程序和锅炉控制程序。
10 建议
VB2500-
VB2699作为锅炉控制程序使用数据转换使用
VB3000-
VB3999。
我们在
代码分析中详细讲解这两个程序。
第四节
代码分析与例程讲解 第一部分 数据转换程序 首先我们介绍一下为什么要进行数据的转换。
原因就是我们从变送器传送到采集模块的信号为电压信号或电流信号这些信号经过模数转换程序把原来连续的物理量转换为可被PLC内存存储的离散的数字量。
内存中的数字量的形式也不是我们平常使用的格式内存中一般为16位的二进制数据而我们在显示设备上需要的是十进制的数值。
所以就必须通过转换程序把二进制数值转换为我们需要的十进制数值。
下面我们结合
代码介绍数据转换程序 一、PLC模拟量模块转换程序 1、程序
代码 TITLEPLC模块数据转换程序 Network 1 // 采样 这段
代码主要作用是把16位一个字的数据转换为实数类型的数据并且启动计数器和累加器 LD SM0.0 ITD LW0 LD26 //16整数转换为32位整数 DTR LD26 LD30 //32位整数转换为实数 R LD30 LD12 //启动累加器 INCW LW16 //启动计数器 Network 2 // 滤波与转换这段
代码通过一系列运算进行数据滤波并且将数值转换为可读性很好 // 的十进制数据。
同时累加器与计数器归零便于下一次采集使用。
LDWgt LW16 LW6 //比较当前采样次数是否等于预制采样次数 ITD LW6 LD42 DTR LD42 LD46 //将采样次数有16位整数转换位32位实数 11 MOVR LD12 LD18 /R LD46 LD18 //求出采样平均值 MOVR 0.0 LD12 //清空累加器 MOVW 0 LW16 //清空计数器 -R 6400.0 LD18 R LD8 LD18 //转换为十进制数值 R LD2 LD18 //修正 Network 3 LD SM0.0 MOVR LD18 LD22 //输出 Network 4 LD SM0.0 //返回主程序 CRET 我们可以注意到这里所使用的内存全部是L内存的。
我们这样做的目的是想把这段程序作为一个可以被其他程序使用的子程序所以使用的是局部变量。
子程序容易移动我们可以单独挑出一个功能并将其复制至其他程序中而无需或很少需要重复操作。
注释V内存的使用限制子程序的可移植性因为一个程序的V内存地址赋值可能与另一个程序中的赋值发生冲突。
相反将局部变量表用于所有地址赋值的子程序却很容易移动因为不必担心会出现编址冲突。
详细说明参照西门子公司编程工具帮助文件 2、变量说明 3、求比例值的子程序 程序
代码 TITLE求比例值的子程序 Network 1 // 根据实际值的上下限和 PLC采集值的上下限计算出实际值与采集值的比例 输入需要转换的采集量16位整数 修正值对转换后的数据做修正实数 采样次数采样的次数16位整数 比例值通过另外一个子程序计算出来的数值实数 累加器一个临时存储累加值的内存实数 计数器一个临时存储当前采样次数的地址16位整数 Temp_hits_av临时存储输出值的地址实数 输出我们需要的结果实数 12 LD SM0.0 MOVR LD0 LD20 -R LD4 LD20 //实际值上限减去实际值下限求出差值1 MOVR LD8 LD24 -R LD12 LD24 //采集值上限减去采集值下限求出差值2 MOVR LD20 LD16 /R LD24 LD16 //差值1除以差值2求出比例值 Network 2 LD SM0.0 CRET //返回主程序 4、比例值计算子程序变量说明 H和L表示的是实际值上下限所谓实际值就是变送器的量程范围。
例如一个温度传感器的量程是0℃200℃那么将200赋值给H0赋值给L即可。
H_PLC和L_PLC是PLC的采集值范围一般在6400.032000.0。
Outcome:这个是计算结果也就是实际值与采集值的比例。
二、RM417采集模块数值转换程序 RM417模块是我们经常用到的一种模拟量采集模块 技术指标如下 通道数单端16通道 输入信号范围0–5V±5V0-10V0-20mA4-20mA±20mA。
A/D转换分辨率12Bit A/D转换时间20kHZ单通道 处理芯片AT89C2051 通讯方式RS485接口2线制 驱动距离1200米 通讯格式9600-8N1 通讯协议被动查询 输出数据格式12Bit 16进制数据 输出稳定度±.
上一篇:
60控件数组的使用
下一篇:
法律专业开题报告范文