如何提高串口通信速度

bts2003 2009-12-13 09:54:29
硬件工程师开发了一块单片机板,只要按通信协议上位机发数据给下位机,下位机立即回数据,我用串口调试助手试过了,1分钟约可以收发最大6000,可是我用VB的MSCOMM编程,计时,1分钟约2400次,如何提高速度?要求是3600次以内。除出代码,计算机高速运行?
...全文
897 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmyxjw 2010-10-21
  • 打赏
  • 举报
回复
用API做的串口通讯比控件要快!
flfq 2010-10-20
  • 打赏
  • 举报
回复
如果对速度要求很高的话,可以下位机主动发送,上位机被动接收,单片机定时器的精度比pc要高很多。
Gujianda 2010-10-19
  • 打赏
  • 举报
回复
of123真是高手,说到点子上了。
我经常玩和单片机通信的事,你那点代码也不要保密了,贴出来,我帮必改。
tongfeng1981 2010-10-17
  • 打赏
  • 举报
回复
学习了
熊孩子开学喽 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bts2003 的回复:]
大哥,不要玩我呀?只是个EXE,哪有源程序?而且好像很慢????
字节到缓冲区,到串口,不通过控件,直接从API走?
用readfile
和writefile等函数!
[/Quote]
既然没源码,那要么你自己重新写一个,要么反编译去改EXE
of123 2010-09-01
  • 打赏
  • 举报
回复

1 应该不是波特率的问题。要改波特率,必须和底层一起改。现在的情况是,串口助手可以满足你的速率要求,而自己写的程序比较慢。

2 不要用 Timer 这类方式去查询串口的接收状态。用 OnComm 事件或循环查询都可以。注意一下你接收到数据后再发命令是如何衔接的。

3 对于串口这种低速接口,如果没有特殊的连续设置改变,我认为控件和 API 的差别不大。

综上所述,关键点在于你的程序架构。
efengxu 2010-08-31
  • 打赏
  • 举报
回复
我觉得有几种因素决定
1:波特率
2:你电脑的cpu
3:软件处理能力
carefire 2010-08-28
  • 打赏
  • 举报
回复

1. 更改到更高的波特率

2. 如果用VB的MSCOMM,可以:
1)不要用查询方式,而应事件方式,使用OnComm事件,并且不要在里面使用界面处理代码,如不要用类似这样的代码:Text1.Text = Text1.Text & Recv_Char
2)因为每次都收4个字节,所以可以设置Rthreshold=4,至少收到4个字符才触发一次OnComm事件,节省三次事件调用时间。
3)收到数据后,立即发送,利用对方发送时间内做数据处理。
  • 打赏
  • 举报
回复
怎么我的串口还没通啊,谁给个完整的源码瞧瞧啊?
unsv29mj 2009-12-19
  • 打赏
  • 举报
回复
给你找到1个

comdebug.exe 这个我用过 logo是个黄色的 纸飞机 很强大!!!

在CSDN里面有下载


http://download.csdn.net/down/467118/huhonggong

还有那个单片机波特率和助手的要设置一样的!


如果这个助手都搞不定 那么很抱歉!让那个写单片机程序的回家抱孩子去!
unsv29mj 2009-12-19
  • 打赏
  • 举报
回复
你的问题我看的有点糊涂!!

你的意思是说:每分钟串口助手发送3600个字符给单片机。

是这个意思吧??



一分钟 = 60秒 = 60000毫秒

9600的话 一个字符是1.04毫秒

那么波特率9600的话 就是能发6万个字符 跑去乱七八糟的时间 如果单片机程序写得再烂,发3600个字符没啥问题。

所以你的问题应该出现在串口助手编写的有点对付不了这种高速发数的情况

所以建议你换个串口助手

一般来说 用C++编写的处理速度要好很多

所以你的任务是要找到一个好的串口助手
用户 昵称 2009-12-19
  • 打赏
  • 举报
回复
6000 * 9 = 54000

54000 / 60 = 900字节/秒

所以你这块板通信速率应该是9600以上。

估计是19200之类的,速度限制应该是软件的。
langchen456 2009-12-18
  • 打赏
  • 举报
回复
qqq
贝隆 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bts2003 的回复:]
大哥,不要玩我呀?只是个EXE,哪有源程序?而且好像很慢????
字节到缓冲区,到串口,不通过控件,直接从API走?
用readfile
和writefile等函数!
[/Quote]

你说的很对
贝隆 2009-12-13
  • 打赏
  • 举报
