基于PLC的触摸屏温度控制系统_第1页
基于PLC的触摸屏温度控制系统_第2页
基于PLC的触摸屏温度控制系统_第3页
基于PLC的触摸屏温度控制系统_第4页
基于PLC的触摸屏温度控制系统_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE

PLC技术应用项目说明书

设计题目

学院机械工程学院

2015年1月9日

课程设计任务书

兹发给2011级机电X班班学生张XX课程设计任务书,内容如下:

设计题目:基于PLC的温度控制系统

应完成的项目:

(1)选题的背景和意义;

(2)明确设计任务,拟定总体设计方案(有机械结构的要进行结构设计,三维软件建模);

(3)硬件设计,传感器、PLC(和电机)选型,设计信号采集、转换电路,画出PLC端口分配图、接线控制端子连接图;

(4)软件设计,编写控制程序流程图(或重要程序),设计人机界面;

(5)课程设计说明书1份。

参考资料以及说明:

(1)金发庆.传感器技术与应用(第二版)[M].北京:机械工业出版社,2004

(2)钟肇新.可编程控制器原理及应用[M].广州:华南理工大学出版社,2003

(3)常晓玲.电气控制系统与可编程控制器[M].北京:机械工业出版社,2004

(4)盖超会,阳胜峰.三菱PLC与变频器、触摸屏综合培训教程[M].北京:中国电力出版社,2011

(5)濮良贵,陈国定,吴立言.机械设计[M].北京:高等教育出版社,2013

本设计任务书于2014年12月19日发出,应于2015年1月9日前完成,然后进行答辩。

指导教师签发2014年12月19日

课程设计评语:

课程设计总评成绩:

指导教师签字:

年月日

目录

TOC\o"1-3"\h\u

12027

前言

2

2344

第一章系统总体方案

3

9095

第二章系统硬件设计

5

15077

2.1PLC选择

5

24006

2.1.1FX2N-48MRPLC

5

9445

2.1.2FX2N-2AD特殊功能模块

6

16442

2.1.3FX2N-2DA特殊功能模块

7

23636

2.2硬件电路设计

8

15659

2.2.1温度值给定电路

8

15591

2.2.2温度检测电路

11

20957

2.2.3过零检测电路

12

9645

2.2.4晶闸管电功率控制电路

13

17559

2.2.5脉冲输出通道

14

24953

2.2.6报警指示电路

15

992

2.2.7复位电路

15

16307

第三章系统软件设计

16

14486

3.1程序设计

16

18569

3.2系统程序流程图

17

27084

3.3控制系统控制程序的开发

18

4060

3.3.1温度设定

18

18582

3.3.2A/D转换功能模块的控制程序

18

1114

3.3.3标度变换程序

19

11047

3.4.4恒温控制程序(PID)设计

20

17573

3.4.6显示程序

26

14830

3.4.7恒温指示程序

26

4729

3.4.8报警程序

27

9880

第四章总结与展望

28

31785

4.1总结

28

17438

4.2展望

28

22258

参考文献

29

20555

附录系统程序(梯形图)

30

摘要

在工业生产过程中,加热管温度控制是十分常见的。温度控制的传统方法是人工—仪表控制。其重复性差,工艺要求难以保证,人工劳动强度大。目前大多数使用微机代替常规控制。以微机为核心控制系统虽然成本较低,但微机的可靠性和抗干扰性较差而使其硬件设计较复杂。而以PLC为核心的控制系统,虽然成本较高,但PLC本身就有很强的抗干扰性和可靠性,因而系统的硬件设计也简单得多。

本设计以工业水温加热为背景,设计以三菱FX2N-48MRPLC为控制器,使用电热偶为温度传感器的温度控制系统,本文主要内容包括:PLC选择,温度控制电路设计分析,加热管控制电路设计分析,PLC程序编写,采用PID控制。

关键词:加热温度控制PLCPID

第一章绪论

随着时代的发展,当今的技术日趋完善,竞争也愈演愈烈;传统的人工的操作已不能满足于目前的制造业前景,也无法保证更高质量的要求和提升高新技术企业的形象。

在生产实践中,自动化给人们带来了极大的便利和产品质量上的保证,同时也减轻了人员的劳动强度,减少了人员上的编制。在许多复杂的生产过程中难以实现的目标控制、整体优化、最佳决策等,熟练的操作工、技术人员或专家、管理者却能够容易判断和操作,可以获得满意的效果。人工智能的研究目标正是利用计算机来实现、模拟这些智能行为,通过人脑与计算机协调工作,以人机结合的模式,为解决十分复杂的问题寻找最佳的途径。

可编程序控制器是一种数字运算操作的电子系统,专为在工业环境下应用而设计,它采用可编程序的存储器,用来在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作命令,并通过数字式、模拟式的输入和输出,控制各种类型的机械或生产过程。

在工业生产过程中,加热管温度控制是十分常见的。温度控制的传统方法是人工—仪表控制。其重复性差,工艺要求难以保证,人工劳动强度大。目前大多数使用微机代替常规控制。以微机为核心控制系统虽然成本较低,但微机的可靠性和抗干扰性较差而使其硬件设计较复杂。而以PLC为核心的控制系统,虽然成本较高,但PLC本身就有很强的抗干扰性和可靠性,因而系统的硬件设计也简单得多。所以,相比较于微机控制,PLC控制在过程控制方面更具有优势。这种系统控制精度高、重复性好、自动化程度高,可以大大提高产品质量和减轻工人的劳动负担。本文介绍了以PLC为核心实现PID算法的温度控制系统的设计方法。

