计控实验报告 联系客服

发布时间 : 星期四 文章计控实验报告更新完毕开始阅读24be9f8469eae009591bec70

计算机控制 实验报告

实验一基于研华ADAM模块的数据采集

一、实验目的

1. 掌握研华ADAM4117和ADAM4024数据采集模块的使用方法 2. 使用Matlab 软件编制数据采集程序

二、实验设备

研华数据采集模块ADAM4117, ADAM4024,Matlab软件,计算机控制实验箱,计算机,信号线

三、实验内容

在计算机控制实验箱上搭建二阶电路,模拟双容水箱系统,使用研华ADAM模块完成输入输出数据的采集。

1. 选择合适的电阻电容,参考如下电路结构图,在计算机控制实验箱上搭建二

阶被控对象,使得其被控对象传递函数为

建议数值:R1=200kΩ,R2=200kΩ,C1=1μF,R4=300kΩ, R5=500kΩ,C2=1μF.

2. 在Matlab软件下编程,完成基于研华ADAM4117的数据采集,读取放大器的

输出信号。

3. 在Matlab软件下编程,完成基于研华ADAM4024的数据通讯,实现控制信号

的输出。

4. 使用Matlab软件中的Timer控件实现数据的实时采集和显示

四、实验要求

1、了解数据采集模块中A/D、D/A转换的原理

答:A/D模块是模数转换模块,将模拟信号转换为数字信号。包括积分型、

逐次逼近型、并行比较型/串并行型、Σ-Δ调制型、电容阵列逐次比较型及压频变换型。

D/A模块是数模转换模块,将数字信号转换为模拟信号。包括倒T型网

络,权电流转换器等。

2、分析ADAM4117、ADAM4024模块的结构和性能指标,并掌握该模块与PC机的硬件连接方式,能够使用测试软件ADAM- Utility测试模块的通讯性能。 答:ADAM-4117是16位A/D、8通道的模拟量输入模块,可以采集电压、电

流等模拟量输入信号,并且为所有通道都提供了独立的可编程的输入范围。ADAM-4117可以将电压电流信号转换为RS-485信号,传输到电脑或PLC中 ? 一般电脑都具有RS-232接口,通过RS-232到RS-485的转换器连接ADAM-4117。 以ADAM-4520为例,电脑通过直连线连接ADAN-4520,4520的DATA+连接4117的DATA+,4520的DATA-连接4117的DATA-。连线完成后,安装测试软件,通过测试软件对4117进行测试和配置 。 ADAM-4117和ADAM-4520都需要供电,4117通电之后,指示灯呈红色闪烁状。

ADAM-4021是1路模拟量输出通道,分辨率为12位,输出范围0-20mA,

4-20mA,0-10V。ADAM-4024是4路模拟量输出通道,分辨率为12位,输出范围0-20mA,4-20mA,+/-10V,支持Modbus协议。用户可以通过配置软件配置电压或电流的建立速率和启动输出。

3、掌握Matlab软件平台下的串口通讯编程方法 见附录程序

五.实验程序

程序1.单一采值

s1 = serial('COM1', 'BaudRate',9600,'Terminator','CR'); fopen(s1);

command1=['#02C0-04.500']; fprintf(s1,command1); out1=fscanf(s1); command2=['#010']; fprintf(s1,command2); out2=fscanf(s1); fclose(s1); delete(s1);

程序2.使用定时器采值 clear all clc

global s1 t Ts k tt y Ts=0.5;

s1 = serial('COM1', 'BaudRate',9600,'Terminator','CR'); s1.InputBuffersize=1024; s1.OutputBuffersize=1024; fopen(s1);

input_command=['#02C0-04.500']; fprintf(s1,input_command); out=fscanf(s1) k=0;

t = timer('TimerFcn',@myread, 'Period', Ts,'ExecutionMode','fixedRate'); start(t)

function myread(obj,event) global s1 t Ts k tt y k=k+1;

input_command=['#010']; fprintf(s1,input_command); out=fscanf(s1);

out1=str2num(out(2:8)); tt(k)=(k-1)*Ts; y(k)=out1; plot(tt,y) if k>30

all_timer=timerfind; stop(all_timer); delete(all_timer);

input_command=['#02C0+00.000'];