新闻中心

EEPW首页>测试测量>设计应用> 使用MSCOMM32控件编写串口程序

使用MSCOMM32控件编写串口程序

作者: 时间:2017-01-09 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/201701/337119.htm

在此基础上,我们看一个例子:

下面两张图 是一个 利用MsCom进行串口通讯(中断方式)的程序框图和回调VI的程序框图





使用RTThrsehold属性设置触发接收中断事件的触发条件,本程序设置为1,当缓冲器接收到一个字符时,就会发生中断事件——oncomm事件中断,很多条件都可以产生oncomm事件,区分产生中断的原因有Comevent的属性值来确定,当conevent为2时,表示是由于接收到字符产生的中断,由此进入接受中断处理程序。

而中断处理程序,接收到的数据是变体数据,转换为数组型数据,发送数组中,最后送到返回变量中,供显示和绘制实时图使用。

commevent的参数 对比表!

根据应用程序的用途和功能,在连接到其它设备过程中,以及接收或发送数据过程中,可能需要监视并响应一些事件和错误。
可以使用OnComm事件和CommEvent属性捕捉并检查通讯事件和错误的值。
在发生通讯事件或错误时,将触发OnComm事件,CommEvent属性的值将被改变。因此,在发生OnComm事件的时候,如果有必要,可以检查CommEvent属性的值。由于通讯(特别是通过电话线的通讯)是不可预料的,捕捉这些事件和错误将有助于使应用程序对这些情况作出相应的反应。
下表列出了可能触发OnComm事件的通讯事件。对应的值将在发生事件时被写入CommEvent属性。

常数

描述

ComEvSend

1

发送缓冲区中的字符数少于SThreshold。

ComEvReceive

2

接收到Rthreshold个字符。在使用Input属性移去接收缓冲区中的数据之前,该事件将持续产生。

ComEvCTS

3

CTS信号发生变化。

ComEvDSR

4

DSR信号发生变化。该事件仅在DSR由1变为0时触发。

ComEvCD

5

CD信号发生变化。

ComEvRing

6

检测到电话振铃。某些UART(通用异步收发器)可能不支持本事件。

ComEvEOF

7

收到文件结束符(ASCII字符26)。

下列错误同样会触发OnComm事件,并且在CommEvent属性中写入相应的值。

设置值

描述

ComEventBreak

1001

收到Break信号。

ComEventFrame

1004

帧错误。硬件检测到帧错误。

ComEventOverrun

1006

端口超限。在下一个字符到达端口之前,前一字符还没有从硬件中读走,因而丢失。

ComEventRxOver

1008

接收缓冲区溢出。接收缓冲区已没有空间。

ComEventRxParity

1009

奇偶校验错误。硬件检测到奇偶校验错误。

comEventTxFull

1010

发送缓冲区满。在试图将字符传入发送缓冲区时,该缓冲区已满。

ComEventDCB

1011

在为端口获取设备控制块(DCB)时,发生不可预料的错误。



另外: 需要注意的是给output属性赋值输出时,有两种可用的形式:1是字符串 2是字节型数值 数组,就是占一个字节的数值组成的数组。然后转化为变体数据类型。

如下图所示:


U8类型数值的数组。

————————————————————————————————————————————————

关于RTThrsehold和 inputlen的设置,我一直搞不明白,所以在实际应用中出现过这样那样的问题。

例如 接收到的数据远远小于发送的数据了,接收到的数据出现乱码了,等等。

经过反复的实验

我发现 如果将inputlen设置的过小(如1),同时呢,发送的波特率过高,就会出现接受到的数据小于实际发送出的数据。

因为将RTHrsehold设置为1的时候,每收到一个字符就会产生一次中断,这次中断会提取 inputlen个数的字符。

如果波特率过高,就会导致,中断不能够及时发生(每次中断只读取一个字符,而产生的中断数目小于实际发送的字符数),很多数据到最后积累在缓冲区内。

(这是我通过程序最后读取缓冲区的数据大小进行的判断)

因此必要时,可以将RTHrsehold和inputlen的值都设大一些,才能够正常。(使得中断处理函数的时间远远小于产生中断的时间即可)



上一页 1 2 下一页

评论


技术专区

关闭