ImageVerifierCode 换一换
格式:DOCX , 页数:39 ,大小:1.59MB ,
资源ID:3837270      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3837270.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(LabVIEW串口通信程序设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

LabVIEW串口通信程序设计.docx

1、LabVIEW串口通信程序设计第13章 LabVIEW串口通信程序设计以PC作为上位机,以调制解调器(Modem)、串行打印机、各种监控模块、PLC、摄像头云台、数控机床、单片机及智能设备等作为下位机广泛应用于测控领域。本章举几个典型实例,详细介绍利用LabVIEW实现PC与各种下位机设备串口通信的程序设计方法。13.1 PC与PC串口通信当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需三根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。本设计通过两台PC串口三线连接,介绍了串口通信的基本编程方法。13.1.1 PC与PC串口通信硬件线路当两台RS-232串口设

2、备通信距离较近时(15m)时,需附加调制解调器(Modem)。在RS-232的应用中,很少严格按照RS-232标准。其主要原因是因为许多定义的信号在大多数的应用中并没有用上。在许多应用中,例如Modem,只用了9个信号(两条数据线、6条控制线、一条地线);在其他一些应用中,可能只需要5个信号(两条数据线、两条握手线、一条地线);还有一些应用,可能只需要数据线,而不需要握手线,即只需要3个信号线。因为在控制领域,在近距离通信时常采用RS-232,所以这里只对近距离通信的线路连接进行讨论。当通信距离较近时,通信双方不需要Modem,可以直接连接,这种情况下,只需使用少数几根信号线。最简单的情况,在

3、通信中根本不需要RS-232C的控制联络信号,只需三根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。在实际使用中常使用串口通信线将两个串口设备连接起来。串口线的制作方法非常简单:准备两个9针的串口接线端子(因为计算机上的串口为公头,因此连接线为母头),准备3根导线(最好采用3芯屏蔽线),按图13-1所示将导线焊接到接线端子上。图13-1 串口通信线的制作图13-2所示中的2号接收脚与3号发送脚交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可发也可收。在这种方式下,通信双方的任何一方,只要请求发送RTS有效和数据终端准备好DTR有效就能开始发送和接收。 图13-

4、2 PC与PC串口通信线路在计算机通电前,按图13-2所示将两台PC的COM1口用串口线连接起来。连接串口线时,计算机严禁通电,否则极易烧毁串口。13.1.2 设计任务利用LabVIEW编写程序实现PC与PC串口通信。任务要求如下。两台计算机互发字符并自动接收,如一台计算机输入字符串“收到信息请回字符abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“收到,abc123”,单击“发送字符”命令,信息返回到第一组的计算机。实际上就是编写一个简单的双机聊天程序。13.1.3 任务实现1建立新VI程序启动NI LabVIEW程序,选择新建(New)选项中的VI项,建立一个新VI程

5、序。2程序前面板设计 在前面板设计区空白处单击鼠标右键,显示控件选板(Controls)。(1)添加一个字符串输入控件:控件(Controls)新式(Modern)字符串与路径(String & Path)字符串输入控件(String Control),将标签改为“发送区:”。(2)添加一个字符串显示控件:控件(Controls)新式(Modern)字符串与路径(String & Path) 字符串显示控件(String Indicator),将标签改为“接收区:”。(3)添加一个串口资源检测控件:控件(Controls)新式(Modern) I/O VISA资源名称(VISA resourc

6、e name);单击控件箭头,选择串口号,如COM1或ASRL1:。(4)添加一个确定(OK)按钮控件:控件(Controls)新式(Modern)布尔(Boolean) 确定按钮(OK Butoon),将标题改为“发送字符”。(5)添加一个停止(Stop)按钮控件:控件(Controls)新式(Modern)布尔(Boolean) 停止按钮(Stop Butoon),将标题改为“关闭程序”。图13-3 程序前面板设计的程序前面板,如图13-3所示。3框图程序设计添加函数 进入框图程序设计界面,在设计区的空白处单击鼠标右键,显示函数选板(Functions)。添加的所有函数及其布置如图13-4

7、所示。详细步骤介绍如下。(1)添加一个配置串口函数:编程(Programming)仪器I/O(Instrument I/O)串口(Serial)VISA配置串口(VISA Configure Serial Port)。图13-4 框图程序函数添加与布置(2)添加4个数值常量:编程(Programming)数值(Numeric) 数值常量(数值常量(Numeric Constant),值分别为9600(波特率)、8(数据位)、0(校验位,无)、1(停止位)。(3)添加两个关闭串口函数:编程(Programming)仪器I/O(Instrument I/O)串口(Serial)VISA关闭(VIS

8、A Close)。(4)添加一个循环结构:编程(Programming)结构(Structures) While 循环(While Loop)。添加理由:随时监测串口接收缓冲区的数据。以下添加的函数或结构放置在While循环结构框架中。(5)添加一个时钟函数:编程(Programming) 定时(Timing) 等待下一个整数倍毫秒(Wait Until Next ms Multiple)。添加理由:以一定的周期监测串口接收缓冲区的数据。(6)添加一个数值常量:编程(Programming)数值(Numeric) 数值常量(Numeric Constant),将值改为500(时钟频率值)。(7

9、)添加一个VISA串口字节数函数:编程(Programming)仪器I/O(Instrument I/O) 串口(Serial) VISA串口字节数(VISA Bytes at Serial Port),标签为“Property Node”。(8)添加一个数值常量:编程(Programming)数值(Numeric)数值常量(Numeric Constant),将值为0(比较值)。(9)添加一个比较函数:编程(Programming) 比较(Comparison) 不等于?(Not Equal ?)。添加理由:只有当串口接收缓冲区的数据个数不等于0时,才将数据读入到接收区。(10)添加一个布尔

10、函数:编程(Programming)布尔(Boolean)非(Not)函数。添加理由:当关闭程序时,将关闭按钮真(True)变为假(False),退出循环。如果将循环结构的条件端子设置为“真时停止(Stop if True)”,则不需要添加非(Not)函数。(11)添加两个条件结构:编程(Programming)结构(Structures) 条件结构(Case Structure)。添加理由:发送字符时,需要单击按钮“发送字符”,因此需要判断是否单击了发送按钮;接收数据时,需要判断串口接收缓冲区的数据个数是否不为0。(12)添加一个串口写入函数:编程(Programming)仪器I/O(Ins

11、trument I/O)串口(Serial)VISA写入(VISA Write),并拖入条件结构(上)的真(True)选项框架中。(13)添加一个串口读取函数:编程(Programming) 仪器I/O(Instrument I/O) 串口(Serial)VISA读取(VISA Read),并拖入条件结构(下)的真(True)选项框架中。(14)将字符输入控件图标(标签为“发送区:”)拖入条件结构(上)的真(True)选项框架中,将字符显示控件图标(标签为“接收区:”)拖入条件结构(下)的真(True)选项框架中。(15)分别将确定(OK)按钮控件图标(标签为“确定按钮(OK Button)”

12、)、停止(Stop)按钮控件图标(标签为“停止按钮(Stop Button)”)拖入循环结构框架中。4框图程序设计连线使用连线工具,将所有函数连接起来,如图13-5所示。图13-5 框图程序连线(1)将VISA资源名称(VISA resource name)函数的输出端口分别与串口配置(VISA Configure Serial Port)函数、串口字节数(VISA Bytes at Serial Port)函数、串口写入(VISA Write)函数、串口读取(VISA Read)函数的输入端口VISA资源名称(VISA resource name)相连。(2)将数值常量9600、8、0、1分

13、别与串口配置(VISA Configure Serial Port)函数的输入端口波特率(baud rate)、数据比特(data bits)、奇偶(parity)、停止位(stop bits)相连。(3)将数值常量(值为500)与等待下一个整数倍毫秒(Wait Until Next ms Multiple)函数的输入端口毫秒倍数(millisecond multiple)相连。(4)将确定按钮图标“OK Button”与条件结构(上)的选择端子?相连。(5)将串口字节数(VISA Bytes at Serial Port)函数的输出端口Number of bytes at Serial po

14、rt与不等于?(Not Equal ?)函数的输入端口x相连。将串口字节数(VISA Bytes at Serial Port)函数的输出端口Number of bytes at Serial port与串口读取(VISA Read)函数的输入端口字节总数(byte count)相连。(6)将数值常量(值为0)与不等于?(Not Equal ?)函数的输入端口y相连。(7)将不等于?(Not Equal ?)函数的输出端口x != y? 与条件结构(下)的选择端子?相连。(8)在条件结构(上)中将字符输入控件图标(标签为“发送区:”)与串口写入(VISA Write)函数的输入端口写入缓冲区(

15、write buffer)相连。(9)在条件结构(下)中将串口读取(VISA Read)函数的输出端口读取缓冲区(read buffer)与字符显示控件图标(标签为“接收区:”)相连。(10)将停止按钮(Stop Button)函数与非(Not)函数的输入端口x相连。(11)将非(Not)函数的输出端口.not. x ? 与循环结构的条件端子相连。(12)在条件结构(上)中将串口写入(VISA Write)函数的输出端口VISA资源名称输出(VISA resource name out)与串口关闭(VISA Close)函数(上)的输入端口VISA资源名称(VISA resource name

16、)相连。(13)在条件结构(下)中将串口读取(VISA Read)函数的输出端口VISA资源名称输出与关闭串口函数VISA Close(下)的输入端口VISA资源名称相连。(14)进入两个条件结构的假(False)选项,将VISA资源名称函数的输出端口分别与串口关闭(VISA Close)函数(上、下)的输入端口VISA资源名称相连,如图13-6所示。5运行程序进入程序前面板,保存设计好的VI程序。单击快捷工具栏“运行(Run)”按钮,运行程序。两台计算机同时运行本程序。在一台计算机程序窗体中发送字符区输入要发送的字符,比如“收到信息请回字符abc123”,单击“发送字符”按钮,发送区的字符串

17、通过COM1口发送出去。如果联网通信的另一台计算机程序收到字符,则返回字符串,如“收到,abc123”;如果通信正常该字符串将显示在接收区中。程序运行界面如图13-7所示。 图13-6 框图程序连线 图13-7 程序运行界面6单PC双串口互通信程序如果只有一台计算机且具有两个串口,那么可以通过串口线将两个串口直接连接起来,如图13-8所示,编写程序实现双串口互通信。图13-9是单PC双串口互通信程序的前面板。图13-10是单PC双串口互通信程序的后面板。(a) (b)图13-8 双串口直接连接图13-9 单PC双串口互通信程序的前面板图13-10 单PC双串口互通信程序的后面板13.2 PC与

18、单片机串口通信程序设计目前,在许多单片机应用系统中,上、下位机分工明确,作为下位机核心器件的单片机往往只负责数据的采集和通信,而上位机通常以基于图形界面的Windows系统为操作平台。为便于查询和保存数据,还需要数据库的支持,这种应用的核心是数据通信,它包括单片机和上位机之间、客户端和服务器之间以及客户端和客户端之间的通信,而单片机和上位机之间数据通信则是整个系统的基础。图13-11 单片机实验板单片机和PC的通信是通过单片机的串口和PC串口之间的硬件连接实现的。图13-11所示是本设计使用的单片机实验板。有关单片机实验板的详细信息请查询电子开发网http:/www.dzkfw. com/。1

19、3.2.1 PC与单片机串口通信程序设计硬件线路PC图13-12 PC与单片机串口通信线路如图13-12所示,数据通信的硬件上采用3线制,将单片机和PC串口的3个引脚(RXD、TXD、GND)分别连在一起,即将PC和单片机的发送数据线TXD与接收数据RXD交叉连接,两者的地线GND直接相连,而其他信号线,如握手信号线均不用,采用软件握手的方式,这样既可以实现预定的任务又可以简化电路设计。但由于单片机的TTL逻辑电平和RS-232C的电气特性完全不同,RS-232C的逻辑0电平规定为+3V+15V之间,逻辑1电平为3V15V之间,因此在将PC和单片机的RXD和TXD交叉连接时必须进行电平转换,这

20、里使用的是MAX232电平转换芯片。单片机系统有LED显示器模块、继电器输出模块、蜂鸣器模块等。13.2.2 PC与单片机串口通信程序设计任务利用Keil C51和LabVIEW编写程序实现PC与单片机串口通信。任务要求有以下几方面。1设计任务一PC通过串行口将数字(00,01,02,03.,FF,十六进制)发送给单片机,单片机收到后回传这个数字,PC接收到回传数据后显示出来,若发送的数据和接收到的数据相等,则串行通信正确,否则有错误。启始符是数字00,结束符是数字FF。2设计任务二(1)测试通信状态。先在文本框中输入字符串“Hello”,单击“测试”按钮,将字符串“Hello”发送到单片机,

21、若PC与单片机通信正常,在PC程序的文本框中显示字符串“OK!”,否则显示字符串“ERROR!”。(2)循环计数。单击“开始”按钮,文本框中数字从0开始累加,0、1、2、3,并将此数发送到单片机的显示器上显示。当累加到10时,回到0重新开始累加,依次循环。任何时候,单击“停止”按钮,PC程序中和单片机显示器都停止累加;再单击“开始”按钮,接着停下的数继续累加。(3)控制指示灯。在单片机继电器接线端子的两个通道上分别接上两个指示灯,在PC程序画面上选择指示灯号,如1号灯,单击画面“打开”按钮,单片机上1号灯亮,同时蜂鸣器响;单击画面“关闭”按钮,1号灯灭,蜂鸣器停止响,同样控制2号灯的亮灭(蜂鸣

22、器同时动作)。单片机和PC通信,在程序设计上涉及两个部分的内容。一是单片机的C51程序,二是PC的串口通信程序和界面的编制。13.2.3 任务实现13.2.3.1 利用Keil C51实现单片机与PC串口通信任务一Keil C51软件是众多单片机应用开发的优秀软件之一,它集编辑、编译、仿真于一体,支持汇编、PLM语言和C语言的程序设计,界面友好,易学易用。启动Keil C51,出现编辑界面。1建立一个新工程单击Project菜单,在弹出的下拉菜单中选中New Project选项,出现Create New Project对话框,然后选择要保存的路径、文件夹,输入工程文件的名字,如pc_com(后

23、缀名默认),单击“保存”按钮。这时会弹出一个 “Select Device for Target Target 1” 对话框,要求用户选择单片机的型号,可以根据使用的单片机来选择,Keil C51几乎支持所有的51核的单片机。这里选择Atmel 的89C51。选择89C51之后,右边一栏是对这个单片机的基本的说明,然后单击“确定”按钮。2编写程序单击“File”菜单,再在下拉菜单中单击“New”选项。此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但建议首先保存该空白的文件。单击菜单上的“File”项,在下拉菜单中选中“Save As”选项,在“文件名”栏右侧的编辑框中键入欲使用的文件

24、名,同时,必须键入正确的扩展名,如pc_com.c,然后单击“保存”按钮。如果用语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。回到编辑界面后,单击“Target 1”前面的“”号,再在“Source Group 1”上单击鼠标右键,弹出快捷菜单,然后单击“Add File to GroupSource Group 1”。选中pc_com.c,然后单击“Add”按钮,再单击“Close”按钮。此时注意到“Source Group 1”文件夹中多了一个子项“pc_com.c”。子项的多少与所增加的源程序的多少相同。现在,请输入C语言源程序。在输入程序时,读者

25、可以发现事先保存待编辑的文件的好处,即Keil C51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。3编译程序单击“Project”菜单,在下拉菜单中选择“Options for TargetTarget 1”选项,出现对话框;选择Output选项卡,选中“Create HEX Files”项,单击“确定”按钮。再单击“Project”菜单,在下拉菜单中选择“Built Target”选项(或者使用快捷键F7),进行编译。若有错误会在output窗口提示,可根据此提示,找出错误并修改,直至编译通过,如图13-13所示。图13-13 Keil C51

26、编译界面至此,用Keil C51上做了一个完整工程,其中,生成一个编程器烧写文件pc_com.hex。4烧录程序将AT89C51芯片安装在编程器插座上,运行编程器程序。选择单片机芯片类型AT89C51,读入Intel Hex文件pc_com.hex,执行自动编程指令,将pc_com.hex文件烧录入AT89C51芯片中。将烧录好的AT89C51芯片安装到单片机实验板上,就可以用串口调试助手程序对它进行测试了。以下是完成单片机与PC串口通信任务1的C51参考程序:# pragma db code# include# define uchar unsigned charvoid rece(void

27、);void init(void);uchar re17;/*主程序*/void main(void) uchar temp;init();do while(RI=0); temp=SBUF; if(temp=0x00) rece(); else break; while(1); /*串口初始化*/void init(void)TMOD=0x20; /定时器1-方式2 PCON=0x80; /电源控制SCON=0x50; /方式1TL1=0xF3; TH1=0xF3; /22.1184MHz晶振,波特率为4800 0xf3 9600 0xfa 19200 0xfd TR1=1; /*接收返回数

28、据*/void rece(void)char i;i=0;dowhile(RI=0); rei=SBUF; RI=0; SBUF=rei; while(TI=0); TI=0; i+; while(rei-1!=255);13.2.3.2 利用LabVIEW实现PC与单片机串口通信任务一1建立新VI程序启动NI LabVIEW程序,选择新建(New)选项中的VI项,建立一个新VI程序。2程序前面板设计 在前面板设计区空白处单击鼠标右键,显示控件选板(Controls)。(1)添加一个字符串输入控件:控件(Controls)新式(Modern)字符串与路径(String & Path) 字符串输

29、入控件(String Control),将标签改为“发送数据(十六进制)”,在该控件上单击鼠标右键,在弹出的快捷菜单中选择“十六进制显示(Hex Display)”。(2)添加一个字符串显示控件:控件(Controls)新式(Modern)字符串与路径(String & Path)字符串显示控件(String Indicator),将标签改为“返回数据(十六进制)”,在该控件上单击鼠标右键,在弹出的快捷菜单中选择“十六进制显示(Hex Display)”。(3)添加一个字符显示控件:控件(Controls)新式(Modern)字符串与路径(String & Path)字符串显示控件(Strin

30、g Indicator),将标签改为“通信状态”。(4)添加一个串口资源检测控件:控件(Controls)新式(Modern) I/O VISA资源名称(VISA resource name);单击控件箭头,选择串口号,如ASRL1:或COM1。图13-14 程序前面板(5)添加一个确定按钮控件:控件(Controls)新式(Modern)布尔(Boolean)确定按钮(OK Butoon),将标题改为“发送”。(6)添加一个停止按钮控件:控件(Controls)新式(Modern)布尔(Boolean)停止按钮(Stop Butoon),将标题改为“关闭”。设计的程序前面板如图13-14所示

31、。3框图程序设计添加函数与连线 进入框图程序设计界面,在设计区的空白处单击鼠标右键,显示函数选板(Functions)。(1)添加一个配置串口函数:编程(Programming) 仪器I/O(Instrument I/O) 串口(Serial) VISA配置串口(VISA Configure Serial Port)。(2)添加4个数值常量:编程(Programming) 数值(Numeric) 数值常量(Numeric Constant),值分别为4800(波特率)、8(数据位)、0(校验位,无)、1(停止位)。(3)添加一个While循环结构:编程(Programming) 结构(Structures) While 循环(While Loop)。(4)添加一个关闭串口函数:编程(Progra

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1