您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页求助 串口通信出现帧错误,请指点

求助 串口通信出现帧错误,请指点

来源:飒榕旅游知识分享网
频繁的小数据量传输效率极低,一次传100帧绝对能行

NI高手们好:

我编写了一个串口通信程序,与一个双通道变换器通信。

变换器指标:最高响应频率 4Hz

通道数 2

采样周期 30ms(采样频率33Hz)

通信接口 RS232,半双工通信方式,波特率9600ps,一位起始位,8位数据位,1位停止位,无奇偶校验。

传送的数据格式为:“123 321”

现在可以读取数据,但有一个错误-1073807253,数据帧错误,程序中清除该错误后任然可以读数。

但是读取的数据 与实际数据有很大的延时,最长达十七八秒!

这是什么原因导致的,如何解决?

用其他语言编的串口程序不存在延时问题。

当我使用My VISA Read时我得到了-1073807253的错误代码

主要软件: 主要软件版本: N/A 主要软件修正版本: N/A 次要软件: N/A

问题:

我从一个第三方的设备每隔160ms输出一组80个字符的序列然后使用VISA read将它通过串口读进来。不论这个程序是否打开或者关闭,这个设备都会持

续的输出数据。然而,当我读数据时发生一个帧错误 (-1073807253),这是什么原因呢? 解答:

这个错误的原因是这个设备无论程序时候运行都会每隔160ms发送数据。端口在收到第一个字符的时候可能没有被配置好,所以它读到的是无效的缓冲区信息。在VISA Configure Serial Port后放置一个延时,串口将会有足够的时间来进行配置。然后,使用VISA Flush I/O Buffer VI,你能够清除缓冲区中无效数据。在这之后读取数据将能正常工作。

解决问题的话 追加奖励!求助: 串口通信出现错误,请指点

十分感谢CsharpStyle的关于提问的提醒,谢谢各位版主一直为大家作出的努力 程序的背景是这样的:

单片机通过串口以每六个字节为一个数据包发送数据。

通信规约为: 前两个字节为同步头,第三个字节为功能码,第四第五字节为数据,第六字节为和校验。 程序的算法为:

(1) 读1 byte,判断是否 :(EE),是则继续;否则返回步骤(1),重新开始。 (2) 再次读1 byte,判断是否 :(BB),是则继续;否则返回步骤(1),重新开始。

(3) 读数据包中除去EE;BB:剩余的字节,循环读取,每次读一个字节,当读到的字节数达到数量,继续;若读取超时,返回步骤(1),重新开始。 (4) 分析读到的bytes,判断和校验码是否正确。若正确,继续;否则,返回步骤(1),重新开始。 (5) 取第三个byte,如果是0,说明“位移数据”;如果是1,说明“压力数据”。 (6) 按照一定算法,分离出相应的位移和压力值。并取十次平均值显示。

程序运行有时没什么错误,但是停止读的While循环时,就会提示如下警告信息 Warning 1073676294 occurred at VISA Read in du000ding.vi Possible reason(s):

VISA: (Hex 0x3FFF0006) The number of bytes transferred is equal to the requested input count. More data might be available. 程序在开始运行时,还有时发生如下错误

Error -1073807253 occurred at VISA Read in du000ding.vi Possible reason(s):

VISA: (Hex 0xBFFF006B) A framing error occurred during transfer. 程序如下图示,其中打红叉号的VISA Read为出问题的部分。 再次感谢您们的热心帮助!

bighai 发表于 2005-5-3 17:05 Re:求助: CsharpStyle ,向您请教过的串口通信,出现帧错误请指点

请CsharpStyle帮忙,拜托大家都看看

bighai 发表于 2005-5-3 17:05 Re:求助: CsharpStyle ,向您请教过的串口通信,出现帧错误请指点

waiting....

君力 发表于 2005-5-4 09:52 Re:求助: 串口通信出现帧错误,请指点

framing errer,俺也有同样的问题,期盼中~~

君力 发表于 2005-5-6 09:06 Re:求助: 串口通信出现错误,请指点

顶一下,别沉了,请高手解答~~期盼

君力 发表于 2005-5-6 11:38 Re:求助: 串口通信出现错误,请指点

我作了一点尝试,试图把打红叉的VISA READ进行处理:

若产生警告代码为107*****什么的不记得了,反正就是不断出现的那个警告,就把警告代码替换为0,其它的则不变。

唉,仍然不行啊,依然出现framing error,偶怀疑是LabViEW的Visa read自身的bug~~

ttkx 发表于 2005-5-6 13:26 Re:求助: 串口通信出现错误,请指点

一点建议:读前判断一下缓冲区的字符!空就不要读了!在FALSE不要读,你试一下!

君力 发表于 2005-5-8 13:52 Re:求助: 串口通信出现错误,请指点

[quote][b]ttkx wrote:[/b]

一点建议:读前判断一下缓冲区的字符!空就不要读了!在FALSE不要读,你试一下! [/quote]

不行的,我是先判断,少于(例如257)个字节则不读,仍然出错~~

bighai 发表于 2005-5-10 12: Re:求助: 串口通信出现错误,请指点

得益于CsharpStyle的帮忙,问题解决,请在初始化后连接VISA Clear

君力 发表于 2005-5-10 23:24 Re:求助: 串口通信出现错误,请指点

[quote][b]bighai wrote:[/b]

得益于CsharpStyle的帮忙,问题解决,请在初始化后连接VISA Clear [/quote]

我今天改用了MSCOMM控件来工作,倒也搞定了~~

回头试试楼上的方法!!

zhoujie107 发表于 2006-11-22 16:01 我现在也遇到这个问题,加了visa clear 还是不能解决,我的程序中bytes of port缓冲为0,visa write都显示为No Error,但是visa read 都是 Warning 1073676294

VISA: (Hex 0x3FFF0006) The number of bytes transferred is equal to the requested input count. More data might be available.

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务