电气装备计算机控制系统设计实验报告.docx
《电气装备计算机控制系统设计实验报告.docx》由会员分享,可在线阅读,更多相关《电气装备计算机控制系统设计实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
电气装备计算机控制系统设计实验报告
专业:
电气工程及其自动化
姓名:
学号:
日期:
地点:
实验报告
课程名称:
电器装备及其计算机控制技术指导老师:
成绩:
__________________
实验名称:
电气装备计算机控制系统设计实验类型:
________________同组学生姓名:
__________
一、实验目的和要求(必填)二、实验内容和原理(必填)
三、主要仪器设备(必填)四、操作方法和实验步骤
五、实验数据记录和处理六、实验结果与分析(必填)
七、讨论、心得
一、实验目的
1、理解数据采集系统的硬件原理,了解数据采集卡的技术指标和驱动函数;
2、掌握PCI1202数据采集卡获取数据的方法,数据采集软件编写的方法;
3、掌握计算机控制技术,学会电气装备计算机控制系统的软件和硬件设计,熟悉控制系统的调试方法。
二、实验内容
1、使用数据采集系统进行各路数据采集,对数据采集的结果进行记录和分析;
2、利用采集卡数据输入输出功能设计一个简易控制三相异步电机正反转的控制系统。
三、实验原理
在电气装备等各个应用领域都存在着数据采集、存储、处理与控制问题,常常需要对电流、电压、温度、压力、流量、位移等模拟量进行采集,通过模/数(A/D)转换,数据处理,最后把结果显示出来或者进行相应的控制处理。
数据采集系统的信号采集部分一般包括信号输入和调理(信号衰减/放大与滤波)、采样/保持、模/数(A/D)转换、数据存储(RAM)等,再通过接口传输到计算机,由计算机进行信号的分析处理和显示。
三相异步电机的转子是被定子的三相绕组通入三相交流电产生的旋转磁场拖动的,三相绕组合成的旋转磁场向哪个方向转,转子就向哪个方向转。
所以,只要将三相电源线的任意两根线换接,电机定子的旋转磁场就被改变了,那么电机转子的转动方向也将跟随旋转磁场的方向改变。
四、实验步骤
1.研究并设计电机的数据采集及控制主电路;
图1实验接线图
如图1所示,主电路由交流接触器KM1控制电机正转,KM2控制电机反转。
控制电路中,中间继电器C1的常开触点控制KM1线包的供电,实现电机正转;C2的常开触点KM2线包的供电,实现电机反转。
KM1、KM2线包回路中分别串接KM2、KM1的常闭触点,实现互锁。
需要电机正转时,向C1线包供电,使C1常开触点闭合,则KM1线包得电,KM1主触点闭合,同时,KM1的常闭触点打开,使KM2线包无法得电。
需要电机反转时,向C2的线包供电,使C1常开触点闭合,则KM2的线包得电,KM2主触点闭合。
同时,KM2的常闭触点打开,使KM1线包无法得电,实现正反转的电气互锁。
停车时,停止向C1、C2的线包供电,则控制回路断电,KM1、KM2线包均失电,主触点全部打开,电机失去三相电压供电,自由停车。
2.根据设计的电路完成实验系统的硬件接线;
3.通过软件平台进行编程、调试实现对三相异步电机的数据采集及正反转控制;
五、实验结果与分析
图2电机正转实验波形
由图2可知,C相电压传感器有故障,无法工作,只测得两相电压波形。
此时异步电机的三相电压相序应该是A→B→C,可从波形中看出A相超前B相电压,超前角度大约为120°。
图3电机反转实验波形
由图3可知,A相电压大概落后B相电压约120°,此时异步电机的三相电压相序应该是A→C→B,观察电机转向,与上述电机正转后的转向相反。
六、注意事项
1.连线检查无误后方可上电,接线尽量用短线;
2.因为异步电机高压直接启动容易过流报警,所以可将交流输入电压调至160V左右;
3.主接触器线圈工作时需要220V交流电源(三相输出电压U、V、W为可调电压,其下方三个输出电压U’、V’、W’为不可调电压,其任意两相之间线电压均为380V,每一相对地相电压为220V,因此可选择其中一相作为主接触器电源,切不可用两相之间的线电压!
)
4.数字隔离端子板配有多个继电器,这些继电器的通断由数码管显示,上位机输入的数字量可以由数码管以对应的二进制格式表示,因此应该弄清实验中使用的端子板继电器对应哪些数字为通,哪些数字为断。
5.实验中未出现过流过压报警时,电机的通断电通过上位机软件实现。
6.在设计电机正反转控制电路时必须注意是否会造成电源短路!
七、思考和练习
1.继电器与接触器的区别是什么?
继电器:
用来保证电力系统设备的安全运行,属于二次设备。
交直流方式都有,以根据一定的电气量或非电气量进行整定,当被保护设备或者回路出现故障,达到整定值就启动出口,接通跳闸回路,断路器跳开故障回路,减小事故范围。
用于控制电路、电流小,无灭弧装置,可在电量或非电量的作用下动作。
接触器:
一般作为控制回路主体执行元件使用,触点分为主辅,触点数量少,触电容量大,通断负荷能力大,大容量通常有灭弧罩增强开断能力。
用于主电路、电流大,有灭弧装置,一般只能在电压作用下动作。
2.如何理解传感器输出信号的标度转换?
计算机控制系统的各种物理参数有不同的量纲,这些参数经A/D转换后,编程数字量信息输出,这个数字量虽然代表参数值的大小,但不一定等于原来带有量纲的参数值,必须将它转换成原来参数的真实值才能进行显示,打印或使用,这种转换就是标度转换。
信号标度转换的主要任务是把传感器输出信号变换成与AD转换器输入量程相适应的大小,以提高分辨率。
若传感器输出信号的最大值大于AD转换输入量程,显然AD转换器无法接受;但若传感器输出信号的最大值远远小于AD转换器输入量程,就不能充分利用AD传感器,精度就不是很高。
标度转换的主要步骤一般是信号放大,即将传感器输出的小信号放大到适合于AD转换器或V/F转换的大电压信号。
3.阐述继电器的自锁与互锁原理。
自锁就是利用继电接触器是的辅助常开触点来代替启动按钮,继电接触器闭合后,常开触点也闭合,就好像一直按下启动按钮一样,常开触点和启动按钮是并联在一起的;
继电器互锁是利用继电接触器是的辅助触点,可以通过把彼此的常闭触点串接到对方的控制线圈回路中实现。
比如继电器2的线圈通过继电器1的常闭触电以后才接通电源,那么如果接触器1一旦动作,那么接触器2就不会动作。
4.数字输入输出通道中常用的驱动和隔离及功率放大器件有哪些?
驱动与电平转换:
TTL电路、ECL电路、HCL电路、CMOS电路等;
隔离器件:
隔离变压器、继电器和光电耦合器件等;
功率放大器件:
电磁继电器、大功率晶体管、IGBT、大功率三极管、固态继电器等。
八、实验程序
//---------------------------------------------------------------------------
#include
#pragmahdrstop
#include"Unit2.h"
#include"P1202.h"
#include"P1202u.cpp"
//---------------------------------------------------------------------------
#pragmapackage(smart_init)
#pragmaresource"*.dfm"
TForm1*Form1;
WordTotalBoards;
//---------------------------------------------------------------------------
__fastcallTForm1:
:
TForm1(TComponent*Owner)
:
TForm(Owner)
{
}
//---------------------------------------------------------------------------
void__fastcallTForm1:
:
FormCreate(TObject*Sender)
{
WordRetValue;
RetValue=P1202_DriverInit(&TotalBoards);
if(RetValue!
=0)
{
ShowMessage("ErrorCode:
"+IntToStr(RetValue)
+"\nDriverInitialError!
!
");
Button1->Enabled=False;
}
eSelect->Text="0";
eTotal->Text=IntToStr(TotalBoards);
UpDown1->Max=(Word)(TotalBoards-1);
UpDown1->Min=0;
if(TotalBoards<2)
{
UpDown1->Enabled=False;
eSelect->Enabled=False;
}
}
//---------------------------------------------------------------------------
void__fastcallTForm1:
:
Button2Click(TObject*Sender)
{
Close();
}
//---------------------------------------------------------------------------
void__fastcallTForm1:
:
Button1Click(TObject*Sender)
{
WordRetValue,DF,DW,AC,k,Dodata;
floatDA;
wAdNumber=(Word)StrToInt(eC0AdNums->Text);
DF=(Word)StrToInt(eC0DaFreq->Text);
DW=(Word)StrToInt(eC0DaWave->Text);
AC=(Word)StrToInt(eC0AdClock->Text);
DA=StrToFloat(eC0DaAmp->Text);
for(k=0;k<=31;k++)
{
wChannel[k]=0;
wConfigCode[k]=0;
}
wChannel[0]=1;
wChannel[1]=1;
wChannel[2]=1;
XMax->Caption=IntToStr(wAdNumber);
XMax2->Caption=XMax->Caption;
XMax3->Caption=XMax->Caption;
RetValue=P1202_ActiveBoard((Word)StrToInt(eSelect->Text));
if(RetValue!
=0)
{
ShowMessage((AnsiString)"ActiveBoradError!
!
"+"\nErrorCode:
"+IntToStr(RetValue));
return;
}
eC0DO->Text="2";
Dodata=(Word)StrToInt("0x"+eC0DO->Text);
RetValue=P1202_Do(Dodata);
if(RetValue!
=0)
{
ShowMessage((AnsiString)"DigitalOutputError!
!
"+"\nErrorCode:
"+IntToStr(RetValue));
return;
}
RetValue=P1202_M_FUN_3(DF,DW,DA,AC,wAdNumber,wChannel,wConfigCode,fAdBuf,-10,10);
if(RetValue!
=0)
{
ShowMessage((AnsiString)"M_Fun_1Error!
!
"+"ErrorCode:
"+IntToStr(RetValue));
//return;
}
DrawWaveF(-5,5,fAdBuf,0,wAdNumber,C0Image0);
DrawWaveF(-5,5,fAdBuf,wAdNumber,wAdNumber,C0Image1);
DrawWaveF(-5,5,fAdBuf,wAdNumber*2,wAdNumber,C0Image2);
lbC0Log->Items->Clear();
for(k=0;k<=wAdNumber-1;k++)
lbC0Log->Items->Add((AnsiString)"Ch0:
"+FloatToStr(fAdBuf[k]).SubString(1,5)
+"Ch1:
"+FloatToStr(fAdBuf[wAdNumber+k]).SubString(1,5)
+"Ch2:
"+FloatToStr(fAdBuf[wAdNumber*2+k]).SubString(1,5)
);
}
//---------------------------------------------------------------------------
void__fastcallTForm1:
:
FormClose(TObject*Sender,TCloseAction&Action)
{
P1202_DriverClose;
}
//---------------------------------------------------------------------------
void__fastcallTForm1:
:
Button3Click(TObject*Sender)
{
WordRetValue,DF,DW,AC,k,Dodata;
floatDA;
wAdNumber=(Word)StrToInt(eC0AdNums->Text);
DF=(Word)StrToInt(eC0DaFreq->Text);
DW=(Word)StrToInt(eC0DaWave->Text);
AC=(Word)StrToInt(eC0AdClock->Text);
DA=StrToFloat(eC0DaAmp->Text);
for(k=0;k<=31;k++)
{
wChannel[k]=0;
wConfigCode[k]=0;
}
wChannel[0]=1;
wChannel[1]=1;
wChannel[2]=1;
XMax->Caption=IntToStr(wAdNumber);
XMax2->Caption=XMax->Caption;
XMax3->Caption=XMax->Caption;
RetValue=P1202_ActiveBoard((Word)StrToInt(eSelect->Text));
if(RetValue!
=0)
{
ShowMessage((AnsiString)"ActiveBoradError!
!
"+"\nErrorCode:
"+IntToStr(RetValue));
return;
}
eC0DO->Text="8";
Dodata=(Word)StrToInt("0x"+eC0DO->Text);
RetValue=P1202_Do(Dodata);
if(RetValue!
=0)
{
ShowMessage((AnsiString)"DigitalOutputError!
!
"+"\nErrorCode:
"+IntToStr(RetValue));
return;
}
RetValue=P1202_M_FUN_3(DF,DW,DA,AC,wAdNumber,wChannel,wConfigCode,fAdBuf,-10,10);
if(RetValue!
=0)
{
ShowMessage((AnsiString)"M_Fun_1Error!
!
"+"ErrorCode:
"+IntToStr(RetValue));
//return;
}
DrawWaveF(-5,5,fAdBuf,0,wAdNumber,C0Image0);
DrawWaveF(-5,5,fAdBuf,wAdNumber,wAdNumber,C0Image1);
DrawWaveF(-5,5,fAdBuf,wAdNumber*2,wAdNumber,C0Image2);
lbC0Log->Items->Clear();
for(k=0;k<=wAdNumber-1;k++)
lbC0Log->Items->Add((AnsiString)"Ch0:
"+FloatToStr(fAdBuf[k]).SubString(1,5)
+"Ch1:
"+FloatToStr(fAdBuf[wAdNumber+k]).SubString(1,5)
+"Ch2:
"+FloatToStr(fAdBuf[wAdNumber*2+k]).SubString(1,5)
);
}
//---------------------------------------------------------------------------
void__fastcallTForm1:
:
Button4Click(TObject*Sender)
{
WordRetValue,DF,DW,AC,k,Dodata;
floatDA;
wAdNumber=(Word)StrToInt(eC0AdNums->Text);
DF=(Word)StrToInt(eC0DaFreq->Text);
DW=(Word)StrToInt(eC0DaWave->Text);
AC=(Word)StrToInt(eC0AdClock->Text);
DA=StrToFloat(eC0DaAmp->Text);
for(k=0;k<=31;k++)
{
wChannel[k]=0;
wConfigCode[k]=0;
}
wChannel[0]=1;
wChannel[1]=1;
wChannel[2]=1;
XMax->Caption=IntToStr(wAdNumber);
XMax2->Caption=XMax->Caption;
XMax3->Caption=XMax->Caption;
RetValue=P1202_ActiveBoard((Word)StrToInt(eSelect->Text));
if(RetValue!
=0)
{
ShowMessage((AnsiString)"ActiveBoradError!
!
"+"\nErrorCode:
"+IntToStr(RetValue));
return;
}
eC0DO->Text="0";
Dodata=(Word)StrToInt("0x"+eC0DO->Text);
RetValue=P1202_Do(Dodata);
if(RetValue!
=0)
{
ShowMessage((AnsiString)"DigitalOutputError!
!
"+"\nErrorCode:
"+IntToStr(RetValue));
return;
}
RetValue=P1202_M_FUN_3(DF,DW,DA,AC,wAdNumber,wChannel,wConfigCode,fAdBuf,-10,10);
if(RetValue!
=0)
{
ShowMessage((AnsiString)"M_Fun_1Error!
!
"+"ErrorCode:
"+IntToStr(RetValue));
//return;
}
DrawWaveF(-5,5,fAdBuf,0,wAdNumber,C0Image0);
DrawWaveF(-5,5,fAdBuf,wAdNumber,wAdNumber,C0Image1);
DrawWaveF(-5,5,fAdBuf,wAdNumber*2,wAdNumber,C0Image2);
lbC0Log->Items->Clear();
for(k=0;k<=wAdNumber-1;k++)
lbC0Log->Items->Add((AnsiString)"Ch0:
"+FloatToStr(fAdBuf[k]).SubString(1,5)
+"Ch1:
"+FloatToStr(fAdBuf[wAdNumber+k]).SubString(1,5)
+"Ch2:
"+FloatToStr(fAdBuf[wAdNumber*2+k]).SubString(1,5)
);
}
//---------------------------------------------------------------------------