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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务