第二章系统总体方案

根据设计任务和要求,采用常规PID控制的温度控制系统结构如图1-1所示。

图1-1常规PID温度控制系统的结构

对应图1-1的系统结构,确定总体设计方案如图1-2所示:

图1-2总体设计方案

该总体方案主要由以下几个部分组成

(1)触摸屏:主要功能是设定和显示相应的温度值,以及停止和开始功能。

(2)PLC:主要完成PID调节功能以及数据变换。

(3)测温电路和A/D模块:主要功能是0-10V温度测量信号经FX2N-A/D转换成数字信号输入PLC处理。

(4)输出调节电路:主要功能是把PLC处理运算发出的控制信号通过脉宽调制装置输出脉冲信号对加热管进行加热

系统工作原理:温度变送器将加热管温度变换为模拟信号,经低通滤波器滤掉干扰信号后送放大器,将信号放大后送A/D模块转换为数字量送PLC,数字量经标度变换,得到实际加热管温度。数字控制器根据恒温给定值Q0与实际加热管温度Q的偏差e(k)按积分分离PID控制算法,得到输出控制量u(k),控制晶闸管导通时间,调节加热管温度的变化使之与给定恒温值一致,达到恒温控制目的。当达到恒温值、输入错误或系统发生故障时,系统发出报警信号,同时用GT1040-QBBD-C触摸屏对加热管温度进行实时显示和温度给定输入。

第二章系统硬件设计

2.1PLC选择

根据设计方案的分析,系统设计需要使用A/D转换器和D/A转换器来完成温度采样。在课程学习中,我们学习了三菱的FX系列PLC,因此,选择三菱FX2N(基本I/O点数为24)和FX2N-2AD特殊功能模块。

2.1.1FX2N-48MRPLC

FX2N系列PLC是FX系列中最先进的系列、具有高速处理及可以扩展大量满足单个需要的特殊功能模块等特点。它由基本单元、扩展单元、扩展模块等构成。用户存储器容量可扩展到16K步。I/O点最大可扩展到256点。它有27条基本指令,其基本指令的执行速度超过了很多大型PLC。三菱FX2N-48MRPLC,为继电器输出类型,其输入、输出点数皆为是24点,可扩展模块可用的点数为48~64,内附8000步RAM。其内部资源如下:

(1)输入继电器X(X0~X27,24点,八进制)

(2)输出继电器Y(Y0~Y27,24点,八进制)

(3)辅助继电器M(M0~M8255)[通用辅助继电器(M0~M499)]

(4)状态继电器(S0~S999)

(5)定时器T(T0~T255)(T0~T245为常规定时器)

(6)计数器C(C0~C255)

(7)指针(P/I)见表2-1和表2-2

(8)数据寄存器D(D0~D8255)(D0~D199为通用型)

表2-1定时器中断标号指针表

输入编号

中断周期(ms)

中断禁止特殊辅助继电器

I6XX

在指针名称的XX部分中,输入10~99的整数。I610为每10ms执行一次定时器中断

M8056

I7XX

M8057

I8XX

M8058

表2-2输入中断标号指针表

输入编号

指针编号

中断禁止特殊辅助继电器

上升中断

下降中断

X0

I001

I000

M8050

X1

I101

I100

M8051

X2

I201

I200

M8052

X3

I301

I300

M8053

X4

I401

I400

M8054

X5

I501

I500

M8055

注:M8050~M8058=“0”表允许;M8050~M8058=“1”表禁止。

2.1.2FX2N-2AD特殊功能模块

FX2N-2AD为模拟量输入模块,有两个模拟量输入通道(分别为CH1、CH2),每个通道都可进行A/D转换,将模拟量信号转换成数字量信号,其分辨率为12位。其模拟量输出性能如表2-3所示。

表2-3模拟量输出性能表

项目

电压输入

电流输入

模拟量输入范围

DC:0~+10V(输入电阻200KΩ)

绝对最大输入:-0.5V,+15V

DC:4~+20mA(输入电阻250Ω)

绝对最大输入:-2mA,+60mA

数字输出

12位二进制

分辨率

2.5mV(10V/4000)

1.25mV(5V/4000)

4μA(20mA/4000)

总体精度

±1%(满量程0~10V)

±1%(满量程4~20mA范围)

转换速度

2.5ms/通道(与顺空程序同步动作)

所有数据转换和参数设置的调整可通过FROM/TO指令完成。同时在编程过程中重点用到了BFM数据缓冲存储器,具体分布情况如表2-4所示。

表2-4FX2N-2AD缓冲存储器的功能及分配

BFM

编号

内容

b15-b8

b7-b4

b3

b2

b1

b0

#0

保留

输入数据的当前值(低8位)

#1

保留

输入数据的当前值(高4位)

#2-#16

保留

#17

保留

模拟到数字转换开始

模拟到数字转换通道

#18

保留

BFM说明:

BFM#0:存储由BFM#17指定通道的输入数据当前值低8位数据,当前值数据以二进制存储。

BFM#1:存储由BFM#17指定通道的输入数据当前值高4位数据,当前值数据以二进制存储。

BFM#17:b0:指定由模拟到数字转换的通道(CH1,CH2)。

b0=0指定CH1

b0=1指定CH2

b1:由0→1时A/D转换过程开始

2.1.3FX2N-2DA特殊功能模块

FX2N-2DA为模拟量输入模块,有两个模拟量输出通道(分别为CH1、CH2),每个通道都可进行D/A转换,将数字量信号转换成模拟量信号,其分辨率为12位。其模拟量输出性能如表2-3所示。

