如何提供mscomm的通信效率
背景:
和AT89C51ED2的bootloader通信。ED2的bootloader会收到一个字节就立即返回这个字节。
使用了485,但485是个半双工的通信方式。而ED2的bootloader是双工通信。
如果上位机连续发送,ED2立即返回接受的字节,会在485总线产生冲突,从而不能正常通讯。
处理方法:
VB 用mscomm控件写上位机发送程序,一次发送1个字节,延时等待(或者在接收事件中再发生下一个字节)接收到返回的1个字节后再发送下一个字节。
问题:
VB的整个过程效率太低下了,57600波特率,2个停止位,发送64K数据(实际还要增加大约10%的命令头,尾等信息)需要大约22分钟。
而厂家提供的双工模式下的通讯程序只要1-2分钟。
即使双工变半双工,理论上应该2-4分钟就可以完成。
怎么提高速度?
[解决办法]
多种选择:
1 采用 4 线制 RS-485 架构,做成全双工。
2 仍采用 2 线制 RS-485 架构,每字节切换传输方向。在 PC 端,不要采用延时方式,而是使用 OnComm 事件触发,接收并发送一字节。
[解决办法]
PC 的速度是很快的。如果没有有意的延时,一般不会影响到串口通讯的速度。
问题是否出在 RS-232 转 RS-485 的环节?
你一定要得到芯片返回的字节吗?如果不是必要的,在从机硬件方面做一些改动,在这个操作期间,芯片的 TXD 不要连接到 RS485 去,RS485 的 2 条线仅用作主机发送的差分信号。把芯片返回数据忽略掉。
如果一定要返回的字节,就改成 4 线制,或者找能够更快转换发送方向的 232-485 转换器。
有一点你没有说清楚,厂家双向模式的程序不是用当前 RS485 环境测试的吧?
[解决办法]
其实很容易确定问题出在那个环节。
你的发送和接收到一个字节时,都 Debug.Print Timer。看看哪一个环节时间长。我估计是消耗在等待数据进来的环节上了。
[解决办法]
还有一点,你和转换器的波特率是 57600,并不意味着 RS485 线上的波特率也是这么高。RS485 远距离传输时,波特率一般都低于 9600。距离越远,可实现的波特率就越低,有用 1200 的。
因此,与 RS232 传输相比,速度差个几倍十几倍,很正常。
[解决办法]
为什么要每个字节处理?你可以一块块发-收
全双工可以使用422总线,反正51也支持全双工
[解决办法]
估计 Bootloader 不是他写的,是原厂商预装的。
另外,在 4-线全双工 方面,RS-422 与 RS-485 没有本质区别。
RS-485, like RS-422, can be made full-duplex by using four wires. Since RS-485 is a multi-point specification, however, this is not necessary in many cases. RS-485 and RS-422 can interoperate with certain restrictions.
[解决办法]