回复
bts2003 2009-12-13
  • 打赏
  • 举报
回复
大哥,不要玩我呀?只是个EXE,哪有源程序?而且好像很慢????
字节到缓冲区,到串口,不通过控件,直接从API走?
用readfile
和writefile等函数!
贝隆 2009-12-13
  • 打赏
  • 举报
回复
这是一个使用API写得串口通信控件,包括代码,你可以看看:http://download.csdn.net/source/1887318
比较一下到底是MSComm快,还是API快
我个人认为API快
bts2003 2009-12-13
  • 打赏
  • 举报
回复
发5个字节,收4个字节,串口调试助手1分钟最大约6000次,VB的MSCOMM编程2400次,
是否API会快些?
字节到缓冲区,出去串口?直接用底层的API快些?
咸清 2009-12-13
  • 打赏
  • 举报
回复
你试的数据有多大啊?就一次一个字符那肯定快了~~~
计算机高速运行,仅仅是消息处理的速度快了~~~

速度也是受波特率限制的,你把波特率提高一点不就相对快很多了吗?
在工程实践中经常需要实现上下位机间的串口通信,为了编程的方便性我们通常采用字符方式进行数据传输,由于需要数据转换以及转换后的数据长度增加,数据传输速度不够理想,为了提高系统实时性在某些特殊场合更需要直接采用二进制进行数据传输。Delphi6.0是一种面向对象的可视化的快速应用开发(RAD)工具,它既具有C++语言的强大功能,同时又有VB的易用性,Delphi6.0的伸缩性强,既可用于开发小项目,也可用于开发大项目,尤其适用于快速应用的开发,其大量优点使它迅速成为一种非常流行的编程语言。Delphi6.0中串口通信的实现方法很多,可以使用嵌入式汇编语言、API函数以及VB的MSComm控件来实现。其中使用MSComm控件来实现串口通信最方便,但有关Delphi如何实现二进制通信的资料很少,大部分参考书都只介绍了VB中MSComm控件的字符通信方式。由于Delphi中数组跟Variant变量不兼容,即在Delphi中字节数组不能直接赋值给MSComm控件的output属性,这跟VB有中很大的不同(VB中可以直接赋值),本人通过摸索总结出两种实现Delphi二进制通信的方法,即动态数组法和可变数组(Variant Array)法,并给出了应用实例。在应用实例中我们使用Delphi的absolute关键字来定义两个同地址的动态数组,类型分别为字节型数组和短整型数组,使用字节动态数组接收数据后,可以直接使用短整型动态数组获得短整型数据,省却了数据转换的麻烦
今天小编要给大家介绍一款专业好用的串口通信桌面监控程序软件——串口监视工具。软件可以侦测、拦截、逆向分析串口通信协议,监视电脑串口活动,显示波特率和状态,并能保存日志记录,让您对应用程序操作串行端口的过程和细节,让您及时的模拟被侦听程序或设备的数据、控制流,提高工作效率。串口监视工具使用方便,速度快,质量高,对于用户来说是一款很不错的软件,小编这里推荐大家使用这款软件! 串口监视工具功能 串口调试: 和多数串口调试工具一样具有串口的收发功能. 本身特点: 自动检测串口(包括各种虚拟串口). 参数设置详细,能发送16进制,各种文件数据. 显示串口握手线信号, 显示各种硬件错误. 作用: 调试串口应用程序. 串口测试: 发送,接收大量伪随机码对串口设备/串口线路的质量进行测试. 能自动同步,可以测试单向的线路质量,代替昂贵的测试仪表. 随机码包括标准的 2^15-1,2^11-1,2^9-1和16bit人工码.自动/手动插入误码(1/10000,1/1000,单个). 自动记录各种测试结果. 作用: 测试串口设备/串口线路(测试时不要选软件流控). 串口监视: 不占用串口资源,监视串口通信的整个流程---从打开到关闭 监视串口的各种参数设置: 波特率,数据位,校验位,停止位,握手方式,超时数值,串口事件等等. 监视串口的收发数据,各种硬件信号,硬件错误. 作用: 监视程序对串口的访问流程. 串口过滤: 不占用串口资源,对流经串口的数据进行过滤. 在发送/接收数据流中改变字符. 在发送/接收数据流中进行字符代替. 在发送/接收数据流中删除字符. 作用: 模拟数据传输中出现的各种误码,丢失字符,调试串口通信协议. 串口监视工具截图

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