电气装备计算机控制系统设计实验报告.doc
专业: 电气工程及其自动化姓名: 学号: 日期: 地点: 实验报告课程名称: 电器装备及其计算机控制技术 指导教师: 成绩:_实验名称:电气装备计算机控制系统设计 实验类型:_同组学生姓名:_一、实验目的与要求必填二、实验内容与原理必填三、主要仪器设备必填四、操作方法与实验步骤五、实验数据记录与处理六、实验结果与分析必填七、讨论、心得一、实验目的 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相电压传感器有故障,无法工作,只测得两相电压波形。此时异步电机的三相电压相序应该是ABC,可从波形中看出A相超前B相电压,超前角度大约为120°。图3电机反转实验波形由图3可知, A相电压大概落后B相电压约120°,此时异步电机的三相电压相序应该是ACB,观察电机转向,与上述电机正转后的转向相反。六、考前须知1. 连线检查无误前方可上电,接线尽量用短线;2. 因为异步电机高压直接启动容易过流报警,所以可将交流输入电压调至160V左右;3. 主接触器线圈工作时需要220V交流电源三相输出电压U、V、W为可调电压,其下方三个输出电压U、V、W为不可调电压,其任意两相之间线电压均为380V,每一相对地相电压为220V,因此可选择其中一相作为主接触器电源,切不可用两相之间的线电压!4.数字隔离端子板配有多个继电器,这些继电器的通断由数码管显示,上位机输入的数字量可以由数码管以对应的二进制格式表示,因此应该弄清实验中使用的端子板继电器对应哪些数字为通,哪些数字为断。5. 实验中未出现过流过压报警时,电机的通断电通过上位机软件实现。6.在设计电机正反转控制电路时必须注意是否会造成电源短路!七、思考与练习 1继电器与接触器的区别是什么?继电器:用来保证电力系统设备的平安运行,属于二次设备。交直流方式都有,以根据一定的电气量或非电气量进展整定,当被保护设备或者回路出现故障,到达整定值就启动出口,接通跳闸回路,断路器跳开故障回路,减小事故范围。用于控制电路、电流小,无灭弧装置,可在电量或非电量的作用下动作。接触器:一般作为控制回路主体执行元件使用,触点分为主辅,触点数量少,触电容量大,通断负荷能力大,大容量通常有灭弧罩增强开断能力。用于主电路、电流大,有灭弧装置,一般只能在电压作用下动作。2如何理解传感器输出信号的标度转换?计算机控制系统的各种物理参数有不同的量纲,这些参数经AD转换后,编程数字量信息输出,这个数字量虽然代表参数值的大小,但不一定等于原来带有量纲的参数值,必须将它转换成原来参数的真实值才能进展显示,打印或使用,这种转换就是标度转换。信号标度转换的主要任务是把传感器输出信号变换成与AD转换器输入量程相适应的大小,以提高分辨率。假设传感器输出信号的最大值大于AD转换输入量程,显然AD转换器无法承受;但假设传感器输出信号的最大值远远小于AD转换器输入量程,就不能充分利用AD传感器,精度就不是很高。标度转换的主要步骤一般是信号放大,即将传感器输出的小信号放大到适合于AD转换器或V/F转换的大电压信号。3阐述继电器的自锁与互锁原理。自锁就是利用继电接触器是的辅助常开触点来代替启动按钮,继电接触器闭合后,常开触点也闭合,就好似一直按下启动按钮一样,常开触点与启动按钮是并联在一起的;继电器互锁是利用继电接触器是的辅助触点,可以通过把彼此的常闭触点串接到对方的控制线圈回路中实现。比方继电器2的线圈通过继电器1的常闭触电以后才接通电源,那么如果接触器1一旦动作,那么接触器2就不会动作。4数字输入输出通道中常用的驱动与隔离及功率放大器件有哪些?驱动与电平转换:TTL电路、ECL电路、HCL电路、CMOS电路等;隔离器件:隔离变压器、继电器与光电耦合器件等;功率放大器件:电磁继电器、大功率晶体管、IGBT、大功率三极管、固态继电器等。八、实验程序#include <vcl.h>#pragma hdrstop#include "Unit2.h"#include "P1202.h"#include "P1202u.cpp"#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;Word TotalBoards;_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner)void _fastcall TForm1:FormCreate(TObject *Sender) Word RetValue; RetValue = P1202_DriverInit(&TotalBoards); if (RetValue != 0) ShowMessage("ErrorCode:" + IntToStr(RetValue) + "nDriver Initial Error!"); 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 _fastcall TForm1:Button2Click(TObject *Sender) Close();void _fastcall TForm1:Button1Click(TObject *Sender) Word RetValue, DF, DW, AC, k,Dodata; float DA; 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+) wChannelk = 0; wConfigCodek = 0; wChannel0 = 1; wChannel1 = 1; wChannel2 = 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)"Active Borad Error !" + "nErrorCode:" + IntToStr(RetValue); return; eC0DO->Text="2" Dodata = (Word) StrToInt("0x" + eC0DO->Text); RetValue = P1202_Do(Dodata); if (RetValue != 0 ) ShowMessage(AnsiString)"Digital Output Error !" + "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_1 Error!" + "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(fAdBufk).SubString(1,5) + " Ch1: " + FloatToStr(fAdBufwAdNumber + k).SubString(1,5) + " Ch2: " + FloatToStr(fAdBufwAdNumber * 2 + k).SubString(1,5)void _fastcall TForm1:FormClose(TObject *Sender, TCloseAction &Action) P1202_DriverClose;void _fastcall TForm1:Button3Click(TObject *Sender) Word RetValue, DF, DW, AC, k,Dodata; float DA; 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+) wChannelk = 0; wConfigCodek = 0; wChannel0 = 1; wChannel1 = 1; wChannel2 = 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)"Active Borad Error !" + "nErrorCode:" + IntToStr(RetValue); return; eC0DO->Text="8" Dodata = (Word) StrToInt("0x" + eC0DO->Text); RetValue = P1202_Do(Dodata); if (RetValue != 0 ) ShowMessage(AnsiString)"Digital Output Error !" + "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_1 Error!" + "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(fAdBufk).SubString(1,5) + " Ch1: " + FloatToStr(fAdBufwAdNumber + k).SubString(1,5) + " Ch2: " + FloatToStr(fAdBufwAdNumber * 2 + k).SubString(1,5)void _fastcall TForm1:Button4Click(TObject *Sender) Word RetValue, DF, DW, AC, k,Dodata; float DA; 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+) wChannelk = 0; wConfigCodek = 0; wChannel0 = 1; wChannel1 = 1; wChannel2 = 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)"Active Borad Error !" + "nErrorCode:" + IntToStr(RetValue); return; eC0DO->Text="0" Dodata = (Word) StrToInt("0x" + eC0DO->Text); RetValue = P1202_Do(Dodata); if (RetValue != 0 ) ShowMessage(AnsiString)"Digital Output Error !" + "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_1 Error!" + "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(fAdBufk).SubString(1,5) + " Ch1: " + FloatToStr(fAdBufwAdNumber + k).SubString(1,5) + " Ch2: " + FloatToStr(fAdBufwAdNumber * 2 + k).SubString(1,5)第 14 页