表2-3模拟量输出性能表

项目

电压输出

电流输出

模拟量输入范围

DC:0~+10V(输入电阻200KΩ)

绝对最大输入:-0.5V,+15V

DC:4~+20mA(输入电阻250Ω)

绝对最大输入:-2mA,+60mA

数字输出

12位二进制

分辨率

2.5mV(10V/4000)

1.25mV(5V/4000)

4μA(20mA/4000)

总体精度

±1%(满量程0~10V)

±1%(满量程4~20mA范围)

转换速度

2.5ms/通道(与顺空程序同步动作)

所有数据转换和参数设置的调整可通过FROM/TO指令完成。同时在编程过程中重点用到了BFM数据缓冲存储器,具体分布情况如表2-4所示。

表2-4FX2N-2DA缓冲存储器的功能及分配

BFM

编号

内容

b15-b8

b7-b4

b3

b2

b1

b0

#0

保留

输入数据的当前值(低8位)

#1

保留

输入数据的当前值(高4位)

#2-#16

保留

#17

保留

模拟到数字转换开始

模拟到数字转换通道

#18

保留

BFM说明:

BFM#0:存储由BFM#17指定通道的输入数据当前值低8位数据,当前值数据以二进制存储。

BFM#1:存储由BFM#17指定通道的输入数据当前值高4位数据,当前值数据以二进制存储。

BFM#17:b0:指定由模拟到数字转换的通道(CH1,CH2)。

b0=0指定CH1

b0=1指定CH2

b1:由0→1时A/D转换过程开始

2.2硬件电路设计

2.2.1温度值给定电路

为了能同时使用触摸屏和开关按键实现温度给定值输入,触摸屏程序利用GTDesigner3设计触摸屏温度给定值输入、触摸屏温度显示、触摸屏启动控制、触摸屏停止控制以及指示灯指示如下图所示;本系统还设计了十个开关按键,作为温度给定值的输入端口,接收十进制数(触摸屏程序和开关按键电路分别如下图所示)。给定值范围为0~100℃,若输入值超过给定值范围,系统会发出报警信号(亮红灯)。

触摸屏温度给定输入:(右图第一行数字即为温度给定输入):

触摸屏启动控制:(左图第一个方形图形)

触摸屏停止控制:(左图第二个方形图形)

触摸屏指示灯指示:

恒温完成指示信号(Y0004)

当前温度大于给定温度(Y0005)

给定温度超出范围报警(Y0006)

按键设计电路如图2-1所示:SB1为温度值输入允许,SB2~SB11分别表示十进制数0~9。先按下温度值给定允许开关SB1,然后再输入给定温度值,先按下的数字为高位上的数值,后按下的数字为低位上的数值。比如,先后按下开关SB5、SB2和SB2,则表示给定温度值为300℃,并送PLC数据寄存器保存。

2.2.2温度检测电路

温度检测是温度控制系统的一个很重要的环节,直接关系到系统性能。在PLC温度控制系统中,温度的检测不仅要完成温度到模拟电压量的转换还要将电压转换为数字量送PLC。其一般结构如图2-2所示。

温度变送器

图2-2温度检测基本结构

温度变送器将测温点的温度变换为模拟电压,其值一般为mA级,需要放大为满足A/D转换要求的电压值。然后送PLC的A/D转换模块进行A/D转换,得到表示温度的电压数字量,再用软件进行标度变换与误差补偿,得到测温点的实际温度值。

本系统利用热电偶完成加热管温度检测(热端检测加热管温度,冷端置于0℃温度中)、FX2N-2AD模块一个通道实现A/D转换。加热管温度检

测与放大电路由热电偶、低通滤波、信号放大和零点迁移电路四部分组成。其电路如图2-3所示。

图2-3加热管温度检测与放大电路

图中,R1、C1完成低通滤波,R2、RP、2CW51组成零点迁移电路,加热管温度检测元件采用镍铬—镍铝热电偶,分度号为EU-2,查分度表可得,当温度为0~100℃时,输出电势为0~4.095mV。检测信号经二级放大后送FX2N-2AD模块,第一级放大倍数为50,第二级放大倍数为11.2

零点迁移,其输出电压为

式中,为零点迁移值。根据设计要求,给定温度值为0~100℃,本系统选取测温范围为0~100℃,将0℃作为测温起点(零点)。调整多圈电位器RP,使=50*11.2=560mV,当加热管温度为0℃时,=0mV,=560mV,于是=0。经零点迁移后,加热管温度为0~100℃时,=0~4.095mV,=0~9.94V,A/D转换后的数字量为0~4000。

2.2.3过零检测电路

按设计要求,要求过零检测电路在每个电源周期开始时产生一个脉冲,作为触发器的同步信号,其设计电路如图2-4(a)所示。

图2-4(a)过零检测电路

图中,GND为+5V电源地,LM339为过零比较器.LM339集成块内部装有四个独立的电压比较器,共模范围很大;差动输入电压范围较大,大到可以等于电源电压。二极管用作LM339输入保护。电路的工作波形如图2-4(b)所示。

图2-4(b)过零检测电路的工作波形图

2.2.4晶闸管电功率控制电路

晶闸管是晶体闸流管的简称,也叫可控硅。它是一种半控型器件,是一种可以利用控制信号控制其导通而不能控制其关断的电力电子器件。它的关断完全是由其在主电路中承受的电压和电流决定的。也即说,若要使已导通的晶闸管关断,只能利用外加反向电压和外电路的作用使流过晶闸管的电流降到接近零的某一数值以下。

