简单温度控制完整程序
温度控制系统具体源程序
/******************************************************************/
/* 向CH451传输数据 */
ch451_din=1;
ch451_load=1;
ch451_dout=1;
#ifdef USE_KEY
IT1=0; //设置下降沿触发
IE1=0; //清中断标志
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<math.h>
#include<INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
#define CH451_LEFTCYC 0x0301 //设置移动方式-左循
#define CH451_RIGHTMOV 0x0302 //设置移动方式-右移
#define CH451_RIGHTCYC 0x0303 //设置移动方式-右循
//******************************************************
void Set_temp(void) //设定保温点
{ unsigned char i;
ch451_write(CH451_DIG0|showtemp[0]);//显示原来设定温度
void delay1(uchar MS);
unsigned int ReadTemperature(void);
恒温控制算法 c语言版
恒温控制算法c语言版全文共四篇示例,供读者参考第一篇示例:恒温控制算法是一种用于调节系统温度的智能控制算法。
该算法通过采集环境温度数据,并根据设定的目标温度进行计算,实现自动调节系统的输出控制信号,从而维持系统温度稳定在设定值附近。
在工业生产、实验室研究和家用电器等领域都广泛应用了恒温控制算法,以确保系统稳定性和高效性。
C语言是一种通用的编程语言,具有良好的可移植性和高效性。
在实际应用中,恒温控制算法通常会在嵌入式系统或工控系统中实现,而使用C语言编写程序是一种常见的选择。
下面我们将介绍一种基于C 语言的恒温控制算法实现方式。
我们需要定义一些基本的变量和常数。
我们需要设置目标温度值、温度传感器读取间隔、控制信号输出范围等。
接下来,我们将使用C语言编写一个基本的恒温控制算法框架,示例如下:```c#include <stdio.h>#include <stdlib.h>// 定义温度传感器读取间隔,单位为秒#define SENSOR_INTERVAL 1// 定义目标温度值#define TARGET_TEMPERATURE 25// 定义控制信号输出范围#define OUTPUT_MIN 0#define OUTPUT_MAX 100while(1) {// 读取温度传感器数据currentTemperature = readTemperatureSensor();// 计算控制信号outputSignal =calculateControlSignal(currentTemperature);// 等待传感器读取间隔delay(SENSOR_INTERVAL);}return 0;}int calculateControlSignal(int temperature) {// 根据当前温度和目标温度计算控制信号int error = TARGET_TEMPERATURE - temperature;int controlSignal = OUTPUT_MAX * error / TARGET_TEMPERATURE;return controlSignal;}void outputControlSignal(int signal) {// 输出控制信号,此处可与系统的执行机构进行通信实现控制printf("Control signal: %d\n", signal);}void delay(int seconds) {// 延时函数,单位为秒sleep(seconds);}```上述代码实现了一个简单的基于C语言的恒温控制算法。
温度控制C程序
fm=1;
red=1;
green=0;
}
if(b2==0xbf)
{
if(temp>=xiaxian)
temp=xiaxian;
if((temp==xiaxian)&&b2==0xbf)
{
dsreset();
delay(1);
tempwritebyte(0xcc); // 写跳过读ROM指令
tempwritebyte(0x44); //写温度转换指令
}
uint get_temp() //读取寄存器中存储的温度数据
{
uchar i;
i=t/100;
display(0,i);
i=t%100/10;
display(1,i+10);
i=t%100%10;
display(2,i);
}
void tht1()
{
dsreset();
delay(1);
}
else
{
ds=0; //写0
i=8;while(i>0)i--;
ds=1;
i++;i++;
}
}
}
void tempchange(void) //DS18B20开始获取温度并转换
uchar num,num1,num2,num3;
uint temp,shangxian,xiaxian,aa,bb,ee; //定义温度上下限值
uint flag1,b1,t,t1,f,f1,b2,n;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
PLC温度控制
基于组态软件的S7-200 PLC温度控制系统中文摘要随着自动化水平不断提高,人们对自动化的要求也不断提高。
近几年,飞速发展的计算机技术在各行各业得到广泛应用。
但是,以之相对应,传统的工业控制软件有开发周期长,重复使用率低,价格高,修改难等缺点。
随着越来越多的自动化设备不断得到应用,人们对工业控制软件的要求也不断提高,传统的工业控制软件已无法满足用户的要求。
如何方便快捷的使用工业控制软件设计出灵活有效的自动控制系统已成为一个很重要的课题。
本设计以S7-200 PLC为核心,向上,通过PPI通信和上位机通讯;向下,通过模拟量输入输出模块EM235,对温度对象采样与输出控制。
在上位机,使用组态软件MCGS绘出工艺流程、动画效果等所需的组态界面;通过变量与动画对象的连接,使动画效果与实际变量相对应,这样可以很方便的从组态界面上看到系统实际情况并控制PLC的各个参数。
在温度采样上,使用PT100热电阻进行采样,使用脉宽调制电路对输出电压进行控制,进而形成完整的温度控制系统。
本文分别通过硬件的选择、设计、使用,软件的选择、编写等方面详细介绍系统各个模块的原理、设计和使用。
实验证明,以PLC作为控制器的核心,使用组态软件作为上位机,控制PLC,再通过PLC编程控制温度对象,这种设计方式方式可以方便快捷灵活的设计出符合要求的控制系统。
关键字:MCGS组态软件,PPI通讯,PLC ,温度控制系统S7-200 PLC Temperature Control System Based onConfiguration SoftwareAbstractWith the continuous development of the industral automatization,it set higher requirements for the automatics.These years, computer technology have been developing rapidly and are widely used in every walk of life.In the other hand,however,the traditional industry controlling software bring with it critical shortcomings such as long development cycle,low reusability,high price and immobility.As more and more automatic equipments are applied and the requirements for industrial control software are higher and higher,the traditional industry controlling software can’t meet customers’ dema nd any more.How to design a flexible and effective automatic control system fastly and conveniently by using industrial control software has become a very important topic.This thesis focus on S7-200 PLC,which communicating,upward,with upper monitor through PPI,and also sampling temperature and outputing control single downward through Analog I/O module--EM235.Necessary configuration interface such as software process and animation effects are accomplished by using MCGS configuration software in upper monitor;Through connecting variable to animation effects,making animation effects the counterpart of actual variable,thus make it convenient to see actual situation and to control each parameter of PLC in configuration interface.In term of temperature sampling,thermal resistor PT100 are used to take sample,PWM are used to control output voltage,so that a complete temperature control system are formed.This Thesis introduce the principle,design, application of the each system module in detail,which including the type selection,design and application of the hardware,and the selection and writing of the software.Experiments prove that the design solution which using PLC as control core to control temperature object,configuration software as upper monitor to control PLC,could achieve a desirable control system conveniently, quickly and flexiblely.Key words: MCGS configuration software, PPI communication, PLC, temperature control system目录中文摘要 (I)ABSTRACT................................................................................................................................ I I 目录. (III)第1章绪论 (1)1.1温度控制系统研究背景 (1)1.2PLC概况 (2)1.2.1 PLC的定义 (2)1.2.2 PLC的特点 (2)1.2.3 PLC的国内外状况 (3)1.2.4 PLC未来展望 (3)1.3组态软件 (4)1.3.1 组态软件背景 (4)1.3.2 监控组态软件的最新发展情况 (4)1.3.3 组态软件的未来 (6)1.4研究主要内容 (6)第2章硬件电路的设计 (8)2.1系统的组成 (8)2.1.1 控制系统结构图 (8)2.1.2 系统的硬件组成 (9)2.2硬件的连接 (10)第3章PLC程序设计 (12)3.1系统的控制要求 (12)3.2系统工作过程 (12)3.3系统开关量的分配 (14)3.4系统使用内存分配 (15)3.5S7-200PLC自带PID模块设定 (16)3.5.1 PID简介 (16)3.5.2 S7-200 PLC自带PID的设置 (17)3.6PLC程序设计 (18)3.6.1 程序流程图 (18)3.6.2 主程序 (18)3.6.3 子程序 (23)3.7S7-200PLC PPI通讯设置 (24)第4章MCGS组态软件设计 (26)4.1MCGS组态软件概述 (26)4.1.1 MCGS嵌入版组态软件的主要功能 (26)4.1.2 MCGS 软件结构 (28)4.2监控系统功能设计 (29)4.2.1 组态软件的设计要求 (29)4.2.2 组态功能设计 (29)4.3MCGS组态界面设计 (30)4.4设备窗口 (34)4.5变量定义及连接 (36)4.5.1 实时数据库定义 (36)4.5.2 变量连接 (36)4.6运行策略 (37)第5章系统测试 (39)5.1组态测试 (39)5.2系统测试 (41)5.2.1 各种参数的响应曲线图 (41)5.2.2 曲线分析 (44)总结 (45)参考文献 (46)致谢............................................................................................................... 错误!未定义书签。
C语言编写PID温度控制器程序
C语言编写PID温度控制器程序姓名:况武(07421236)班级:自二系别:通控系#include <stdio.h>#include<math.h>struct _pid {int pv; /*integer that contains the process value*/int sp; /*integer that contains the set point*/float integral;float pgain;float igain;float dgain;int deadband;int last_error;};struct _pid warm,*pid;int process_point, set_point,dead_band;float p_gain, i_gain, d_gain, integral_val,new_integ;;/*------------------------------------------------------------------------pid_initDESCRIPTION This function initializes the pointers in the _pid structureto the process variable and the setpoint. *pv and *sp areinteger pointers.------------------------------------------------------------------------*/void pid_init(struct _pid *warm, int process_point, int set_point){struct _pid *pid;pid = warm;pid->pv = process_point;pid->sp = set_point;}/*------------------------------------------------------------------------pid_tuneDESCRIPTION Sets the proportional gain (p_gain), integral gain (i_gain),derivitive gain (d_gain), and the dead band (dead_band) ofa pid control structure _pid.------------------------------------------------------------------------*/void pid_tune(struct _pid *pid, float p_gain, float i_gain, float d_gain, int dead_band){pid->pgain = p_gain;pid->igain = i_gain;pid->dgain = d_gain;pid->deadband = dead_band;pid->integral= integral_val;pid->last_error=0;}/*------------------------------------------------------------------------pid_setintegDESCRIPTION Set a new value for the integral term of the pid equation.This is useful for setting the initial output of thepid controller at start up.------------------------------------------------------------------------*/void pid_setinteg(struct _pid *pid,float new_integ){pid->integral = new_integ;pid->last_error = 0;}/*------------------------------------------------------------------------pid_bumplessDESCRIPTION Bumpless transfer algorithim. When suddenly changingsetpoints, or when restarting the PID equation after anextended pause, the derivative of the equation can causea bump in the controller output. This function will helpsmooth out that bump. The process value in *pv shouldbe the updated just before this function is used.温度PID控制的C语言程序?------------------------------------------------------------------------*/void pid_bumpless(struct _pid *pid){pid->last_error = (pid->sp)-(pid->pv);}/*------------------------------------------------------------------------pid_calcDESCRIPTION Performs PID calculations for the _pid structure *a. This function uses the positional form of the pid equation, and incorporates an integral windup prevention algorithim. Rectangular integration is used, so this function must be repeated on a consistent time basis for accurate control.RETURN V ALUE The new output value for the pid loop.USAGE #include "control.h"*/float pid_calc(struct _pid *pid){int err;float pterm, dterm, result, ferror;err = (pid->sp) - (pid->pv);if (abs(err) > pid->deadband){ferror = (float) err; /*do integer to float conversion only once*/pterm = pid->pgain * ferror;if (pterm > 100 || pterm < -100){pid->integral = 0.0;}else{pid->integral += pid->igain * ferror;if (pid->integral > 100.0){pid->integral = 100.0;}else if (pid->integral < 0.0) pid->integral = 0.0;}dterm = ((float)(err - pid->last_error)) * pid->dgain;result = pterm + pid->integral + dterm;}else result = pid->integral;pid->last_error = err;return (result);}void main(void){float display_value;int count=0;pid = &warm;// printf("Enter the values of Process point, Set point, P gain, I gain, D gain \n");// scanf("%d%d%f%f%f", &process_point, &set_point, &p_gain, &i_gain, &d_gain);process_point = 30;set_point = 40;p_gain = (float)(5.2);i_gain = (float)(0.77);d_gain = (float)(0.18);dead_band = 2;integral_val =(float)(0.01);printf("The values of Process point, Set point, P gain, I gain, D gain \n");printf(" %6d %6d %4f %4f %4f\n", process_point, set_point, p_gain, i_gain, d_gain);printf("Enter the values of Process point\n");while(count<=20){scanf("%d",&process_point);pid_init(&warm, process_point, set_point);pid_tune(&warm, p_gain,i_gain,d_gain,dead_band);pid_setinteg(&warm,0.0); //pid_setinteg(&warm,30.0);//Get input value for process pointpid_bumpless(&warm);// how to display outputdisplay_value = pid_calc(&warm);printf("%f\n", display_value);//printf("\n%f%f%f%f",warm.pv,warm.sp,warm.igain,warm.dgain); count++;}}。
温度控制系统
其中: 调节器第n 次采样输出值; 其中:u (n) :调节器第 次采样输出值;
e(n) :第 n 次采样的偏差值; 次采样的偏差值;
e(n − 1) :第 (n-1)次采样的偏差值; 次采样的偏差值; 次采样的偏差值
PLC 09 3
K p :比例系数; 比例系数; 比例系数 Ts K i = K p :积分系数;(教材式 7- 2 有误) 积分系数;( ;(教材式 有误) Ti Td K d = K p :微分系数。 微分系数。 Ts
1 u (t ) = K p [e(t ) + Ti de(t ) ∫0 e(t )dt + Td dt ]
t
2
PLC 09
PID算法的传递函数 算法的传递函数
G ( s) =
U ( s) 1 = K p [1 + + Td s ] E ( s) Ti s
2.数字PID控制算法 .数字 控制算法
位置式算法: 位置式算法 设采样周期为T 离散化连续PID算法 设采样周期为 s,离散化连续 算法 求和代替积分,差分代替微分) (求和代替积分,差分代替微分) Ts n Td u (n) = K p {e(n) + ∑ e( j ) + [e(n) − e( n − 1)]} Ti j = 0 Ts = K p e(n) + K i ∑ e( j ) + K d ∆e(n)
0.8 y (kT − T ) + 0.2 y (kT )
表明: 表明:在滤波结果中起主要作用的是 y(kT−T)
是前一时刻的滤波值而不是当前时刻的采样值。 前一时刻的滤波值而不是当前时刻的采样值。 而不是当前时刻的采样值
y 例如: 相差1倍 例如: (kT − T ) = 0.5, y ( kT ) = 1, 相差 倍; y (kT ) = 0.8 y (kT − T ) + 0.2 y (kT ) = 0.6
西门子PLC温度控制示例
一、控制要求将被控系统的温度控制在某一范围之间,当温度低于下限或高于上限时,应能自动进行调整,如果调整一定时间后仍不能脱离不正常状态,则采用声光报警,来提醒操作人员注意,排除故障。
系统设置一个启动按钮来启动控制程序,设置绿、红、黄三台指示灯来指示温度状态。
当被控系统的温度在要求范围内,则绿灯亮,表示系统运行正常;当被控系统的温度超过上限或低于下限时,经调整且在设定时间内仍不能回到正常范围,则红灯或黄灯亮,并伴有声音报警,表示温度超过上限或低于下限。
该系统充分利用电气智能平台现有设备,引入PLC和变频器于系统中,将硬件模拟和软件仿真有机结合,有效的运用了平台资源。
本文通过对该系统的阐述,详细介绍了P LC和变频器在模拟量信号监控中的运用。
二、控制系统原理及框图该系统共涉及四大部分,包括温度传感器、变送器、PLC温度监控系统和外部温度调节设备。
首先,选取监控对象,在其内部(比如孵坊)选取四个采样点,利用四个温度传感器分别采集这四点温度后;通过变送器将采集到的四点温度的采样值转换为模拟量电压信号,从而得到四个采样点所对应的电压值,输入到PLC的四个模拟量输入端口;PLC温度监控系统将这四点温度读入后,取其平均值,作为被控系统的实际温度值,将其与预先设定的正常温度范围上下限相比较,得出系统所处状态,并向外部温度调节设备输出模拟量控制信号;外部温度调节设备根据输出的模拟量的大小来调节温度的上升与下降或保持恒温状态。
本文以0~10V来对应温度0~100℃,设置40~60℃为系统的正常温度范围,对应的模拟量电压为4~6V,也即40℃(4V)为下限,60℃(6V)为上限,调节时间设定为20S。
其中,50℃(5V)为我们的温度(电压)基准值。
C51单片机实例温控程序(各模块详解附图
*
*
实际温度超过你设定的温度,蜂鸣器报警。
*
*
*
*
包括各个模块及详细的注释
*
*
方便 C51 单片机入门级别者阅读
*
*--------------------------------------------------------------------------------------*/
#include<stc12c5a.h> typedef unsigned char uchar ; typedef unsigned int uint; sbit heat= P1^3; uchar makesure; uchar tp=0; uchar num=0; uchar ad=0; uchar s60,s61,s62,s63,temp;
/*--------------------------------------------------------------------------------------------------------------------------------------------
*
*
*
该程序为一个完整的温度控制器程序
0x3e,0x3d,0x3d,0x3c,0x3b,0x3b,0x3a,0x39,0x38,0x38,0x37,0x36,0x36,0x36,0x35,0x35,
0x34,0x33,0x33,0x32,0x32,0x31,0x31,0x30,0x30,0x2f,0x2f,0x2e,0x2e,0x2d,0x2d,0x2c,
0x10,0x0f,0x0f,0x0e,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0b,0x0a,0x0a,0x09,
简易水温控制系统
简易水温控制系统 TYYGROUP system office room 【TYYUA16H-TYY-TYYYUA8Q8-一个简易水温控制系统的设计———控制算法设计摘要在工农业生产和日常生活中,对温度的检测与控制始终有着非常重要的实际意义和广泛的实际应用。
为了加深计算机控制理论的理解,故设计一个温度控制系统,该系统主要由温度信号采集与转换模块、主机控制模块、温度控制模块、液晶显示模块四部分组成,控制算法为PID算法。
系统可实现稳态误差小于1℃,最大超调小于1℃,并且调节时间较短,恒定效果好。
温度控制系统的对象存在滞后,它对阶跃信号的响应会推迟一些时间,对自动控制产生不利的影响,因此对温度准确的测量和有效的控制是此类工业控制系统中的重要指标。
温度是一个重要的物理量,也是工业生产过程中的主要工艺参数之一,物体的许多性质和特性都与温度有关,很多重要的过程只有在一定温度范围内才能有效的进行,因此,对温度的精确测量和可靠控制,在工业生产和科学研究中就具有很重要的意义。
本文阐述了过程控制系统的概念,介绍了一个基于数字传感器DS18B20和单片机STC89C52的简单温度控制系统,以电热水壶为被控对象,通过实验的方法建立温度控制系统的数学模型,采用了PID算法进行系统的设计,达到了比较好的控制目的。
该系统可通过液晶显示器LCD1602显示数据或字符,通过按键设定参数;通过DS18B20测温,实现电热杯水温控制;通过PL2303下载端口,实现单机和上位机的通讯。
实验表明该系统能够实现对温度的控制,具有一定的控制精度。
该系统测温电路简单、连接方便,可用于简单温度控制的场合。
关键词:单片机;温度传感器;液晶显示器;PID算法AbstractIn industrial and agricultural production and daily life, the testing and control of temperature has always had very important practical significance and extensive practical application. In order to deepen the understanding of the computer control theory, the design of a temperature control system, the system is mainly composed of temperature signal acquisition and conversion module, host control module, temperature control module, liquid crystal display module four parts, the control algorithm for PID algorithm. System can realize the steady state error is less than 1 ℃, the maximum overshoot less than 1 ℃, and the adjustment time is shorter, constant effect is good. Lagged temperature control system of the object, its response to the step signal will delay some time, produce adverse effect to the automatic control, so effective for accurate temperature measurement and control is an important indicator in the industrial control system. Temperature is an importantphysical quantities, it is also one of the main process parameters in industrial production process, many properties of objects and features are related to temperature, a lot of important process can only be effective in a certain temperature range, thus, accurate measurement and reliable control of temperature, in the industrial production and scientific research has the very vital significance. This paper expounds the concept of process control system, introduced a digital sensor DS18B20 and single chip microcomputer based STC89C52 simple temperature control system, electric kettle for controlled object, and through the experiment the method to establish the mathematical model of temperature control system, using PID algorithm to the design of the system, to achieve the better control. Through DS18B20, the temperature control of the electric heat cup is achieved. Through the PL2303 download port, the communication between the single machine and the above machine is achieved. The experiment shows that the system can control the temperature, and has certain control accuracy. The system is simple and easy to connect, which can be used for simple temperature control.Key words: single chip microcomputer;the temperature sensor;Liquid crystal display;PID algorithm目录一﹑设计任务与要求1.基本要求1L水由1kW的电路加热,要求水温可以在一定范围内由人工设定,并能在环境温度变化时实现自动调整,以保持在设定的温度。
scl编程一百例
scl编程一百例以SCL编程一百例为标题SCL(Structured Control Language)是一种用于编写PLC (Programmable Logic Controller)程序的高级编程语言。
它的语法结构简单明了,逻辑性强,被广泛应用于自动化控制领域。
本文将通过一百个例子来展示SCL编程的灵活性和强大功能。
第一例:开关控制灯泡使用SCL编程实现一个简单的开关控制灯泡的程序。
当开关打开时,灯泡亮起;当开关关闭时,灯泡熄灭。
第二例:计数器使用SCL编程实现一个计数器程序。
通过按下按钮,每按一次计数器加一,同时在HMI(Human Machine Interface)上显示当前计数值。
第三例:温度控制使用SCL编程实现一个温度控制程序。
通过读取温度传感器的数值,根据设定的温度范围控制加热器的开关状态,以保持温度在设定范围内。
第四例:流水线控制使用SCL编程实现一个流水线控制程序。
通过控制电机的开关状态,实现产品在不同工位之间的传送和加工。
第五例:报警系统使用SCL编程实现一个报警系统。
通过监测不同传感器的状态,当某个传感器触发时,触发相应的报警信号。
第六例:自动化包装机使用SCL编程实现一个自动化包装机。
通过控制电机、传感器和气缸的状态,实现产品的自动分拣、包装和封箱。
第七例:电梯控制使用SCL编程实现一个电梯控制程序。
通过读取按钮的信号,根据乘客的需求控制电梯的运行和停靠。
第八例:流量控制使用SCL编程实现一个流量控制程序。
通过读取流量传感器的数值,根据设定的流量范围控制阀门的开关状态,以保持流量在设定范围内。
第九例:定时器使用SCL编程实现一个定时器程序。
通过设定时间参数,实现定时触发相应的操作,如定时开关灯、定时启动机器等。
第十例:电机速度控制使用SCL编程实现一个电机速度控制程序。
通过读取编码器的反馈信号,根据设定的速度参数控制电机的转速。
第十一例:压力控制使用SCL编程实现一个压力控制程序。
编写简单PLC程序示例
编写简单PLC程序示例•PLC基本概念与原理•编写简单PLC程序步骤•示例一:电机启停控制程序•示例二:灯光闪烁控制程序目录•示例三:温度控制程序•总结与展望PLC基本概念与原理PLC (Programmable Logic Cont…可编程逻辑控制器,一种专为工业环境应用而设计的数字运算操作电子系统。
要点一要点二发展历程从最初的替代继电器控制系统,到现如今的复杂自动化控制系统,PLC 经历了多个发展阶段,功能不断扩展,性能不断提升。
PLC 定义及发展历程PLC工作原理及组成部分工作原理PLC采用循环扫描的工作方式,即按照用户程序存储器的顺序,逐条执行用户程序,直到程序结束,然后重新返回第一条指令,开始下一轮新的扫描。
组成部分主要包括中央处理单元(CPU)、存储器、输入/输出模块、电源模块、通信接口等部分。
PLC编程语言与规范编程语言PLC的编程语言主要有梯形图(LD)、指令表(IL)、功能块图(FBD)、顺序功能图(SFC)和结构化文本(ST)五种。
编程规范在编写PLC程序时,需要遵循一定的编程规范,如合理命名变量和程序段、使用注释说明程序功能、避免使用未经初始化的变量等。
同时,还需要注意程序的可读性和可维护性,以便后续的调试和修改。
02编写简单PLC程序步骤明确控制需求与功能确定被控对象及其工艺流程了解被控对象的类型、工作原理和工艺流程,明确需要实现的控制功能。
分析控制要求根据工艺流程,分析被控对象的输入、输出信号,以及它们之间的逻辑关系和时间顺序等控制要求。
选择合适PLC型号及硬件配置选择PLC型号根据控制需求和功能,选择合适的PLC型号,包括CPU类型、I/O点数、存储容量等。
配置硬件根据选定的PLC型号,配置相应的电源、输入/输出模块、通信模块等硬件设备。
03分配内部资源根据需要,为PLC 内部寄存器、定时器、计数器等资源进行合理分配。
01设计输入信号确定PLC 需要接收的输入信号类型、数量和来源,为每个输入信号分配一个唯一的地址。
模糊PID控制温控系统设计C语言程序代码
模糊PID控制温控系统设计C语言程序代码请注意,由于1200字的限制,下面的代码只是模糊PID控制温控系统的一个简单示例。
如果您需要更详细和完整的代码,请提供更多的细节和规格要求。
```c#include <stdio.h>//PID参数float kp = 0.5; // 比例系数float ki = 0.2; // 积分系数float kd = 0.1; // 微分系数//PID变量float integral = 0; // 积分累计float previous_error = 0; // 上一次的误差//温度传感器读取函数,返回当前温度float read_temperatur//实现温度传感器读取的代码逻辑//返回当前温度值//控制器输出函数,将控制信号发送给执行机构void control_output(float control_signal)//实现将控制信号发送给执行机构的代码逻辑int mai//设置设定温度float setpoint = 25.0;//主循环while (1)//获取当前温度float current_temperature = read_temperature(;//计算误差float error = setpoint - current_temperature;//计算PID控制信号float p_term = kp * error;integral += ki * error;float d_term = kd * (error - previous_error);float control_signal = p_term + integral + d_term; //更新上一次的误差previous_error = error;//输出控制信号control_output(control_signal);}return 0;```上述代码中,我们首先定义了PID参数和变量,以及温度传感器读取函数和控制器输出函数。
单片机温度控制系统的总体设计
电流 , 有 一 定 余 量 , 可 能 的情 况 下 尽 量加 大线 并 在 径 。一般 情况 下 , 源 和地 线 应 至 少 保 证 5 r l 电 0 i 以 a 上, 信号 线一般为 1 r l 2 i a 。
12 3 可靠性 设计 ..
单片机应 用系统 的可靠性 是指 在指 定 的应用 环
理 图, 焊接 上 了元件 , 完成 了硬件调试 。根据硬件 的设计和单 片机温度控制 系统所要 实现的功能 , 本文对软件也进
行 了一 一 设 计 , 经过 反 复 的模 拟 运行 、 试 , 改 简 化 了软 件 系统 , 后 形 成 了一 套 完 整 的 程序 系统 。 并 调 修 最 关键词 单 片机 87 A C 8 4 29 D 00
境 和条件下 , 系统 稳定 的工作 能力 。单 片 机 系统 已 逐 步深入到 各个 领 域 , 对单 片机 系 统工 作 的 可靠 性 也就 提出 了越来越 高 的要求 。因为 系统 一旦 出现 问
制。
图 1 单 片 机 温 度控 制 系统 原 理 图 12 硬 件 设 计 .
12 1 硬件原 理设计 .. 硬件 原 理 设 计 的 任 务 是 设 计 并 绘 制 硬 件 原 理
图, 主要 应从 以下 几个方 面考 虑 。
( ) 系统 设计 1用 包括 微处 理器 的选择 、 序存 储 器 的选 择 、 程 晶振 的选 择 、 复位 电路 的设计 、 资源 的分 配使用 等 。 ( ) 程 IO通 道设计 2过 / 包括 开 关 量 IO通 道 , 口电 路 、 口地 址 问 / 接 端
制 系统还 广 泛应 用 于其 他 领 域 , 用 途 很 广 的一 类 是 工业 控制 系统 。温度 控制 系统 常 用来 保 持 温度 恒 定
温度控制程序
#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit DQ=P3^7; //ds18b20 DQ 接口sbit beep=P3^6; //蜂鸣器sbit high=P1^0; //温度上限报警位sbit low=P1^1; //温度下限报警位sbit point=P3^3; //小数点位sbit heat=P3^2; //加热控制位/*数码管段码*/uchar code duan_table[]={0,1,2,3,4,5,6,7,8,9,0x0f};/*小数位对照*/uchar code df_table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};uchar temp_value[]={0x00,0x00}; //从DS18B20读取的温度值uchar display_digit[]={0,0,0,0,0}; //显示的温度数位char warn_temp_hl[2]={70,-20}; //报警温度上下限,ds18b20测温范围是-50~+125bit high_warn=0, low_warn=0; //高低温报警标志bit ds18b20_well = 1; //ds18b20正常uchar current=0; // 温度整数部分uint time0=0; //定时器0延时累加/***************************************************************************** ***************//*延时程序,约为1us*/void delay(uint x){while(--x);}/*ds18b20初始化*/uchar ds12b20_init(){uchar status;DQ=1; delay(8);DQ=0; delay(90);DQ=1; delay(8);status=DQ;delay(100);DQ=1;return status; //初始化成功返回值}/*读一字节*/uchar read_one_byte(){uchar i,dat =0;DQ=1;_nop_();for(i=0;i<8;i++){DQ=0;dat>>=1;DQ=1;_nop_();_nop_();if(DQ) dat|=0x80;delay(30);DQ=1;}return dat;}/*写一字节*/void write_one_byte(uchar dat) {uchar i;for(i=0;i<8;i++){DQ=0;DQ= dat & 0x01;delay(5);DQ=1;dat>>=1;}}/*读取温度值*/void read_temp(){if(ds12b20_init()==1)ds18b20_well=0; //ds18b20故障else{write_one_byte(0xcc); //跳过序列号write_one_byte(0x44); //启动温度转换ds12b20_init(); //初始化write_one_byte(0xcc); //跳过序列号write_one_byte(0xbe); //读取温度寄存器temp_value[0]=read_one_byte(); //温度低8位temp_value[1]=read_one_byte(); //温度高8位warn_temp_hl[0]=read_one_byte(); //报警温度上限warn_temp_hl[1]=read_one_byte(); //报警温度下限ds18b20_well=1;}}/*设置DS18B20温度报警值*/void set_warn_temp_value(){ds12b20_init();write_one_byte(0xcc); //跳过序列号write_one_byte(0x4e); //将设定的温度报警值写入ds18b20write_one_byte(warn_temp_hl[0]); //写温度上限write_one_byte(warn_temp_hl[1]); //写温度下限write_one_byte(0x7e); //精度设置ds12b20_init();write_one_byte(0xcc); //跳过序列号write_one_byte(0x48); //温度报警值出入ds18b20 }/*在数码管上显示温度*/void display_temp(){uchar i;uchar t=150; //延时值uchar ng=0,np=0x01; //负数标志及其位置char signed_current_temp; //有符号的当前温度值/***********************负数转换,取反加一************************/ if((temp_value[1]& 0xf8)==0xf8){temp_value[1]=~temp_value[1];temp_value[0]=~temp_value[0]+1;if(temp_value[0]==0x00) temp_value[1]++;ng= 1;}/****************************************************************/ display_digit[0]=df_table[temp_value[1] &0x0f]; //小数温度部分current=((temp_value[0]&0xf0)>>4)|((temp_value[1]&0x07)<<4); //获取温度整数部分signed_current_temp=ng? -current:current; //有符号的当前温度值high_warn=signed_current_temp>=warn_temp_hl[0] ? 1:0;low_warn=signed_current_temp<=warn_temp_hl[1] ? 1:0; //高低温报警标志位/************整数部分分解************/display_digit[3]=current/100;display_digit[2]=current%100/10;display_digit[1]=current%10;if(display_digit[3]==0){display_digit[3]=10; //高位为0不显示np=0x01; //调整负号位置if(display_digit[2]==0){display_digit[2]=10;np=0x02;}}for(i=0;i<30;i++){point=1;P0=duan_table[display_digit[0]];P2=0X08; delay(t);P2=0X00; //小数位P0=duan_table[display_digit[1]];point=0;P2=0X04; delay(t);P2=0X00; //个位及小数点point=1;P0=duan_table[display_digit[2]];P2=0X02; delay(t);P2=0X00; //十位显示point=1;P0=duan_table[display_digit[3]];P2=0X01; delay(t);P2=0X00; //个位显示if(ng==1){//point=1;P0=0X0c; //译码器显示不了负号,用这个代替P2=np; //显示负号delay(t);P2=0X00; //负号没有显示}}}/*串口发送字符函数*/void uart_sendchar(uchar sch){SBUF = sch;while(TI==0);TI=0;}/*串口发送字符串函数*/void uart_sendstring(uchar *s) {uchar c;for (;;){c = *s;if ( c == '\0' ) break;s++;uart_sendchar(c);}}/*定时器中断,控制报警声音*/ void time_warn() interrupt 1 {TH0=-1000/256;TL0=-1000/256;beep=!beep;if(++time0==4){time0=0;if(high) { high=~ high; heat=1; }else high=1;if(low) { low=~low; heat=0;}else low=1;}}/*串口接收中断函数*/void uart_receive() interrupt 4{int value;if(RI) //接收到一字节{RI=0; //清除串口中断标志位value=SBUF;if(value>0) warn_temp_hl[0]=SBUF;if(value<0) warn_temp_hl[1]=SBUF;}}/****************************主函数*********************************/ void main(void){uchar *s="please set :/n HI_Alarm= /n LO_Alarm=";heat=1;ET0=1;ES=1;EA=1;SCON=0X50;PCON=0X00;TMOD=0X21;TH0=-1000/256;TL0=-1000/256;TH1=0XFD;TL1=0XFD;TR0=0;TR1=1;high=1;low=1;point=1;set_warn_temp_value();read_temp();delay(50000);delay(50000);uart_sendstring(s);while(1){read_temp();if ( ds18b20_well ){if(high_warn==1 || low_warn==1) TR0=1;else TR0=0;display_temp();}else{P0=P2=0X00;}}。
温度控制_源程序
void Dec_temper();
/*降低设置的温度 */
void LED_data_BCD(char Disp_dat);
/*数码管显示温度 */
void Ds18b20_delay(uint count);
/* DS18B20延时程序 */
T1int_init();
while(1)
{
if (B_set_T0) //T0定时读取温度标志
{
EA=0; //关总中断
B_set_T0=0;
if(!B_set) //上下限设置状态时,取消温度读取
sbit DQ = P3 ^ 7; //DS18B20数据接口
//全局变量寄存器
uchar M_LED1, M_LED2, M_LED3, M_LED4; //4位LED显示寄存器
uchar LED_DISP_TAB[] = //LED编码表
void Ds18b20_reset(void);
/*DS18B20复位初始程序:根据DS18B20要求对其进行复位初始控制 */
bit Ds18b20_readbit(void) ;
/*DS18B20位读子程序: 从DS18B20取出一位数据 */
#define M_temper_MAX 125 //最高温度
//位控制电平定义
#define B_RED_OFF 1 //红灯灭(高电平)
#define B_RED_ON 0 //红灯亮(低电平)
#define B_BUZZ_OFF 1 //蜂鸣器
按键次数=2:显示下限温度并处于操作状态
按键次数=3:保存设置值并退出
PID温度控制的PLC程序设计(梯形图语言)
PID温度控制的PLC程序设计(梯形图语言)PID温度控制的PLC程序设计温度控制是许多机器的重要的构成部分。
它的功能是将温度控制在所需要的温度范围内,然后进行工件的加工与处理。
PID控制系统是得到广泛应用的控制方法之一。
在本文中,将详细讲叙本套系统。
l 系统组成本套系统采用Omron的PLC与其温控单元以及Pro-face的触摸屏所组成。
系统包括CQM1H-51、扩展单元TC-101、GP577R以及探温器、加热/制冷单元。
l 触摸屏画面部分(见图1-a)1-a如图所见,数据监控栏内所显示的002代表现在的温度,而102表示输出的温度。
如按下开始设置就可设置参数。
需要设置的参数有六个,分别是比例带、积分时间、微分时间、滞后值、控制周期、偏移量。
它们在PLC的地址与一些开关的地址如下所列。
比例带: DM51积分时间: DM52微分时间: DM53滞后值: DM54控制周期: DM55偏移量: DM56数据刷新: 22905l PLC程序部分002:PID的输入字102:PID的输出字[NETWORK]Name="Action Check" //常规检查[STATEMENTLIST]LD 253.13 //常ONOUT TR0CMP 002 #FFFF //确定温控单元是否完成初始化字串1AND NOT 255.06 //等于OUT 041.15 //初始化完成LD TR0AND 041.15OUT TR1AND NOT 040.10 //不在参数设置状态MOV DM0050 102 //将设置温度DM50传送给PID输出字LD TR1MOV 002 DM0057 //将002传送到DM57[NETWORK]Name="Setting Start"//设置开始[STATEMENTLIST]LD 253.13OUT TR0AND 229.05 //触摸屏上的开始设置开关DIFU 080.05 //设置微分LD TR0AND 041.15AND 080.05SET 040.01 //开始设置标志位1SET 040.10 //开始设置标志位2[NETWORK]Name="Poportion"//比例带设置[STATEMENTLIST]LD 040.01OUT TR0AND NOT 042.01MOV #C110 102 //读输出边与输入边的比例带CMP 002 #C110 //比较输入字是否变成C110AND 255.06 //等于SET 042.01 //设置比例带标志LD TR0AND 042.01MOV DM0051 102 //将比例带的设定值写入输出字CMP 002 DM0051 //是否写入AND 255.06 字串4RSET 040.01 //复位标志1RSET 042.01 //复位比例带标志SET 040.02 //向下继续设置标志[NETWORK]Name="Integral"//积分时间设置[STATEMENTLIST]LD 040.02OUT TR0AND NOT 042.02MOV #C220 102 //读输出边与输入边的积分CMP 002 #C220 //比较输入字是否变成C220AND 255.06SET 042.02 //设置积分标志LD TR0AND 042.02MOV DM0052 102 //将积分的设定值写入输出字CMP 002 DM0052 //是否写入AND 255.06RSET 040.02RSET 042.02SET 040.03 //向下继续设置标志[NETWORK]Name="differential"//微分时间设置[STATEMENTLIST]LD 040.03OUT TR0AND NOT 042.03MOV #C330 102 //读输出边与输入边的微分CMP 002 #C330 //比较输入字是否变成C330 AND 255.06SET 042.03 //设置微分标志LD TR0AND 042.03MOV DM0053 102 /将微分的设定值写入输出字CMP 002 DM0053 //是否写入字串3AND 255.06RSET 040.03RSET 042.03SET 040.04 //向下继续设置标志[NETWORK]Name="Hysteresis"//滞后值设置[STATEMENTLIST]LD 040.04OUT TR0AND NOT 042.04MOV #C440 102 //读输出边与输入边的滞后值CMP 002 #C440 //比较输入字是否变成C440 AND 255.06SET 042.04 设置滞后值标志LD TR0AND 042.04MOV DM0054 102 /将滞后值的设定值写入输出字CMP 002 DM0054 //是否写入AND 255.06RSET 040.04RSET 042.04SET 040.05 //向下继续设置标志[NETWORK]Name="Period"//控制周期设置[STATEMENTLIST]LD 040.05OUT TR0AND NOT 042.05MOV #C550 102 //读输出边与输入边的控制周期CMP 002 #C550 //比较输入字是否变成C550AND 255.06SET 042.05 //设置控制周期标志LD TR0AND 042.05MOV DM0055 102 将控制周期的设定值写入输出字CMP 002 DM0055 是否写入AND 255.06RSET 040.05RSET 042.05SET 040.06 //向下继续设置标志[NETWORK]Name="Shift"//偏移量设置[STATEMENTLIST]LD 040.06OUT TR0AND NOT 042.06MOV #C660 102 //读输出边与输入边的偏移量CMP 002 #C660 //比较输入字是否变成C660AND 255.06SET 042.06 //设置偏移量标志LD TR0AND 042.06MOV DM0056 102 //将偏移量的设定值写入输出字CMP 002 DM0056 //是否写入AND 255.06RSET 040.06RSET 042.06SET 040.00[NETWORK]Name="Return"//返回[STATEMENTLIST]LD 040.00OUT TR0AND NOT 042.00MOV #C070 102 //读输入边的处理值CMP 002 #C070 比较输入字变成C070AND 255.06SET 042.00 //返回标志LD TR0AND 042.00MOV DM0050 102 将设定温度值写入输出字RSET 040.00RSET 042.00RSET 040.10以上是本套系统的全部内容,经过反复试验,此系统可以维持温度在1°C之间变化。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
P2 = dat;
ep = 1;
ep = 0 ;
} void lcd_init()
{//LCD初始化设定
//function set
//function set
//display on/off
〃除LCD的显示内容
//entry mode set
delay⑴;
/*函数名称:display()
BOOL lcd_bz()
rs = 0 ; rw = 1 ; ep = 1;result = (BOOL)(P2&0x80); ep = 0 ;
return result;
} void lcd_wcmd(uchar cmd)
{//写入指令数据到LCD
while(lcd_bz());
rs =
:0;
rw:
void lcd_wcmd(uchar);
BOOL lcd_bz();
void lcd_pos(uchar);
void lcd_wdat(uchar);
void display(uchar,uchar *);
void lcd_init();
void longdelay(uchar s);
void keyscan(void);
delay2(80);〃精确延时大于480us
DQ = 1;〃拉高总线
delay2(10);
x=DQ;〃稍做延时后如果x=0则初始化
成功x=l则初始化失败
delay2(5);
DQ=1;
//return (x);
}
^2^ <2><2^ ^2> <S> ^2>^2^ ^2> ^2> ^2^ <2> ^2> ^S><2> ^2>^2^ ^2> <2^ ^S> ^2^ <2> ^2> <2^ ^2> <S> ^2>
unsigned int setl=30,set2=10;
unsigned char flag=O;
sbit DQ =P1A7;〃定义通信端口
sbit fengmingqi=P 1A1;
sbit jidianqi=PlA5;
codeuchar
mayuan[]={,0Vl\,2,;3,;475,;6,;7,;8,;9,};
f rj^ rj> rjw rj> rjw rj> rj>/
〃读一个字节
unsigned char ReadOneChar(void) {
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i—)
{
DQ = 1;
delay2(5);
DQ = 0; //给脉冲信号
}
void delayl(uchar a) {
while(a-);
} void delay2(unsigned int i)〃延时函数
{
while(i—);
}
void Imt_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
delay2(8);〃稍做延时
DQ = 0;〃单片机将DQ拉低
lcd_pos(pos);
for(i=0 ;i<9;i++)
lcd_wdat(*q); q++;
}
void putchar(uchar weizhi,uchar da)
{
delay (2);
lcd_pos(weizhi);
lcd_wdat(da);
}
〃延时函数
uchar i;
while(ms—)
{
for(i = 0 ; i<250;i++);
=0;
ep =
=0;
P2:
=cmd ;
ep =
=1;
ep =
=0;
void lcd_pos(uchar pos)
{〃设定显示位置
lcd_wcmd(pos I 0x80);
}
void lcd_wdat(uchar dat)
{〃写入字符显示数据到LCD
while(lcd_bz());
rs = 1 ; rw = 0 ;
Jr|> <l> rj>rj> rj> r|> rj> rj> rj>r|> r|> rj> rj>r|> rj> e^> rj> rj>rj> rj> r|> rj> rj>
<f> <9><f> <f> <Y>k{><f> <f><f> <9>k|>%f><f> <f> <Y>
rjw rjw rjwrj> rjw rjw rjwrj> rjw rjw rjwrj> rjw rjw rjwrj> rjw rjw rjwrj> r|>
<f> <f> <f> <f>
rj>rj> rj> rj>rj>rj> rj> rj>rj>rj> rj> rj>rj>rj> rj> rj>rj>rj> rj> rj> rj>
code uchar aa[]={Hwendu is:''};
code uchar bb[]={nsheding:
typedef bit BOOL ;
unsigned char k,dat_wr[8],dat_rd[8];
void putchar(uchar weizhi,uchar da); void delay(uchar);
简单温度控制完整程序
#include<reg52.h>
#include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit rs = P3A4 ;
sbit rw = P3A5 ;
sbit ep = P3A7 ;
dat»=l;
DQ = 1;//给脉冲信号
if(DQ)
datl=0x80;
delay2(5);
DQ = 1;
return(dat);
}
^2^ ^2^ ^2> <2>^2> ^S><2> ^2^ ^2^ ^2^ ^2^ <2> <2^ ^2> ^2>^S> ^2>
/ rj> rj> rj> <j> rj> rj> rj> rj> rj> e^> rj^ rj> rj> rj^ rj> rj> rj^ rj> rj> rj> rj> rj> rj> <j> rj> rj> rj> rj> rj> e^> rj^ rj> rj>
功能:在LCD±显示数组的数据调用:lcd_wcmd()9lcd_pos()
入口参数:pos写入的位置,q指向要写入的数 据所在的数组 返回值:无
*/
void display(uchar pos, uchar *q) {
uchar i;
//lcd_wcmd(0x01) ; //clear
//delay(lO);