数字化测控技术实验报告

2026/1/27 6:35:09

频率测量:点击7080模块部分的“开始”按钮,程序连续测量方波的频率,在文本框中显示测量值。

图4.3 串口错误

电压输出:先在7012模块部分的文本框中键入要输出的电压值(精确到小数点后的三位),按“输出”按钮。

数据采集:先在7017模块部分的下拉选框中选择模块的输入通道号(默认为“通道一”),点击“开始”按钮,将在文本框中显示即时输入值,并绘出输入曲线。

程序运行前,请确保各模块的输入在量程范围之内,否则程序报错,如图4.4所示。

图4.4 模块输入错误

单击“数据库”按钮,将出现数据库界面,在下拉菜单中选择查询的模块号,查看之前运行的数据。以“7017模块数据”为例,查询结果如图4.5所示。

图4.5 “7017模块数据”查询结果

2)自行设计的串口通讯程序及注解

16

请对照演示程序编写串口部分函数。

首先,在串口选择下拉菜单(IDC_chcom)的选择响应函数OnSelchangechcom()中添加打开串口并初始化语句,(模块设置为:波特率为9600,每个字节8位,无奇偶校验位,两个停止位)。添加位置已标出,如图4.6所示,请在添加完之后删除报错函数ex_error;

图4.6 IDC_chcom的选择响应函数

添加的程序代码及说明:

hCom=CreateFile(para, GENERIC_READ|GENERIC_WRITE, 0, NULL ,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL); if(hCom==(HANDLE)-1) {

AfxMessageBox(\打开com失败!\ // return FALSE; }

SetupComm(hCom,1000,1000); //输入缓冲区和输出缓冲区的大小都是100 /* COMMTIMEOUTS TimeOuts; //设定读超时 TimeOuts.ReadIntervalTimeout=MAXDWORD; TimeOuts.ReadTotalTimeoutMultiplier=0; TimeOuts.ReadTotalTimeoutConstant=0;

//在读一次输入缓冲区的内容后读操作就立即返回, //而不管是否读入了要求的字符。 //设定写超时

TimeOuts.WriteTotalTimeoutMultiplier=100; TimeOuts.WriteTotalTimeoutConstant=500;

SetCommTimeouts(hCom,&TimeOuts); //设置超时 */ DCB dcb;

GetCommState(hCom,&dcb);

dcb.BaudRate=9600; //波特率为9600 dcb.ByteSize=8; //每个字节有8位 dcb.Parity=NOPARITY; //无奇偶校验位 dcb.StopBits=TWOSTOPBITS; //两个停止位 SetCommState(hCom,&dcb);

PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);

再编写读写串口函数,例程中采用API接口函数编写串口。在writeapi(CString)函数中添加

17

写串口语句(模块默认的结束符号为回车),在readapi()函数中添加读串口语句。添加位置已标出,如图4.7所示,请在添加完之后删除报错函数ex_error;

图4.8 读、写串口函数

添加的程序代码及说明: //写串口函数添加内容

if (m_ccom.GetCurSel()==-1) {

KillTimer(1);

KillTimer(2); srun=0; nrun=0;

AfxMessageBox(\请打开串口\

GetDlgItem(IDB_17_run)->SetWindowText(\开始\ GetDlgItem(IDB_80_send)->SetWindowText(\开始\ }

int re=0;

OVERLAPPED m_osWrite;

memset(&m_osWrite,0,sizeof(OVERLAPPED)); BOOL bWriteStat;

m_osWrite.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); DWORD dwBytesWrite=order.GetLength()+2; COMSTAT ComStat; DWORD dwErrorFlags;

ClearCommError(hCom,&dwErrorFlags,&ComStat); char aa=13;

bWriteStat=WriteFile(hCom,order+aa,dwBytesWrite,& dwBytesWrite,&m_osWrite); //读串口函数添加内容 OVERLAPPED m_osRead;

memset(&m_osRead,0,sizeof(OVERLAPPED));

m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); COMSTAT ComRStat; DWORD dwRErrorFlags; CString cstr; // CString str; memset(str,'\\0',100);

DWORD dwBytesRead=100;//读取的字节数

18

BOOL bReadStat;

ClearCommError(hCom,&dwRErrorFlags,&ComRStat);

dwBytesRead=min(dwBytesRead, (DWORD)ComRStat.cbInQue);

bReadStat=ReadFile(hCom,str,dwBytesRead,&dwBytesRead,&m_osRead); cstr=str;

if (cstr==\ {

KillTimer(1); KillTimer(2); srun=0; nrun=0;

AfxMessageBox(\请检查模块电源和输入信号量程大小\ GetDlgItem(IDB_17_run)->SetWindowText(\开始\ GetDlgItem(IDB_80_send)->SetWindowText(\开始\ }

最后,在“数据库”(IDB_database)按钮的单击响应函数Ondatabase()中,添加关闭串口语句。添加位置已标出,如图4.9所示,请在添加完之后删除报错函数ex_error;

图4.9 IDB_database单击响应函数

添加的程序代码及说明:

CloseHandle(hCom);//关闭串口

如未删除报错函数ex_error,程序将报错,如图4.10所示。

图4.10 串口程序错误

3)运行的情况说明

1.集中分布式模块的工作介绍:

7080是频率计数模块,其将接受的频率信号计数值通过接口模块传给主控计算机,并显示于界面上;7021是模拟电压输出模块,主控计算机向其发送代表要求输出电压值的数字信号,7021再将接收到的数字信号进行DA转换,输出模拟电压;7017是数据采集模块,其功能是对模拟信号进行

19

采集和AD转换,再将转换所得的数字信号通过接口模块传给计算机。

2.两种出错情况:

数据采集模块的测量范围是-5V~+5V,若待采集模拟电压值超过此范围,程序将报错,显示“请检查模块电源和输入信号量程大小”。又因为,模拟输出模块作为数据采集模块的输入,所以我们在实验中仅对0~+5V的电压进行模拟输出和采集。

在程序主界面对各个模块进行操作以前,必须选择正确的串口号,否则程序将报错,显示“请打开串口”。

7、实验结果与分析

1)将实验结果填入表4.1中

表4.1 实验结果 模拟模块 输出电压 万用表 测量值 数据采集模块采集值 8.94 7.96 6.97 5.96 4.97 3.99 2.98 1.99 1 0 模拟输出模块输出误差 0.67% 0.63% 0.57% 0.67% 0.60% 0.75% 0.61% 1.00% 1.00% 0 数据采集模块测量误差 0.67% 0.50% 0.43% 0.67% 0.60% 0.25% 0.61% 0.50% 0 0 信号发生器信号频率 100Hz 500Hz 1kHz 5kHz 10kHz 50kHz 100kHz 490 0.99k 4.93k 10.46k 49.43k 99.64k 频率测量模块测量值 2.00% 1.00% 1.40% 4.60% 1.14% 0.36% 频率测量模块测量误差 10V 9V 8V 7V 6V 5V 4V 3V 2V 1V 0V 8.94 7.95 6.96 5.96 4.97 3.97 2.98 1.98 0.99 0 2)实验结果分析 实验数据误差分析见上表。数据采集卡、万用表及DA转换器存在误差,都会导致实验结果存

在误差。但从结果来看,该系统总体测控误差小,性能良好。

8、思考题

1)为什么要有接口模块。

答:计算机用RS232总线,分布式模块用RS485总线连接,两种总线逻辑不同,故需要接口模 块将RS232逻辑转换成RS485逻辑,实现主控计算机和分布式模块的通信。

2)如何将要求的模拟输出电压值转换成写入模拟输出模块的数字值,写出转换关系。

答:计算机向7021发送代表模拟输出的数字信号,7021将数字信号转换成模拟信号输出;7017将模拟信号转换成数字信号,再发送给计算机显示于程序主界面。 3)如果在程序中模块地址写错,可能发生什么情况?

答:模块地址是识别模块的依据,故模块必须只有一个地址,以便于调用。

若写错地址的模块功能不同,则会导致两种模块都不能正常测量或者控制;

若写错地址的模块功能相同,则会导致事实测量或者控制的地点错误,收集或者发出错误

的信息,发生系统关系错乱。

20


数字化测控技术实验报告.doc 将本文的Word文档下载到电脑
搜索更多关于: 数字化测控技术实验报告 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219