晶闸管控制电热元件消耗的电能有两种方法,一是采用移相触发控制输入电压的大小,二是采用过零触发控制输入电压加到电热元件上的周波数。由于移相触发控制会产生较大的谐波干扰信号“污染”电网,因此采用过零触发控制。又由于本电路所控制的电阻炉只有一根电阻丝,功率也不大,因此,本系统采用单相电源供电,电源的通断由二个晶闸管反并控制,如图2-5所示。

图2-5电功率控制电路

这种控制方法的原理是:各晶闸管的触发角α恒为0º,使得一个周期内电源均加在电热元件上,通过控制一个控制周期内晶闸管导通周波数,就可控制电热元件消耗的电能。根据电热炉的数字模型可知,温度的增量与它消耗的电能成正比,而电热炉消耗的电能与晶闸管导通周波数成正比,因此,晶闸管导通周波数n与控制输出控制量u(k)的关系为

n=K*u(k)

式中,K=/为比例系数(约为1),为一个控制周期内的电源周波数,温度偏差不同,则u(k)、n不同,电热炉消耗的电能亦不同,达到了根据温度偏差调节输入电能,保证炉温按要求变化的目的。

晶闸管由正向导通到关断时,由于空穴积蓄效应,晶闸管反向阻断能力的恢复需要一段时间。在这段时间里,晶闸管元件流过反向电流,接近终止时,很大,它与线路电感共同作用产生的电压L*可能损坏晶闸管,必须采取保护措施,在晶闸管两端并联阻容吸收装置。

设计电路中的元器件的选择如下:

(1)R和C的选择

阻容吸收装置的参数按晶闸管ITN根据经验值选取为:

R=80ΩC=0.15μF

电容C的交流耐压为:

电阻R的功率应满足:

实选电容0.15μF/630V一只,电阻80Ω/0.5W一只。

(2)快速熔断器FU的选择

快速熔断器是专门用来保护晶闸管的,其熔体电流按下式选取:

式中,5/6为修正参数,为保证可靠与选用方便,一般取。实选熔体额定电流为20A的RLS-50螺旋式快速熔断器二只,分别与二只晶闸管串联,其额定电压为500V。

(3)晶闸管的选择

电阻炉的额定功率为4KW,电源电压为220V,故负载电流IL=18.2A。由于每个晶闸管只导通半个电源周波且本系统采用过零触发(α=0°),流过每个晶闸管的平均电流为9.1A。关断时,承受正反向峰值电压为,考虑到晶闸管的过载能力小及环境温度的变化等因素,晶闸管的额定电流应为:

额定电压应为:

根据以上计算,主回路的二只晶闸管选择为KP20-10(参数为:20A,1KV,0.1A,3V)

2.2.5脉冲输出通道

由于PLC有很强的抗干扰性和可靠性,且FX2N-48MR-001为继电器输出——2A/1点(KP20-10晶闸管的触发电流和电压分别为0.1A和3V),因而FX2N-48MR-001的输出点能可靠地触发晶闸管导通,而无须设计光电隔离和功率放大。脉冲输出通道电路如图2-6所示。

图2-6脉冲输出通道

图中,初始时,Y0和Y1都为低电平,当系统检测到从X0输入的同步信号为高(低)电平时,Y0(Y1)由低电平变高电平,输出电流值为2A的触发电流,去触发晶闸管VT1(VT2)导通;当X0从高电平变低电平(从低电平变高电平)时,Y0(Y1)脉冲结束,电路恢复为初态。

2.2.6报警指示电路

按设计要求,报警指示电路设计了一个恒温指示(绿灯)灯、故障报警(红灯)和输入出错报警(黄灯),完成指示、报警功能。显示及给定温度值均由GT1040-QBBD-C触摸屏完成。设计电路如图2-7所示。

图2-7报警指示电路

2.2.7复位电路

复位电路由一个开关SB12完成开/关功能,当按下开关SB12时系统启动,正常运行,执行任务;当断开SB12时,系统停止运行,不执行任何任务。设计电路如图2-8所示。

图2-8复位电路

系统软件设计

PLC程序输入可以通过手持编程器、专用编程器或计算机完成。但由于手持编程器在程序输入或阅读理解分析时比较烦琐;专用编程器价格高,通用性差,而计算机除了可以进行PLC的编程外,还可作为一般计算机的用途,兼容性好,利用率高。因此,利用计算机进行PLC编程和通信更具优势。本次软件设计即是利用计算机编程,在三菱PLC编程软件GTDESINER下完成程序编写和通信。

3.1程序设计

本设计系统采用三菱FX系列PLC控制。其输入、输出地址表如表2-6所示。另外,内存分配如表3-1所示:

表3-1内存分配表

储存器

特定意义

储存器

特定意义

D0

A/D转换数字量结果

D30

u(k)

D4

温度给定值Q0

D31

u(k-1)

D5

加热管温度Q

D32

e(k)

D25

触发周波数n

D33

e(k-1)

D26

晶闸管允许触发标志

D34

e(k-2)

D27

采样周期计数器

D35

D100~D121

数据缓冲区

D36

D29

断偶计数器

D37

D38

十键输入指定存储元件

3.2系统程序流程图

初始化

温度给定

输入值错误

错误报警

Y

N

A/D转换

断偶报警

转换值>4000

Y

N

标度变换

实际温度显示

给定值与实际温度比较

差值e(k)=0

Y

差值e(k)>10

N

恒温指示

n=240

Y

N

等待中断

数字调节器

保存n晶闸管触发准备

等待中断

