APP下载

基于LabVIEW-VISA 方式的串口通信研究

2015-08-26魏义虎

电子设计工程 2015年24期
关键词:字符串缓冲区串口

魏义虎, 陈 雷

(军械工程学院 弹药工程系, 河北 石家庄 050003)

串口通信作为串行通信的一种实现方式,其历史可追溯到1969 年。 时至今日,速度更高的USB、IEEE1394 新型接口已更多的应用于串行通信,然而串口接口简单、使用方便、可靠性高、适用于低速传输,作为为数不多的以电平为直接信号载体的计算机接口,仍然有广阔的发挥作用的空间。

LabVIEW 建立在以图形数据流代替文本式程序代码进行编程的G 语言基础上[1],编程简单、高效。 自带VISA 函数,可以方便地编写串口通信程序,但程序的合理编写以串口原理为基础,需要注意的细节较多。 文中在介绍必要的串口通信原理基础上,对编写程序需要注意的问题进行了详细说明。

1 串口通信基本原理

1.1 串口通信协议

串行通信协议面向链路层,分为同步和异步通信协议两大类。 串口通信使用起止式异步传输协议。 串行传输面向比特,把一次发送的若干比特称作一帧。 异步传输指发送方可以在任何时刻发送若干帧,接收方不知道数据会在什么时候到达,帧与帧之间的间隔不固定。 帧的结构按照传输的先后顺序分为起始位、数据位、奇偶校验位、停止位。 每个异步传输的帧都以一个起始位开头,它不包含数据信息,用来通知接收方数据已经到达,给接收方响应、接收和缓存数据的时间。 一般串口传送的数据是字符型[2],采用ASCII 编码,数据位即字符对应的ASCII 码值的5-8 位二进制数,按照从低位到高位顺序传输。 奇偶校验位是否采用及采用何种校验,由双方约定。 停止位表示本次数据传输完毕。 没有传送数据的线路为逻辑1。起始位为0,线路由1 变为0。数据位随数据信息而变化。 停止位为1, 使线路保持1 直到下一帧起始位到达。以传送字符“a”为例,其ASCII 码值为十进制“97”,转换成二 进 制 为 “01100001”, 按 照 先 低 位 后 高 位 的 顺 序 为“10000110”。 其帧结构如图1。

图1 字符a 的帧结构Fig. 1 Frame Structure of character a

发送方和接收方必须使用相同的传输速度, 即比特率,指的是串口通信每一秒所传输的数据比特数, 单位是bit/s。如每帧为10 比特, 比特率为9 600 bit/s, 则每秒可以传送960个字符。

1.2 RS-232 信号线定义和电气特征

EIA RS-232 串行通信接口标准面向物理层,完整信号包含25 根线, 包括UART 传输的必要信号和关于调制解调器的控制信号。 在计算机工业发展过程中,25 线逐渐简化为9线。 其中常用的信号线为:S-GND 信号地;TxD(Transmitted Data)、RxD (Received Data) 为 串 口 数 据 线;CTS (Clear to send)、RTS(Request to send)为串口控制线。 发送方的CTS 与接收方的RTS、发送方的RTS 与接收方的CTS 相连接。 接收方缓冲区有空间时,将本方RTS 置为有效,此时发送方检测到自己的CTS 有效,说明接收方希望发起一次传输,于是开始发送。接收方缓冲区填满时,将本方RTS 置为无效,此时发送方检测到自己的CTS 无效, 说明接收方希望停止传输,于是停止发送。 对于一般的UART 传输, 可以进一步简化为TxD、RxD、S-GND 三线接法。 需要注意的是发送方与接收方的S-GND 直接连接,TxD、RxD 交叉连接。

RS-232 以正负电平表示逻辑值。 在数据线上, 逻辑1为-3~-15 V,逻辑0 为+3~+15 V;在控制和状态线上,信号有效为+3~+15 V,信号无效为-3~-15 V。±(3-15)V 以外的电平无意义。这与TTL 用高低电平表示逻辑值不同。所以,计算机接口与TTL 设备进行串口通信时, 需要进行电平和逻辑转换。 目前常用MAX232 进行EIA 与TTL 双向电平转换。

2 LabVIEW 使用VISA 串口函数编程方法

2.1 串口通信函数介绍

VISA 是测试程序与数据传输总线的中间层, 为应用程序和仪器总线的通信建立了通道。 VISA 是应用于仪器编程的标准I/O 应用程序接口,本身不具有仪器编程能力,是调用低层驱动器的高层API,使用时需要安装VISA 驱动程序[3]。

以LabVIEW 2011 为例,VISA 串口编程函数位于程序框图界面的“函数—》仪器I/O—》串口”,常用其中7 个函数:“VISA 配置串口”用于选择通信端口、设置比特率、数据位数、校验方式、流控制等;“VISA 串口字节数”用于获取发送到接收缓冲区中的字节数量; “VISA 写入”将传输缓冲区中的数据写入配置串口时指定的设备或接口;“VISA 读取”在指定的串口接收缓冲区按照指定字节数读取数据; “VISA 设置I/O 缓冲区大小”、“VISA 清空I/O 缓冲区” 分别用于设置接收及传输缓冲区的大小或将其清空;“VISA 关闭” 用于关闭串口。

2.2 一般编程方法

通常,按照配置串口、设置发送/传输缓冲区、VISA 写入或VISA 读取、关闭串口的流程,再结合事件、循环、条件、顺序等程序结构和具体数据操作处理等即可编写符合用户意图的串口通信程序。 配置串口时,要将发送方和接收方的比特率、数据位数、奇偶校验等设置为相同值,即将双方传输速率和帧格式设置一致。 将“串口字节数”输出连接“串口读取”的字节总数接线端,即按照接收字节数量进行读取。

