labview串口通信的分析.docx

上传人:b****3 文档编号:24738670 上传时间:2023-06-01 格式:DOCX 页数:13 大小:211.76KB
下载 相关 举报
labview串口通信的分析.docx_第1页
第1页 / 共13页
labview串口通信的分析.docx_第2页
第2页 / 共13页
labview串口通信的分析.docx_第3页
第3页 / 共13页
labview串口通信的分析.docx_第4页
第4页 / 共13页
labview串口通信的分析.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

labview串口通信的分析.docx

《labview串口通信的分析.docx》由会员分享,可在线阅读,更多相关《labview串口通信的分析.docx(13页珍藏版)》请在冰豆网上搜索。

labview串口通信的分析.docx

labview串口通信的分析

关键词:

labview串口通信

学习labview有一段时刻了,发觉了其中功能的壮大和编程的简练性,高效性

此刻初步实现了串口的通信,把其中的体会和实现进程写出来,权当抛砖引玉

其中的串口采纳的是Rs-232,D型口,共九跟针,其中能用的确实是三跟针脚,2,3,5,一个是发送一个是同意,一个是接地,若是做一个串口线延长线的话,只需连接这三根针脚即可,确实是2连3,3连2,5连5。

在labview中采纳的visa,第一是进行串口设置,设置串口号,波特率,在那个地址面只要设置这两个就能够够了,其余的采纳默许,其中专门注意的是要安装visa驱动包,只有安装了那个驱动包,你的串口才能够选择,一样此刻的电脑上只有一个串口,那么为了调试方便,那个地址有两个工具能够推荐,一个叫做串口虚拟软件,我用的是VSPDXP5,确实是一个虚拟串口的软件,让你的电脑能够多虚拟两个串口,你要设置成让他们互联,另一个确实是串口调试工具,叫,用来调试串口通信的,能够验证通信时候成功。

visa驱动包在ni网站上有,具体什么地址你能够到搜索一下.

再确实是visaread作用是从串口读取数据,那个地址面有个readbuffer,从串口读取的数据

visawrite向串口写入数据或是命令

还有visaclose终止串口读取数据,目的是读完数据后,释放串口资源

我的例子

前面板图

程序图

 labview串口通信的深切分析 收藏

labview称做"G"语言,只是说明了它具有了通用编程语言的编程能力,可是任何编程语言都有器独特的特点,不然通过几十年的风风雨雨,并无显现一种编程语言一统天下的格局,每种编程语言都有其专门适合的领域,从这点来讲,数据搜集和仪器通信能够说是它最擅长的领域.毫无疑问,运算机的串口通信是相对照较简单的通信方式,labview也不例外地对它提供了支持.

LABVIEW的串口操纵,能够通过量种方式:

1.最大体的INOUT操纵,LABVIEW提供了Inport 和OutPort两个大体输入输出VI,通过它就能够够直接读写寄放器,我本人 做的许多并口操纵设备确实是利用了这两个节点,在运算机的DOS时期,通过INOUT指令进行串口通信是唯一的选择,此刻正在做单片机的朋友都明白,单片机的串口通信都是通过操作寄放器实现的,关于运算机的COM1,它的端口地址是0X3F8,完全能够通过它来完成串口通信.

2.利用API的WriteFile函数实现串口通信,这是VC进行串口通信的方式.