图3-1系统程序流程图

3.3控制系统控制程序的开发

针对本系统要求控制系统实现恒温控制的功能,温度在(0~100℃)范围内任意设定(X10~X21输入给定值),经过积分分离PID调节,实现恒温控制,同时有恒温指示和断偶报警信号指示。特编写以下控制程序。(总程序见附录二)。

3.3.1温度设定

本设计系统利用十键数字输入指令,设定恒温给定值。程序如图3-2所示。

图3-2读取温度给定

当温度设定允许(X1=1)时,执行十键输入指令,输入给定温度值,送D38,当给定值在0~100℃范围内时,将给定值(D38)再送D4保存。否则输入出错报警(Y6=1)。

3.3.2A/D转换功能模块的控制程序

温度检测硬件电路给定的A/D转换通道号CH1,完成加热管温度的A/D转换。为了提高抗干扰能力,程序采用了数字滤波措施,滤波方法是取8次输入的平均值作为检测结果。在此过程中设定炉温的模拟量送入FX2N-2AD模块1#通道(CH1)。根据三菱公司的用户手册中的模块编号规则,FX2N-2AD直接连PLC的为0号模块。A/D转换功能的PLC程序如图3-3所示:

图3-3A/D转换程序

本程序设计以4.8s为一个控制周期,当控制周期到才读取A/D转换结果。

控制周期计时中断服务程序(I610)如图3-4所示。

图3-4计时中断程序

I610为每计时10ms便自动执行一次中断。当计时10ms到,系统执行I610中断服务程序,控制周期计数器(D27)加1,将D27与480比较,若相等则M331为ON(4.8s计时到),同时将控制周期计数器(D27)清0。

3.3.3标度变换程序

另外针对本次设计所选择的功能模块FX2N-2AD的输入输出特性,有0~100℃经零点迁移后所对应的数字量为0~4000(0~10V对应的数字量),通过模数转换得到的温度的数字量存入D0,根据此特性,输入数据对应的模拟量应该为数字量占4000的百分比,即实际温度=100*数字量/4000=数字量*1/40。从而得到实际的温度的数值而送入D5,同时将所得的余数与0.5℃所对应的数字量(约等于20)进行比较,如果大于20,则将D5中的数加一,反之则不变。如此就完成了对采样温度值的标度变换。标度变换功能的PLC程序如图3-5所示:

图3-5标度变换程序

3.4.4恒温控制程序(PID)设计

PID算法

根据给定的工艺要求,温度控制分为三段:自由升温段、恒温段和自然降温段。自然降温无需控制和检测温度,自由升温只需监视加热管温度是否到达恒温值,只有恒温段需要控制与检测加热管温度。用于恒温控制的调节器有多种形式,如大林算法、PD调节、PID调节、开关调节等,本系统选用实际中切实可行的积分分离PID调节,它能有效地减小系统的超调和稳态误差。

PID调节器的位置式控制方程为:

式中,e(t)为t时刻给定的恒温值Q0与实际加热管温度Q之差。将其离散化,得

式中,T、、、分别为采样周期、微分时间常数、积分时间常数和比例时间常数;e(k)为本次采样时Q0与Q之差。

令(3-1)

则有式(3-2)

式中,、、分别为调节器的比例、积分、微分系数(待定参数)。

为了减少在线整定参数的数目,常常假定约束条件,以减少独立变量的个数,本次设计选取

T≈0.1

≈0.5

≈0.125

其中,为纯比例控制时的临界振荡周期。将它们代入式(3-1)。即有

因此,对四个参数的整定便简化成了对一个参数的整定。因而使调试较为简单方便。

恒温控制程序

为了减少超调和消除振荡现象,当自由升温小于给定的恒温值10℃,系统就开始进行恒温控制,恒温控制采用积分分离PID调节。系统的控制算法如下:

当加热管温度Q大于给定恒温值10℃时,系统全速升温,令u(k)=240,240为一个控制周期(4.8s)的工频电源周波数。

当e(k)<5℃时,按式(3-2)进行PID调节。

除上述两种情况外,系统均进行PD调节,去掉(3-2)中的e(k)。

温度数字调节器程序框图如图3-6所示。

温度数字调节器的PLC程序框图和梯形图分别如图3-7所示。

将实际温度(D5)与设定值(D4)比较得到的差值e(k)存于D32。若e(k)大于10,则送240给D30(u(k));若e(k)小于10而大于5时,则进行PD算式运算(去掉(4-2)中的积分项e(k)的剩余项)。若e(k)小于5时则进行PID算式运算(实现式(4-2))。最后保存u(k),更新u(k-1)、e(k-1)和e(k-2)以备下次运算。

开始

e(k)=Q0-Q

e(k)>10

NY

计算PD项

u(k)=u(k-1)+kp[e(k)-e(k-1)]+kd[e(k)-2e(k-1)+e(k-2)]

e(k)<5

u(k)=240

NY

计算PD+I项(k)=u(k)+kie(k)

u(k)->u(k-1)

e(k-1)->e(k-2)

e(k)->e(k-1)

保存u(k)

结束

图3-6数字控制器流程

图3-7数字控制器程序

3.4.5数字触发器程序设计

数字触发器组成与原理

数字触发器按照调节器输出的控制量控制输送给加热管的能量。由于晶闸管移相触发存在很大的谐波干扰“污染”电网,本系统采用过零触发,触发器的组成如图3-8所示。

图3-8过零数字触发器组成

