当前位置:文档之家› 工业系统测量实验报告 (1)

工业系统测量实验报告 (1)

outportb(BASE_ADDRESS+11,1);
DRDY=1;
outportb(BASE_ADDRESS+12,1);
while((DRDY!=0))
DRDY=inportb(BASE_ADDRESS+5)&0x10;
hbyte=inportb(BASE_ADDRESS+5)&0x000f;
实验题目:
某一化工生产过程中需要对储气罐内的气体压力进行精度控制及安全保护,压力设定值为8Mpa,其中压力采集使用压阻式压力传感器,压力控制采用电动V型调节球阀调节。此外,当压力高于10Mpa时必须关断调节球阀。请结合本门课所学知识及选用的相关仪器设备,查阅相关文献,给出采用工业控制计算机作为控制器的设计方案。
压阻式压力传感器的主要技术参数:
1、工作电源10v
2、测量范围0~20Mpa
3、全程线性度好
4、灵敏度20mv/Mpa
电动调节球阀的主要技术参数:
1、工作电源:AC220V;
2、控制信号:0~10V. (对应阀的开度:0%-100%).
一、系统总体结构框图:
二、系统工作原理:
该系统属于闭环PID控制系统,利用反馈通道和控制通道对储气罐中的气体压力进行动态快速、稳定和准确的控制。其具体工作原理是工控机首先设定储气罐中理想压强re,然后根据反馈的数字信号和理想值进行比较得到差值e。然后利用PID控制算法根据e算出控制信号的算法控制信号的电压大小u,通过数据通道D/A转换把u这一数据量转换成模拟量,这一模拟量直接控制电动V型调节球阀,进而控制储气罐的气压。然后是反馈通道,首先通过压阻式传感器,得到电压信号,再通过信号调理,调理后的信号经过数据通道A/D转换,转换成数字量,把数字信号送入工控机,工控机再根据这个信号输出符合要求的控制信号对电压V型调节阀进行控制,进而控制储气罐的气压。
lbyte=inportb(BASE_ADDRESS+4)&0x00ff;
return((hbyte<<8)+lbyte);
}
void control(void)
{
yy=AD(10);
y=yy*2;/*由于采集的信号的范围为0—20V,大于0所以再考虑减去2047*/
e=y-r;
if(yy>2047)ida=0;/*由于采集的信号的范围为0—20V,所以10 V对应的二进制数为2047*/
amplitude=amplitude*4095/20.0;
r= amplitude;
}
voidmain()
{ int i;
char ch;
while(1)
{
printf("pleaseinput the Kp,Ki,Kd\n");
scanf("%f,%f,%f",&A,&B,&C);
DA(1,0);
return;
}
int AD(channel)
unsigned short int channel;
{
unsigned short int DRDY;
int hbyte,lbyte;
outportb(BASE_ADDRESS+10,channel);
outportb(BASE_ADDRESS+9,0);
/* AA=Kp +Ki*Ts +Kd/Ts , BB=-(Kp+2*Kd/Ts) , CC=Kd/Ts*/
floatห้องสมุดไป่ตู้AA,BB,CC;
/* sum表示u(k)* /
float sum;
/*ae0,ae1,ae2表示为e(k),e(k-1),e(k-2) */
float ae0=0;
float ae1=0;
通过这次实验,我把工业系统测量上下两册的课本基本上又看了一遍,尤其是工业系统测量下册,我对某些具体部分又具体看了一遍,体会深刻。这道设计题乍看好像比较麻烦,但是仔细分析,其实都是课本知识,课本上甚至有一个类似模型,所以做起来还是比较顺利。这虽然有自己努力的成分,但是同老师的辛勤教学也是分不开的,因此,我对曹老师表示由衷感谢!总之,这门课程使我受益匪浅,它将对我今后专业设计,以及以后工作都会起到很大作用的!
delay(sample_time);
}
DA(1,0);
getch();
delay(100);
printf("Pressnto continue,else to exit\n");
scanf("%c",&ch);
if(ch=='n'||ch=='N')continue;
else break;
}
}
七、实验心得:
unsigned int channel;
int Outputdata;
{
int lbyte,hbyte;
hbyte=(Outputdata>>8)&0x0f;
lbyte=Outputdata&0xff;
outportb(2*(channel-1)+BASE_ADDRESS+4,lbyte);
outportb(2*(channel-1)+BASE_ADDRESS+5,hbyte);
三、传感器测量电路:
四、仪器设备和元器件:
一台工控机、一块数据采集板卡、一个电动V型调节球阀、一个扩散硅压阻式压力传感器、两个10KΩ电阻、两个500KΩ电阻、一个差动放大器、一台稳压电源及导线若干。
五、软件流程图:
六、控制程序:
#include <dos.h>
#include <stdio.h>
#include <conio.h>
float ae2=0;
/* de表示u(k)-u(k-1)* /
float de;
int r,y,yy,e,u;
/*r , y ,e分别为期望值测量值偏差*/
int iad,ida;
int sample_time,amplitude;
/*分别为采样周期和幅值*/
void DA(channel,Outputdata)
/*超过10 V输出控制电压为0否则PID增量控制*/
else{
ae2=ae1;
ae1=ae0;
ae0=e;
de=AA*ae0+BB*ae1+CC*ae2;
sum+=de;
u=sum;
ida=u;
}
DA(1,ida);
}
void parameter(void)
{
DA(1,0);
e=0;
amplitude=8;
#include <bios.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <alloc.h>
#define BASE_ADDRESS 0x220
/* A,B,C分别表示Kp,Ki,Kd*/
float A,B,C;
delay(1000);
clrscr();
parameter();
sample_time=10;
AA=A+B*sample_time+C/sample_time;
BB=-(A+2*C/sample_time);
CC=C/sample_time;
for(i=0;;i++)
{
control();
if(kbhit())break;
相关主题