2.3 编程常见问题

1)数据格式与字符串之间的格式转换

一般,串口传送的是字符串型数据。 如需要传输的数据不是字符格式, 要使用相应转换函数将数据转换为字符格式,否则程序提示“已连接两个不同类型的接线端”。 例如,数值数据可以先使用字符串/数值转换函数转换为字符串,再进行串口发送。

2)将串口设置等模块放置在循环之外

如果串口通信处于循环结构中,为减轻内存压力,可以将具体发送、读取操作保留在循环中,而把配置串口、设置缓冲区、关闭串口等操作放置在循环结构之外,避免频繁重复执行,以降低内存开销,优化程序。

3)丢失数据现象

有时串口接收数据不完整或为空,可能是由于串口是底层硬件,数据从软件到串口,及从串口到软件需要一个时间。数据还没有全部传送到接收缓冲区时,读取程序就把部分已接收的数据读出,从而出现接收数据不完整的现象。 调试中,在“VISA 读取”之前设置若干ms 的延时,使数据传输完全,从而读取完整。 也可能是因为接收缓冲区被填满,但读取程序还没有处理完数据,此时再接收数据,新的帧就会丢失。 可以通过设置流控制使发送方和接收方进行交流协调。 在串口线采用三线接法时, 可在配置串口流控制接线端选择“XON/XOFF”软件流控制方式。通常使用0x17 作为XON,0x19 作为XOFF,通过数据线TxD、RxD 传输。 发送XON,相当于置RTS有效;接收XON,相当于检测到CTS 有效。 发送XOFF,相当于置RTS 无效;接收XOFF,相当于检测到CTS 无效。 接收方缓冲区填满时,向发送方发送XOFF,发送方接收到XOFF,说明接收方希望停止传输,于是停止发送。

3 应用实例

光源以平行光束不定时地照射垂直于水平面的靶板,4个光电传感器分布在以靶板中心为圆心的圆周上0°、90°、180°、270°位置,光斑直径略大于圆直径,光源距靶板400 m。被照射的传感器产生光电效应,经调理输出高电平,未被照射的传感器输出低电平。 4 路传感器的输出组成4 位的高低电平序列,被靶端微机经数据I/O 卡采集为1D 布尔数组,等效于范围从0000 到1111 的二进制数,该数值可反映光斑的大致位置。 将此位置信息从靶端微机串口发送,经电台无线传输,光源端微机自动进行串口读取,并将位置信息还原和显示。

图2 串口通信应用实例示意图Fig. 2 Sketch map of the serial port communication application example

串口通信要求数据格式为字符串型, 故将1D 布尔数组转换为数值, 进而由数值转换为字符串。 由于传输距离为400 m,故串口通信采用无线传输。 靶端微机串口与发送电台采用三线接法,TxD、RxD、S-GND 对应连接。光源端微机串口和接收电台也采用三线接法, 但要注意与前者不同,S-GND直接连接,TxD、RxD 交叉连接。 靶端串口发送程序见图3。

图3 靶端串口发送程序Fig. 3 Serial port transmitting programme of target side

串口通信中设置“XON/XOFF”及在“串口读取”前设置适当延时。 串口读取后将代表光斑位置的字符串逆向还原为布尔数组,利用数组索引各传感器信号,分别驱动4 个指示灯。指示灯分布与传感器空间分布一致。循环查询“VISA 串口字节数”与0 比较的结果,大于0 时,自动执行串口读取、数据处理、控制指示灯指示位置等操作。 光源端串口接收、处理显示程序见图4,显示界面见图5。

从图5 可以看到,“右”传感器被照射时,4 路传感器输出等效为二进制数 “1000”, 转换为十进制 “8”, 串口接收为“0001”,显示界面“右”指示灯亮。 “左、下”传感器被照射时,4路传感器输出等效为二进制数“0011”,转换为十进制“3”,串口接收为“1100”,显示界面“左、下”指示灯亮。

图4 光源端串口接收、处理显示程序Fig. 4 Serial port receiving,handling and displaying programme of light source side

图5 显示界面Fig. 5 Displaying interface

4 结 论

在LabVIEW 环境下,以VISA 串口函数为主体,结合事件、循环、条件等程序结构和各种数据操作,再配合信号线连接及无线传输等硬件,可以简便、灵活、高效地编写串口传输程序,实现串口通信。

[1] 李江全,刘恩博,胡蓉,等. LabVIEW虚拟仪器数据采集与串口通信测控应用实战[M]. 北京:人民邮电出版社,2010.

[2] Peter W.Gofton. Mastering Serial Communications[M]. 北京:电子工业出版社,1995.

[3] 吕向锋,高洪林,等. 基于LabVIEW串口通信的研究[J]. 国外电子测量技术,2009,28(12):27-30,42.

[4] 孙丽芹,王海龙,张景顺,等. 一种基于LabVIEW的串口数据传输方法[J]. 通信技术,2013,46(4):139-141.

[5] 刘金梅,王东颖,刘立超,等. 基于LabVIEW串口通信的多路数据采集系统设计[J]. 北华航天工业学院学报,2012,22(4):16-18.

[6] 施雅婷,郭前岗,周西峰. 一种改进的LabVIEW串口通信系统的实现[J]. 电子测试,2010(8):64-68.

猜你喜欢

字符串缓冲区串口
浅谈AB PLC串口跟RFID传感器的通讯应用
基于文本挖掘的语词典研究
基于网络聚类与自适应概率的数据库缓冲区替换*
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
一类装配支线缓冲区配置的两阶段求解方法研究
串口技术的实物调试和虚拟仿真联合教学模式
关键链技术缓冲区的确定方法研究
初涉缓冲区
一种新的基于对称性的字符串相似性处理算法