LabVIEWwilliam hill官网
直播中

豪仔

8年用户 57经验值
擅长:嵌入式技术
私信 关注
[问答]

labview中485串口对于接收不定长字符串的采集速度如何提高

各位大师,您好!
我的智能模块的协议发送HEX(长度为固定数10),接收为HEX不定长协议,一发一收模式()其中2组协议示意如下)
发送1:01 00 01 00 06 04 00 0B C0 93
接收1:00 00 00 00 00 01 00 01 00 71 00 00 1E 00 31 39 58 52 56 5F 49 49 00 80 64 45 52 54 5F45 53 54 00 C1 74 EE 90 42 08 00 00 07 3B 07 51 04 01 00 00 09 19 14 00 00 0000 00 00 00 00 00 00 32 34 33 2D 3E 45 76 61 70 6F 72 61 74 6F 72 20 52 65 6672 69 67 20 54 65 6D 70 20 23 33 20 65 78 63 65 65 64 65 64 20 6C 69 6D 69 7420 6F 66 20 23 34 2E 00 00 00 00 00 00 00 00 00 00 00 00 BC 69
说明:1、00 00 00 00 00为不定长,有时为00 00,有时为00 00 00 00 00 00 00有时为00                      00。长度不定
          2、71为该接收字符串的长度(协议中的有效数据长度)
发送2:01 00 01 00 01 05 00 0B 91 53
接收2:00 00 00 00 00 00 01 00 01 00 01 03 00 15 05 EE 47
说明:1、00 00 00 00 00 00为不定长,有时为00 00,有时为00 00 00 00 00 00 00有时为00 00。长度不定
2、01为该接收字符串的长度(协议中的有效数据长度)
问题1:由于接受字符串不定长,不能固定数量来接收,只能用BYTE AT PORT。在VISA接收延时上,如果按短指令设置延时时间,短指令数据正常,长指令 出错;如果按照长指令设置时间。等待时间过长,无法满足响应时间。有什么办法在不出错的前提下能够提高采集的速度?
问题2:接收方式上能否一个一个的接收,在接收到字符串长度的字符串时,再根据固定长度来接收所有的?



  • 协议描述.png

回帖(3)

王志博

2020-9-25 12:16:04
可以先用bytes at port>0,不加延时一个字一个字读取到01 00 01 00,再根据01 00 01 00后的数据读取端口数据,你这个比较麻烦,慢慢调度吧
5 举报
  • 豪仔: 不是太懂您的意思,能否上个简图示意一下,非常感谢了
  • 王志博 回复 豪仔: 比较简单的方法就是拼接,Bytes at port>0后就读取,稍微加几MS延时,再用Bytes at port>0再读取,一直到Bytes at port=0,把前面这些数据合成一个,再有你可以提高波特率
  • 王志博 回复 豪仔: 如果拼接的话,你可以适当修改延时,减少拼接次数
  • 豪仔 回复 王志博: 按照您的思路,我在VISA读上做了个状态机,每次读1个,直到读出01就退出,然后再读取表达字符串数量字符串,然后将剩下的按字符串数一并读取,随后将读取的字符串进行拼接。这样的速度,要比固定时间的轮询速度快12倍左右,而且还稳定!非常感谢,这个问题困扰我太久了!!!
  • 王志博 回复 豪仔: 好用就行了,波特率也可以提升一下试试,如果设备有网口通讯用网口最好

覃世业

2020-10-10 04:15:16
非常值得学习的面相对象编程例子非常值得学习的面相对象编程例子
举报

程子

2020-10-10 09:37:25
用字符串形式搜索01 00 01 00,这样是不是更快捷一些呢?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分