工作原理如下:数字触发器准备程序将控制量u(k)变换为晶闸管的导通周波数n,且当n>0时,置晶闸管允许触发标志为1。准备程序在每个控制周期执行一次。当电源正半波到来时(由低电平变高电平),若晶闸管允许触发标志为1,则在Y0端产生一个触发脉冲,经光电隔离和功率放大后触发晶闸管VT1导通,使电源正半波加到电阻丝上。当电源负半波到来时(由高电平变低电平),若晶闸管允许触发标志为1,则在Y1端产生一个触发脉冲,经光电隔离和功率放大后触发晶闸管VT2导通,使电源负半波加到电阻丝上,使负载得到一个完整的电压波形。程序还完成晶闸管已导通周波数计数工作,当已导通周波数等于n时,表示本控制周期内向电阻丝输送的能量已达到控制要求,将晶闸管允许触发标志清0,Y0、Y1不再输出触发脉冲。

数字触发器程序

数字触发器程序由两部分组成:准备程序和触发程序

其程序框图如图3-9和图3-10所示。

电源在一个控制周期(4.8s)有240个周波,而u(k)的最大亦也240,因此,晶闸管在一个控制周期的导通周波数n与控制量u(k)的关系为

n=u(k)

脉冲输出通道要求PLC输出的触发脉冲为正脉冲,故程序先使Y0(或Y1)由0变1,延时约0.01s后(半个周波时间),再将Y0(或Y1)置0,在Y0(或Y1)端形成一个宽约0.01s的正脉冲。

图3-9晶闸管触发准备程序图3-10数字触发程序

数字触发器功能的PLC程序如下图3-11所示:

当X2为ON时,将u(k)送D25作触发周波数n,将其与0比较,若n大于0,则置位D26(触发允许标志)允许触发并将Y0和Y1置1。X0为电源周波信号输入端,当允许晶闸管触发时,当X0的上升沿(下降沿)到时Y0(Y1)输出1,延时半个周波时间后Y0(Y1)输出0,即在Y0(Y1)端口产生正脉冲去触发晶闸管导通。同时每完成一个周波触发,将D25减1。直到D25为0止。D25为0而采样周期未到D26被清0,系统将不再对晶闸管输出触发脉冲。

图3-11数字触发器程序

3.4.6显示程序

本设计系统用GT1040-QBBD-C触摸屏显示温度(本系统设定温度范围为0~100℃),

显示程序如图3-12所示:

触摸屏温度显示(右图第二行数字即为温度显示):

3.4.7恒温指示程序

当实际温度与温度给定值相等时,系统发出恒温指示信号(Y4=1,绿灯亮)。恒温指示程序如图3-13所示:

图3-13恒温显示程序

将实际温度值(D5)与温度设定值(D4)进行比较,如果相等则令Y4为ON,恒温指示灯亮。同时令触发脉冲个数为0,系统将不对电阻炉加热。

3.4.8报警程序

将A/D转换的数字量与4000比较,若连续两次检测到A/D转换的数字量大于4000,则表示断偶,系统输出断偶报警信号,Y5为ON,亮红灯。如图3-14所示。

图3-14报警程序

第四章总结与展望

4.1总结

本文主要是针对“基于PLC的模拟量控制”的研究。

PLC完成对系统现场的控制过程。通过功能模块实现了对模拟量、开关量、脉冲量的转换,从而达到了对上述变量的控制,以及显示、报警等功能。同时,控制系统现场对变量的变换有着直观的显示作用。

本文所做的主要工作:

(1)温度设定由输入端口获得(十进制输入)或由触摸屏实现温度设定,具备实时显示和报警功能,人机界面良好。

(2)PLC编程实现积分分离PID算法。

(3)基于PLC模拟量控制和过程控制实现温度控制。

(4)过零触发晶闸管实现电功率的控制.

通过此次课设,让我了解了plc梯形图、指令表、顺序功能图有了更好的了解,也让我了解了关于plc设计原理。有很多设计理念来源于实际,从中找出最适合的设计方法。

虽然本次课程设计是要求自己独立完成,但是,彼此还是脱离不了集体的力量,遇到问题和同学互相讨论交流。多和同学讨论。我们在做课程设计的过程中要不停的讨论问题,这样,我们可以尽可能的统一思想,这样就不会使自己在做的过程中没有方向,并且这样也是为了方便最后设计和在一起。讨论不仅是一些思想的问题,还可以深入的讨论一些技术上的问题,这样可以使自己的处理问题要快一些,少走弯路。多改变自己设计的方法,在设计的过程中最好要不停的改善自己解决问题的方法,这样可以方便自己解决问题

4.2展望

由于PLC的诸多优点,也已经在工控领域得到了广泛引用,但是,还没有形成系统化、理论化的开发方法。随着可编程序控制器技术的发展,PLC已越来越多地应用于对模拟量的控制,所以应增加D/A,A/D转换及运算功能的仿真。同时,要尽量抑制干扰,尤其是控制回路之外的干扰。

过程控制系统开发工具功能的不断完善,使过程控制将具有更广阔的应用前景,对我国国民生产生活各个领域的自动化水平的提高都有着重要的意义。

随着微机的软硬件技术和网络通讯技术的飞速发展,工业自动化领域发生了革命性的技术进步。而PLC及工控机作为工业控制的设备基础,通过技术的不断革新,在工业控制中的地位日益加强,并且成为工业控制技术进步的主要工具。

参考文献

[1]朱江主编.可编程控制技术[M].哈尔滨:哈尔滨工业大学出版社,2013

[2]康华光主编.模拟电子技术基础[M].第五版.北京:高等教育出版社,2006

