《虚拟仪器技术》
实验报告
实验四
虚拟电压表的设计和虚拟数字万用表的使用
学生姓名
学 号
同组人员
日 期 2014.5.14
一、 实验项目名称
虚拟电压表的设计和虚拟数字万用表的使用
二、 预习要求
1)掌握一般电压表和万用表的工作原理和使用方法。
2)掌握交流电各种电压值表示的概念以及相互转换关系。
3)子VI 的创建方法
三、 实验目的
1)掌握虚拟电压表和数字万用表的设计和使用方法
2)进一步掌握LabVIEW 的使用,特别是控件属性的操作以及子VI 的使用。
四、 实验内容及要求
1)利用LabVIEW 设计一简易虚拟电压表。
功能要求:具有普通电压表的基本功能,用户可选择直流测量和交流测量。对于直流电
压只需显示电流值大小,对于交流电则需要显示该交流电的峰值、有效值、平均值和直 流分量(若存在)。同时能够提供虚拟输入和实际输入两种测量信号,虚拟输入时能够 显示信号波形。
其他要求:对虚拟电压表进行初始设置,即每次运行程序时电压表的初始界面一致,具
体表现在开关处于关闭状态,波形图窗口清空,其他控件处于使能状态下。实际输入时 禁用仿真参数设置控件,仿真输入时测量直流电压值时禁用信号幅度、频率、初始相位、 占 空比、信号类型等控件。
2)创建自行设计的虚拟电压表子VI。
3)使用NI ELVIS 提供的数字万用表(DMM)模块完成电阻、电流和电压的测量,并
就其中的电压测量部分与自行设计的虚拟电压表进行比较和分析。
五、 实验步骤
(1)主面板的编辑
根据实践教程中的实验提示以及根据主面板和总程序框图在空白的VI中进行编辑.
并在其中使用实验3中所做的VI作为子VI来完成波形发生的功能.
(2)本次实验的程序框图中使用了LabVIEW 中特有的一种顺序结构,这主要是缘于LabVIEW 采用了多线程并行的运行机制,程序内的代码是同时运行的。所以对于控件的初始显示可采用平铺式顺序结构的方法,在第一帧中设置各个控件的初始设置。初始化设置是通过控件的属性控制以及常量和局部变量设置完成的。LabVIEW 在执行程序时先从左边的帧开始,依次执行右面帧内的程序(本次只有两个帧,帧内的程序还是同时执行的)。左边帧内完成程序初始化设置,左边一列是控件的使能控制,0 是启用,1 是禁用,2 是禁用且变灰。这是通过控件的属性节点完成的,而右边一列则是对变量数值的初始设置,用局部变量完成。
(3)虚拟输入信号的提供可采用实验三中自行设计的虚拟函数发生器。有关子VI 的创建方法已介绍,本次实验主要是使用实验三中创建的子VI,在程序框图中的函数面板中选择VI 添加创建的子VI。自行创建的子VI 和LabVIEW 提供的各种函数模块的使用方法相同。关于子VI 属性的设置在主菜单中选择“文件/VI 属性”,进入VI 属性对话框,根据类别更改VI 属性。这里需要注意的是while 循环对子VI 的影响,建议在创建子VI 时去掉原先程序框图中用于使程序连续执行的while 循环,或用一布尔真常量控制while 循环的结束符(即
让此while 循环只循环一次)。此外,对于直流信号可以直接利用“初始化数组”模块完成。
(4)有关交流电压波形的参数,可以根据实践教程中参数的关系再利用信号的波峰值求取其他参数值。事实上,LabVIEW 提供用于计算这些参数的模块。对于波峰的求取,可使用波形最大最小值模块,位于“函数面板/编程/波形/模拟波形”下。有效值和直流分量可利用位于“函数面板/编程/波形/模拟波形/波形测量”下的基本平均直流-均方根模块实现。求取平均值的均值模块位于“函数面板/数学/概率与统计”中。
(5)首先,求取均值时需要将波形数组数据绝对值化,这是由交流信号的平均值定义决定,如果不取绝对值那平均值都为0,失去了实际意义。其次,提供的参考程序框图图4.3 中使用了“获得波形成分”模块,获取采集信号的波形数组数据、采样时间和采样起始时间,用于提取采集信号中一个完整周期。要提取出信号的至少一个完整周期的采样值的原因,是因为交流信号的有效值、平均值等都是以具备完整周期数的信号计算的,而实际采样时很难保证采样值为原信号的整周期倍数,如果直接使用采样值计算平均值和有效值将带来较大误差。因而,本次实验中在实际采样信号时要得到原周期信号的完整信息或是对周期信号处理时,采集到的采样值至少要大于一个完整的周期(实际对于正弦波、三角波只要能够测量出波峰与波谷也能计算出原波形)。
六、 实验结果
(1)实验3子VI的创建
并在实验3主面板的右上角 将子VI的各个引脚都设定好,用以在实验4的程序中方便使用.
(2)实验4的主面板及程序框图
其中使用的子vi ,均值、峰峰值和有效值的测量
(3)实验运行结果
七、 总结及心得体会
通过本次实验,我了解LabVIEW 中对子函数的调用及使用方法,LabVIEW 中有关属
性节点、局部变量的使用和有关用户界面设计的一些基本方法。
第二篇:东南大学微机实验第一次报告
东南大学 姓 名:刘英杰专 业:测控技术与仪器实验时间:评定成绩: 实验报告 实验一 :指令与汇编语言基础 学 号:22012327 实 验 室:金智楼516 20xx年4月17日 报告时间:20xx年4月22日 审阅老师: 《微机实验及课程设计》
一、实验目的:
1、了解命令行操作基本方式和基本命令,掌握PC环境下命令行方式的特点
2、掌握汇编语言程序指令编辑、宏汇编、连接和运行的基本概念
3、熟练掌握动态调试程序TD的常用命令和窗口功能,学会用TD调试程序,修改环境
4、学会利用DEBUG或TD检查认识指令功能的正确方法
二、实验内容:
(1)必做实验:
1、要求计算两个多字节十六进制数之差:
3B74AC60F8-20D59E36C1=?
式中被减数和减数为5个字节,存放在DATA1和DATA2的内存区,低位在前,高位在后。试编写减法的程序段,要求相减的结果存放在首址为DATA3的内存区。
2、以BUFFER为首地址的内存区存放了10个十六位带符号数,编写程序比较它们的大小,找出其中最小的带符号数,存入MIN和MIN+1单元。
(2)选作实验:
3、两个字符串的长度均为10,首地址分别为STRING1和STRING2,比较两个字符串是否完全相同,如果相同,将BL寄存器置为00H;
如果不完全相同,将BL寄存器置为FFH,并将第一个字符串中的第一个不相同字符的地址放在SI寄存器中。
三、实验原理:
? 硬件环境:微型计算机一台
? 软件环境:
? Windows XP操作系统
? 任意一种文本编辑器(EDIT、NOTEPAD、UltraEDIT)
? 汇编程序(MASM.EXE或TASM.EXE)
链接程序(LINK.EXE或TLINK.EXE)
调试程序(DEBUG.EXE或TD.EXE)
实验调试过程:
1、开始菜单,点运行条目,打入cmd命令进入DOS调试环境。
2、在D:\下建立一个自己的子目录。(md d:\zxj)。例如d:\zxj,将D:\TASM目录下的所有程序拷入新建的目录下。
(copy c:\tasm\*.* d:\zxj )
3、进入该目录(cd d:\zxj),键入如下命令开始编辑程序:d:\zxj>edit 文件名.asm
4、将程序保存后返回DOS进行汇编,键入如下命令:d:\zxj>tasm 文件名.asm。如果汇编通过,进行下一步,如果出现错误,返回3步骤,根据错误的行数进行修改,然后重新汇编。
5、将程序进行连接,键入如下命令:d:\zxj>tlink 文件名.obj。如果连接正确,进行下一步,如果错误返回3步骤进行修改,然后重新编译和连接。
6、执行程序,键入如下命令:d:\zxj> 文件名.exe。如果执行正确,则应该显示正确结果;如果执行错误,返回步骤3,重新编译连接和执行。
7、如果不能直接从程序中找出错误,可以应用Debug程序进行调试,键入如下命令:d:\zxj> td 文件名.exe。在找出错误后,重新返回3步骤,重新编译连接和执行。
四、实验源程序(主要部分)和流程图:
1、计算两个多字节十六进制数之差主要代码:
data segment
data1 db 0F8H,60H,0ACH,74H,3BH
data2 db 0C1H,36H,9EH,0D5H,20H
data3 db 5 dup(?)
data ends
-------------------------------------------------
loop1:
mov al,data1[si] mov data3[si],al mov al,data2[si] sbb data3[si],al;要带借位 inc si loop loop1
2、以BUFFER为首地址的内存区存放了10个十六位带符号数,编写程序比较它们的大小主要代码及流程:
data segment
data1 dw 0A978h,4321h,2214h,4225h,0F123h,5643h,8431h,0E322h,9997h,2143h min dw 1 dup(?)
data ends
;--------------------------------
stacks segment stack
db 256 dup(?)
stacks ends
;---------------------------------堆栈区
code segment
assume cs:code,ds:data,ss:stacks
main proc far
start: mov ax,data
mov ds,ax
mov ax,stacks
mov ss,ax
mov si,0
mov ax,data1[si]
mov min,ax
mov si,2;字型数据,一次加2
mov cx,9
loop1: mov ax,data1[si]
mov bx,min
ADD si,2 ;字型数据,一次加2
cmp ax,bx
JGE loop2;有符号数的跳转
mov min,ax
loop2: loop loop1
mov ah,4ch
int 21h
main endp
code ends
end start
3、比较两个字符串是否完全相同(选做)代码: data segment
string1 db 0dh,0ah,'abceefghij'
data ends
ess segment
string2 db 0dh,0ah,'abcdefghij'
ess ends
code segment
assume cs:code,ds:data,ss:stacks,es:ess
main proc far
start: mov ax,data
mov ds,ax
mov ax,stacks
mov ss,ax
mov ax,ess
mov es,ax
mov si,offset string1;
mov di,offset string2;默认寻
址附加段,所以string2定义在附加段
cld
mov cx,10
REPE CMPSB
MOV ax,0
CMP cx,ax
JBE L1;有符号数的比较
JA L2
L1: mov bl,00h;结果判断
JMP L3
L2: mov bl,0ffh
mov si,cx
L3: mov ah,4ch
int 21h
main endp
code ends
end start
五、实验结果以及遇到的问题和解决办法:
实验结果:
1、计算两个多字节十六进制数之差:
Ds段最后非0的五位就是结果,在前面的字节是低位,后面的字节是高位。
2、以BUFFER为首地址的内存区存放了10个十六位带符号数,编写程序比较它们的大小:
一个字占两个字节,所以结果在偏移量为14和15两个字节中:即0054h,这是这组有符号数中最小的数。(这组数据为:24FH,0A41H,54H,6D8FH,8BH,0C45H,999H,0D6H,0E5H,9FH)
3、比较两个字符串是否完全相同(选做) ('abceefghij'和'abcdefghij'):
我自定义的字符串第四个字符是第一个不同的,结果si为4,bl为0ffh,符合题目要求,所以结果正确。
遇到的问题与解决:
1.在找最小值的试验中,因为定义的是字型数据,所以si一次要加2,一开始没有注意这一点,导致实验输出的结果不正确,会是前后两个数据的组合。
解决办法:把inc si改成add si,2
2.在找最小值试验中,一开始把ADD和cmp两行互换,结果导致进位和符号标志位不正确,因此无法正常判断两个字型数据的大小。 解决办法:为了防止意外,以后cmp指令之后要马上跟跳转,否则cmp很可能出现意料之外的结果。
3.在找最小值试验中,一开始用了JAE,比较出的是无符号数。 解决办法:把jae换成jge。
4.在比较字符串是否相同的试验中,一开始没有定义附加段,导致每次结果都是第一位就不同。
解决办法:定义附加段,把string2写在附加段内。或者把附加段和数据段定义为同一段(这个实验内没有问题,不知道其他的实验是否会有问题。)