教你如何使用Labview与单片机通信(串口)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2)将数值常量 9600、8、0、1 分别与串口配置(VISA Configure Serial Port)函数的输 入端口波特率(baud rate)、数据比特(data bits)、奇偶(parity)、停止位(stop bits)相连。
(3)将数值常量(值为 500)与等待下一个整数倍毫秒(Wait Until Next ms Multiple)函 数的输入端口毫秒倍数(millisecond multiple)相连。
– 285 –
LabVIEW 虚拟仪器数据采集与串口通信测控应用实战
Write)函数的输入端口写入缓冲区(write buffer)相连。 (9)在条件结构(下)中将串口读取(VISA Read)函数的输出端口读取缓冲区(read buffer)
与字符显示控件图标(标签为“接收区:”)相连。 (10)将停止按钮(Stop Button)函数与非(Not)函数的输入端口 x 相连。 (11)将非(Not)函数的输出端口.not. x ? 与循环结构的条件端子 相连。 (12)在条件结构(上)中将串口写入(VISA Write)函数的输出端口 VISA 资源名称输
– 284 –
ቤተ መጻሕፍቲ ባይዱ 13 章 LabVIEW 串口通信程序设计
环结构的条件端子 设置为“真时停止(Stop if True)” ,则不需要添加非(Not)函数。 (11)添加两个条件结构:编程(Programming)→结构(Structures)→ 条件结构(Case
Structure)。添加理由:发送字符时,需要单击按钮“发送字符”,因此需要判断是否单击了 发送按钮;接收数据时,需要判断串口接收缓冲区的数据个数是否不为 0。
(14)将字符输入控件图标(标签为“发送区:”)拖入条件结构(上)的真(True)选项框 架中,将字符显示控件图标(标签为“接收区:”)拖入条件结构(下)的真(True)选项框架中。
(15)分别将确定(OK)按钮控件图标(标签为“确定按钮(OK Button)”)、停止(Stop) 按钮控件图标(标签为“停止按钮(Stop Button)”)拖入循环结构框架中。
及其布置如图 13-4 所示。
详细步骤介绍如下。
(1)添加一个配置串口函数:编程(Programming)→
图 13-3 程序前面板
仪器 I/O(Instrument I/O)→串口(Serial)→VISA 配置串口(VISA Configure Serial Port)。
图 13-4 框图程序函数添加与布置
(12)添加一个串口写入函数:编程(Programming)→仪器 I/O(Instrument I/O)→串 口(Serial)→VISA 写入(VISA Write),并拖入条件结构(上)的真(True)选项框架中。
(13)添加一个串口读取函数:编程(Programming)→ 仪器 I/O(Instrument I/O)→ 串 口(Serial)→VISA 读取(VISA Read),并拖入条件结构(下)的真(True)选项框架中。
当通信距离较近时,通信双方不需要 Modem,可以直接连接,这种情况下,只需使用少 数几根信号线。最简单的情况,在通信中根本不需要 RS-232C 的控制联络信号,只需三根线 (发送线、接收线、信号地线)便可实现全双工异步串行通信。
在实际使用中常使用串口通信线将两个串口设备连接起来。串口线的制作方法非常简 单:准备两个 9 针的串口接线端子(因为计算机上的串口为公头,因此连接线为母头),准备 3 根导线(最好采用 3 芯屏蔽线),按图 13-1 所示将导线焊接到接线端子上。
(2)添加 4 个数值常量:编程(Programming)→数值(Numeric)→ 数值常量(数值常量 (Numeric Constant),值分别为 9600(波特率)、8(数据位)、0(校验位,无)、1(停止位)。
(3)添加两个关闭串口函数:编程(Programming)→仪器 I/O(Instrument I/O)→串口 (Serial)→VISA 关闭(VISA Close)。
PC机A
PC机B
COM1
串口线
COM1
图 13-2 PC 与 PC 串口通信线路
在计算机通电前,按图 13-2 所示将两台 PC 的 COM1 口用串口线连接起来。
连接串口线时,计算机严禁通电,否则极易烧毁串口。
13.1.2 设计任务
利用 LabVIEW 编写程序实现 PC 与 PC 串口通信。 任务要求如下。 两台计算机互发字符并自动接收,如一台计算机输入字符串“收到信息请回字符 abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“收到,abc123”, 单击“发送字符”命令,信息返回到第一组的计算机。 实际上就是编写一个简单的双机聊天程序。
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)相连。
(4)将确定按钮图标“OK Button”与条件结构(上)的选择端子?相连。 (5)将串口字节数(VISA Bytes at Serial Port)函数的输出端口 Number of bytes at Serial port 与不等于?(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
出(VISA resource name out)与串口关闭(VISA Close)函数(上)的输入端口 VISA 资源名 称(VISA resource name)相连。
(13)在条件结构(下)中将串口读取(VISA Read)函数的输出端口 VISA 资源名称输 出与关闭串口函数 VISA Close(下)的输入端口 VISA 资源名称相连。
5 43 2 1 9876
5 43 2 1 9876
图 13-1 串口通信线的制作
第 13 章 LabVIEW 串口通信程序设计
图 13-2 所示中的 2 号接收脚与 3 号发送脚交叉连接是因为在直连方式时,把通信双方都 当作数据终端设备看待,双方都可发也可收。在这种方式下,通信双方的任何一方,只要请 求发送 RTS 有效和数据终端准备好 DTR 有效就能开始发送和接收。
第 13 章 LabVIEW串口通信程序设计
以 PC 作为上位机,以调制解调器(Modem)、串行打印机、各种监控模块、PLC、摄像 头云台、数控机床、单片机及智能设备等作为下位机广泛应用于测控领域。本章举几个典型 实例,详细介绍利用 LabVIEW 实现 PC 与各种下位机设备串口通信的程序设计方法。
– 283 –
LabVIEW 虚拟仪器数据采集与串口通信测控应用实战
停止按钮(Stop Butoon),将标题改为“关闭程序”。 设计的程序前面板,如图 13-3 所示。
3.框图程序设计——添加函数
进入框图程序设计界面,在设计区的空白处单击
鼠标右键,显示函数选板(Functions)。添加的所有函数
(4)添加一个循环结构:编程(Programming)→结构(Structures)→ While 循环(While Loop)。添加理由:随时监测串口接收缓冲区的数据。
以下添加的函数或结构放置在 While 循环结构框架中。 (5)添加一个时钟函数:编程(Programming)→ 定时(Timing)→ 等待下一个整数倍 毫秒(Wait Until Next ms Multiple)。添加理由:以一定的周期监测串口接收缓冲区的数据。 (6)添加一个数值常量:编程(Programming)→数值(Numeric)→ 数值常量(Numeric Constant),将值改为 500(时钟频率值)。 (7)添加一个 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)添加一个布尔函数:编程(Programming)→布尔(Boolean)→非(Not)函数。 添加理由:当关闭程序时,将关闭按钮真(True)变为假(False),退出循环。如果将循
在 RS-232 的应用中,很少严格按照 RS-232 标准。其主要原因是因为许多定义的信号在 大多数的应用中并没有用上。在许多应用中,例如 Modem,只用了 9 个信号(两条数据线、 6 条控制线、一条地线);在其他一些应用中,可能只需要 5 个信号(两条数据线、两条握手 线、一条地线);还有一些应用,可能只需要数据线,而不需要握手线,即只需要 3 个信号线。 因为在控制领域,在近距离通信时常采用 RS-232,所以这里只对近距离通信的线路连接进行 讨论。
13.1 PC与PC串口通信
当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需三根线 (发送线、接收线、信号地线)便可实现全双工异步串行通信。
本设计通过两台 PC 串口三线连接,介绍了串口通信的基本编程方法。
13.1.1 PC与PC串口通信硬件线路
当两台 RS-232 串口设备通信距离较近时(<15m),可以用电缆线直接将两台设备的 RS-232 端口连接;若通信距离较远(>15m)时,需附加调制解调器(Modem)。
13.1.3 任务实现
1.建立新VI程序
启动 NI LabVIEW 程序,选择新建(New)选项中的 VI 项,建立一个新 VI 程序。
2.程序前面板设计
在前面板设计区空白处单击鼠标右键,显示控件选板(Controls)。 (1)添加一个字符串输入控件:控件(Controls)→新式(Modern)→字符串与路径(String & Path)→字符串输入控件(String Control),将标签改为“发送区:”。 (2)添加一个字符串显示控件:控件(Controls)→新式(Modern)→字符串与路径(String & Path)→ 字符串显示控件(String Indicator),将标签改为“接收区:”。 (3)添加一个串口资源检测控件:控件(Controls)→新式(Modern)→ I/O →VISA 资 源名称(VISA resource name);单击控件箭头,选择串口号,如 COM1 或 ASRL1:。 (4)添加一个确定(OK)按钮控件:控件(Controls)→新式(Modern)→布尔(Boolean)→ 确定按钮(OK Butoon),将标题改为“发送字符”。 (5)添加一个停止(Stop)按钮控件:控件(Controls)→新式(Modern)→布尔(Boolean)→
(3)将数值常量(值为 500)与等待下一个整数倍毫秒(Wait Until Next ms Multiple)函 数的输入端口毫秒倍数(millisecond multiple)相连。
– 285 –
LabVIEW 虚拟仪器数据采集与串口通信测控应用实战
Write)函数的输入端口写入缓冲区(write buffer)相连。 (9)在条件结构(下)中将串口读取(VISA Read)函数的输出端口读取缓冲区(read buffer)
与字符显示控件图标(标签为“接收区:”)相连。 (10)将停止按钮(Stop Button)函数与非(Not)函数的输入端口 x 相连。 (11)将非(Not)函数的输出端口.not. x ? 与循环结构的条件端子 相连。 (12)在条件结构(上)中将串口写入(VISA Write)函数的输出端口 VISA 资源名称输
– 284 –
ቤተ መጻሕፍቲ ባይዱ 13 章 LabVIEW 串口通信程序设计
环结构的条件端子 设置为“真时停止(Stop if True)” ,则不需要添加非(Not)函数。 (11)添加两个条件结构:编程(Programming)→结构(Structures)→ 条件结构(Case
Structure)。添加理由:发送字符时,需要单击按钮“发送字符”,因此需要判断是否单击了 发送按钮;接收数据时,需要判断串口接收缓冲区的数据个数是否不为 0。
(14)将字符输入控件图标(标签为“发送区:”)拖入条件结构(上)的真(True)选项框 架中,将字符显示控件图标(标签为“接收区:”)拖入条件结构(下)的真(True)选项框架中。
(15)分别将确定(OK)按钮控件图标(标签为“确定按钮(OK Button)”)、停止(Stop) 按钮控件图标(标签为“停止按钮(Stop Button)”)拖入循环结构框架中。
及其布置如图 13-4 所示。
详细步骤介绍如下。
(1)添加一个配置串口函数:编程(Programming)→
图 13-3 程序前面板
仪器 I/O(Instrument I/O)→串口(Serial)→VISA 配置串口(VISA Configure Serial Port)。
图 13-4 框图程序函数添加与布置
(12)添加一个串口写入函数:编程(Programming)→仪器 I/O(Instrument I/O)→串 口(Serial)→VISA 写入(VISA Write),并拖入条件结构(上)的真(True)选项框架中。
(13)添加一个串口读取函数:编程(Programming)→ 仪器 I/O(Instrument I/O)→ 串 口(Serial)→VISA 读取(VISA Read),并拖入条件结构(下)的真(True)选项框架中。
当通信距离较近时,通信双方不需要 Modem,可以直接连接,这种情况下,只需使用少 数几根信号线。最简单的情况,在通信中根本不需要 RS-232C 的控制联络信号,只需三根线 (发送线、接收线、信号地线)便可实现全双工异步串行通信。
在实际使用中常使用串口通信线将两个串口设备连接起来。串口线的制作方法非常简 单:准备两个 9 针的串口接线端子(因为计算机上的串口为公头,因此连接线为母头),准备 3 根导线(最好采用 3 芯屏蔽线),按图 13-1 所示将导线焊接到接线端子上。
(2)添加 4 个数值常量:编程(Programming)→数值(Numeric)→ 数值常量(数值常量 (Numeric Constant),值分别为 9600(波特率)、8(数据位)、0(校验位,无)、1(停止位)。
(3)添加两个关闭串口函数:编程(Programming)→仪器 I/O(Instrument I/O)→串口 (Serial)→VISA 关闭(VISA Close)。
PC机A
PC机B
COM1
串口线
COM1
图 13-2 PC 与 PC 串口通信线路
在计算机通电前,按图 13-2 所示将两台 PC 的 COM1 口用串口线连接起来。
连接串口线时,计算机严禁通电,否则极易烧毁串口。
13.1.2 设计任务
利用 LabVIEW 编写程序实现 PC 与 PC 串口通信。 任务要求如下。 两台计算机互发字符并自动接收,如一台计算机输入字符串“收到信息请回字符 abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“收到,abc123”, 单击“发送字符”命令,信息返回到第一组的计算机。 实际上就是编写一个简单的双机聊天程序。
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)相连。
(4)将确定按钮图标“OK Button”与条件结构(上)的选择端子?相连。 (5)将串口字节数(VISA Bytes at Serial Port)函数的输出端口 Number of bytes at Serial port 与不等于?(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
出(VISA resource name out)与串口关闭(VISA Close)函数(上)的输入端口 VISA 资源名 称(VISA resource name)相连。
(13)在条件结构(下)中将串口读取(VISA Read)函数的输出端口 VISA 资源名称输 出与关闭串口函数 VISA Close(下)的输入端口 VISA 资源名称相连。
5 43 2 1 9876
5 43 2 1 9876
图 13-1 串口通信线的制作
第 13 章 LabVIEW 串口通信程序设计
图 13-2 所示中的 2 号接收脚与 3 号发送脚交叉连接是因为在直连方式时,把通信双方都 当作数据终端设备看待,双方都可发也可收。在这种方式下,通信双方的任何一方,只要请 求发送 RTS 有效和数据终端准备好 DTR 有效就能开始发送和接收。
第 13 章 LabVIEW串口通信程序设计
以 PC 作为上位机,以调制解调器(Modem)、串行打印机、各种监控模块、PLC、摄像 头云台、数控机床、单片机及智能设备等作为下位机广泛应用于测控领域。本章举几个典型 实例,详细介绍利用 LabVIEW 实现 PC 与各种下位机设备串口通信的程序设计方法。
– 283 –
LabVIEW 虚拟仪器数据采集与串口通信测控应用实战
停止按钮(Stop Butoon),将标题改为“关闭程序”。 设计的程序前面板,如图 13-3 所示。
3.框图程序设计——添加函数
进入框图程序设计界面,在设计区的空白处单击
鼠标右键,显示函数选板(Functions)。添加的所有函数
(4)添加一个循环结构:编程(Programming)→结构(Structures)→ While 循环(While Loop)。添加理由:随时监测串口接收缓冲区的数据。
以下添加的函数或结构放置在 While 循环结构框架中。 (5)添加一个时钟函数:编程(Programming)→ 定时(Timing)→ 等待下一个整数倍 毫秒(Wait Until Next ms Multiple)。添加理由:以一定的周期监测串口接收缓冲区的数据。 (6)添加一个数值常量:编程(Programming)→数值(Numeric)→ 数值常量(Numeric Constant),将值改为 500(时钟频率值)。 (7)添加一个 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)添加一个布尔函数:编程(Programming)→布尔(Boolean)→非(Not)函数。 添加理由:当关闭程序时,将关闭按钮真(True)变为假(False),退出循环。如果将循
在 RS-232 的应用中,很少严格按照 RS-232 标准。其主要原因是因为许多定义的信号在 大多数的应用中并没有用上。在许多应用中,例如 Modem,只用了 9 个信号(两条数据线、 6 条控制线、一条地线);在其他一些应用中,可能只需要 5 个信号(两条数据线、两条握手 线、一条地线);还有一些应用,可能只需要数据线,而不需要握手线,即只需要 3 个信号线。 因为在控制领域,在近距离通信时常采用 RS-232,所以这里只对近距离通信的线路连接进行 讨论。
13.1 PC与PC串口通信
当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需三根线 (发送线、接收线、信号地线)便可实现全双工异步串行通信。
本设计通过两台 PC 串口三线连接,介绍了串口通信的基本编程方法。
13.1.1 PC与PC串口通信硬件线路
当两台 RS-232 串口设备通信距离较近时(<15m),可以用电缆线直接将两台设备的 RS-232 端口连接;若通信距离较远(>15m)时,需附加调制解调器(Modem)。
13.1.3 任务实现
1.建立新VI程序
启动 NI LabVIEW 程序,选择新建(New)选项中的 VI 项,建立一个新 VI 程序。
2.程序前面板设计
在前面板设计区空白处单击鼠标右键,显示控件选板(Controls)。 (1)添加一个字符串输入控件:控件(Controls)→新式(Modern)→字符串与路径(String & Path)→字符串输入控件(String Control),将标签改为“发送区:”。 (2)添加一个字符串显示控件:控件(Controls)→新式(Modern)→字符串与路径(String & Path)→ 字符串显示控件(String Indicator),将标签改为“接收区:”。 (3)添加一个串口资源检测控件:控件(Controls)→新式(Modern)→ I/O →VISA 资 源名称(VISA resource name);单击控件箭头,选择串口号,如 COM1 或 ASRL1:。 (4)添加一个确定(OK)按钮控件:控件(Controls)→新式(Modern)→布尔(Boolean)→ 确定按钮(OK Butoon),将标题改为“发送字符”。 (5)添加一个停止(Stop)按钮控件:控件(Controls)→新式(Modern)→布尔(Boolean)→