[3]阎石主编.数字电子技术基础[M].第五版.北京:高等教育出版社,2006

[4]三菱公司编.三菱FX系列可编程序控制器特殊功能模块用户手册,2001

[5]三菱公司编.三菱可编程序控制器应用101例,1994

[6]三菱触摸屏用户使用手册

[7]王本琪.基于组态王的PLC锅炉温度控制系统的设计.青岛:中国海洋大学.2012

[8]王振.基于PLC的锅炉供热控制系统的设计.大连:大连海事大学.2008

附录系统程序(梯形图)

附录资料:不需要的可以自行删除

C语言全总字符串函数

函数名:stpcpy

功能:拷贝一个字符串到另一个

用法:char*stpcpy(char*destin,char*source);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

charstring[10];

char*str1="abcdefghi";

stpcpy(string,str1);

printf("%sn",string);

return0;

}

函数名:strcat

功能:字符串拼接函数

用法:char*strcat(char*destin,char*source);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

chardestination[25];

char*blank="",*c="C++",*Borland="Borland";

strcpy(destination,Borland);

strcat(destination,blank);

strcat(destination,c);

printf("%sn",destination);

return0;

}

函数名:strchr

功能:在一个串中查找给定字符的第一个匹配之处

用法:char*strchr(char*str,charc);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

charstring[15];

char*ptr,c='r';

strcpy(string,"Thisisastring");

ptr=strchr(string,c);

if(ptr)

printf("Thecharacter%cisatposition:%dn",c,ptr-string);

else

printf("Thecharacterwasnotfoundn");

return0;

}

函数名:strcmp

功能:串比较

用法:intstrcmp(char*str1,char*str2);

看Asic码,str1>str2,返回值>0;两串相等,返回0

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*buf1="aaa",*buf2="bbb",*buf3="ccc";

intptr;

ptr=strcmp(buf2,buf1);

if(ptr>0)

printf("buffer2isgreaterthanbuffer1n");

else

printf("buffer2islessthanbuffer1n");

ptr=strcmp(buf2,buf3);

if(ptr>0)

printf("buffer2isgreaterthanbuffer3n");

else

printf("buffer2islessthanbuffer3n");

return0;

}

函数名:strncmpi

功能:将一个串中的一部分与另一个串比较,不管大小写

用法:intstrncmpi(char*str1,char*str2,unsignedmaxlen);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*buf1="BBB",*buf2="bbb";

intptr;

ptr=strcmpi(buf2,buf1);

if(ptr>0)

printf("buffer2isgreaterthanbuffer1n");

if(ptr<0)

printf("buffer2islessthanbuffer1n");

if(ptr==0)

printf("buffer2equalsbuffer1n");

return0;

}

函数名:strcpy

功能:串拷贝

用法:char*strcpy(char*str1,char*str2);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

charstring[10];

char*str1="abcdefghi";

strcpy(string,str1);

printf("%sn",string);

return0;

}

函数名:strcspn

功能:在串中查找第一个给定字符集内容的段

用法:intstrcspn(char*str1,char*str2);

程序例:

#include<stdio.h>

#include<string.h>

#include<alloc.h>

intmain(void)

{

char*string1="1234567890";

char*string2="747DC8";

intlength;

length=strcspn(string1,string2);

printf("Characterwherestringsintersectisatposition%dn",length);

return0;

}

函数名:strdup

功能:将串拷贝到新建的位置处

用法:char*strdup(char*str);

程序例:

#include<stdio.h>

#include<string.h>

#include<alloc.h>

intmain(void)

{

char*dup_str,*string="abcde";

dup_str=strdup(string);

printf("%sn",dup_str);

free(dup_str);

return0;

}

函数名:stricmp

功能:以大小写不敏感方式比较两个串

用法:intstricmp(char*str1,char*str2);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*buf1="BBB",*buf2="bbb";

intptr;

ptr=stricmp(buf2,buf1);

if(ptr>0)

printf("buffer2isgreaterthanbuffer1n");

if(ptr<0)

printf("buffer2islessthanbuffer1n");

if(ptr==0)

printf("buffer2equalsbuffer1n");

return0;

}

函数名:strerror

功能:返回指向错误信息字符串的指针

用法:char*strerror(interrnum);

程序例:

#include<stdio.h>

#include<errno.h>

intmain(void)

{

char*buffer;

buffer=strerror(errno);

printf("Error:%sn",buffer);

return0;

}

函数名:strcmpi

功能:将一个串与另一个比较,不管大小写

用法:intstrcmpi(char*str1,char*str2);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*buf1="BBB",*buf2="bbb";

intptr;

ptr=strcmpi(buf2,buf1);

if(ptr>0)

printf("buffer2isgreaterthanbuffer1n");

if(ptr<0)

printf("buffer2islessthanbuffer1n");

if(ptr==0)

printf("buffer2equalsbuffer1n");

return0;

}

函数名:strncmp

功能:串比较

用法:intstrncmp(char*str1,char*str2,intmaxlen);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*buf1="aaabbb",*buf2="bbbccc",*buf3="ccc";

intptr;

ptr=strncmp(buf2,buf1,3);

if(ptr>0)

printf("buffer2isgreaterthanbuffer1n");

else

printf("buffer2islessthanbuffer1n");

ptr=strncmp(buf2,buf3,3);

if(ptr>0)

printf("buffer2isgreaterthanbuffer3n");

else

printf("buffer2islessthanbuffer3n");

return(0);

}

函数名:strncmpi

功能:把串中的一部分与另一串中的一部分比较,不管大小写

