电气装备实验二电气装备计算机控制系统设计(共17页).doc
精选优质文档-倾情为你奉上专业:电气工程与自动化姓名: _ _学号: 日期: 2015.6 地点: 教二115 实验报告课程名称: 电气装备计算机控制 指导老师:_ _成绩:_实验名称:电气装备计算机控制系统设计 实验类型:_ 同组学生姓名: 一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得实验二 电气装备计算机控制系统设计一、实验目的 1、理解数据采集系统的硬件原理,了解数据采集卡的技术指标和驱动函数;2、掌握PCI1202数据采集卡获取数据的方法,数据采集软件编写的方法;3、掌握计算机控制技术,学会电气装备计算机控制系统的软件和硬件设计,熟悉控制系统的调试方法。二、实验内容1、使用数据采集系统进行各路数据采集,对数据采集的结果进行记录和分析;2、利用采集卡数据输入输出功能设计一个简易控制三相异步电机正反转的控制系统。 三、实验原理 在电气装备等各个应用领域都存在着数据采集、存储、处理与控制问题, 常常需要对电流、电压、温度、压力、流量、位移等模拟量进行采集,通过模/数(A /D)转换,数据处理,最后把结果显示出来或者进行相应的控制处理。数据采集系统的信号采集部分一般包括信号输入和调理(信号衰减/放大与滤波)、采样/保持、模/数(A /D)转换、数据存储(RAM)等,再通过接口传输到计算机,由计算机进行信号的分析处理和显示。三相异步电机的转子是被定子的三相绕组通入三相交流电产生的旋转磁场拖动的,三相绕组合成的旋转磁场向哪个方向转,转子就向哪个方向转。所以,只要将三相电源线的任意两根线换接,电机定子的旋转磁场就被改变了,那么电机转子的转动方向也将跟随旋转磁场的方向改变。数据采集主电路及控制电路实验接线图四、实验步骤1. 研究并设计电机的数据采集及控制主电路;2. 根据设计的电路完成实验系统的硬件接线;3. 通过软件平台进行编程、调试实现对三相异步电机的数据采集及正反转控制;4. 在实现最简控制电路的基础上进行扩展,如增加电机过压保护、过流保护、继电器互锁等功能。(选做探究)五、实验例程 程序段/-#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;说明:该程序段包含相关头文件说明与编译预处理指令,同时定义Word型变量TotalBoards,用于计数板卡总数。程序段/-_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner)void _fastcall TForm1:FormCreate(TObject *Sender) Word RetValue; /定义一个类型变量 RetValue = P1202_DriverInit(&TotalBoards); /板卡驱动初始化函数,检测有几个板卡,并赋给变量RetValue记录返回值-错误代码 if (RetValue != 0) ShowMessage("ErrorCode:" + IntToStr(RetValue) + "nDriver Initial Error!"); Button1->Enabled = False; eSelect->Text = "0" /选择哪个板卡,从0开始计数,表示第一块 eTotal->Text = IntToStr(TotalBoards); /一共有多少板卡 UpDown1->Max = (Word)(TotalBoards - 1); /有多少板卡,其值减1,因为从0计数 UpDown1->Min = 0; if (TotalBoards < 2) /若板卡数少于2,不允许选用 UpDown1->Enabled = False; eSelect->Enabled = False; 说明:该程序段为窗口初始化函数及P1202驱动初始化。首先定义一个Word类型变量RetValue,然后调用板卡驱动初始化函数P1202_DriverInit(),检测有几个板卡,并将值赋给变量RetValue,记录返回值。如果RetValue != 0,即出现错误代码,则显示错误信息,其中包含IntToStr()函数调用,用于将检测到的总板卡数转换为字符串显示,同时按钮Button1不使能。eSelect->Text用于板卡选择,初始值赋为0表示从0开始计数,即0表示第一个板卡。eTotal->Text用于记录一共有多少板卡,所赋值为实际板卡总数。UpDown1->Max用于记录板卡数计数最大数。UpDown1->Min用于记录板卡计数最小值,为0。如果板卡总数少于2,则不允许选用。程序段void _fastcall TForm1:Button2Click(TObject *Sender) Close();/关闭窗体/-说明:该程序段用于说明Button2按键功能,即关闭窗体。程序段void _fastcall TForm1:Button1Click(TObject *Sender) Word RetValue, DF, DW, AC, Dodata, k; 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) ); 调用函数激活板卡,同时将值返回给retvalue if (RetValue != 0 )如果返回值错误 ShowMessage(AnsiString)"Active Borad Error !" + "nErrorCode:" + IntToStr(RetValue); return; Dodata= 0x2; RetValue = P1202_Do(Dodata); /传送一16 位的值到Digital Output输出 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); /连续平滑的A/D,D/A转换 if (RetValue != 0 ) ShowMessage(AnsiString)"M_Fun_3 Error!" + "nErrorCode:" + 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) );/-说明:该程序段用于说明Button1按键功能及实现。动态监视并采集数据,根据采集到的数据绘制波形。部分说明见以上注释。程序段void _fastcall TForm1:FormClose(TObject *Sender, TCloseAction &Action) P1202_DriverClose;/-说明:该程序段用于P1202驱动关闭动作。程序段void _fastcall TForm1:Button3Click(TObject *Sender) Word RetValue, DF, DW, AC, Dodata, k; 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;/设定输出到 analog output Channel 1、Channel 2、Channel 3. 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; Dodata= 0x4; 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!" + "nErrorCode:" + 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) );/-说明:该程序段功能与程序段功能类似,描述Button3按键功能,动态监视并采集数据,根据采集到的数据绘制波形。程序段void _fastcall TForm1:Button4Click(TObject *Sender)Word RetValue, DF, DW, AC, Dodata, k; 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; Dodata= 0x0; 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!" + "nErrorCode:" + 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) );/-说明:该程序段功能与程序段功能类似,描述Button4按键功能,动态监视并采集数据,根据采集到的数据绘制波形。完整代码如下:/-#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, Dodata, k; 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; Dodata= 0x2; 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_3 Error!" + "nErrorCode:" + 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, Dodata, k; 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; Dodata= 0x4; 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!" + "nErrorCode:" + IntToStr(RetValue) ); return; DrawWaveF( -5, 5, fAdBuf, 0, wAdNumber, C0Image0 );DrawWaveF( -5, 5, fAdBuf, wAdNumber, wAdNumber, C0Image1 )