数据采集计算机控制实验报告
课程名称:电气装备计算机控制技术指导老师:成绩:
实验名称:数据采集计算机控制实验类型:同组学生姓名:
一、实验目的和要求(必填)二、实验内容和原理(必填)
三、主要仪器设备(必填)四、操作方法和实验步骤
五、实验数据记录和处理六、实验结果与分析(必填)
七、讨论、心得
一、实验目的和要求
1.初步了解数据采集卡在电气装备中的应用
2.了解计算机在数据采集和处理方面的应用
3.采用C++ Builder对数据采集卡PCI1202进行编程,控制实验数据的采集数据预处理以及系统的测量模式
4.理解数据采集系统的硬件原理
5.掌握简单的数据采集软件编写方法
二、实验内容和原理
1.实验内容
(1)通过上位机控制三相异步电机的运行及停车
(2)使用数据采集系统进行各路数据采集对数据采集的结果进行记录好分析
2.实验原理
实验原理图如图所示:
数据采集主电路实验接线图
+
-
C—主电路接触器的接点
J—中间继电器的接点
NC—
COM—
5~24VDC
—主电路接触器的线圈
—中间继电器的线圈
注:
220V三相交流电源经过各种接触器连接到三相异步电动机上,为控制电机的运行,必须控制三相交流电源的接入和断开,接触器即可实现此项功能。因为主接触器通入强电,不能直接进行操作,所以我们通过控制上位机产生的信号,继而控制中间继电器,然后由中间继电器控制主接触器。
电路中并联了三个电压传感器,串联了三个电流传感器,但是在实际过程中,由于电机的运转为空转,所以电机的线电流非常小,由电流传感器测出来的数据并不具有代表性,所以实际实验中我们连接了电压传
感器。
传感器测出来的信号经过数据采集实验箱中的调理电路处理后送入PCI1202中,经过A/D以及D/A转换后在上位机运行界面显示,实现基本的数据采集。采集信号的显示模式等均可通过程序进行改变。
三、主要仪器设备
一台PC机、交流电源、电动机、传感器板、PCI1202控制板、继电器板、导线若干
四、操作方法与实验步骤
1.根据实验内容要求以及实验连接电路图所示,利用实验平台各装置设计硬件连接电路
2.运行C++ Builder软件,熟悉该软件的使用方法
3.通过软件平台进行编程、调试(可参照示例程序),实现对硬件电路的控制
4.软件调试成功后通过上位机运行系统,并对实验要求的数据进行采集和记录
五、实验数据记录和处理
1.实验例程
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Unit2.h"
#include "P1202.h"
#include "P1202u.cpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Word TotalBoards;
//上面这段程序包含了相关头文件的引用(#include **.h)以及编译预处理(#pragma **)指令,同时定义了Word型变量TotalBoards,用于存储板卡总数
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//form的构造函数,在初始化窗体的时候执行,是最先执行的一个函数
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Word RetValue;//定义了一个Word类型的变量RetValue
RetValue = P1202_DriverInit(&TotalBoards); //板卡驱动初始化函数
//向系统要求分配资源,测试是否已经安准成功,并且回传给安装板卡的数量
if (RetValue != 0)//板卡程序运行成功后返回0,否则报错
{
ShowMessage("ErrorCode:" + IntToStr(RetValue)
+ "\nDriver Initial Error!!");
Button1->Enabled = False;
}
//显示错误代码
eSelect->Text = "0";//eSelect初始化选择为第一个板卡,第一个板卡定义为0
eTotal->Text = IntToStr(TotalBoards);//eTotal初始化为板卡数量,此时从整形变量转化为字符型变量
UpDown1->Max = (Word)(TotalBoards - 1);//规定可选择板卡数量最多为板卡总数量减一
UpDown1->Min = 0;//规定可选择板卡数量最低为0(第一个板卡)
if (TotalBoards < 2)//如果总板卡书小于2,则不能进行选择
{
UpDown1->Enabled = False;
eSelect->Enabled = False;
}
}
//---------------------------------------------------------------------------
//该程序为窗口初始化函数以及P1202的初始化。P1202_DriverInit()这个函数是板卡驱动初始化函数,从来检测办卡的数量,并将值赋给Word变量RetValue,如果RetValue不等于0的时候,就会用ShowMessage 函数显示错误信息。其中IntToStr函数的功能是将整形变量转换为字符串显示,同时button1不使能。eSelect 用于板卡选择,从0开始一直到最大值减一,0表示第一个板卡。eTotal用于记录一共有多少板卡,值为板卡总数。UpDown1->Max用于记录板卡数量的最大数。UpDown1->Min用于记录板卡数最小值。如果板卡总数小于2,则将eSelect和UpDown1均不使能,不允许选用板卡。
void __fastcall TForm1::Button2Click(TObject *Sender)//描述按钮2(Exit)的关闭功能
{
Close(); //关闭窗体
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Word Didata; //变量定义
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);//振幅
XMax->Caption = IntToStr(wAdNumber);//最大量程
RetValue = P1202_ActiveBoard( (Word)StrToInt(eSelect->Text) );//调用函数激活板卡,同时将
值返回给RetValue
if (RetValue != 0 )//检验返回值是否错误
{
ShowMessage((AnsiString)"Active Borad Error !!" + "\nErrorCode:" + IntToStr(RetValue));
return;
}
Dodata = (Word) StrToInt("0x" + eC0DO->Text);
//把变量转换为16进制word类型,并且赋给Dodata
RetValue = P1202_Do(Dodata);//传送一个16位的值到Digital Output
if (RetValue != 0 )
{
ShowMessage((AnsiString)"Digital Output Error !!" + "\nErrorCode:" + IntToStr(RetValue));
return;
}
RetValue = P1202_Di(&Didata);//从Digital Output里面读取16位数
if (RetValue != 0 )
{
ShowMessage((AnsiString)"Digital Input Error !!" + "\nErrorCode:" + IntToStr(RetValue));
return;
}
eC0DI->Text = IntToHex(Didata,4);
RetValue = P1202_M_FUN_1(DF, DW, DA, AC, wAdNumber, 0, fAdBuf, -10, 10);//连续平滑的A/D、D/A转换
if (RetValue != 0 )
{
ShowMessage((AnsiString)"M_Fun_1 Error!!" + "\nErrorCode:" + IntToStr(RetValue) );
return;
}
DrawWaveF( -5, 5, fAdBuf, 0, wAdNumber, C0Image );//连续的监视数据
lbC0Log->Items->Clear();
for (k=0;k<=wAdNumber -1;k++)//根据采集的数据画波形
lbC0Log->Items->Add( FloatToStr(fAdBuf[k]) );
}
//说明:这个程序用于说明点击按钮Button1的时候动作——监视、采集数据,并且根据采集到的数据画波形。
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
P1202_DriverClose; //关闭板卡
}
//说明:这个程序用于关闭板卡
//---------------------------------------------------------------------------
三相电压采集例程
//---------------------------------------------------------------------------
#include
#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);
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;
}
}
//改程序为窗口初始胡函数以及P1202的驱动初始化,具体注释参考上一个程序
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//该程序用于说明Button2功能,即关闭窗体
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Word RetValue, DF, DW, AC, 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++)
{
wChannel[k] = 0;
wConfigCode[k] = 0;
}
wChannel[0] = 1;
wChannel[1] = 1;
wChannel[2] = 1;
//设定输出到analog output Channel1、Channel2、Channel3
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;
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_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(fAdBuf[k]).SubString(1,5)
+ " Ch1: " + FloatToStr(fAdBuf[wAdNumber + k]).SubString(1,5)
+ " Ch2: " + FloatToStr(fAdBuf[wAdNumber * 2 + k]).SubString(1,5)
);
}
//说明:该程序功能用于说明Button1的功能以及实现,动态监视并采集数据,根据采集到的数据绘制波形。//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
P1202_DriverClose;
}
//说明:该程序用于P1202的驱动关闭动作
六、注意事项
1. 连线检查无误后方可上电,接线尽量用短线;
2. 因为异步电机高压直接启动容易过流报警,所以可将交流输入电压调至160V左右;
3. 主接触器线圈工作时需要220V交流电源(三相输出电压U、V、W为可调电压,其下方三个输出电压U’、V’、W’为不可调电压,其任意两相之间线电压均为380V,每一相对地相电压为220V,因此可选择其中一相作为主接触器电源,切不可用两相之间的线电压!)
4.数字隔离端子板配有多个继电器,这些继电器的通断由数码管显示,上位机输入的数字量可以由数码管以对应的二进制格式表示,因此应该弄清实验中使用的端子板继电器对应哪些数字为通,哪些数字为断。
5. 实验中未出现过流过压报警时,电机的通断电通过上位机软件实现。
七、实验结果与分析
单相传感器
三相传感器
八、思考与分析
1.三相异步电动机的启动与调速方式有哪几种?
答:启动方式有直接启动(电机直接接额定电压启动)与降压启动(分为定子串电抗降压启动、星形三角形启动、软启动器启动以及自耦变压器启动等);调速方式有变极调速、变频调速与改变电动机转差率调速。
2.A/D和D/A转换的性能指标主要有哪些?
答:主要性能直白哦有位数、量化误差、分辨率、精度、建立时间、转换时间、转换速率、环境指标等3.电流传感器和电压传感器分别有哪几种接线方式?
电流传感器是串联,电压传感器是并联
4.简述霍尔传感器的基本原理?
答:当主回路有一个电流通过时,在导线上产生的磁场被聚磁环狙击兵感应到霍尔奇奸商,所产生的信号输出用于驱动相应的功率管,并使其导通从而后的一个补仓电流Is,这一个电流再通过多匝绕组,产生磁场,该磁场与被测电流产生的磁场正好相反,因而补偿了原来的磁场,使霍尔器件的输出逐渐减小。当与Ip与匝数相乘所产生的磁场磁场相等时,Is不再增加,这是霍尔器件起到指示零磁通的作用,此时而已通过Is来平衡。被测电流的任何变化都会破坏这一平衡。一旦磁场失去平衡,霍尔器件有信号输出。经过功率放大后,立即就有相应的电流通过磁激绕组进行补偿,副边电流Is精确反映原边电流。
5.电气装备计算机控制系统主要分为哪几类?
数据采集系统、监督控制系统、直接数字控制系统、分散型控制系统
九、讨论、心得
1.本次实验的实验内容是通过计算机控制来实现对电机运行与停止的控制。本次实验用到的相关器件包括PC机、PCI1202板、电压传感器、中间继电器等器件。
2.本次实验用到的传感器有电压传感器和电流传感器,由于电机运行为空载运行,电流较小,用电流传感器的意义不大,所以这次实验就只用了电压传感器
3.实验器材上有两个交流电压源的插口,上面一排为可调电源,本次实验只需调至150-170V左右就可以让电机运行起来,而在控制中间继电器里面的交流电源为220V交流电源,需要连接下面的插口才能实现。并且注意实验时不要触碰交流电源插口,非常危险。
4.实验连接线路时尽量用短线。因为是强电实验,连接线路过程中一定要断电连接,用的线路不能是裸露导体的导线,必须是将导体放在绝缘体之内的导线。
5.实验硬件电路中,对于控制电动机的启动并不是一步完成的,因为电动机工作在380V线电压的高压电路中,而控制计算机实际工作的电压远小于这个值,两者不能直接连接,应该逐级降压,DB-16P与数字量开关信号相连,连接在5-24VDC的低压电路中,DB-16R把输出的信号与继电器相连,工作在24VDC 电压下,最终继电器吸合后使电动机线路上的继电器工作,电机才得以转动。
6.异步电机的连接方法为三角-星型启动,可以有效降低启动电压。虽然如此,实验开始时仍然要逐级升压启动,才可以使电机运行平缓。
7.三相传感器的结果中可以看到三相频率基本一致,相位差大约差120°,符合预期结果。
8.通过本次实验,初步了解数据采集卡在电气装备中的应用;了解计算机在数据采集和处理方面的应用;理解硬件的原理,为之后的实验打下了基础,对C++ Builder软件有了一定了解,为编程打下基础。