用法:intstrncmpi(char*str1,char*str2);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*buf1="BBBccc",*buf2="bbbccc";

intptr;

ptr=strncmpi(buf2,buf1,3);

if(ptr>0)

printf("buffer2isgreaterthanbuffer1n");

if(ptr<0)

printf("buffer2islessthanbuffer1n");

if(ptr==0)

printf("buffer2equalsbuffer1n");

return0;

}

函数名:strncpy

功能:串拷贝

用法:char*strncpy(char*destin,char*source,intmaxlen);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

charstring[10];

char*str1="abcdefghi";

strncpy(string,str1,3);

string[3]='';

printf("%sn",string);

return0;

}

函数名:strnicmp

功能:不注重大小写地比较两个串

用法:intstrnicmp(char*str1,char*str2,unsignedmaxlen);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*buf1="BBBccc",*buf2="bbbccc";

intptr;

ptr=strnicmp(buf2,buf1,3);

if(ptr>0)

printf("buffer2isgreaterthanbuffer1n");

if(ptr<0)

printf("buffer2islessthanbuffer1n");

if(ptr==0)

printf("buffer2equalsbuffer1n");

return0;

}

函数名:strnset

功能:将一个串中的所有字符都设为指定字符

用法:char*strnset(char*str,charch,unsignedn);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

char*string="abcdefghijklmnopqrstuvwxyz";

charletter='x';

printf("stringbeforestrnset:%sn",string);

strnset(string,letter,13);

printf("stringafterstrnset:%sn",string);

return0;

}

函数名:strpbrk

功能:在串中查找给定字符集中的字符

用法:char*strpbrk(char*str1,char*str2);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

char*string1="abcdefghijklmnopqrstuvwxyz";

char*string2="onm";

char*ptr;

ptr=strpbrk(string1,string2);

if(ptr)

printf("strpbrkfoundfirstcharacter:%cn",*ptr);

else

printf("strpbrkdidn'tfindcharacterinsetn");

return0;

}

函数名:strrchr

功能:在串中查找指定字符的最后一个出现

用法:char*strrchr(char*str,charc);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

charstring[15];

char*ptr,c='r';

strcpy(string,"Thisisastring");

ptr=strrchr(string,c);

if(ptr)

printf("Thecharacter%cisatposition:%dn",c,ptr-string);

else

printf("Thecharacterwasnotfoundn");

return0;

}

函数名:strrev

功能:串倒转

用法:char*strrev(char*str);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

char*forward="string";

printf("Beforestrrev():%sn",forward);

strrev(forward);

printf("Afterstrrev():%sn",forward);

return0;

}

函数名:strset

功能:将一个串中的所有字符都设为指定字符

用法:char*strset(char*str,charc);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

charstring[10]="123456789";

charsymbol='c';

printf("Beforestrset():%sn",string);

strset(string,symbol);

printf("Afterstrset():%sn",string);

return0;

}

函数名:strspn

功能:在串中查找指定字符集的子集的第一次出现

用法:intstrspn(char*str1,char*str2);

程序例:

#include<stdio.h>

#include<string.h>

#include<alloc.h>

intmain(void)

{

char*string1="1234567890";

char*string2="123DC8";

intlength;

length=strspn(string1,string2);

printf("Characterwherestringsdifferisatposition%dn",length);

return0;

}

函数名:strstr

功能:在串中查找指定字符串的第一次出现

用法:char*strstr(char*str1,char*str2);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

char*str1="BorlandInternational",*str2="nation",*ptr;

ptr=strstr(str1,str2);

printf("Thesubstringis:%sn",ptr);

return0;

}

函数名:strtod

功能:将字符串转换为double型值

用法:doublestrtod(char*str,char**endptr);

程序例:

#include<stdio.h>

#include<stdlib.h>

intmain(void)

{

charinput[80],*endptr;

doublevalue;

printf("Enterafloatingpointnumber:");

gets(input);

value=strtod(input,&endptr);

printf("Thestringis%sthenumberis%lfn",input,value);

return0;

}

函数名:strtok

功能:查找由在第二个串中指定的分界符分隔开的单词

用法:char*strtok(char*str1,char*str2);

程序例:

#include<string.h>

#include<stdio.h>

intmain(void)

{

charinput[16]="abc,d";

char*p;

/*strtokplacesaNULLterminator

infrontofthetoken,iffound*/

p=strtok(input,",");

if(p)printf("%sn",p);

/*AsecondcalltostrtokusingaNULL

asthefirstparameterreturnsapointer

tothecharacterfollowingthetoken*/

p=strtok(NULL,",");

if(p)printf("%sn",p);

return0;

}

函数名:strtol

功能:将串转换为长整数

用法:longstrtol(char*str,char**endptr,intbase);

程序例:

#include<stdlib.h>

#include<stdio.h>

intmain(void)

{

char*string="87654321",*endptr;

longlnumber;

/*strtolconvertsstringtolonginteger*/

lnumber=strtol(string,&endptr,10);

printf("string=%slong=%ldn",string,lnumber);

return0;

}

函数名:strupr

功能:将串中的小写字母转换为大写字母

用法:char*strupr(char*str);

程序例:

#include<stdio.h>

#include<string.h>

intmain(void)

{

char*string="abcdefghijklmnopqrstuvwxyz",*ptr;

/*convertsstringtouppercasecharacters*/

ptr=strupr(string);

printf("%sn",ptr);

return0;

}

函数名:swab

功能:交换字节

用法:voidswab(char*from,char*to,intnbytes);

程序例:

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

charsource[15]="rFnakoBlrnad";

chartarget[

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论