3.利用VB提供的MSCOMM控件(这是目前用的最多的,它支持查询和中断两种模式,即能够发送文本型数据(ASCII),由能够发送二进制(BIN,实际是BYTEARRAY)

4.利用LABVIEW特有的VISA通信

直接操纵寄放器的方式在运算机串口通信大体看不到了.只有在单片机中还采纳这种方式.

通过C51串口通信,简单地介绍一下这种方式:

/*发送数据函数 */

voidSendData(uchar *buf)

{

uchari;

ucharlen;

len=strlen(buf);/*取得字符串长度*/

for(i=0;i

{

SBUF=buf[i];/*SBUF是串口输出REG */

while(!

TI);/*等待发送完成 */

TI=0;     /*复位中断标志 */

方式2直接挪用API超级复杂,在LV可不能采纳,就不介绍了.

方式3是目前用的最多,介绍一下.

MSComm控件提供以下两种处置通信的方式:

事件驱动方式和查询方式。

 来源:

  

2.1事件驱动方式  事件驱动通信是处置串行端口交互作用的一种超级有效的方式。

在许多情形下,在事件发生时需要取得通知,例如,在串口接收缓冲区中有字符,或CarrierDetect(CD)或RequestToSend(RTS)线上一个字符抵达或一个转变发生时。

在这些情形下,能够利用MSComm控件的OnComm事件捕捉并处置这些通信事件。

OnComm事件还能够检查和处置通信错误。

所有通信事件和通信错误的列表,参阅CommEvent属性。

在编程进程中,就能够够在OnComm事件处置函数中加入自己的处置代码。

这种方式的优势是程序响应及时,靠得住性高。

每一个MSComm控件对应着一个串行端口。

若是应用程序需要访问多个串行端口,必需利用多个MSComm控件。

  2.2查询方式   查询方式实质上仍是事件驱动,但在有些情形下,这种方式显得更为便利。

在程序的每一个关键功能以后,能够通过检查CommEvent属性的值来查询事件和错误。

若是应用程序较小,而且是自维持的,这种方式可能是更可取的。

例如,若是写一个简单的拨号程序,那么没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确信”响应。

    MSComm控件有很多重要的属性,但第一必需熟悉几个属性。

CommPort

设置并返回通讯端口号。

Settings

以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

PortOpen

设置并返回通讯端口的状态。

也可以打开和关闭端口。

Input

从接收缓冲区返回和删除字符。

Output

向传输缓冲区写一个字符串。

 下面别离描述:

   CommPort属性:

设置并返回通信端口号。

  语法[value](value一整型值,说明端口号。

)   说明在设计时,value能够设置成从1到16的任何数(缺省值为1)。

可是若是用PortOpen属性打开一个并非存在的端口时,MSComm控件会产生错误68(设备无效)。

  注意:

必需在打开端口之前设置CommPort属性。

  RThreshold属性:

在MSComm控件设置CommEvent属性为comEvReceive并产生OnComm之前,设置并返回的要接收的字符数。

  语法:

[=value](value整型表达式,说明在产生OnComm事件之前要接收的字符数。

)  说明:

当接收字符后,假设Rthreshold属性设置为0(缺省值)那么不产生OnComm事件。

例如,设置Rthreshold为1,接收缓冲区收到每一个字符都会使MSComm控件产生OnComm事件。

  CTSHolding属性:

确信是不是可通过查询ClearToSend(CTS)线的状态发送数据。

ClearToSend是调制解调器发送到相联运算机的信号,指示传输能够进行。

该属性在设计时无效,在运行时为只读。

  语法:

(Boolean)  Mscomm控件的CTSHolding属性设置值:

  TrueClearToSend线为高电平。

   FalseClearToSend线为低电平。

   说明:

若是ClearToSend线为低电平(CTSHolding=False)而且超不时,MSComm控件设置CommEvent属性为comEventCTSTO(ClearToSendTimeout)并产生OnComm事件。

  ClearToSend线用于RTS/CTS(RequestToSend/ClearToSend) 硬件握手。

若是需要确信ClearToSend线的状态,CTSHolding属性给出一种手工查询的方式。

  详细信息有关握手协议,请参阅Handshaking属性。

  SThreshold属性:

MSComm控件设置CommEvent属性为comEvSend并产生OnComm事件之前,设置并返回传输缓冲区中许诺的最小字符数。

  语法[=value]  value整形表达式,代表在OnComm事件产生之前在传输缓冲区中的最小字符数。

   说明:

假设设置Sthreshold属性为0(缺省值),数据传输事件可不能产生OnComm事件。

假设设置Sthreshold属性为1,当传输缓冲区完全空时,MSComm控件产生OnComm事件。

若是在传输缓冲区中的字符数小于value,CommEvent属性设置为comEvSend,并产生OnComm事件。

comEvSend事件仅当字符数与Sthreshold交叉时被激活一次。

例如,若是Sthreshold等于5,仅当在输出队列中字符数从5降到4时,comEvSend才发生。

若是在输出队列中从没有比Sthreshold多的字符,comEvSend事件将绝可不能发生。

  Handshake常数

常数

描述

comNone

0

无握手。

comXonXoff

1

XOn/Xoff握手。

comRTS

2

Request-to-send/clear-to-send握手。

comRTSXOnXOff

3

Request-to-send和clear-to-send握手皆可。

  OnComm常数

常数

描述

comEvSend

1

发送事件。

comEvReceive

2

接收事件。

comEvCTS

3

clear-to-send线变化。

comEvDSR

4

data-setready线变化。

comEvCD

5

carrierdetect线变化。

comEvRing

6

振铃检测。

comEvEOF

7

文件结束。

  Error常数

常数

描述

comEventBreak

1001

接收到中断信号

comEventCTSTO

1002

Clear-to-send超时

comEventDSRTO

1003

Data-setready超时

comEventFrame

1004

帧错误

comEventOverrun

1006

端口超速

comEventCDTO

1007

Carrierdetect超时

comEventRxOver

1008

接收缓冲区溢出

comEventRxParity

1009

Parity错误

comEventTxFull

1010

传输缓冲区满

comEventDCB

1011

检索端口设备控制块(DCB)时的意外错误

  InputMode常数

常数

描述

comInputModeText

0(缺省)

通过Input属性以文本方式取回数据。

comInputModeBinary

1

通过Input属性以二进制方式检取回数据。

  CDHolding属性:

通过查询CarrierDetect(CD)线的状态确信当前是不是有传输。

CarrierDetect是从调制解调器发送到相联运算机的一个信号,指示调制解调器正在联机。

该属性在设计时无效,在运行时为只读。

  语法  设置值:

CDHolding属性的设置值为:

 

设置

描述

True

CarrierDetect线为高电平

False

CarrierDetect线为低电平

  说明:

注意当CarrierDetect线为高电平(CDHolding=True)且超不时,MSComm控件设置CommEvent属性为comEventCDTO(CarrierDetect超时错误),并产生OnComm事件。

  注意在主机应用程序中捕捉一个丢失的传输是专门重要的,例如一个公告板,因为呼唤者能够随时挂起(舍弃传输)。

  CarrierDetect也被称为ReceiveLineSignalDetect(RLSD)。

  数据类型:

Boolean  DSRHolding属性:

确信DataSetReady(DSR)线的状态。

DataSetReady信号由调制解调器发送到相连运算机,指示作好操作预备。

该属性在设计时无效,在运行时为只读。

  语法:

  object所在处表示对象表达式,其值是“应用于”列表中的对象。

  DSRHolding属性返回以下值:

描述

说明

True

DataSetReady线高

  当DataSetReady线为高电平(DSRHolding=True)且超时时,MSComm控件设置CommEvent属性为comEventDSRTO(数据准备超时)并产生OnComm事件。

  当为DataTerminalEquipment(DTE)机器写DataSetReady/DataTerminalReady握手例程时该属性是十分有用的。

  数据类型:

Boolean

False

DataSetReady线低

  Settings属性:

设置并返回波特率、奇偶校验、数据位、停止位参数。

  语法:

[=value]  说明:

当端口打开时,若是value非法,那么MSComm控件产生错误380(非法属性值)。

  Value由四个设置值组成,有如下的格式:

  "BBBB,P,D,S"  BBBB为波特率,P为奇偶校验,D为数据位数,S为停止位数。

value的缺省值是:

  "9600,N,8,1"  InputLen属性:

设置并返回Input属性从接收缓冲区读取的字符数。

  语法[=value]  InputLen属性语法包括以下部份:

  value整型表达式,说明Input属性从接收缓冲区中读取的字符数。

   说明:

InputLen属性的缺省值是0。

设置InputLen为0时,利用Input将使MSComm控件读取接收缓冲区中全数的内容。

  假设接收缓冲区中InputLen字符无效,Input属性返回一个零长度字符串("")。

在利用Input前,用户能够选择检查InBufferCount属性来确信缓冲区中是不是已有需要数量的字符。

该属性在从输出格式为定长数据的机械读取数据时超级有效。

  EOFEnable属性:

确信在输入进程中MSComm控件是不是寻觅文件结尾(EOF)字符。

若是找到EOF字符,将停止输入并激活OnComm事件,现在CommEvent属性设置为comEvEOF,  语法:

[=value]  EOFEnable属性语法包括以下部份:

  value布尔表达式,确信当找到EOF字符时,OnComm事件是不是被激活,如“设置值”中所描述。

   value的设置值:

  True当EOF字符找到时OnComm事件被激活。

   False(缺省)当EOF字符找到时OnComm事件不被激活。

   说明:

当EOFEnable属性设置为False,OnComm控件将不在输入流中寻觅EOF字符。

  3.错误消息(MSComm控件)  下表列出MSComm控件能够捕捉的错误:

描述

380

无效属性值comInvalidPropertyValue

383

属性为只读comSetNotSupported

394

属性为只读comGetNotSupported

8000

端口打开时操作不合法comPortOpen

8001

超时值必须大于0

8002

无效端口号comPortInvalid

8003

属性只在运行时有效

8004

属性在运行时为只读

8005

端口已经打开comPortAlreadyOpen

8006

设备标识符无效或不支持该标识符

8007

不支持设备的波特率

8008

指定的字节大小无效

8009

缺省参数错误

8010

硬件不可用(被其它设备锁定)

8011

函数不能分配队列

8012

设备没有打开comNoOpen

8013

设备已经打开

8014

不能使用comm通知

8015

不能设置comm状态comSetCommStateFailed

8016

不能设置comm事件屏蔽

8018

仅当端口打开时操作才有效comPortNotOpen

8019

设备忙

8020

读comm设备错误comReadError

8021

为该端口检索设备控制块时的内部错误comDCBError

以上这部份转载于网上.

labview能够直接挪用ACTIVEX控件,因此能够直接利用,新版本的LV能够注册回调函数(REG CALLBACK),因此那个控件的所有功能都是可用的,下面示意一下挪用的方式.

重点介绍一下VISA串口通信的方式:

大体流程是:

打开(配置)--->循环(读写)--->关闭(释放)

一共有八个VI节点

1.VISAConfigureSerialPort:

  设定波特率,数据位,停止位,奇偶校验位,流操纵,超时处置,终止符使能,终止符.

  专门需要注意的是超时(TIMEOUT)和终止符号两个参数.TIMEOUT默许的10秒,终止符号默许是使能状态,默许的终止符是0X0A(\n),另外,回车0x0D(\r)也常常做为做为终止符号.

若是采纳的是二进制通信,可能会碰到终止符的问题.因为二进制中0A是10,0D是13,这两个是作为数字显现的,若是不由止终止符号,会致使读提早终止,产生错误的结果,这再和设备通信时可能会碰着.

至于波特率,数据位等,对照要通信的设备的要求设定就能够够了.

2.VisaWrite:

那个节点负责把缓冲区的数据发送出去,并返回实际发送的数据.

  MSCOMM串口通信时是能够选择文本和二进制方式的,VISA有选择项吗?

没有,完全取决于你的字符串,这是一个需要注意的问题.

正常显示方式时,字符串是"1234"在内存中存储的是ASCII,看以下图.

 

"1"=31,"2"=32 "3"=33,"4"=34.

发送的字符串"1234"实际发送的是16进制的31,32,33,34.用过单片机的都明白,实际所有的串口通信从本质上说,都是二进制的,只只是接收方面如何判定数据的问题.

比如发送的是33(HEX),接收方面能够说明成数字1,(字符串型),或是数字33.

用过C的人明白,字符串实际和U8数组是等价的.

因此VISA是不管是不是是字符串仍是数值,都是采纳二进制发送的,关键是咱们在于咱们的字符串是如何组成的.

VisaRead等其它的几个都比较简单,就不介绍了. 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

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

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