您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > LabVIEW串口通信程序设计
LLaabbVVIIEEWW串串口口通通信信程程序序设设计计以PC作为上位机,以调制解调器(Modem)、串行打印机、各种监控模块、PLC、摄像头云台、数控机床、单片机及智能设备等作为下位机广泛应用于测控领域。本章举几个典型实例,详细介绍利用LabVIEW实现PC与各种下位机设备串口通信的程序设计方法。13.1PC与PC串口通信当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需三根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。本设计通过两台PC串口三线连接,介绍了串口通信的基本编程方法。13.1.1PC与PC串口通信硬件线路当两台RS-232串口设备通信距离较近时(15m),可以用电缆线直接将两台设备的RS-232端口连接;若通信距离较远(15m)时,需附加调制解调器(Modem)。在RS-232的应用中,很少严格按照RS-232标准。其主要原因是因为许多定义的信号在大多数的应用中并没有用上。在许多应用中,例如Modem,只用了9个信号(两条数据线、6条控制线、一条地线);在其他一些应用中,可能只需要5个信号(两条数据线、两条握手线、一条地线);还有一些应用,可能只需要数据线,而不需要握手线,即只需要3个信号线。因为在控制领域,在近距离通信时常采用RS-232,所以这里只对近距离通信的线路连接进行讨论。当通信距离较近时,通信双方不需要Modem,可以直接连接,这种情况下,只需使用少数几根信号线。最简单的情况,在通信中根本不需要RS-232C的控制联络信号,只需三根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。在实际使用中常使用串口通信线将两个串口设备连接起来。串口线的制作方法非常简单:准备两个9针的串口接线端子(因为计算机上的串口为公头,因此连接线为母头),准备3根导线(最好采用3芯屏蔽线),按图13-1所示将导线焊接到接线端子上。LabVIEW串口通信程序设计–283–123456789123456789图13-1串口通信线的制作图13-2所示中的2号接收脚与3号发送脚交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可发也可收。在这种方式下,通信双方的任何一方,只要请求发送RTS有效和数据终端准备好DTR有效就能开始发送和接收。COM1串口线PC机APC机BCOM1图13-2PC与PC串口通信线路在计算机通电前,按图13-2所示将两台PC的COM1口用串口线连接起来。连接串口线时,计算机严禁通电,否则极易烧毁串口。13.1.2设计任务利用LabVIEW编写程序实现PC与PC串口通信。任务要求如下。两台计算机互发字符并自动接收,如一台计算机输入字符串“收到信息请回字符abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“收到,abc123”,单击“发送字符”命令,信息返回到第一组的计算机。实际上就是编写一个简单的双机聊天程序。13.1.3任务实现1.建立新VI程序启动NILabVIEW程序,选择新建(New)选项中的VI项,建立一个新VI程序。2.程序前面板设计在前面板设计区空白处单击鼠标右键,显示控件选板(Controls)。(1)添加一个字符串输入控件:控件(Controls)→新式(Modern)→字符串与路径(String&Path)→字符串输入控件(StringControl),将标签改为“发送区:”。LabVIEW虚拟仪器数据采集与串口通信测控应用实战–284–(2)添加一个字符串显示控件:控件(Controls)→新式(Modern)→字符串与路径(String&Path)→字符串显示控件(StringIndicator),将标签改为“接收区:”。(3)添加一个串口资源检测控件:控件(Controls)→新式(Modern)→I/O→VISA资源名称(VISAresourcename);单击控件箭头,选择串口号,如COM1或ASRL1:。(4)添加一个确定(OK)按钮控件:控件(Controls)→新式(Modern)→布尔(Boolean)→确定按钮(OKButoon),将标题改为“发送字符”。(5)添加一个停止(Stop)按钮控件:控件(Controls)→新式(Modern)→布尔(Boolean)→停止按钮(StopButoon),将标题改为“关闭程序”。设计的程序前面板,如图13-3所示。3.框图程序设计——添加函数进入框图程序设计界面,在设计区的空白处单击鼠标右键,显示函数选板(Functions)。添加的所有函数及其布置如图13-4所示。详细步骤介绍如下。(1)添加一个配置串口函数:编程(Programming)→仪器I/O(InstrumentI/O)→串口(Serial)→VISA配置串口(VISAConfigureSerialPort)。图13-4框图程序函数添加与布置(2)添加4个数值常量:编程(Programming)→数值(Numeric)→数值常量(数值常量(NumericConstant),值分别为9600(波特率)、8(数据位)、0(校验位,无)、1(停止位)。(3)添加两个关闭串口函数:编程(Programming)→仪器I/O(InstrumentI/O)→串口(Serial)→VISA关闭(VISAClose)。(4)添加一个循环结构:编程(Programming)→结构(Structures)→While循环(WhileLoop)。添加理由:随时监测串口接收缓冲区的数据。以下添加的函数或结构放置在While循环结构框架中。(5)添加一个时钟函数:编程(Programming)→定时(Timing)→等待下一个整数倍毫秒(WaitUntilNextmsMultiple)。添加理由:以一定的周期监测串口接收缓冲区的数据。图13-3程序前面板LabVIEW串口通信程序设计–285–(6)添加一个数值常量:编程(Programming)→数值(Numeric)→数值常量(NumericConstant),将值改为500(时钟频率值)。(7)添加一个VISA串口字节数函数:编程(Programming)→仪器I/O(InstrumentI/O)→串口(Serial)→VISA串口字节数(VISABytesatSerialPort),标签为“PropertyNode”。(8)添加一个数值常量:编程(Programming)→数值(Numeric)→数值常量(NumericConstant),将值为0(比较值)。(9)添加一个比较函数:编程(Programming)→比较(Comparison)→不等于?(NotEqual?)。添加理由:只有当串口接收缓冲区的数据个数不等于0时,才将数据读入到接收区。(10)添加一个布尔函数:编程(Programming)→布尔(Boolean)→非(Not)函数。添加理由:当关闭程序时,将关闭按钮真(True)变为假(False),退出循环。如果将循环结构的条件端子设置为“真时停止(StopifTrue)”,则不需要添加非(Not)函数。(11)添加两个条件结构:编程(Programming)→结构(Structures)→条件结构(CaseStructure)。添加理由:发送字符时,需要单击按钮“发送字符”,因此需要判断是否单击了发送按钮;接收数据时,需要判断串口接收缓冲区的数据个数是否不为0。(12)添加一个串口写入函数:编程(Programming)→仪器I/O(InstrumentI/O)→串口(Serial)→VISA写入(VISAWrite),并拖入条件结构(上)的真(True)选项框架中。(13)添加一个串口读取函数:编程(Programming)→仪器I/O(InstrumentI/O)→串口(Serial)→VISA读取(VISARead),并拖入条件结构(下)的真(True)选项框架中。(14)将字符输入控件图标(标签为“发送区:”)拖入条件结构(上)的真(True)选项框架中,将字符显示控件图标(标签为“接收区:”)拖入条件结构(下)的真(True)选项框架中。(15)分别将确定(OK)按钮控件图标(标签为“确定按钮(OKButton)”)、停止(Stop)按钮控件图标(标签为“停止按钮(StopButton)”)拖入循环结构框架中。4.框图程序设计——连线使用连线工具,将所有函数连接起来,如图13-5所示。LabVIEW虚拟仪器数据采集与串口通信测控应用实战–286–图13-5框图程序连线(1)将VISA资源名称(VISAresourcename)函数的输出端口分别与串口配置(VISAConfigureSerialPort)函数、串口字节数(VISABytesatSerialPort)函数、串口写入(VISAWrite)函数、串口读取(VISARead)函数的输入端口VISA资源名称(VISAresourcename)相连。(2)将数值常量9600、8、0、1分别与串口配置(VISAConfigureSerialPort)函数的输入端口波特率(baudrate)、数据比特(databits)、奇偶(parity)、停止位(stopbits)相连。(3)将数值常量(值为500)与等待下一个整数倍毫秒(WaitUntilNextmsMultiple)函数的输入端口毫秒倍数(millisecondmultiple)相连。(4)将确定按钮图标“OKButton”与条件结构(上)的选择端子?相连。(5)将串口字节数(VISABytesatSerialPort)函数的输出端口NumberofbytesatSerialport与不等于?(NotEqual?)函数的输入端口x相连。将串口字节数(VISABytesatSerialPort)函数的输出端口NumberofbytesatSerialport与串口读取(VISARead)函数的输入端口字节总数(bytecount)相连。(6)将数值常量(值为0)与不等于?(NotEqual?)函数的输入端口y相连。(7)将不等于?(NotEqual?)函数的输出端口x!=y?与条件结构(下)的选择端子?相连。(8)在条件结构(上)中将字符输入控件图标(标签为“发送区:”)与串口写入(VISAWrite)函数的输入端口写入缓冲区(writebuffer)相连。(9)在条件结构(下)中将串口读取(VISARead)函数的输出端口读取缓冲区(readbuffer)与字符显示控件图标(标签为“接收区:”)相连。(10)将停止按钮(StopButton)函数与非(Not)函数的输入端口x相连。(11)将非(Not)函数的输出端口.not.x?与循环结构的条件端子相连。(12)在条件结构(上)中将串口写入(VISAWrite)函数的输出端口VISA资源名称输出(VISAresourcenameout)与串口关闭(VISAClose)函数(上)的输入端口VISA资源名称(VISAresourcename)相连。(13)在条件结构(下)中将串口读取(VISARead)函数的输出端口VISA资源名称输出与关闭串口函数VISAClose(下)的输入端口VISA资源名称相连。(14)进入两个条件结构的假(False)选项,将VISA资源名称函数的输出端口分别与串口关闭(VISAClose)函数(上、下)的输入端口VISA资源名称相连,如图LabVIEW串口通信程序设计–287–13-6所示。5.运行程序进入程序前面板,保存设计好的VI程序。单击快捷工具栏“运行(Run)”按钮,运行程序。两台计算机同时运行本程序。在一台计算机程序窗体中发送字符区输入要发送的字符,比如“收到信息请回字符abc123”,单击“发送字符”按钮,发送区的字符串通过COM1口发送出去。如果联网通信的另一台计算机程序收到字符,则返回字符串,如“收到,abc123”;如果通信正常该字符串将显示在接收区中。程序运行界面如图13-7所示。图13-6框图
本文标题:LabVIEW串口通信程序设计
链接地址:https://www.777doc.com/doc-1820575 .html