版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 电控学院虚拟仪器课程设计 院 (系): 专业班级: 姓 名: 学 号: 指导教师: 2011年 12 月 30 日摘 要运用虚拟仪器的设计思想,介绍了一种基于labwindows/cvi软件平台的多路数据采集系统的设计原理及过程。利用labwindows/cvi开发环境设计上位机的监测界面,上位机通过串行口与stcat89c52单片机通信,从而实现上位机与下位机之间的同步通信,运用labwindows/cvi进行系统开发具有很强的灵活性,能较容易地实现系统的各项功能,并使系统具有很强扩展性。关键词:虚拟仪器 stcat89c52单片机 摘 要1第一章 设计要求31.1设计要求31.2设计思路
2、3第二章 原理介绍32.1 labwindows/cvi简介:32.2 labwindows/cvi的应用:3第三章 硬件部分43.1 上位机简介43.2 rs232串口简介53.3 rs-232 接口标准5 3.4 rs-232 缺点.5第四章 上位机界面6第五章 实习心得6第六章 参考文献7第七章 致谢7第八章 附录7第一章 设计要求第一章 设计要求1.1设计要求 1)用虚拟仪器labwindows/cvi画出单片机流水灯相应器件及外围扩展电路。 2)编写虚拟仪器串口程序实现与单片机的连接。 3)从单片机发送数据给pc机,使得虚拟仪器与单片机的流水灯实现同步运行。1.2设计思路 1)首先了
3、解虚拟仪器labwindows/cvi软件和单片机(52型)。 2)用cvi画相应图形并仿真运行。 3)连接单片机和pc机,实现设计最终效果。第二章 原理介绍2.1 labwindows/cvi简介: labwindows/cvi 是national instruments 公司(美国国家仪器公司,简称ni 公司)推出的交互式c 语言开发平台。labwindows/cvi 将功能强大、使用灵活的c 语言平台与用于数据采集分析和显示的测控专业工具有机地结合起来,利用它的集成化开发环境、交互式编程方法、函数面板和丰富的库函数大大增强了c 语言的功能,为熟悉c 语言的开发设计人员编写检测系统、自动测
4、试环境、数据采集系统、过程监控系统等应用软件提供了一个理想的软件开发环境。 开发人员可以在设计阶段利用labwindows/cvi的硬件配置助手、综合调试工具以及交互式执行功能,来运行各项功能,使得这些领域的开发流水线化。labwindows/cvi 是为c 语言程序员提供的软件开发系统,在其交互式开发环境中编写的程序必须符合标准c 规范。2.2 labwindows/cvi的应用:使用labwindows/cvi 可以完成如下工作:交互式的程序开发;具有功能强大的函数库,用来创建数据采集和仪器控制的应用程序;充分利用完备的软件工具进行数据采集、分析和显示;利用向导开发ivi 仪器驱动程序和创
5、建activex 服务器;为其它程序开发c 目标模块、动态连接库(dll)、c 语言库。在labwindows/cvi 开发环境中可以利用其提供的库函数来实现程序设计、编辑、编译、链接和标准c 语言程序调试。在该开发环境中可以用labwindows/cvi 丰富的函数库来编写程序,此外每个函数都有一个叫做函数面板(function panel)的交互式操作界面,在函数面板中可以执行该函数并可以生成调用该函数的代码,也可通过右击面板或控件获得有关函数、参数、函数类和函数库的帮助。在labwindnows/cvi 的交互式环境中编写程序必须符合标准c 语言的规范。另外,在开发应用程序时可以使用编译
6、好的c 语言目标模块,动态链接库(dll),c 静态库和仪器驱动程序。labwindows/cvi 的功能强大在于它提供了丰富的函数库。利用这些库函数除可实现常规的程序设计外,还可实现更加复杂的数据采集和仪器控制系统的开发。仪器库是labwindows/cvi 的特殊资源。它包gpib、vxi 和rs-232 仪器的驱动程序,如示波器、多用表和函数发生器,每个驱动程序都提供可编辑的源代码。使用 labwindows/cvi 开发工具提供的库函数可以创建自己的仪器驱动程序,可以创建单个仪器、多个仪器或实际上并不存在的虚拟仪器的驱动程序,在创建仪器驱动程序过程中可以使用labwindows/cvi
7、 的其它库函数。使用labwindows/cvi 的用户界面编辑器可以创建并编辑图形用户界面(gui),而使用labwindows/cvi 的用户界面库函数可以在程序中创建并控制gui。此外,labwindows/cvi为gui 面板的设计,准备了许多专业控件,如:曲线图控件、带状图控件、表头、旋钮和指示灯等,以适应测控系统软件开发的需求,利用这些控件可以设计出专业的测控程序界面。2009年12月美国国家仪器有限公司(national instruments,简称ni)宣布推出labwindows/cvi 2009,这是最新版本的ansi c开发环境,用于构建可靠的测试与测量解决方案。该软件支
8、持包括可连接labview fpga的c接口在内的pc新技术,能够实现与基于现场可编程门阵列(fpga)的硬件、微软windows 7和64位操作系统的连接,以简化开发和部署labwindows/cvi的应用程序。工程师和科学家们可以通过使用新的软件执行分析工具包,来分析和优化标有图示的应用源代码运行时的性能,而这些图示会显示运行该应用程序的每个阶段所需的时间,以此可以进一步提高应用程序的可靠性和生产效率。此外,labwindows/cvi 2009通过运用最新的属性浏览器提高生产效率,方便了自定义用户界面的快速设计和调试性能的改善。第三章 硬件部分3.1 上位机简介 上位机是指人可以直接发出
9、操控命令的计算机,一般是pc,屏幕上显示各种信号变化(液压,水位,温度等)。上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备。下位机不时读取设备状态数据(一般为模拟量),转换成数字信号反馈给上位机。简言之如此,实际情况千差万别,但万变不离其宗:上下位机都需要编程,都有专门的开发系统。通常上位机和下位机通讯可以采用不同的通讯协议, 可以有rs232的串口通讯,或者采用rs485串行通讯,当用计算机和plc通讯的时候不但可以采用传统的d形式的串行通讯,还可以采用更适合工业控制的双线的profibus-dp通讯,采用封装好的程序开发工具就可以实现plc和上位机的通讯
10、。当然可以自己编写驱动类的接口协议控制上位机和下位机的通讯。目前,在许多单片机应用系统中,上、下位机分工明确,作为下位机核心器件的单片机往往只负责数据的采集和通信,而上位机通常以基于图形界面windows系统作为操作平台。为了便于查询和保存数据,还需要数据库的支持,这种应用的核心是数据通信,它包括单片机的上位机之间、客户端的服务器之间以及客户端的客户端之间的通信,而单片机的上位机之间数据通信则是整个系统的基础。单片机和pc的通信是通过单片机的串口和pc串口之间的硬件连接实现的。3.2 rs232串口简介 rs232是个人计算机上的通讯接口之一,由电子工业协会(electronic indust
11、ries association,eia) 所制定的异步传输标准接口。通常 rs-232 接口以9个引脚 (db-9) 或是25个引脚 (db-25) 的型态出现,一般个人计算机上会有两组 rs-232 接口,分别称为 com1 和 com23.3 rs-232 接口标准 串行通信接口标准经过使用和发展,目前已经有几种。但都是在rs-232标准的基础上经过改进而形成的。所以,以rs-232c为主来讨论。rs-232c标准是美国eia(电子工业联合会)与bell等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在020000b/s范围内的通信。这个标准对串行通信接口的有关问题,如信号
12、线功能、电器特性都作了明确规定。由于通行设备厂商都生产与rs-232c制式兼容的通信设备,因此,它作为一种标准,目前已在微机通信接口中广泛采用。rs-232-c标准规定,驱动器允许有2500pf的电容负载,通信距离将受此电容限制,例如,采用150pf/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是rs-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。串行通信接口标准经过使用和发展,目前已经有几种。但都是在rs-232标准的基础上经过改进而形成的。3.4 rs-232 缺点(1)接口的信号电平值较高
13、,易损坏接口电路的芯片,又因为与ttl电平不兼容故需使用电平转换电路方能与ttl电路连接。 (2)传输速率较低,在异步传输时,波特率为20kbps;因此在“南方的老树51cpld开发板”中,综合程序波特率只能采用19200,也是这个原因。 (3)接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。 (4) 传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在15米左右。第4章 上位机界面第五章 实习心得 一周的实习结束了,我们学到了很多很多,总体来说这次的课程设计总的来说并不是特别容易,虽然我们在课堂上学到了不少有用的知识,可真正实
14、践起来就发现自己缺少的太少。我到图书馆来找过资料,也上网差了不少资料,在查找和阅读的过程中真的学到不少的知识。当然,在做作业的时候我遇到了不少问题,在和周围同学的探讨中我们找到了答案,大家共同进步。通过课程设计让我们更加深刻的体会到实践的重要性,平时我们多是学习理论知识,上机实践的机会少,自己也少练习,在实践方面确实欠缺不少,需要我们今后加强练习。 通过这次实习,我知道了任何事都要靠自己,只有自己的知识才是真正的知识,这让我在以后的工作生活中有了更好的动力!感谢老师的耐心指导和悉心教导。通过此次实习,开阔了我们的视野,使我们的理论和实践结合在一起,也培养了我的实际动手能力,增加了实际的操作经验
15、,更好地为我们今后的工作积累经验。同时也使我们对课本一些比较模糊的概念、抽象的原理有了一个崭新的认识和理解。使我们对以往所学的知识有了更进一步的巩固,对以前没接触过的知识有了深刻地了解,让我们对以后的基本动作有了深入认识。第六章 参考文献labwindows/cvi虚拟仪器测试技术及工程应用化学工业出版社。labview虚拟仪器数据采集与串口通信测控应用实战人民邮电出版社。labwindows/cvi的虚拟仪器设计与应用电子工业出版社。第7章 附录 在这次的实习过程中,我们遇到了各种专业问题和软件操作问题等等,好多都是自己很难解决的,所以就请教了王老师、昝老师和彭老师,很感谢三位老师的耐心讲解
16、,帮助我们解决各种问题,在这里我们组对三位老师表示深深的谢意!当然实验过程中,各位同学也对我们帮助不少,最后感谢好多同学对我组的细微照顾。真挚的谢谢以上同学和老师的帮助!第8章 附录上位机程序清单:/*/*/* file: installcommcallback.c */* purpose: this example illustrates the use of the rs232 librarys installcomcallback */* function to respond to the lwrs_rxflag event. the user will be asked to ent
17、er */* an event character. whenever this event character is detected on the com port, */* a callback function will be executed. */* notes: to run this example you need to do a loopback test, i.e. connect pin 2 to */* pin 3 on the serial port. */*/*/*/* include files */*/#include #include #include #i
18、nclude #include #include commcallback.h#include cfg.h #include /*/* globals */*/static int ghelppanelhandle;static int gpanelhandle;static int gcomcfgpanelhandle; static char geventchar2;char state60=0;char autosavedir1024;char autosavefilename40;char autosavefiledir_name1024;/全路径char validcom20;cha
19、r com_state=com_state_close;char chcurrenttime40;int com_port = 2;long baud_rate = 9600;int parity = 0;int data_bits = 8;int stop_bits = 1;int input_queue_size = 512;int output_queue_size = 512;int sendishex = 0,recvishex = 0;int nautosavetofile = 0;int nfilehandle;/*/* prototypes */*/void cvicallba
20、ck event_char_detect_func (int portno,int eventmask,void *callbackdata);int comdetect(char validcom);int openclosethecom(void);/*/* application entry point. */*/int main (int argc, char *argv)int i,y;if (initcvirte (0, argv, 0) = 0) /* initialize cvi libraries */return -1; /* out of memory */if (gpa
21、nelhandle = loadpanel(0, e:programcvirs232commcallback.uir, panel) 0)return -1;if (ghelppanelhandle = loadpanel(0, commcallback.uir, help_panel) 0)return -1;if (gcomcfgpanelhandle = loadpanel(0, commcallback.uir, com_cfg) 0)return -1;/* open and configure com port 1 */opencomconfig (2, , 9600, 0, 8,
22、 1, 512, 512);/* turn off hardware handshaking (loopback test will not function with it on) */setctsmode (2, lwrs_hwhandshake_off);/* make sure serial buffers are empty */flushinq (2);/flushoutq (2); /* promt the user to enter an event character. */promptpopup (event character, enter the event chara
23、cter, geventchar, 1);/* install a callback such that if the event character appears at the receive buffer, our function will be notified. */installcomcallback (2, lwrs_receive, 1, (int)geventchar0 , event_char_detect_func, 0); setctrlval (gcomcfgpanelhandle, com_cfg_ring_com, com_port);setctrlval (g
24、comcfgpanelhandle, com_cfg_ring_rate, baud_rate);setctrlval (gcomcfgpanelhandle, com_cfg_ring_parity, parity);setctrlval (gcomcfgpanelhandle, com_cfg_ring_data_bit, data_bits);setctrlval (gcomcfgpanelhandle, com_cfg_ring_stop_bit, stop_bits);setctrlval (gcomcfgpanelhandle, com_cfg_numeric_inq_len, i
25、nput_queue_size);setctrlval (gcomcfgpanelhandle, com_cfg_numeric_outq_len, output_queue_size);/update com stateflashstate();setctrlval (gpanelhandle, panel_string,state);/set com state colorsetctrlattribute (gpanelhandle, panel_string, attr_text_color, val_black); /set led color setctrlattribute (gp
26、anelhandle,panel_led , attr_on_color, val_green);setctrlattribute (gpanelhandle,panel_led , attr_off_color, val_dk_gray); /getcurrentdirgetdir (autosavedir);/将探测的存在的串口加入到 串口选择的下拉列表中y = comdetect(validcom);char comname5 = com00;for(i=0;iy;i+)fmt(comname,com%d,validcomi);insertlistitem (gcomcfgpanelha
27、ndle, com_cfg_ring_com, i, comname,(int)validcomi);/setctrlattribute (gcomcfgpanelhandle, com_cfg, attr_label_text, );/setctrlattribute (gcomcfgpanelhandle, com_cfg, attr_ctrl_val, );/* display the panel and run the ui */displaypanel (gpanelhandle);runuserinterface ();/* close the open com port befo
28、re exiting */closecom (com_port);/* discard the loaded panels from memory */discardpanel (gpanelhandle);discardpanel (ghelppanelhandle);return 0;/可用串口探测/参数:/ validcom,输出可用串口id号/返回:/ 可用串口数量(0-127),0为无串口可以使用int comdetect(char validcom)int i = 0;int j = 0;int comstate = 0;int validnum = 0;for(i=1;i=0 )
29、closecom(i);if( (comstate=0)|(comstate=-7) )/-7 cannot open port validnum+;/可用串口数量加1 validcomj+ = i;/记录可用串口id号/printf(%d:%dn,i,comstate);return validnum;/*/* senddata (): respond to the send button to send characters out of the serial port. */*/* event_char_detect_func (): fuction called when the ev
30、ent character is detected. */*/void cvicallback event_char_detect_func (int portno,int eventmask,void *callbackdata)char outmessage256;char readbufcom_buf_len = 0;unsigned char hexbufcom_buf_len = 0;int strlen;int i,j;/fmt (outmessage, %s (int)com_buf_len)messagepopup (warning!,自定义的串口缓冲区太小);/return;
31、i = j = 0;if( recvishex = 1 )comrd (com_port, hexbuf, strlen);for(i = 0;i 4) 4) + 0;elseif( (hexbufi4) 4) + a - 10;if( (hexbufi&0x0f) 0x0a )readbufj+ = (hexbufi&0x0f) + 0;elseif( (hexbufi&0x0f) = 0x0f )readbufj+ = (hexbufi&0x0f) + a - 10;readbufj+ = ;readbufj+ = 0;elsecomrd (com_port, readbuf, strle
32、n);setctrlval (gpanelhandle, panel_outout_string, readbuf);if ( readbuf0=da ) setctrlval (gpanelhandle, panel_led2, 1); setctrlval (gpanelhandle, panel_led3 ,0); setctrlval (gpanelhandle, panel_led4, 1); setctrlval (gpanelhandle, panel_led5,0); setctrlval (gpanelhandle, panel_led6,1);setctrlval (gpa
33、nelhandle, panel_led7,0);setctrlval (gpanelhandle, panel_led8,1);setctrlval (gpanelhandle, panel_led9,0);if(readbuf0=a5) setctrlval (gpanelhandle, panel_led2,0); setctrlval (gpanelhandle, panel_led3 ,1); setctrlval (gpanelhandle, panel_led4, 0); setctrlval (gpanelhandle, panel_led5,1); setctrlval (g
34、panelhandle, panel_led6,0);setctrlval (gpanelhandle, panel_led7,1);setctrlval (gpanelhandle, panel_led8,0);setctrlval (gpanelhandle, panel_led9,1);if(readbuf0=ca) setctrlval (gpanelhandle, panel_led2, 1); setctrlval (gpanelhandle, panel_led3 ,0); setctrlval (gpanelhandle, panel_led4, 1); setctrlval
35、(gpanelhandle, panel_led5,0); setctrlval (gpanelhandle, panel_led6,1);setctrlval (gpanelhandle, panel_led7,0);setctrlval (gpanelhandle, panel_led8,1);setctrlval (gpanelhandle, panel_led9,0);if(readbuf0=b5) setctrlval (gpanelhandle, panel_led2, 0); setctrlval (gpanelhandle, panel_led3 ,1); setctrlval
36、 (gpanelhandle, panel_led4, 0); setctrlval (gpanelhandle, panel_led5,1); setctrlval (gpanelhandle, panel_led6,0);setctrlval (gpanelhandle, panel_led7,1);setctrlval (gpanelhandle, panel_led8,0);setctrlval (gpanelhandle, panel_led9,1);if(nautosavetofile = 1)writefile (nfilehandle, readbuf, strlen(read
37、buf);writefile (nfilehandle, n, 1);return; /*/* help (): display help text. */*/int cvicallback help (int panel, int control, int event, void *callbackdata, int eventdata1,int eventdata2)switch (event)case event_commit:setctrlattribute (ghelppanelhandle, help_panel_textbox, attr_text_color, val_blue
38、);installpopup (ghelppanelhandle);break;return 0;/*/* quithelpcb (): remove help text. */*/int cvicallback quithelp (int panel, int control, int event, void *callbackdata, int eventdata1, int eventdata2)switch (event) case event_commit:removepopup (0);break;return 0;/*/* receivedata (): read the dat
39、a on the serial com port. */*/int cvicallback receivedata (int panel, int control, int event, void *callbackdata, int eventdata1, int eventdata2)char readbuf1 = 0;int strlen = 0;switch (event)case event_commit:/* read the characters from the port */if( getcomstat(com_port) (int)com_buf_len) messagep
40、opup (warning!,自定义的串口缓冲区太小);/ return 0; else if( strlen = 0 ) messagepopup (warning!,无接收数据);/ return 0; comrd (com_port, readbuf, strlen); / setctrlval (gpanelhandle, panel_outout_string, readbuf); messagepopup(dsdd,dd);if ( readbuf0=d9 ) setctrlval (gpanelhandle, panel_led2, 0); setctrlval (gpanelh
41、andle, panel_led3 ,1); setctrlval (gpanelhandle, panel_led4, 1); setctrlval (gpanelhandle, panel_led5,0); setctrlval (gpanelhandle, panel_led6,0);setctrlval (gpanelhandle, panel_led7,1);setctrlval (gpanelhandle, panel_led8,1);setctrlval (gpanelhandle, panel_led9,0);if(readbuf=c9) setctrlval (gpanelhandle, panel_led2, 0); setctrlval (gpanelhandle, panel_led3 ,1); setctrlval (gpanelhandle, panel_led4, 1); setctrlval (gpanelhandle, panel_led5,0); setctrlval (gpanelhandle, panel_led6,0);s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- CCU团队对AMI后并发症的早期识别模拟训练
- 2025年青海省公务员行测真题模拟试卷含答案
- 2025年城市垃圾分类与处理体系建设可行性研究报告及总结分析
- 2025年快闪店商业模式探索可行性研究报告及总结分析
- 2025年深度学习应用研究项目可行性研究报告及总结分析
- 2025年环境监测与评估系统项目可行性研究报告及总结分析
- 2025年无人机技术在农业中的应用研究项目可行性研究报告及总结分析
- 2025年妇女儿童健康管理服务项目可行性研究报告及总结分析
- 2025年智慧社区建设与管理模式可行性研究报告及总结分析
- 2025年新型医疗健康服务模式可行性研究报告及总结分析
- 《国债逆回购》课件
- 压力性损伤预防及护理
- 胎膜早破的诊断
- 广州专业批发市场概况
- 职业介绍中介服务收费项目和标准表
- 产品过程特殊特性初始清单(示例)
- GB/T 15843.6-2018信息技术安全技术实体鉴别第6部分:采用人工数据传递的机制
- 表现主义-蒙克《呐喊》赏析微课 课件
- 药物的代谢转化课件
- 第24课《愚公移山》-部编版语文八年级上册
- 慢性阻塞性肺疾病的康复护理讲解
评论
0/150
提交评论